12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962996399649965996699679968996999709971997299739974997599769977997899799980998199829983998499859986998799889989999099919992999399949995999699979998999910000100011000210003100041000510006100071000810009100101001110012100131001410015100161001710018100191002010021100221002310024100251002610027100281002910030100311003210033100341003510036100371003810039100401004110042100431004410045100461004710048100491005010051100521005310054100551005610057100581005910060100611006210063100641006510066100671006810069100701007110072100731007410075100761007710078100791008010081100821008310084100851008610087100881008910090100911009210093100941009510096100971009810099101001010110102101031010410105101061010710108101091011010111101121011310114101151011610117101181011910120101211012210123101241012510126101271012810129101301013110132101331013410135101361013710138101391014010141101421014310144101451014610147101481014910150101511015210153101541015510156101571015810159101601016110162101631016410165101661016710168101691017010171101721017310174101751017610177101781017910180101811018210183101841018510186101871018810189101901019110192101931019410195101961019710198101991020010201102021020310204102051020610207102081020910210102111021210213102141021510216102171021810219102201022110222102231022410225102261022710228102291023010231102321023310234102351023610237102381023910240102411024210243102441024510246102471024810249102501025110252102531025410255102561025710258102591026010261102621026310264102651026610267102681026910270102711027210273102741027510276102771027810279102801028110282102831028410285102861028710288102891029010291102921029310294102951029610297102981029910300103011030210303103041030510306103071030810309103101031110312103131031410315103161031710318103191032010321103221032310324103251032610327103281032910330103311033210333103341033510336103371033810339103401034110342103431034410345103461034710348103491035010351103521035310354103551035610357103581035910360103611036210363103641036510366103671036810369103701037110372103731037410375103761037710378103791038010381103821038310384103851038610387103881038910390103911039210393103941039510396103971039810399104001040110402104031040410405104061040710408104091041010411104121041310414104151041610417104181041910420104211042210423104241042510426104271042810429104301043110432104331043410435104361043710438104391044010441104421044310444104451044610447104481044910450104511045210453104541045510456104571045810459104601046110462104631046410465104661046710468104691047010471104721047310474104751047610477104781047910480104811048210483104841048510486104871048810489104901049110492104931049410495104961049710498104991050010501105021050310504105051050610507105081050910510105111051210513105141051510516105171051810519105201052110522105231052410525105261052710528105291053010531105321053310534105351053610537105381053910540105411054210543105441054510546105471054810549105501055110552105531055410555105561055710558105591056010561105621056310564105651056610567105681056910570105711057210573105741057510576105771057810579105801058110582105831058410585105861058710588105891059010591105921059310594105951059610597105981059910600106011060210603106041060510606106071060810609106101061110612106131061410615106161061710618106191062010621106221062310624106251062610627106281062910630106311063210633106341063510636106371063810639106401064110642106431064410645106461064710648106491065010651106521065310654106551065610657106581065910660106611066210663106641066510666106671066810669106701067110672106731067410675106761067710678106791068010681106821068310684106851068610687106881068910690106911069210693106941069510696106971069810699107001070110702107031070410705107061070710708107091071010711107121071310714107151071610717107181071910720107211072210723107241072510726107271072810729107301073110732107331073410735107361073710738107391074010741107421074310744107451074610747107481074910750107511075210753107541075510756107571075810759107601076110762107631076410765107661076710768107691077010771107721077310774107751077610777107781077910780107811078210783107841078510786107871078810789107901079110792107931079410795107961079710798107991080010801108021080310804108051080610807108081080910810108111081210813108141081510816108171081810819108201082110822108231082410825108261082710828108291083010831108321083310834108351083610837108381083910840108411084210843108441084510846108471084810849108501085110852108531085410855108561085710858108591086010861108621086310864108651086610867108681086910870108711087210873108741087510876108771087810879108801088110882108831088410885108861088710888108891089010891108921089310894108951089610897108981089910900109011090210903109041090510906109071090810909109101091110912109131091410915109161091710918109191092010921109221092310924109251092610927109281092910930109311093210933109341093510936109371093810939109401094110942109431094410945109461094710948109491095010951109521095310954109551095610957109581095910960109611096210963109641096510966109671096810969109701097110972109731097410975109761097710978109791098010981109821098310984109851098610987109881098910990109911099210993109941099510996109971099810999110001100111002110031100411005110061100711008110091101011011110121101311014110151101611017110181101911020110211102211023110241102511026110271102811029110301103111032110331103411035110361103711038110391104011041110421104311044110451104611047110481104911050110511105211053110541105511056110571105811059110601106111062110631106411065110661106711068110691107011071110721107311074110751107611077110781107911080110811108211083110841108511086110871108811089110901109111092110931109411095110961109711098110991110011101111021110311104111051110611107111081110911110111111111211113111141111511116111171111811119111201112111122111231112411125111261112711128111291113011131111321113311134111351113611137111381113911140111411114211143111441114511146111471114811149111501115111152111531115411155111561115711158111591116011161111621116311164111651116611167111681116911170111711117211173111741117511176111771117811179111801118111182111831118411185111861118711188111891119011191111921119311194111951119611197111981119911200112011120211203112041120511206112071120811209112101121111212112131121411215112161121711218112191122011221112221122311224112251122611227112281122911230112311123211233112341123511236112371123811239112401124111242112431124411245112461124711248112491125011251112521125311254112551125611257112581125911260112611126211263112641126511266112671126811269112701127111272112731127411275112761127711278112791128011281112821128311284112851128611287112881128911290112911129211293112941129511296112971129811299113001130111302113031130411305113061130711308113091131011311113121131311314113151131611317113181131911320113211132211323113241132511326113271132811329113301133111332113331133411335113361133711338113391134011341113421134311344113451134611347113481134911350113511135211353113541135511356113571135811359113601136111362113631136411365113661136711368113691137011371113721137311374113751137611377113781137911380113811138211383113841138511386113871138811389113901139111392113931139411395113961139711398113991140011401114021140311404114051140611407114081140911410114111141211413114141141511416114171141811419114201142111422114231142411425114261142711428114291143011431114321143311434114351143611437114381143911440114411144211443114441144511446114471144811449114501145111452114531145411455114561145711458114591146011461114621146311464114651146611467114681146911470114711147211473114741147511476114771147811479114801148111482114831148411485114861148711488114891149011491114921149311494114951149611497114981149911500115011150211503115041150511506115071150811509115101151111512115131151411515115161151711518115191152011521115221152311524115251152611527115281152911530115311153211533115341153511536115371153811539115401154111542115431154411545115461154711548115491155011551115521155311554115551155611557115581155911560115611156211563115641156511566115671156811569115701157111572115731157411575115761157711578115791158011581115821158311584115851158611587115881158911590115911159211593115941159511596115971159811599116001160111602116031160411605116061160711608116091161011611116121161311614116151161611617116181161911620116211162211623116241162511626116271162811629116301163111632116331163411635116361163711638116391164011641116421164311644116451164611647116481164911650116511165211653116541165511656116571165811659116601166111662116631166411665116661166711668116691167011671116721167311674116751167611677116781167911680116811168211683116841168511686116871168811689116901169111692116931169411695116961169711698116991170011701117021170311704117051170611707117081170911710117111171211713117141171511716117171171811719117201172111722117231172411725117261172711728117291173011731117321173311734117351173611737117381173911740117411174211743117441174511746117471174811749117501175111752117531175411755117561175711758117591176011761117621176311764117651176611767117681176911770117711177211773117741177511776117771177811779117801178111782117831178411785117861178711788117891179011791117921179311794117951179611797117981179911800118011180211803118041180511806118071180811809118101181111812118131181411815118161181711818118191182011821118221182311824118251182611827118281182911830118311183211833118341183511836118371183811839118401184111842118431184411845118461184711848118491185011851118521185311854118551185611857118581185911860118611186211863118641186511866118671186811869118701187111872118731187411875118761187711878118791188011881118821188311884118851188611887118881188911890118911189211893118941189511896118971189811899119001190111902119031190411905119061190711908119091191011911119121191311914119151191611917119181191911920119211192211923119241192511926119271192811929119301193111932119331193411935119361193711938119391194011941119421194311944119451194611947119481194911950119511195211953119541195511956119571195811959119601196111962119631196411965119661196711968119691197011971119721197311974119751197611977119781197911980119811198211983119841198511986119871198811989119901199111992119931199411995119961199711998119991200012001120021200312004120051200612007120081200912010120111201212013120141201512016120171201812019120201202112022120231202412025120261202712028120291203012031120321203312034120351203612037120381203912040120411204212043120441204512046120471204812049120501205112052120531205412055120561205712058120591206012061120621206312064120651206612067120681206912070120711207212073120741207512076120771207812079120801208112082120831208412085120861208712088120891209012091120921209312094120951209612097120981209912100121011210212103121041210512106121071210812109121101211112112121131211412115121161211712118121191212012121121221212312124121251212612127121281212912130121311213212133121341213512136121371213812139121401214112142121431214412145121461214712148121491215012151121521215312154121551215612157121581215912160121611216212163121641216512166121671216812169121701217112172121731217412175121761217712178121791218012181121821218312184121851218612187121881218912190121911219212193121941219512196121971219812199122001220112202122031220412205122061220712208122091221012211122121221312214122151221612217122181221912220122211222212223122241222512226122271222812229122301223112232122331223412235122361223712238122391224012241122421224312244122451224612247122481224912250122511225212253122541225512256122571225812259122601226112262122631226412265122661226712268122691227012271122721227312274122751227612277122781227912280122811228212283122841228512286122871228812289122901229112292122931229412295122961229712298122991230012301123021230312304123051230612307123081230912310123111231212313123141231512316123171231812319123201232112322123231232412325123261232712328123291233012331123321233312334123351233612337123381233912340123411234212343123441234512346123471234812349123501235112352123531235412355123561235712358123591236012361123621236312364123651236612367123681236912370123711237212373123741237512376123771237812379123801238112382123831238412385123861238712388123891239012391123921239312394123951239612397123981239912400124011240212403124041240512406124071240812409124101241112412124131241412415124161241712418124191242012421124221242312424124251242612427124281242912430124311243212433124341243512436124371243812439124401244112442124431244412445124461244712448124491245012451124521245312454124551245612457124581245912460124611246212463124641246512466124671246812469124701247112472124731247412475124761247712478124791248012481124821248312484124851248612487124881248912490124911249212493124941249512496124971249812499125001250112502125031250412505125061250712508125091251012511125121251312514125151251612517125181251912520125211252212523125241252512526125271252812529125301253112532125331253412535125361253712538125391254012541125421254312544125451254612547125481254912550125511255212553125541255512556125571255812559125601256112562125631256412565125661256712568125691257012571125721257312574125751257612577125781257912580125811258212583125841258512586125871258812589125901259112592125931259412595125961259712598125991260012601126021260312604126051260612607126081260912610126111261212613126141261512616126171261812619126201262112622126231262412625126261262712628126291263012631126321263312634126351263612637126381263912640126411264212643126441264512646126471264812649126501265112652126531265412655126561265712658126591266012661126621266312664126651266612667126681266912670126711267212673126741267512676126771267812679126801268112682126831268412685126861268712688126891269012691126921269312694126951269612697126981269912700127011270212703127041270512706127071270812709127101271112712127131271412715127161271712718127191272012721127221272312724127251272612727127281272912730127311273212733127341273512736127371273812739127401274112742127431274412745127461274712748127491275012751127521275312754127551275612757127581275912760127611276212763127641276512766127671276812769127701277112772127731277412775127761277712778127791278012781127821278312784127851278612787127881278912790127911279212793127941279512796127971279812799128001280112802128031280412805128061280712808128091281012811128121281312814128151281612817128181281912820128211282212823128241282512826128271282812829128301283112832128331283412835128361283712838128391284012841128421284312844128451284612847128481284912850128511285212853128541285512856128571285812859128601286112862128631286412865128661286712868128691287012871128721287312874128751287612877128781287912880128811288212883128841288512886128871288812889128901289112892128931289412895128961289712898128991290012901129021290312904129051290612907129081290912910129111291212913129141291512916129171291812919129201292112922129231292412925129261292712928129291293012931129321293312934129351293612937129381293912940129411294212943129441294512946129471294812949129501295112952129531295412955129561295712958129591296012961129621296312964129651296612967129681296912970129711297212973129741297512976129771297812979129801298112982129831298412985129861298712988129891299012991129921299312994129951299612997129981299913000130011300213003130041300513006130071300813009130101301113012130131301413015130161301713018130191302013021130221302313024130251302613027130281302913030130311303213033130341303513036130371303813039130401304113042130431304413045130461304713048130491305013051130521305313054130551305613057130581305913060130611306213063130641306513066130671306813069130701307113072130731307413075130761307713078130791308013081130821308313084130851308613087130881308913090130911309213093130941309513096130971309813099131001310113102131031310413105131061310713108131091311013111131121311313114131151311613117131181311913120131211312213123131241312513126131271312813129131301313113132131331313413135131361313713138131391314013141131421314313144131451314613147131481314913150131511315213153131541315513156131571315813159131601316113162131631316413165131661316713168131691317013171131721317313174131751317613177131781317913180131811318213183131841318513186131871318813189131901319113192131931319413195131961319713198131991320013201132021320313204132051320613207132081320913210132111321213213132141321513216132171321813219132201322113222132231322413225132261322713228132291323013231132321323313234132351323613237132381323913240132411324213243132441324513246132471324813249132501325113252132531325413255132561325713258132591326013261132621326313264132651326613267132681326913270132711327213273132741327513276132771327813279132801328113282132831328413285132861328713288132891329013291132921329313294132951329613297132981329913300133011330213303133041330513306133071330813309133101331113312133131331413315133161331713318133191332013321133221332313324133251332613327133281332913330133311333213333133341333513336133371333813339133401334113342133431334413345133461334713348133491335013351133521335313354133551335613357133581335913360133611336213363133641336513366133671336813369133701337113372133731337413375133761337713378133791338013381133821338313384133851338613387133881338913390133911339213393133941339513396133971339813399134001340113402134031340413405134061340713408134091341013411134121341313414134151341613417134181341913420134211342213423134241342513426134271342813429134301343113432134331343413435134361343713438134391344013441134421344313444134451344613447134481344913450134511345213453134541345513456134571345813459134601346113462134631346413465134661346713468134691347013471134721347313474134751347613477134781347913480134811348213483134841348513486134871348813489134901349113492134931349413495134961349713498134991350013501135021350313504135051350613507135081350913510135111351213513135141351513516135171351813519135201352113522135231352413525135261352713528135291353013531135321353313534135351353613537135381353913540135411354213543135441354513546135471354813549135501355113552135531355413555135561355713558135591356013561135621356313564135651356613567135681356913570135711357213573135741357513576135771357813579135801358113582135831358413585135861358713588135891359013591135921359313594135951359613597135981359913600136011360213603136041360513606136071360813609136101361113612136131361413615136161361713618136191362013621136221362313624136251362613627136281362913630136311363213633136341363513636136371363813639136401364113642136431364413645136461364713648136491365013651136521365313654136551365613657136581365913660136611366213663136641366513666136671366813669136701367113672136731367413675136761367713678136791368013681136821368313684136851368613687136881368913690136911369213693136941369513696136971369813699137001370113702137031370413705137061370713708137091371013711137121371313714137151371613717137181371913720137211372213723137241372513726137271372813729137301373113732137331373413735137361373713738137391374013741137421374313744137451374613747137481374913750137511375213753137541375513756137571375813759137601376113762137631376413765137661376713768137691377013771137721377313774137751377613777137781377913780137811378213783137841378513786137871378813789137901379113792137931379413795137961379713798137991380013801138021380313804138051380613807138081380913810138111381213813138141381513816138171381813819138201382113822138231382413825138261382713828138291383013831138321383313834138351383613837138381383913840138411384213843138441384513846138471384813849138501385113852138531385413855138561385713858138591386013861138621386313864138651386613867138681386913870138711387213873138741387513876138771387813879138801388113882138831388413885138861388713888138891389013891138921389313894138951389613897138981389913900139011390213903139041390513906139071390813909139101391113912139131391413915139161391713918139191392013921139221392313924139251392613927139281392913930139311393213933139341393513936139371393813939139401394113942139431394413945139461394713948139491395013951139521395313954139551395613957139581395913960139611396213963139641396513966139671396813969139701397113972139731397413975139761397713978139791398013981139821398313984139851398613987139881398913990139911399213993139941399513996139971399813999140001400114002140031400414005140061400714008140091401014011140121401314014140151401614017140181401914020140211402214023140241402514026140271402814029140301403114032140331403414035140361403714038140391404014041140421404314044140451404614047140481404914050140511405214053140541405514056140571405814059140601406114062140631406414065140661406714068140691407014071140721407314074140751407614077140781407914080140811408214083140841408514086140871408814089140901409114092140931409414095140961409714098140991410014101141021410314104141051410614107141081410914110141111411214113141141411514116141171411814119141201412114122141231412414125141261412714128141291413014131141321413314134141351413614137141381413914140141411414214143141441414514146141471414814149141501415114152141531415414155141561415714158141591416014161141621416314164141651416614167141681416914170141711417214173141741417514176141771417814179141801418114182141831418414185141861418714188141891419014191141921419314194141951419614197141981419914200142011420214203142041420514206142071420814209142101421114212142131421414215142161421714218142191422014221142221422314224142251422614227142281422914230142311423214233142341423514236142371423814239142401424114242142431424414245142461424714248142491425014251142521425314254142551425614257142581425914260142611426214263142641426514266142671426814269142701427114272142731427414275142761427714278142791428014281142821428314284142851428614287142881428914290142911429214293142941429514296142971429814299143001430114302143031430414305143061430714308143091431014311143121431314314143151431614317143181431914320143211432214323143241432514326143271432814329143301433114332143331433414335143361433714338143391434014341143421434314344143451434614347143481434914350143511435214353143541435514356143571435814359143601436114362143631436414365143661436714368143691437014371143721437314374143751437614377143781437914380143811438214383143841438514386143871438814389143901439114392143931439414395143961439714398143991440014401144021440314404144051440614407144081440914410144111441214413144141441514416144171441814419144201442114422144231442414425144261442714428144291443014431144321443314434144351443614437144381443914440144411444214443144441444514446144471444814449144501445114452144531445414455144561445714458144591446014461144621446314464144651446614467144681446914470144711447214473144741447514476144771447814479144801448114482144831448414485144861448714488144891449014491144921449314494144951449614497144981449914500145011450214503145041450514506145071450814509145101451114512145131451414515145161451714518145191452014521145221452314524145251452614527145281452914530145311453214533145341453514536145371453814539145401454114542145431454414545145461454714548145491455014551145521455314554145551455614557145581455914560145611456214563145641456514566145671456814569145701457114572145731457414575145761457714578145791458014581145821458314584145851458614587145881458914590145911459214593145941459514596145971459814599146001460114602146031460414605146061460714608146091461014611146121461314614146151461614617146181461914620146211462214623146241462514626146271462814629146301463114632146331463414635146361463714638146391464014641146421464314644146451464614647146481464914650146511465214653146541465514656146571465814659146601466114662146631466414665146661466714668146691467014671146721467314674146751467614677146781467914680146811468214683146841468514686146871468814689146901469114692146931469414695146961469714698146991470014701147021470314704147051470614707147081470914710147111471214713147141471514716147171471814719147201472114722147231472414725147261472714728147291473014731147321473314734147351473614737147381473914740147411474214743147441474514746147471474814749147501475114752147531475414755147561475714758147591476014761147621476314764147651476614767147681476914770147711477214773147741477514776147771477814779147801478114782147831478414785147861478714788147891479014791147921479314794147951479614797147981479914800148011480214803148041480514806148071480814809148101481114812148131481414815148161481714818148191482014821148221482314824148251482614827148281482914830148311483214833148341483514836148371483814839148401484114842148431484414845148461484714848148491485014851148521485314854148551485614857148581485914860148611486214863148641486514866148671486814869148701487114872148731487414875148761487714878148791488014881148821488314884148851488614887148881488914890148911489214893148941489514896148971489814899149001490114902149031490414905149061490714908149091491014911149121491314914149151491614917149181491914920149211492214923149241492514926149271492814929149301493114932149331493414935149361493714938149391494014941149421494314944149451494614947149481494914950149511495214953149541495514956149571495814959149601496114962149631496414965149661496714968149691497014971149721497314974149751497614977149781497914980149811498214983149841498514986149871498814989149901499114992149931499414995149961499714998149991500015001150021500315004150051500615007150081500915010150111501215013150141501515016150171501815019150201502115022150231502415025150261502715028150291503015031150321503315034150351503615037150381503915040150411504215043150441504515046150471504815049150501505115052150531505415055150561505715058150591506015061150621506315064150651506615067150681506915070150711507215073150741507515076150771507815079150801508115082150831508415085150861508715088150891509015091150921509315094150951509615097150981509915100151011510215103151041510515106151071510815109151101511115112151131511415115151161511715118151191512015121151221512315124151251512615127151281512915130151311513215133151341513515136151371513815139151401514115142151431514415145151461514715148151491515015151151521515315154151551515615157151581515915160151611516215163151641516515166151671516815169151701517115172151731517415175151761517715178151791518015181151821518315184151851518615187151881518915190151911519215193151941519515196151971519815199152001520115202152031520415205152061520715208152091521015211152121521315214152151521615217152181521915220152211522215223152241522515226152271522815229152301523115232152331523415235152361523715238152391524015241152421524315244152451524615247152481524915250152511525215253152541525515256152571525815259152601526115262152631526415265152661526715268152691527015271152721527315274152751527615277152781527915280152811528215283152841528515286152871528815289152901529115292152931529415295152961529715298152991530015301153021530315304153051530615307153081530915310153111531215313153141531515316153171531815319153201532115322153231532415325153261532715328153291533015331153321533315334153351533615337153381533915340153411534215343153441534515346153471534815349153501535115352153531535415355153561535715358153591536015361153621536315364153651536615367153681536915370153711537215373153741537515376153771537815379153801538115382153831538415385153861538715388153891539015391153921539315394153951539615397153981539915400154011540215403154041540515406154071540815409154101541115412154131541415415154161541715418154191542015421154221542315424154251542615427154281542915430154311543215433154341543515436154371543815439154401544115442154431544415445154461544715448154491545015451154521545315454154551545615457154581545915460154611546215463154641546515466154671546815469154701547115472154731547415475154761547715478154791548015481154821548315484154851548615487154881548915490154911549215493154941549515496154971549815499155001550115502155031550415505155061550715508155091551015511155121551315514155151551615517155181551915520155211552215523155241552515526155271552815529155301553115532155331553415535155361553715538155391554015541155421554315544155451554615547155481554915550155511555215553155541555515556155571555815559155601556115562155631556415565155661556715568155691557015571155721557315574155751557615577155781557915580155811558215583155841558515586155871558815589155901559115592155931559415595155961559715598155991560015601156021560315604156051560615607156081560915610156111561215613156141561515616156171561815619156201562115622156231562415625156261562715628156291563015631156321563315634156351563615637156381563915640156411564215643156441564515646156471564815649156501565115652156531565415655156561565715658156591566015661156621566315664156651566615667156681566915670156711567215673156741567515676156771567815679156801568115682156831568415685156861568715688156891569015691156921569315694156951569615697156981569915700157011570215703157041570515706157071570815709157101571115712157131571415715157161571715718157191572015721157221572315724157251572615727157281572915730157311573215733157341573515736157371573815739157401574115742157431574415745157461574715748157491575015751157521575315754157551575615757157581575915760157611576215763157641576515766157671576815769157701577115772157731577415775157761577715778157791578015781157821578315784157851578615787157881578915790157911579215793157941579515796157971579815799158001580115802158031580415805158061580715808158091581015811158121581315814158151581615817158181581915820158211582215823158241582515826158271582815829158301583115832158331583415835158361583715838158391584015841158421584315844158451584615847158481584915850158511585215853158541585515856158571585815859158601586115862158631586415865158661586715868158691587015871158721587315874158751587615877158781587915880158811588215883158841588515886158871588815889158901589115892158931589415895158961589715898158991590015901159021590315904159051590615907159081590915910159111591215913159141591515916159171591815919159201592115922159231592415925159261592715928159291593015931159321593315934159351593615937159381593915940159411594215943159441594515946159471594815949159501595115952159531595415955159561595715958159591596015961159621596315964159651596615967159681596915970159711597215973159741597515976159771597815979159801598115982159831598415985159861598715988159891599015991159921599315994159951599615997159981599916000160011600216003160041600516006160071600816009160101601116012160131601416015160161601716018160191602016021160221602316024160251602616027160281602916030160311603216033160341603516036160371603816039160401604116042160431604416045160461604716048160491605016051160521605316054160551605616057160581605916060160611606216063160641606516066160671606816069160701607116072160731607416075160761607716078160791608016081160821608316084160851608616087160881608916090160911609216093160941609516096160971609816099161001610116102161031610416105161061610716108161091611016111161121611316114161151611616117161181611916120161211612216123161241612516126161271612816129161301613116132161331613416135161361613716138161391614016141161421614316144161451614616147161481614916150161511615216153161541615516156161571615816159161601616116162161631616416165161661616716168161691617016171161721617316174161751617616177161781617916180161811618216183161841618516186161871618816189161901619116192161931619416195161961619716198161991620016201162021620316204162051620616207162081620916210162111621216213162141621516216162171621816219162201622116222162231622416225162261622716228162291623016231162321623316234162351623616237162381623916240162411624216243162441624516246162471624816249162501625116252162531625416255162561625716258162591626016261162621626316264162651626616267162681626916270162711627216273162741627516276162771627816279162801628116282162831628416285162861628716288162891629016291162921629316294162951629616297162981629916300163011630216303163041630516306163071630816309163101631116312163131631416315163161631716318163191632016321163221632316324163251632616327163281632916330163311633216333163341633516336163371633816339163401634116342163431634416345163461634716348163491635016351163521635316354163551635616357163581635916360163611636216363163641636516366163671636816369163701637116372163731637416375163761637716378163791638016381163821638316384163851638616387163881638916390163911639216393163941639516396163971639816399164001640116402164031640416405164061640716408164091641016411164121641316414164151641616417164181641916420164211642216423164241642516426164271642816429164301643116432164331643416435164361643716438164391644016441164421644316444164451644616447164481644916450164511645216453164541645516456164571645816459164601646116462164631646416465164661646716468164691647016471164721647316474164751647616477164781647916480164811648216483164841648516486164871648816489164901649116492164931649416495164961649716498164991650016501165021650316504165051650616507165081650916510165111651216513165141651516516165171651816519165201652116522165231652416525165261652716528165291653016531165321653316534165351653616537165381653916540165411654216543165441654516546165471654816549165501655116552165531655416555165561655716558165591656016561165621656316564165651656616567165681656916570165711657216573165741657516576165771657816579165801658116582165831658416585165861658716588165891659016591165921659316594165951659616597165981659916600166011660216603166041660516606166071660816609166101661116612166131661416615166161661716618166191662016621166221662316624166251662616627166281662916630166311663216633166341663516636166371663816639166401664116642166431664416645166461664716648166491665016651166521665316654166551665616657166581665916660166611666216663166641666516666166671666816669166701667116672166731667416675166761667716678166791668016681166821668316684166851668616687166881668916690166911669216693166941669516696166971669816699167001670116702167031670416705167061670716708167091671016711167121671316714167151671616717167181671916720167211672216723167241672516726167271672816729167301673116732167331673416735167361673716738167391674016741167421674316744167451674616747167481674916750167511675216753167541675516756167571675816759167601676116762167631676416765167661676716768167691677016771167721677316774167751677616777167781677916780167811678216783167841678516786167871678816789167901679116792167931679416795167961679716798167991680016801168021680316804168051680616807168081680916810168111681216813168141681516816168171681816819168201682116822168231682416825168261682716828168291683016831168321683316834168351683616837168381683916840168411684216843168441684516846168471684816849168501685116852168531685416855168561685716858168591686016861168621686316864168651686616867168681686916870168711687216873168741687516876168771687816879168801688116882168831688416885168861688716888168891689016891168921689316894168951689616897168981689916900169011690216903169041690516906169071690816909169101691116912169131691416915169161691716918169191692016921169221692316924169251692616927169281692916930169311693216933169341693516936169371693816939169401694116942169431694416945169461694716948169491695016951169521695316954169551695616957169581695916960169611696216963169641696516966169671696816969169701697116972169731697416975169761697716978169791698016981169821698316984169851698616987169881698916990169911699216993169941699516996169971699816999170001700117002170031700417005170061700717008170091701017011170121701317014170151701617017170181701917020170211702217023170241702517026170271702817029170301703117032170331703417035170361703717038170391704017041170421704317044170451704617047170481704917050170511705217053170541705517056170571705817059170601706117062170631706417065170661706717068170691707017071170721707317074170751707617077170781707917080170811708217083170841708517086170871708817089170901709117092170931709417095170961709717098170991710017101171021710317104171051710617107171081710917110171111711217113171141711517116171171711817119171201712117122171231712417125171261712717128171291713017131171321713317134171351713617137171381713917140171411714217143171441714517146171471714817149171501715117152171531715417155171561715717158171591716017161171621716317164171651716617167171681716917170171711717217173171741717517176171771717817179171801718117182171831718417185171861718717188171891719017191171921719317194171951719617197171981719917200172011720217203172041720517206172071720817209172101721117212172131721417215172161721717218172191722017221172221722317224172251722617227172281722917230172311723217233172341723517236172371723817239172401724117242172431724417245172461724717248172491725017251172521725317254172551725617257172581725917260172611726217263172641726517266172671726817269172701727117272172731727417275172761727717278172791728017281172821728317284172851728617287172881728917290172911729217293172941729517296172971729817299173001730117302173031730417305173061730717308173091731017311173121731317314173151731617317173181731917320173211732217323173241732517326173271732817329173301733117332173331733417335173361733717338173391734017341173421734317344173451734617347173481734917350173511735217353173541735517356173571735817359173601736117362173631736417365173661736717368173691737017371173721737317374173751737617377173781737917380173811738217383173841738517386173871738817389173901739117392173931739417395173961739717398173991740017401174021740317404174051740617407174081740917410174111741217413174141741517416174171741817419174201742117422174231742417425174261742717428174291743017431174321743317434174351743617437174381743917440174411744217443174441744517446174471744817449174501745117452174531745417455174561745717458174591746017461174621746317464174651746617467174681746917470174711747217473174741747517476174771747817479174801748117482174831748417485174861748717488174891749017491174921749317494174951749617497174981749917500175011750217503175041750517506175071750817509175101751117512175131751417515175161751717518175191752017521175221752317524175251752617527175281752917530175311753217533175341753517536175371753817539175401754117542175431754417545175461754717548175491755017551175521755317554175551755617557175581755917560175611756217563175641756517566175671756817569175701757117572175731757417575175761757717578175791758017581175821758317584175851758617587175881758917590175911759217593175941759517596175971759817599176001760117602176031760417605176061760717608176091761017611176121761317614176151761617617176181761917620176211762217623176241762517626176271762817629176301763117632176331763417635176361763717638176391764017641176421764317644176451764617647176481764917650176511765217653176541765517656176571765817659176601766117662176631766417665176661766717668176691767017671176721767317674176751767617677176781767917680176811768217683176841768517686176871768817689176901769117692176931769417695176961769717698176991770017701177021770317704177051770617707177081770917710177111771217713177141771517716177171771817719177201772117722177231772417725177261772717728177291773017731177321773317734177351773617737177381773917740177411774217743177441774517746177471774817749177501775117752177531775417755177561775717758177591776017761177621776317764177651776617767177681776917770177711777217773177741777517776177771777817779177801778117782177831778417785177861778717788177891779017791177921779317794177951779617797177981779917800178011780217803178041780517806178071780817809178101781117812178131781417815178161781717818178191782017821178221782317824178251782617827178281782917830178311783217833178341783517836178371783817839178401784117842178431784417845178461784717848178491785017851178521785317854 |
- exports.id = 535;
- exports.ids = [535];
- exports.modules = {
- /***/ 60350:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const {isString, getType, isPlainObject, isArrayOf, map} = __webpack_require__(74094)
- const isArray = Array.isArray
- const filter = name => !(/.+(Sync|Stream|Promise)$/.test(name))
- /**
- * Promisify Node.js callback-style function
- *
- * @param {function} target – a callback-style function
- * @param {any} [ctx = null]
- *
- * @return {function} - promised function
- *
- * @example
- *
- * import fs from "fs"
- *
- * const readFile = promisify(fs.readFile)
- *
- * const onFulfilled = content => console.log(String(content))
- *
- * const onRejected = err => console.error(err)
- *
- * readFile(__filename).then(onFulfilled, onRejected)
- */
- function promisify(target, ctx = null) {
- if (typeof target !== "function") {
- throw TypeError(
- `Expected target function. Received ${getType(target)}`
- )
- }
- return function(...args) {
- ctx || (ctx = this)
- return new Promise((resolve, reject) => {
- const fulfill = (err, res) => err ? reject(err) : resolve(res)
- target.call(ctx, ...args, fulfill)
- })
- }
- }
- /**
- * Promisify all given methods
- *
- * @param {object} targets - object with the pairs of name => target
- * @param {any} [ctx = null]
- *
- * @return {object}
- */
- function all(targets, ctx) {
- if (!isPlainObject(targets)) {
- throw new TypeError(
- `Expected a plain object as targets. Received ${getType(targets)}`
- )
- }
- return map(targets, (fn, name) => filter(name) ? promisify(fn, ctx) : fn)
- }
- /**
- * @param {object} targets
- * @param {string[]} list
- * @param {any} [ctx = null]
- *
- * @return {object}
- */
- function some(targets, list, ctx) {
- if (!isPlainObject(targets)) {
- throw new TypeError(
- `Expected a plain object as targets. Received ${getType(targets)}`
- )
- }
- if (!isArray(list)) {
- throw new TypeError(`Expected list as an array. Received ${getType(list)}`)
- }
- if (!isArrayOf(list, isString)) {
- throw new TypeError("Each element in the list should be a string.")
- }
- return map(
- targets, (fn, name) => (
- filter(name) && list.includes(name) ? promisify(fn, ctx) : fn
- )
- )
- }
- /**
- * @param {object} targets
- * @param {string[]} list
- * @param {any} [ctx = null]
- *
- * @return {object}
- */
- function except(targets, list, ctx) {
- if (!isPlainObject(targets)) {
- throw new TypeError(
- `Expected a plain object as targets. Received ${getType(targets)}`
- )
- }
- if (!isArray(list)) {
- throw new TypeError(`Expected list as an array. Received ${getType(list)}`)
- }
- if (!isArrayOf(list, isString)) {
- throw new TypeError("Each element in the list should be a string.")
- }
- return map(
- targets, (fn, name) => (
- filter(name) && !(list.includes(name)) ? promisify(fn, ctx) : fn
- )
- )
- }
- module.exports = promisify
- module.exports.default = promisify
- module.exports.all = all
- module.exports.some = some
- module.exports.except = except
- /***/ }),
- /***/ 74094:
- /***/ ((module) => {
- const keys = Object.keys
- const toString = val => Object.prototype.toString.call(val)
- const getType = val => toString(val).slice(8, -1).toLowerCase()
- const isString = val => typeof val === "string" || getType(val) === "string"
- // Based ob lodash/isPlainObject
- function isPlainObject(val) {
- if (getType(val) !== "object") {
- return false
- }
- const pp = Object.getPrototypeOf(val)
- if (pp === null || pp === void 0) {
- return true
- }
- const Ctor = pp.constructor && pp.constructor.toString()
- return Ctor === Object.toString()
- }
- function isArrayOf(arr, predicate, ctx = null) {
- for (const [key, val] of arr.entries()) {
- if (predicate.call(ctx, val, key, arr) === false) {
- return false
- }
- }
- return true
- }
- function map(obj, fn) {
- const res = {}
- for (const key of keys(obj)) {
- const val = obj[key]
- res[key] = fn(val, key, obj)
- }
- return res
- }
- module.exports = {isArrayOf, getType, isString, isPlainObject, map}
- /***/ }),
- /***/ 83999:
- /***/ ((__unused_webpack_module, exports) => {
- "use strict";
- var tester = /^[-!#$%&'*+\/0-9=?A-Z^_a-z{|}~](\.?[-!#$%&'*+\/0-9=?A-Z^_a-z`{|}~])*@[a-zA-Z0-9](-*\.?[a-zA-Z0-9])*\.[a-zA-Z](-?[a-zA-Z0-9])+$/;
- // Thanks to:
- // http://fightingforalostcause.net/misc/2006/compare-email-regex.php
- // http://thedailywtf.com/Articles/Validating_Email_Addresses.aspx
- // http://stackoverflow.com/questions/201323/what-is-the-best-regular-expression-for-validating-email-addresses/201378#201378
- exports.validate = function(email)
- {
- if (!email)
- return false;
-
- if(email.length>254)
- return false;
- var valid = tester.test(email);
- if(!valid)
- return false;
- // Further checking of some things regex can't handle
- var parts = email.split("@");
- if(parts[0].length>64)
- return false;
- var domainParts = parts[1].split(".");
- if(domainParts.some(function(part) { return part.length>63; }))
- return false;
- return true;
- }
- /***/ }),
- /***/ 31072:
- /***/ (function(module) {
- (function webpackUniversalModuleDefinition(root, factory) {
- /* istanbul ignore next */
- if(true)
- module.exports = factory();
- else {}
- })(this, function() {
- return /******/ (function(modules) { // webpackBootstrap
- /******/ // The module cache
- /******/ var installedModules = {};
- /******/ // The require function
- /******/ function __nested_webpack_require_583__(moduleId) {
- /******/ // Check if module is in cache
- /* istanbul ignore if */
- /******/ if(installedModules[moduleId])
- /******/ return installedModules[moduleId].exports;
- /******/ // Create a new module (and put it into the cache)
- /******/ var module = installedModules[moduleId] = {
- /******/ exports: {},
- /******/ id: moduleId,
- /******/ loaded: false
- /******/ };
- /******/ // Execute the module function
- /******/ modules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_583__);
- /******/ // Flag the module as loaded
- /******/ module.loaded = true;
- /******/ // Return the exports of the module
- /******/ return module.exports;
- /******/ }
- /******/ // expose the modules object (__webpack_modules__)
- /******/ __nested_webpack_require_583__.m = modules;
- /******/ // expose the module cache
- /******/ __nested_webpack_require_583__.c = installedModules;
- /******/ // __webpack_public_path__
- /******/ __nested_webpack_require_583__.p = "";
- /******/ // Load entry module and return exports
- /******/ return __nested_webpack_require_583__(0);
- /******/ })
- /************************************************************************/
- /******/ ([
- /* 0 */
- /***/ function(module, exports, __nested_webpack_require_1808__) {
- "use strict";
- /*
- Copyright JS Foundation and other contributors, https://js.foundation/
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- Object.defineProperty(exports, "__esModule", { value: true });
- var comment_handler_1 = __nested_webpack_require_1808__(1);
- var jsx_parser_1 = __nested_webpack_require_1808__(3);
- var parser_1 = __nested_webpack_require_1808__(8);
- var tokenizer_1 = __nested_webpack_require_1808__(15);
- function parse(code, options, delegate) {
- var commentHandler = null;
- var proxyDelegate = function (node, metadata) {
- if (delegate) {
- delegate(node, metadata);
- }
- if (commentHandler) {
- commentHandler.visit(node, metadata);
- }
- };
- var parserDelegate = (typeof delegate === 'function') ? proxyDelegate : null;
- var collectComment = false;
- if (options) {
- collectComment = (typeof options.comment === 'boolean' && options.comment);
- var attachComment = (typeof options.attachComment === 'boolean' && options.attachComment);
- if (collectComment || attachComment) {
- commentHandler = new comment_handler_1.CommentHandler();
- commentHandler.attach = attachComment;
- options.comment = true;
- parserDelegate = proxyDelegate;
- }
- }
- var isModule = false;
- if (options && typeof options.sourceType === 'string') {
- isModule = (options.sourceType === 'module');
- }
- var parser;
- if (options && typeof options.jsx === 'boolean' && options.jsx) {
- parser = new jsx_parser_1.JSXParser(code, options, parserDelegate);
- }
- else {
- parser = new parser_1.Parser(code, options, parserDelegate);
- }
- var program = isModule ? parser.parseModule() : parser.parseScript();
- var ast = program;
- if (collectComment && commentHandler) {
- ast.comments = commentHandler.comments;
- }
- if (parser.config.tokens) {
- ast.tokens = parser.tokens;
- }
- if (parser.config.tolerant) {
- ast.errors = parser.errorHandler.errors;
- }
- return ast;
- }
- exports.parse = parse;
- function parseModule(code, options, delegate) {
- var parsingOptions = options || {};
- parsingOptions.sourceType = 'module';
- return parse(code, parsingOptions, delegate);
- }
- exports.parseModule = parseModule;
- function parseScript(code, options, delegate) {
- var parsingOptions = options || {};
- parsingOptions.sourceType = 'script';
- return parse(code, parsingOptions, delegate);
- }
- exports.parseScript = parseScript;
- function tokenize(code, options, delegate) {
- var tokenizer = new tokenizer_1.Tokenizer(code, options);
- var tokens;
- tokens = [];
- try {
- while (true) {
- var token = tokenizer.getNextToken();
- if (!token) {
- break;
- }
- if (delegate) {
- token = delegate(token);
- }
- tokens.push(token);
- }
- }
- catch (e) {
- tokenizer.errorHandler.tolerate(e);
- }
- if (tokenizer.errorHandler.tolerant) {
- tokens.errors = tokenizer.errors();
- }
- return tokens;
- }
- exports.tokenize = tokenize;
- var syntax_1 = __nested_webpack_require_1808__(2);
- exports.Syntax = syntax_1.Syntax;
- // Sync with *.json manifests.
- exports.version = '4.0.1';
- /***/ },
- /* 1 */
- /***/ function(module, exports, __nested_webpack_require_6456__) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var syntax_1 = __nested_webpack_require_6456__(2);
- var CommentHandler = (function () {
- function CommentHandler() {
- this.attach = false;
- this.comments = [];
- this.stack = [];
- this.leading = [];
- this.trailing = [];
- }
- CommentHandler.prototype.insertInnerComments = function (node, metadata) {
- // innnerComments for properties empty block
- // `function a() {/** comments **\/}`
- if (node.type === syntax_1.Syntax.BlockStatement && node.body.length === 0) {
- var innerComments = [];
- for (var i = this.leading.length - 1; i >= 0; --i) {
- var entry = this.leading[i];
- if (metadata.end.offset >= entry.start) {
- innerComments.unshift(entry.comment);
- this.leading.splice(i, 1);
- this.trailing.splice(i, 1);
- }
- }
- if (innerComments.length) {
- node.innerComments = innerComments;
- }
- }
- };
- CommentHandler.prototype.findTrailingComments = function (metadata) {
- var trailingComments = [];
- if (this.trailing.length > 0) {
- for (var i = this.trailing.length - 1; i >= 0; --i) {
- var entry_1 = this.trailing[i];
- if (entry_1.start >= metadata.end.offset) {
- trailingComments.unshift(entry_1.comment);
- }
- }
- this.trailing.length = 0;
- return trailingComments;
- }
- var entry = this.stack[this.stack.length - 1];
- if (entry && entry.node.trailingComments) {
- var firstComment = entry.node.trailingComments[0];
- if (firstComment && firstComment.range[0] >= metadata.end.offset) {
- trailingComments = entry.node.trailingComments;
- delete entry.node.trailingComments;
- }
- }
- return trailingComments;
- };
- CommentHandler.prototype.findLeadingComments = function (metadata) {
- var leadingComments = [];
- var target;
- while (this.stack.length > 0) {
- var entry = this.stack[this.stack.length - 1];
- if (entry && entry.start >= metadata.start.offset) {
- target = entry.node;
- this.stack.pop();
- }
- else {
- break;
- }
- }
- if (target) {
- var count = target.leadingComments ? target.leadingComments.length : 0;
- for (var i = count - 1; i >= 0; --i) {
- var comment = target.leadingComments[i];
- if (comment.range[1] <= metadata.start.offset) {
- leadingComments.unshift(comment);
- target.leadingComments.splice(i, 1);
- }
- }
- if (target.leadingComments && target.leadingComments.length === 0) {
- delete target.leadingComments;
- }
- return leadingComments;
- }
- for (var i = this.leading.length - 1; i >= 0; --i) {
- var entry = this.leading[i];
- if (entry.start <= metadata.start.offset) {
- leadingComments.unshift(entry.comment);
- this.leading.splice(i, 1);
- }
- }
- return leadingComments;
- };
- CommentHandler.prototype.visitNode = function (node, metadata) {
- if (node.type === syntax_1.Syntax.Program && node.body.length > 0) {
- return;
- }
- this.insertInnerComments(node, metadata);
- var trailingComments = this.findTrailingComments(metadata);
- var leadingComments = this.findLeadingComments(metadata);
- if (leadingComments.length > 0) {
- node.leadingComments = leadingComments;
- }
- if (trailingComments.length > 0) {
- node.trailingComments = trailingComments;
- }
- this.stack.push({
- node: node,
- start: metadata.start.offset
- });
- };
- CommentHandler.prototype.visitComment = function (node, metadata) {
- var type = (node.type[0] === 'L') ? 'Line' : 'Block';
- var comment = {
- type: type,
- value: node.value
- };
- if (node.range) {
- comment.range = node.range;
- }
- if (node.loc) {
- comment.loc = node.loc;
- }
- this.comments.push(comment);
- if (this.attach) {
- var entry = {
- comment: {
- type: type,
- value: node.value,
- range: [metadata.start.offset, metadata.end.offset]
- },
- start: metadata.start.offset
- };
- if (node.loc) {
- entry.comment.loc = node.loc;
- }
- node.type = type;
- this.leading.push(entry);
- this.trailing.push(entry);
- }
- };
- CommentHandler.prototype.visit = function (node, metadata) {
- if (node.type === 'LineComment') {
- this.visitComment(node, metadata);
- }
- else if (node.type === 'BlockComment') {
- this.visitComment(node, metadata);
- }
- else if (this.attach) {
- this.visitNode(node, metadata);
- }
- };
- return CommentHandler;
- }());
- exports.CommentHandler = CommentHandler;
- /***/ },
- /* 2 */
- /***/ function(module, exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.Syntax = {
- AssignmentExpression: 'AssignmentExpression',
- AssignmentPattern: 'AssignmentPattern',
- ArrayExpression: 'ArrayExpression',
- ArrayPattern: 'ArrayPattern',
- ArrowFunctionExpression: 'ArrowFunctionExpression',
- AwaitExpression: 'AwaitExpression',
- BlockStatement: 'BlockStatement',
- BinaryExpression: 'BinaryExpression',
- BreakStatement: 'BreakStatement',
- CallExpression: 'CallExpression',
- CatchClause: 'CatchClause',
- ClassBody: 'ClassBody',
- ClassDeclaration: 'ClassDeclaration',
- ClassExpression: 'ClassExpression',
- ConditionalExpression: 'ConditionalExpression',
- ContinueStatement: 'ContinueStatement',
- DoWhileStatement: 'DoWhileStatement',
- DebuggerStatement: 'DebuggerStatement',
- EmptyStatement: 'EmptyStatement',
- ExportAllDeclaration: 'ExportAllDeclaration',
- ExportDefaultDeclaration: 'ExportDefaultDeclaration',
- ExportNamedDeclaration: 'ExportNamedDeclaration',
- ExportSpecifier: 'ExportSpecifier',
- ExpressionStatement: 'ExpressionStatement',
- ForStatement: 'ForStatement',
- ForOfStatement: 'ForOfStatement',
- ForInStatement: 'ForInStatement',
- FunctionDeclaration: 'FunctionDeclaration',
- FunctionExpression: 'FunctionExpression',
- Identifier: 'Identifier',
- IfStatement: 'IfStatement',
- ImportDeclaration: 'ImportDeclaration',
- ImportDefaultSpecifier: 'ImportDefaultSpecifier',
- ImportNamespaceSpecifier: 'ImportNamespaceSpecifier',
- ImportSpecifier: 'ImportSpecifier',
- Literal: 'Literal',
- LabeledStatement: 'LabeledStatement',
- LogicalExpression: 'LogicalExpression',
- MemberExpression: 'MemberExpression',
- MetaProperty: 'MetaProperty',
- MethodDefinition: 'MethodDefinition',
- NewExpression: 'NewExpression',
- ObjectExpression: 'ObjectExpression',
- ObjectPattern: 'ObjectPattern',
- Program: 'Program',
- Property: 'Property',
- RestElement: 'RestElement',
- ReturnStatement: 'ReturnStatement',
- SequenceExpression: 'SequenceExpression',
- SpreadElement: 'SpreadElement',
- Super: 'Super',
- SwitchCase: 'SwitchCase',
- SwitchStatement: 'SwitchStatement',
- TaggedTemplateExpression: 'TaggedTemplateExpression',
- TemplateElement: 'TemplateElement',
- TemplateLiteral: 'TemplateLiteral',
- ThisExpression: 'ThisExpression',
- ThrowStatement: 'ThrowStatement',
- TryStatement: 'TryStatement',
- UnaryExpression: 'UnaryExpression',
- UpdateExpression: 'UpdateExpression',
- VariableDeclaration: 'VariableDeclaration',
- VariableDeclarator: 'VariableDeclarator',
- WhileStatement: 'WhileStatement',
- WithStatement: 'WithStatement',
- YieldExpression: 'YieldExpression'
- };
- /***/ },
- /* 3 */
- /***/ function(module, exports, __nested_webpack_require_15019__) {
- "use strict";
- /* istanbul ignore next */
- var __extends = (this && this.__extends) || (function () {
- var extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return function (d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- Object.defineProperty(exports, "__esModule", { value: true });
- var character_1 = __nested_webpack_require_15019__(4);
- var JSXNode = __nested_webpack_require_15019__(5);
- var jsx_syntax_1 = __nested_webpack_require_15019__(6);
- var Node = __nested_webpack_require_15019__(7);
- var parser_1 = __nested_webpack_require_15019__(8);
- var token_1 = __nested_webpack_require_15019__(13);
- var xhtml_entities_1 = __nested_webpack_require_15019__(14);
- token_1.TokenName[100 /* Identifier */] = 'JSXIdentifier';
- token_1.TokenName[101 /* Text */] = 'JSXText';
- // Fully qualified element name, e.g. <svg:path> returns "svg:path"
- function getQualifiedElementName(elementName) {
- var qualifiedName;
- switch (elementName.type) {
- case jsx_syntax_1.JSXSyntax.JSXIdentifier:
- var id = elementName;
- qualifiedName = id.name;
- break;
- case jsx_syntax_1.JSXSyntax.JSXNamespacedName:
- var ns = elementName;
- qualifiedName = getQualifiedElementName(ns.namespace) + ':' +
- getQualifiedElementName(ns.name);
- break;
- case jsx_syntax_1.JSXSyntax.JSXMemberExpression:
- var expr = elementName;
- qualifiedName = getQualifiedElementName(expr.object) + '.' +
- getQualifiedElementName(expr.property);
- break;
- /* istanbul ignore next */
- default:
- break;
- }
- return qualifiedName;
- }
- var JSXParser = (function (_super) {
- __extends(JSXParser, _super);
- function JSXParser(code, options, delegate) {
- return _super.call(this, code, options, delegate) || this;
- }
- JSXParser.prototype.parsePrimaryExpression = function () {
- return this.match('<') ? this.parseJSXRoot() : _super.prototype.parsePrimaryExpression.call(this);
- };
- JSXParser.prototype.startJSX = function () {
- // Unwind the scanner before the lookahead token.
- this.scanner.index = this.startMarker.index;
- this.scanner.lineNumber = this.startMarker.line;
- this.scanner.lineStart = this.startMarker.index - this.startMarker.column;
- };
- JSXParser.prototype.finishJSX = function () {
- // Prime the next lookahead.
- this.nextToken();
- };
- JSXParser.prototype.reenterJSX = function () {
- this.startJSX();
- this.expectJSX('}');
- // Pop the closing '}' added from the lookahead.
- if (this.config.tokens) {
- this.tokens.pop();
- }
- };
- JSXParser.prototype.createJSXNode = function () {
- this.collectComments();
- return {
- index: this.scanner.index,
- line: this.scanner.lineNumber,
- column: this.scanner.index - this.scanner.lineStart
- };
- };
- JSXParser.prototype.createJSXChildNode = function () {
- return {
- index: this.scanner.index,
- line: this.scanner.lineNumber,
- column: this.scanner.index - this.scanner.lineStart
- };
- };
- JSXParser.prototype.scanXHTMLEntity = function (quote) {
- var result = '&';
- var valid = true;
- var terminated = false;
- var numeric = false;
- var hex = false;
- while (!this.scanner.eof() && valid && !terminated) {
- var ch = this.scanner.source[this.scanner.index];
- if (ch === quote) {
- break;
- }
- terminated = (ch === ';');
- result += ch;
- ++this.scanner.index;
- if (!terminated) {
- switch (result.length) {
- case 2:
- // e.g. '{'
- numeric = (ch === '#');
- break;
- case 3:
- if (numeric) {
- // e.g. 'A'
- hex = (ch === 'x');
- valid = hex || character_1.Character.isDecimalDigit(ch.charCodeAt(0));
- numeric = numeric && !hex;
- }
- break;
- default:
- valid = valid && !(numeric && !character_1.Character.isDecimalDigit(ch.charCodeAt(0)));
- valid = valid && !(hex && !character_1.Character.isHexDigit(ch.charCodeAt(0)));
- break;
- }
- }
- }
- if (valid && terminated && result.length > 2) {
- // e.g. 'A' becomes just '#x41'
- var str = result.substr(1, result.length - 2);
- if (numeric && str.length > 1) {
- result = String.fromCharCode(parseInt(str.substr(1), 10));
- }
- else if (hex && str.length > 2) {
- result = String.fromCharCode(parseInt('0' + str.substr(1), 16));
- }
- else if (!numeric && !hex && xhtml_entities_1.XHTMLEntities[str]) {
- result = xhtml_entities_1.XHTMLEntities[str];
- }
- }
- return result;
- };
- // Scan the next JSX token. This replaces Scanner#lex when in JSX mode.
- JSXParser.prototype.lexJSX = function () {
- var cp = this.scanner.source.charCodeAt(this.scanner.index);
- // < > / : = { }
- if (cp === 60 || cp === 62 || cp === 47 || cp === 58 || cp === 61 || cp === 123 || cp === 125) {
- var value = this.scanner.source[this.scanner.index++];
- return {
- type: 7 /* Punctuator */,
- value: value,
- lineNumber: this.scanner.lineNumber,
- lineStart: this.scanner.lineStart,
- start: this.scanner.index - 1,
- end: this.scanner.index
- };
- }
- // " '
- if (cp === 34 || cp === 39) {
- var start = this.scanner.index;
- var quote = this.scanner.source[this.scanner.index++];
- var str = '';
- while (!this.scanner.eof()) {
- var ch = this.scanner.source[this.scanner.index++];
- if (ch === quote) {
- break;
- }
- else if (ch === '&') {
- str += this.scanXHTMLEntity(quote);
- }
- else {
- str += ch;
- }
- }
- return {
- type: 8 /* StringLiteral */,
- value: str,
- lineNumber: this.scanner.lineNumber,
- lineStart: this.scanner.lineStart,
- start: start,
- end: this.scanner.index
- };
- }
- // ... or .
- if (cp === 46) {
- var n1 = this.scanner.source.charCodeAt(this.scanner.index + 1);
- var n2 = this.scanner.source.charCodeAt(this.scanner.index + 2);
- var value = (n1 === 46 && n2 === 46) ? '...' : '.';
- var start = this.scanner.index;
- this.scanner.index += value.length;
- return {
- type: 7 /* Punctuator */,
- value: value,
- lineNumber: this.scanner.lineNumber,
- lineStart: this.scanner.lineStart,
- start: start,
- end: this.scanner.index
- };
- }
- // `
- if (cp === 96) {
- // Only placeholder, since it will be rescanned as a real assignment expression.
- return {
- type: 10 /* Template */,
- value: '',
- lineNumber: this.scanner.lineNumber,
- lineStart: this.scanner.lineStart,
- start: this.scanner.index,
- end: this.scanner.index
- };
- }
- // Identifer can not contain backslash (char code 92).
- if (character_1.Character.isIdentifierStart(cp) && (cp !== 92)) {
- var start = this.scanner.index;
- ++this.scanner.index;
- while (!this.scanner.eof()) {
- var ch = this.scanner.source.charCodeAt(this.scanner.index);
- if (character_1.Character.isIdentifierPart(ch) && (ch !== 92)) {
- ++this.scanner.index;
- }
- else if (ch === 45) {
- // Hyphen (char code 45) can be part of an identifier.
- ++this.scanner.index;
- }
- else {
- break;
- }
- }
- var id = this.scanner.source.slice(start, this.scanner.index);
- return {
- type: 100 /* Identifier */,
- value: id,
- lineNumber: this.scanner.lineNumber,
- lineStart: this.scanner.lineStart,
- start: start,
- end: this.scanner.index
- };
- }
- return this.scanner.lex();
- };
- JSXParser.prototype.nextJSXToken = function () {
- this.collectComments();
- this.startMarker.index = this.scanner.index;
- this.startMarker.line = this.scanner.lineNumber;
- this.startMarker.column = this.scanner.index - this.scanner.lineStart;
- var token = this.lexJSX();
- this.lastMarker.index = this.scanner.index;
- this.lastMarker.line = this.scanner.lineNumber;
- this.lastMarker.column = this.scanner.index - this.scanner.lineStart;
- if (this.config.tokens) {
- this.tokens.push(this.convertToken(token));
- }
- return token;
- };
- JSXParser.prototype.nextJSXText = function () {
- this.startMarker.index = this.scanner.index;
- this.startMarker.line = this.scanner.lineNumber;
- this.startMarker.column = this.scanner.index - this.scanner.lineStart;
- var start = this.scanner.index;
- var text = '';
- while (!this.scanner.eof()) {
- var ch = this.scanner.source[this.scanner.index];
- if (ch === '{' || ch === '<') {
- break;
- }
- ++this.scanner.index;
- text += ch;
- if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {
- ++this.scanner.lineNumber;
- if (ch === '\r' && this.scanner.source[this.scanner.index] === '\n') {
- ++this.scanner.index;
- }
- this.scanner.lineStart = this.scanner.index;
- }
- }
- this.lastMarker.index = this.scanner.index;
- this.lastMarker.line = this.scanner.lineNumber;
- this.lastMarker.column = this.scanner.index - this.scanner.lineStart;
- var token = {
- type: 101 /* Text */,
- value: text,
- lineNumber: this.scanner.lineNumber,
- lineStart: this.scanner.lineStart,
- start: start,
- end: this.scanner.index
- };
- if ((text.length > 0) && this.config.tokens) {
- this.tokens.push(this.convertToken(token));
- }
- return token;
- };
- JSXParser.prototype.peekJSXToken = function () {
- var state = this.scanner.saveState();
- this.scanner.scanComments();
- var next = this.lexJSX();
- this.scanner.restoreState(state);
- return next;
- };
- // Expect the next JSX token to match the specified punctuator.
- // If not, an exception will be thrown.
- JSXParser.prototype.expectJSX = function (value) {
- var token = this.nextJSXToken();
- if (token.type !== 7 /* Punctuator */ || token.value !== value) {
- this.throwUnexpectedToken(token);
- }
- };
- // Return true if the next JSX token matches the specified punctuator.
- JSXParser.prototype.matchJSX = function (value) {
- var next = this.peekJSXToken();
- return next.type === 7 /* Punctuator */ && next.value === value;
- };
- JSXParser.prototype.parseJSXIdentifier = function () {
- var node = this.createJSXNode();
- var token = this.nextJSXToken();
- if (token.type !== 100 /* Identifier */) {
- this.throwUnexpectedToken(token);
- }
- return this.finalize(node, new JSXNode.JSXIdentifier(token.value));
- };
- JSXParser.prototype.parseJSXElementName = function () {
- var node = this.createJSXNode();
- var elementName = this.parseJSXIdentifier();
- if (this.matchJSX(':')) {
- var namespace = elementName;
- this.expectJSX(':');
- var name_1 = this.parseJSXIdentifier();
- elementName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_1));
- }
- else if (this.matchJSX('.')) {
- while (this.matchJSX('.')) {
- var object = elementName;
- this.expectJSX('.');
- var property = this.parseJSXIdentifier();
- elementName = this.finalize(node, new JSXNode.JSXMemberExpression(object, property));
- }
- }
- return elementName;
- };
- JSXParser.prototype.parseJSXAttributeName = function () {
- var node = this.createJSXNode();
- var attributeName;
- var identifier = this.parseJSXIdentifier();
- if (this.matchJSX(':')) {
- var namespace = identifier;
- this.expectJSX(':');
- var name_2 = this.parseJSXIdentifier();
- attributeName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_2));
- }
- else {
- attributeName = identifier;
- }
- return attributeName;
- };
- JSXParser.prototype.parseJSXStringLiteralAttribute = function () {
- var node = this.createJSXNode();
- var token = this.nextJSXToken();
- if (token.type !== 8 /* StringLiteral */) {
- this.throwUnexpectedToken(token);
- }
- var raw = this.getTokenRaw(token);
- return this.finalize(node, new Node.Literal(token.value, raw));
- };
- JSXParser.prototype.parseJSXExpressionAttribute = function () {
- var node = this.createJSXNode();
- this.expectJSX('{');
- this.finishJSX();
- if (this.match('}')) {
- this.tolerateError('JSX attributes must only be assigned a non-empty expression');
- }
- var expression = this.parseAssignmentExpression();
- this.reenterJSX();
- return this.finalize(node, new JSXNode.JSXExpressionContainer(expression));
- };
- JSXParser.prototype.parseJSXAttributeValue = function () {
- return this.matchJSX('{') ? this.parseJSXExpressionAttribute() :
- this.matchJSX('<') ? this.parseJSXElement() : this.parseJSXStringLiteralAttribute();
- };
- JSXParser.prototype.parseJSXNameValueAttribute = function () {
- var node = this.createJSXNode();
- var name = this.parseJSXAttributeName();
- var value = null;
- if (this.matchJSX('=')) {
- this.expectJSX('=');
- value = this.parseJSXAttributeValue();
- }
- return this.finalize(node, new JSXNode.JSXAttribute(name, value));
- };
- JSXParser.prototype.parseJSXSpreadAttribute = function () {
- var node = this.createJSXNode();
- this.expectJSX('{');
- this.expectJSX('...');
- this.finishJSX();
- var argument = this.parseAssignmentExpression();
- this.reenterJSX();
- return this.finalize(node, new JSXNode.JSXSpreadAttribute(argument));
- };
- JSXParser.prototype.parseJSXAttributes = function () {
- var attributes = [];
- while (!this.matchJSX('/') && !this.matchJSX('>')) {
- var attribute = this.matchJSX('{') ? this.parseJSXSpreadAttribute() :
- this.parseJSXNameValueAttribute();
- attributes.push(attribute);
- }
- return attributes;
- };
- JSXParser.prototype.parseJSXOpeningElement = function () {
- var node = this.createJSXNode();
- this.expectJSX('<');
- var name = this.parseJSXElementName();
- var attributes = this.parseJSXAttributes();
- var selfClosing = this.matchJSX('/');
- if (selfClosing) {
- this.expectJSX('/');
- }
- this.expectJSX('>');
- return this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes));
- };
- JSXParser.prototype.parseJSXBoundaryElement = function () {
- var node = this.createJSXNode();
- this.expectJSX('<');
- if (this.matchJSX('/')) {
- this.expectJSX('/');
- var name_3 = this.parseJSXElementName();
- this.expectJSX('>');
- return this.finalize(node, new JSXNode.JSXClosingElement(name_3));
- }
- var name = this.parseJSXElementName();
- var attributes = this.parseJSXAttributes();
- var selfClosing = this.matchJSX('/');
- if (selfClosing) {
- this.expectJSX('/');
- }
- this.expectJSX('>');
- return this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes));
- };
- JSXParser.prototype.parseJSXEmptyExpression = function () {
- var node = this.createJSXChildNode();
- this.collectComments();
- this.lastMarker.index = this.scanner.index;
- this.lastMarker.line = this.scanner.lineNumber;
- this.lastMarker.column = this.scanner.index - this.scanner.lineStart;
- return this.finalize(node, new JSXNode.JSXEmptyExpression());
- };
- JSXParser.prototype.parseJSXExpressionContainer = function () {
- var node = this.createJSXNode();
- this.expectJSX('{');
- var expression;
- if (this.matchJSX('}')) {
- expression = this.parseJSXEmptyExpression();
- this.expectJSX('}');
- }
- else {
- this.finishJSX();
- expression = this.parseAssignmentExpression();
- this.reenterJSX();
- }
- return this.finalize(node, new JSXNode.JSXExpressionContainer(expression));
- };
- JSXParser.prototype.parseJSXChildren = function () {
- var children = [];
- while (!this.scanner.eof()) {
- var node = this.createJSXChildNode();
- var token = this.nextJSXText();
- if (token.start < token.end) {
- var raw = this.getTokenRaw(token);
- var child = this.finalize(node, new JSXNode.JSXText(token.value, raw));
- children.push(child);
- }
- if (this.scanner.source[this.scanner.index] === '{') {
- var container = this.parseJSXExpressionContainer();
- children.push(container);
- }
- else {
- break;
- }
- }
- return children;
- };
- JSXParser.prototype.parseComplexJSXElement = function (el) {
- var stack = [];
- while (!this.scanner.eof()) {
- el.children = el.children.concat(this.parseJSXChildren());
- var node = this.createJSXChildNode();
- var element = this.parseJSXBoundaryElement();
- if (element.type === jsx_syntax_1.JSXSyntax.JSXOpeningElement) {
- var opening = element;
- if (opening.selfClosing) {
- var child = this.finalize(node, new JSXNode.JSXElement(opening, [], null));
- el.children.push(child);
- }
- else {
- stack.push(el);
- el = { node: node, opening: opening, closing: null, children: [] };
- }
- }
- if (element.type === jsx_syntax_1.JSXSyntax.JSXClosingElement) {
- el.closing = element;
- var open_1 = getQualifiedElementName(el.opening.name);
- var close_1 = getQualifiedElementName(el.closing.name);
- if (open_1 !== close_1) {
- this.tolerateError('Expected corresponding JSX closing tag for %0', open_1);
- }
- if (stack.length > 0) {
- var child = this.finalize(el.node, new JSXNode.JSXElement(el.opening, el.children, el.closing));
- el = stack[stack.length - 1];
- el.children.push(child);
- stack.pop();
- }
- else {
- break;
- }
- }
- }
- return el;
- };
- JSXParser.prototype.parseJSXElement = function () {
- var node = this.createJSXNode();
- var opening = this.parseJSXOpeningElement();
- var children = [];
- var closing = null;
- if (!opening.selfClosing) {
- var el = this.parseComplexJSXElement({ node: node, opening: opening, closing: closing, children: children });
- children = el.children;
- closing = el.closing;
- }
- return this.finalize(node, new JSXNode.JSXElement(opening, children, closing));
- };
- JSXParser.prototype.parseJSXRoot = function () {
- // Pop the opening '<' added from the lookahead.
- if (this.config.tokens) {
- this.tokens.pop();
- }
- this.startJSX();
- var element = this.parseJSXElement();
- this.finishJSX();
- return element;
- };
- JSXParser.prototype.isStartOfExpression = function () {
- return _super.prototype.isStartOfExpression.call(this) || this.match('<');
- };
- return JSXParser;
- }(parser_1.Parser));
- exports.JSXParser = JSXParser;
- /***/ },
- /* 4 */
- /***/ function(module, exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- // See also tools/generate-unicode-regex.js.
- var Regex = {
- // Unicode v8.0.0 NonAsciiIdentifierStart:
- NonAsciiIdentifierStart: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/,
- // Unicode v8.0.0 NonAsciiIdentifierPart:
- NonAsciiIdentifierPart: /[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/
- };
- exports.Character = {
- /* tslint:disable:no-bitwise */
- fromCodePoint: function (cp) {
- return (cp < 0x10000) ? String.fromCharCode(cp) :
- String.fromCharCode(0xD800 + ((cp - 0x10000) >> 10)) +
- String.fromCharCode(0xDC00 + ((cp - 0x10000) & 1023));
- },
- // https://tc39.github.io/ecma262/#sec-white-space
- isWhiteSpace: function (cp) {
- return (cp === 0x20) || (cp === 0x09) || (cp === 0x0B) || (cp === 0x0C) || (cp === 0xA0) ||
- (cp >= 0x1680 && [0x1680, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(cp) >= 0);
- },
- // https://tc39.github.io/ecma262/#sec-line-terminators
- isLineTerminator: function (cp) {
- return (cp === 0x0A) || (cp === 0x0D) || (cp === 0x2028) || (cp === 0x2029);
- },
- // https://tc39.github.io/ecma262/#sec-names-and-keywords
- isIdentifierStart: function (cp) {
- return (cp === 0x24) || (cp === 0x5F) ||
- (cp >= 0x41 && cp <= 0x5A) ||
- (cp >= 0x61 && cp <= 0x7A) ||
- (cp === 0x5C) ||
- ((cp >= 0x80) && Regex.NonAsciiIdentifierStart.test(exports.Character.fromCodePoint(cp)));
- },
- isIdentifierPart: function (cp) {
- return (cp === 0x24) || (cp === 0x5F) ||
- (cp >= 0x41 && cp <= 0x5A) ||
- (cp >= 0x61 && cp <= 0x7A) ||
- (cp >= 0x30 && cp <= 0x39) ||
- (cp === 0x5C) ||
- ((cp >= 0x80) && Regex.NonAsciiIdentifierPart.test(exports.Character.fromCodePoint(cp)));
- },
- // https://tc39.github.io/ecma262/#sec-literals-numeric-literals
- isDecimalDigit: function (cp) {
- return (cp >= 0x30 && cp <= 0x39); // 0..9
- },
- isHexDigit: function (cp) {
- return (cp >= 0x30 && cp <= 0x39) ||
- (cp >= 0x41 && cp <= 0x46) ||
- (cp >= 0x61 && cp <= 0x66); // a..f
- },
- isOctalDigit: function (cp) {
- return (cp >= 0x30 && cp <= 0x37); // 0..7
- }
- };
- /***/ },
- /* 5 */
- /***/ function(module, exports, __nested_webpack_require_54354__) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var jsx_syntax_1 = __nested_webpack_require_54354__(6);
- /* tslint:disable:max-classes-per-file */
- var JSXClosingElement = (function () {
- function JSXClosingElement(name) {
- this.type = jsx_syntax_1.JSXSyntax.JSXClosingElement;
- this.name = name;
- }
- return JSXClosingElement;
- }());
- exports.JSXClosingElement = JSXClosingElement;
- var JSXElement = (function () {
- function JSXElement(openingElement, children, closingElement) {
- this.type = jsx_syntax_1.JSXSyntax.JSXElement;
- this.openingElement = openingElement;
- this.children = children;
- this.closingElement = closingElement;
- }
- return JSXElement;
- }());
- exports.JSXElement = JSXElement;
- var JSXEmptyExpression = (function () {
- function JSXEmptyExpression() {
- this.type = jsx_syntax_1.JSXSyntax.JSXEmptyExpression;
- }
- return JSXEmptyExpression;
- }());
- exports.JSXEmptyExpression = JSXEmptyExpression;
- var JSXExpressionContainer = (function () {
- function JSXExpressionContainer(expression) {
- this.type = jsx_syntax_1.JSXSyntax.JSXExpressionContainer;
- this.expression = expression;
- }
- return JSXExpressionContainer;
- }());
- exports.JSXExpressionContainer = JSXExpressionContainer;
- var JSXIdentifier = (function () {
- function JSXIdentifier(name) {
- this.type = jsx_syntax_1.JSXSyntax.JSXIdentifier;
- this.name = name;
- }
- return JSXIdentifier;
- }());
- exports.JSXIdentifier = JSXIdentifier;
- var JSXMemberExpression = (function () {
- function JSXMemberExpression(object, property) {
- this.type = jsx_syntax_1.JSXSyntax.JSXMemberExpression;
- this.object = object;
- this.property = property;
- }
- return JSXMemberExpression;
- }());
- exports.JSXMemberExpression = JSXMemberExpression;
- var JSXAttribute = (function () {
- function JSXAttribute(name, value) {
- this.type = jsx_syntax_1.JSXSyntax.JSXAttribute;
- this.name = name;
- this.value = value;
- }
- return JSXAttribute;
- }());
- exports.JSXAttribute = JSXAttribute;
- var JSXNamespacedName = (function () {
- function JSXNamespacedName(namespace, name) {
- this.type = jsx_syntax_1.JSXSyntax.JSXNamespacedName;
- this.namespace = namespace;
- this.name = name;
- }
- return JSXNamespacedName;
- }());
- exports.JSXNamespacedName = JSXNamespacedName;
- var JSXOpeningElement = (function () {
- function JSXOpeningElement(name, selfClosing, attributes) {
- this.type = jsx_syntax_1.JSXSyntax.JSXOpeningElement;
- this.name = name;
- this.selfClosing = selfClosing;
- this.attributes = attributes;
- }
- return JSXOpeningElement;
- }());
- exports.JSXOpeningElement = JSXOpeningElement;
- var JSXSpreadAttribute = (function () {
- function JSXSpreadAttribute(argument) {
- this.type = jsx_syntax_1.JSXSyntax.JSXSpreadAttribute;
- this.argument = argument;
- }
- return JSXSpreadAttribute;
- }());
- exports.JSXSpreadAttribute = JSXSpreadAttribute;
- var JSXText = (function () {
- function JSXText(value, raw) {
- this.type = jsx_syntax_1.JSXSyntax.JSXText;
- this.value = value;
- this.raw = raw;
- }
- return JSXText;
- }());
- exports.JSXText = JSXText;
- /***/ },
- /* 6 */
- /***/ function(module, exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.JSXSyntax = {
- JSXAttribute: 'JSXAttribute',
- JSXClosingElement: 'JSXClosingElement',
- JSXElement: 'JSXElement',
- JSXEmptyExpression: 'JSXEmptyExpression',
- JSXExpressionContainer: 'JSXExpressionContainer',
- JSXIdentifier: 'JSXIdentifier',
- JSXMemberExpression: 'JSXMemberExpression',
- JSXNamespacedName: 'JSXNamespacedName',
- JSXOpeningElement: 'JSXOpeningElement',
- JSXSpreadAttribute: 'JSXSpreadAttribute',
- JSXText: 'JSXText'
- };
- /***/ },
- /* 7 */
- /***/ function(module, exports, __nested_webpack_require_58416__) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var syntax_1 = __nested_webpack_require_58416__(2);
- /* tslint:disable:max-classes-per-file */
- var ArrayExpression = (function () {
- function ArrayExpression(elements) {
- this.type = syntax_1.Syntax.ArrayExpression;
- this.elements = elements;
- }
- return ArrayExpression;
- }());
- exports.ArrayExpression = ArrayExpression;
- var ArrayPattern = (function () {
- function ArrayPattern(elements) {
- this.type = syntax_1.Syntax.ArrayPattern;
- this.elements = elements;
- }
- return ArrayPattern;
- }());
- exports.ArrayPattern = ArrayPattern;
- var ArrowFunctionExpression = (function () {
- function ArrowFunctionExpression(params, body, expression) {
- this.type = syntax_1.Syntax.ArrowFunctionExpression;
- this.id = null;
- this.params = params;
- this.body = body;
- this.generator = false;
- this.expression = expression;
- this.async = false;
- }
- return ArrowFunctionExpression;
- }());
- exports.ArrowFunctionExpression = ArrowFunctionExpression;
- var AssignmentExpression = (function () {
- function AssignmentExpression(operator, left, right) {
- this.type = syntax_1.Syntax.AssignmentExpression;
- this.operator = operator;
- this.left = left;
- this.right = right;
- }
- return AssignmentExpression;
- }());
- exports.AssignmentExpression = AssignmentExpression;
- var AssignmentPattern = (function () {
- function AssignmentPattern(left, right) {
- this.type = syntax_1.Syntax.AssignmentPattern;
- this.left = left;
- this.right = right;
- }
- return AssignmentPattern;
- }());
- exports.AssignmentPattern = AssignmentPattern;
- var AsyncArrowFunctionExpression = (function () {
- function AsyncArrowFunctionExpression(params, body, expression) {
- this.type = syntax_1.Syntax.ArrowFunctionExpression;
- this.id = null;
- this.params = params;
- this.body = body;
- this.generator = false;
- this.expression = expression;
- this.async = true;
- }
- return AsyncArrowFunctionExpression;
- }());
- exports.AsyncArrowFunctionExpression = AsyncArrowFunctionExpression;
- var AsyncFunctionDeclaration = (function () {
- function AsyncFunctionDeclaration(id, params, body) {
- this.type = syntax_1.Syntax.FunctionDeclaration;
- this.id = id;
- this.params = params;
- this.body = body;
- this.generator = false;
- this.expression = false;
- this.async = true;
- }
- return AsyncFunctionDeclaration;
- }());
- exports.AsyncFunctionDeclaration = AsyncFunctionDeclaration;
- var AsyncFunctionExpression = (function () {
- function AsyncFunctionExpression(id, params, body) {
- this.type = syntax_1.Syntax.FunctionExpression;
- this.id = id;
- this.params = params;
- this.body = body;
- this.generator = false;
- this.expression = false;
- this.async = true;
- }
- return AsyncFunctionExpression;
- }());
- exports.AsyncFunctionExpression = AsyncFunctionExpression;
- var AwaitExpression = (function () {
- function AwaitExpression(argument) {
- this.type = syntax_1.Syntax.AwaitExpression;
- this.argument = argument;
- }
- return AwaitExpression;
- }());
- exports.AwaitExpression = AwaitExpression;
- var BinaryExpression = (function () {
- function BinaryExpression(operator, left, right) {
- var logical = (operator === '||' || operator === '&&');
- this.type = logical ? syntax_1.Syntax.LogicalExpression : syntax_1.Syntax.BinaryExpression;
- this.operator = operator;
- this.left = left;
- this.right = right;
- }
- return BinaryExpression;
- }());
- exports.BinaryExpression = BinaryExpression;
- var BlockStatement = (function () {
- function BlockStatement(body) {
- this.type = syntax_1.Syntax.BlockStatement;
- this.body = body;
- }
- return BlockStatement;
- }());
- exports.BlockStatement = BlockStatement;
- var BreakStatement = (function () {
- function BreakStatement(label) {
- this.type = syntax_1.Syntax.BreakStatement;
- this.label = label;
- }
- return BreakStatement;
- }());
- exports.BreakStatement = BreakStatement;
- var CallExpression = (function () {
- function CallExpression(callee, args) {
- this.type = syntax_1.Syntax.CallExpression;
- this.callee = callee;
- this.arguments = args;
- }
- return CallExpression;
- }());
- exports.CallExpression = CallExpression;
- var CatchClause = (function () {
- function CatchClause(param, body) {
- this.type = syntax_1.Syntax.CatchClause;
- this.param = param;
- this.body = body;
- }
- return CatchClause;
- }());
- exports.CatchClause = CatchClause;
- var ClassBody = (function () {
- function ClassBody(body) {
- this.type = syntax_1.Syntax.ClassBody;
- this.body = body;
- }
- return ClassBody;
- }());
- exports.ClassBody = ClassBody;
- var ClassDeclaration = (function () {
- function ClassDeclaration(id, superClass, body) {
- this.type = syntax_1.Syntax.ClassDeclaration;
- this.id = id;
- this.superClass = superClass;
- this.body = body;
- }
- return ClassDeclaration;
- }());
- exports.ClassDeclaration = ClassDeclaration;
- var ClassExpression = (function () {
- function ClassExpression(id, superClass, body) {
- this.type = syntax_1.Syntax.ClassExpression;
- this.id = id;
- this.superClass = superClass;
- this.body = body;
- }
- return ClassExpression;
- }());
- exports.ClassExpression = ClassExpression;
- var ComputedMemberExpression = (function () {
- function ComputedMemberExpression(object, property) {
- this.type = syntax_1.Syntax.MemberExpression;
- this.computed = true;
- this.object = object;
- this.property = property;
- }
- return ComputedMemberExpression;
- }());
- exports.ComputedMemberExpression = ComputedMemberExpression;
- var ConditionalExpression = (function () {
- function ConditionalExpression(test, consequent, alternate) {
- this.type = syntax_1.Syntax.ConditionalExpression;
- this.test = test;
- this.consequent = consequent;
- this.alternate = alternate;
- }
- return ConditionalExpression;
- }());
- exports.ConditionalExpression = ConditionalExpression;
- var ContinueStatement = (function () {
- function ContinueStatement(label) {
- this.type = syntax_1.Syntax.ContinueStatement;
- this.label = label;
- }
- return ContinueStatement;
- }());
- exports.ContinueStatement = ContinueStatement;
- var DebuggerStatement = (function () {
- function DebuggerStatement() {
- this.type = syntax_1.Syntax.DebuggerStatement;
- }
- return DebuggerStatement;
- }());
- exports.DebuggerStatement = DebuggerStatement;
- var Directive = (function () {
- function Directive(expression, directive) {
- this.type = syntax_1.Syntax.ExpressionStatement;
- this.expression = expression;
- this.directive = directive;
- }
- return Directive;
- }());
- exports.Directive = Directive;
- var DoWhileStatement = (function () {
- function DoWhileStatement(body, test) {
- this.type = syntax_1.Syntax.DoWhileStatement;
- this.body = body;
- this.test = test;
- }
- return DoWhileStatement;
- }());
- exports.DoWhileStatement = DoWhileStatement;
- var EmptyStatement = (function () {
- function EmptyStatement() {
- this.type = syntax_1.Syntax.EmptyStatement;
- }
- return EmptyStatement;
- }());
- exports.EmptyStatement = EmptyStatement;
- var ExportAllDeclaration = (function () {
- function ExportAllDeclaration(source) {
- this.type = syntax_1.Syntax.ExportAllDeclaration;
- this.source = source;
- }
- return ExportAllDeclaration;
- }());
- exports.ExportAllDeclaration = ExportAllDeclaration;
- var ExportDefaultDeclaration = (function () {
- function ExportDefaultDeclaration(declaration) {
- this.type = syntax_1.Syntax.ExportDefaultDeclaration;
- this.declaration = declaration;
- }
- return ExportDefaultDeclaration;
- }());
- exports.ExportDefaultDeclaration = ExportDefaultDeclaration;
- var ExportNamedDeclaration = (function () {
- function ExportNamedDeclaration(declaration, specifiers, source) {
- this.type = syntax_1.Syntax.ExportNamedDeclaration;
- this.declaration = declaration;
- this.specifiers = specifiers;
- this.source = source;
- }
- return ExportNamedDeclaration;
- }());
- exports.ExportNamedDeclaration = ExportNamedDeclaration;
- var ExportSpecifier = (function () {
- function ExportSpecifier(local, exported) {
- this.type = syntax_1.Syntax.ExportSpecifier;
- this.exported = exported;
- this.local = local;
- }
- return ExportSpecifier;
- }());
- exports.ExportSpecifier = ExportSpecifier;
- var ExpressionStatement = (function () {
- function ExpressionStatement(expression) {
- this.type = syntax_1.Syntax.ExpressionStatement;
- this.expression = expression;
- }
- return ExpressionStatement;
- }());
- exports.ExpressionStatement = ExpressionStatement;
- var ForInStatement = (function () {
- function ForInStatement(left, right, body) {
- this.type = syntax_1.Syntax.ForInStatement;
- this.left = left;
- this.right = right;
- this.body = body;
- this.each = false;
- }
- return ForInStatement;
- }());
- exports.ForInStatement = ForInStatement;
- var ForOfStatement = (function () {
- function ForOfStatement(left, right, body) {
- this.type = syntax_1.Syntax.ForOfStatement;
- this.left = left;
- this.right = right;
- this.body = body;
- }
- return ForOfStatement;
- }());
- exports.ForOfStatement = ForOfStatement;
- var ForStatement = (function () {
- function ForStatement(init, test, update, body) {
- this.type = syntax_1.Syntax.ForStatement;
- this.init = init;
- this.test = test;
- this.update = update;
- this.body = body;
- }
- return ForStatement;
- }());
- exports.ForStatement = ForStatement;
- var FunctionDeclaration = (function () {
- function FunctionDeclaration(id, params, body, generator) {
- this.type = syntax_1.Syntax.FunctionDeclaration;
- this.id = id;
- this.params = params;
- this.body = body;
- this.generator = generator;
- this.expression = false;
- this.async = false;
- }
- return FunctionDeclaration;
- }());
- exports.FunctionDeclaration = FunctionDeclaration;
- var FunctionExpression = (function () {
- function FunctionExpression(id, params, body, generator) {
- this.type = syntax_1.Syntax.FunctionExpression;
- this.id = id;
- this.params = params;
- this.body = body;
- this.generator = generator;
- this.expression = false;
- this.async = false;
- }
- return FunctionExpression;
- }());
- exports.FunctionExpression = FunctionExpression;
- var Identifier = (function () {
- function Identifier(name) {
- this.type = syntax_1.Syntax.Identifier;
- this.name = name;
- }
- return Identifier;
- }());
- exports.Identifier = Identifier;
- var IfStatement = (function () {
- function IfStatement(test, consequent, alternate) {
- this.type = syntax_1.Syntax.IfStatement;
- this.test = test;
- this.consequent = consequent;
- this.alternate = alternate;
- }
- return IfStatement;
- }());
- exports.IfStatement = IfStatement;
- var ImportDeclaration = (function () {
- function ImportDeclaration(specifiers, source) {
- this.type = syntax_1.Syntax.ImportDeclaration;
- this.specifiers = specifiers;
- this.source = source;
- }
- return ImportDeclaration;
- }());
- exports.ImportDeclaration = ImportDeclaration;
- var ImportDefaultSpecifier = (function () {
- function ImportDefaultSpecifier(local) {
- this.type = syntax_1.Syntax.ImportDefaultSpecifier;
- this.local = local;
- }
- return ImportDefaultSpecifier;
- }());
- exports.ImportDefaultSpecifier = ImportDefaultSpecifier;
- var ImportNamespaceSpecifier = (function () {
- function ImportNamespaceSpecifier(local) {
- this.type = syntax_1.Syntax.ImportNamespaceSpecifier;
- this.local = local;
- }
- return ImportNamespaceSpecifier;
- }());
- exports.ImportNamespaceSpecifier = ImportNamespaceSpecifier;
- var ImportSpecifier = (function () {
- function ImportSpecifier(local, imported) {
- this.type = syntax_1.Syntax.ImportSpecifier;
- this.local = local;
- this.imported = imported;
- }
- return ImportSpecifier;
- }());
- exports.ImportSpecifier = ImportSpecifier;
- var LabeledStatement = (function () {
- function LabeledStatement(label, body) {
- this.type = syntax_1.Syntax.LabeledStatement;
- this.label = label;
- this.body = body;
- }
- return LabeledStatement;
- }());
- exports.LabeledStatement = LabeledStatement;
- var Literal = (function () {
- function Literal(value, raw) {
- this.type = syntax_1.Syntax.Literal;
- this.value = value;
- this.raw = raw;
- }
- return Literal;
- }());
- exports.Literal = Literal;
- var MetaProperty = (function () {
- function MetaProperty(meta, property) {
- this.type = syntax_1.Syntax.MetaProperty;
- this.meta = meta;
- this.property = property;
- }
- return MetaProperty;
- }());
- exports.MetaProperty = MetaProperty;
- var MethodDefinition = (function () {
- function MethodDefinition(key, computed, value, kind, isStatic) {
- this.type = syntax_1.Syntax.MethodDefinition;
- this.key = key;
- this.computed = computed;
- this.value = value;
- this.kind = kind;
- this.static = isStatic;
- }
- return MethodDefinition;
- }());
- exports.MethodDefinition = MethodDefinition;
- var Module = (function () {
- function Module(body) {
- this.type = syntax_1.Syntax.Program;
- this.body = body;
- this.sourceType = 'module';
- }
- return Module;
- }());
- exports.Module = Module;
- var NewExpression = (function () {
- function NewExpression(callee, args) {
- this.type = syntax_1.Syntax.NewExpression;
- this.callee = callee;
- this.arguments = args;
- }
- return NewExpression;
- }());
- exports.NewExpression = NewExpression;
- var ObjectExpression = (function () {
- function ObjectExpression(properties) {
- this.type = syntax_1.Syntax.ObjectExpression;
- this.properties = properties;
- }
- return ObjectExpression;
- }());
- exports.ObjectExpression = ObjectExpression;
- var ObjectPattern = (function () {
- function ObjectPattern(properties) {
- this.type = syntax_1.Syntax.ObjectPattern;
- this.properties = properties;
- }
- return ObjectPattern;
- }());
- exports.ObjectPattern = ObjectPattern;
- var Property = (function () {
- function Property(kind, key, computed, value, method, shorthand) {
- this.type = syntax_1.Syntax.Property;
- this.key = key;
- this.computed = computed;
- this.value = value;
- this.kind = kind;
- this.method = method;
- this.shorthand = shorthand;
- }
- return Property;
- }());
- exports.Property = Property;
- var RegexLiteral = (function () {
- function RegexLiteral(value, raw, pattern, flags) {
- this.type = syntax_1.Syntax.Literal;
- this.value = value;
- this.raw = raw;
- this.regex = { pattern: pattern, flags: flags };
- }
- return RegexLiteral;
- }());
- exports.RegexLiteral = RegexLiteral;
- var RestElement = (function () {
- function RestElement(argument) {
- this.type = syntax_1.Syntax.RestElement;
- this.argument = argument;
- }
- return RestElement;
- }());
- exports.RestElement = RestElement;
- var ReturnStatement = (function () {
- function ReturnStatement(argument) {
- this.type = syntax_1.Syntax.ReturnStatement;
- this.argument = argument;
- }
- return ReturnStatement;
- }());
- exports.ReturnStatement = ReturnStatement;
- var Script = (function () {
- function Script(body) {
- this.type = syntax_1.Syntax.Program;
- this.body = body;
- this.sourceType = 'script';
- }
- return Script;
- }());
- exports.Script = Script;
- var SequenceExpression = (function () {
- function SequenceExpression(expressions) {
- this.type = syntax_1.Syntax.SequenceExpression;
- this.expressions = expressions;
- }
- return SequenceExpression;
- }());
- exports.SequenceExpression = SequenceExpression;
- var SpreadElement = (function () {
- function SpreadElement(argument) {
- this.type = syntax_1.Syntax.SpreadElement;
- this.argument = argument;
- }
- return SpreadElement;
- }());
- exports.SpreadElement = SpreadElement;
- var StaticMemberExpression = (function () {
- function StaticMemberExpression(object, property) {
- this.type = syntax_1.Syntax.MemberExpression;
- this.computed = false;
- this.object = object;
- this.property = property;
- }
- return StaticMemberExpression;
- }());
- exports.StaticMemberExpression = StaticMemberExpression;
- var Super = (function () {
- function Super() {
- this.type = syntax_1.Syntax.Super;
- }
- return Super;
- }());
- exports.Super = Super;
- var SwitchCase = (function () {
- function SwitchCase(test, consequent) {
- this.type = syntax_1.Syntax.SwitchCase;
- this.test = test;
- this.consequent = consequent;
- }
- return SwitchCase;
- }());
- exports.SwitchCase = SwitchCase;
- var SwitchStatement = (function () {
- function SwitchStatement(discriminant, cases) {
- this.type = syntax_1.Syntax.SwitchStatement;
- this.discriminant = discriminant;
- this.cases = cases;
- }
- return SwitchStatement;
- }());
- exports.SwitchStatement = SwitchStatement;
- var TaggedTemplateExpression = (function () {
- function TaggedTemplateExpression(tag, quasi) {
- this.type = syntax_1.Syntax.TaggedTemplateExpression;
- this.tag = tag;
- this.quasi = quasi;
- }
- return TaggedTemplateExpression;
- }());
- exports.TaggedTemplateExpression = TaggedTemplateExpression;
- var TemplateElement = (function () {
- function TemplateElement(value, tail) {
- this.type = syntax_1.Syntax.TemplateElement;
- this.value = value;
- this.tail = tail;
- }
- return TemplateElement;
- }());
- exports.TemplateElement = TemplateElement;
- var TemplateLiteral = (function () {
- function TemplateLiteral(quasis, expressions) {
- this.type = syntax_1.Syntax.TemplateLiteral;
- this.quasis = quasis;
- this.expressions = expressions;
- }
- return TemplateLiteral;
- }());
- exports.TemplateLiteral = TemplateLiteral;
- var ThisExpression = (function () {
- function ThisExpression() {
- this.type = syntax_1.Syntax.ThisExpression;
- }
- return ThisExpression;
- }());
- exports.ThisExpression = ThisExpression;
- var ThrowStatement = (function () {
- function ThrowStatement(argument) {
- this.type = syntax_1.Syntax.ThrowStatement;
- this.argument = argument;
- }
- return ThrowStatement;
- }());
- exports.ThrowStatement = ThrowStatement;
- var TryStatement = (function () {
- function TryStatement(block, handler, finalizer) {
- this.type = syntax_1.Syntax.TryStatement;
- this.block = block;
- this.handler = handler;
- this.finalizer = finalizer;
- }
- return TryStatement;
- }());
- exports.TryStatement = TryStatement;
- var UnaryExpression = (function () {
- function UnaryExpression(operator, argument) {
- this.type = syntax_1.Syntax.UnaryExpression;
- this.operator = operator;
- this.argument = argument;
- this.prefix = true;
- }
- return UnaryExpression;
- }());
- exports.UnaryExpression = UnaryExpression;
- var UpdateExpression = (function () {
- function UpdateExpression(operator, argument, prefix) {
- this.type = syntax_1.Syntax.UpdateExpression;
- this.operator = operator;
- this.argument = argument;
- this.prefix = prefix;
- }
- return UpdateExpression;
- }());
- exports.UpdateExpression = UpdateExpression;
- var VariableDeclaration = (function () {
- function VariableDeclaration(declarations, kind) {
- this.type = syntax_1.Syntax.VariableDeclaration;
- this.declarations = declarations;
- this.kind = kind;
- }
- return VariableDeclaration;
- }());
- exports.VariableDeclaration = VariableDeclaration;
- var VariableDeclarator = (function () {
- function VariableDeclarator(id, init) {
- this.type = syntax_1.Syntax.VariableDeclarator;
- this.id = id;
- this.init = init;
- }
- return VariableDeclarator;
- }());
- exports.VariableDeclarator = VariableDeclarator;
- var WhileStatement = (function () {
- function WhileStatement(test, body) {
- this.type = syntax_1.Syntax.WhileStatement;
- this.test = test;
- this.body = body;
- }
- return WhileStatement;
- }());
- exports.WhileStatement = WhileStatement;
- var WithStatement = (function () {
- function WithStatement(object, body) {
- this.type = syntax_1.Syntax.WithStatement;
- this.object = object;
- this.body = body;
- }
- return WithStatement;
- }());
- exports.WithStatement = WithStatement;
- var YieldExpression = (function () {
- function YieldExpression(argument, delegate) {
- this.type = syntax_1.Syntax.YieldExpression;
- this.argument = argument;
- this.delegate = delegate;
- }
- return YieldExpression;
- }());
- exports.YieldExpression = YieldExpression;
- /***/ },
- /* 8 */
- /***/ function(module, exports, __nested_webpack_require_80491__) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var assert_1 = __nested_webpack_require_80491__(9);
- var error_handler_1 = __nested_webpack_require_80491__(10);
- var messages_1 = __nested_webpack_require_80491__(11);
- var Node = __nested_webpack_require_80491__(7);
- var scanner_1 = __nested_webpack_require_80491__(12);
- var syntax_1 = __nested_webpack_require_80491__(2);
- var token_1 = __nested_webpack_require_80491__(13);
- var ArrowParameterPlaceHolder = 'ArrowParameterPlaceHolder';
- var Parser = (function () {
- function Parser(code, options, delegate) {
- if (options === void 0) { options = {}; }
- this.config = {
- range: (typeof options.range === 'boolean') && options.range,
- loc: (typeof options.loc === 'boolean') && options.loc,
- source: null,
- tokens: (typeof options.tokens === 'boolean') && options.tokens,
- comment: (typeof options.comment === 'boolean') && options.comment,
- tolerant: (typeof options.tolerant === 'boolean') && options.tolerant
- };
- if (this.config.loc && options.source && options.source !== null) {
- this.config.source = String(options.source);
- }
- this.delegate = delegate;
- this.errorHandler = new error_handler_1.ErrorHandler();
- this.errorHandler.tolerant = this.config.tolerant;
- this.scanner = new scanner_1.Scanner(code, this.errorHandler);
- this.scanner.trackComment = this.config.comment;
- this.operatorPrecedence = {
- ')': 0,
- ';': 0,
- ',': 0,
- '=': 0,
- ']': 0,
- '||': 1,
- '&&': 2,
- '|': 3,
- '^': 4,
- '&': 5,
- '==': 6,
- '!=': 6,
- '===': 6,
- '!==': 6,
- '<': 7,
- '>': 7,
- '<=': 7,
- '>=': 7,
- '<<': 8,
- '>>': 8,
- '>>>': 8,
- '+': 9,
- '-': 9,
- '*': 11,
- '/': 11,
- '%': 11
- };
- this.lookahead = {
- type: 2 /* EOF */,
- value: '',
- lineNumber: this.scanner.lineNumber,
- lineStart: 0,
- start: 0,
- end: 0
- };
- this.hasLineTerminator = false;
- this.context = {
- isModule: false,
- await: false,
- allowIn: true,
- allowStrictDirective: true,
- allowYield: true,
- firstCoverInitializedNameError: null,
- isAssignmentTarget: false,
- isBindingElement: false,
- inFunctionBody: false,
- inIteration: false,
- inSwitch: false,
- labelSet: {},
- strict: false
- };
- this.tokens = [];
- this.startMarker = {
- index: 0,
- line: this.scanner.lineNumber,
- column: 0
- };
- this.lastMarker = {
- index: 0,
- line: this.scanner.lineNumber,
- column: 0
- };
- this.nextToken();
- this.lastMarker = {
- index: this.scanner.index,
- line: this.scanner.lineNumber,
- column: this.scanner.index - this.scanner.lineStart
- };
- }
- Parser.prototype.throwError = function (messageFormat) {
- var values = [];
- for (var _i = 1; _i < arguments.length; _i++) {
- values[_i - 1] = arguments[_i];
- }
- var args = Array.prototype.slice.call(arguments, 1);
- var msg = messageFormat.replace(/%(\d)/g, function (whole, idx) {
- assert_1.assert(idx < args.length, 'Message reference must be in range');
- return args[idx];
- });
- var index = this.lastMarker.index;
- var line = this.lastMarker.line;
- var column = this.lastMarker.column + 1;
- throw this.errorHandler.createError(index, line, column, msg);
- };
- Parser.prototype.tolerateError = function (messageFormat) {
- var values = [];
- for (var _i = 1; _i < arguments.length; _i++) {
- values[_i - 1] = arguments[_i];
- }
- var args = Array.prototype.slice.call(arguments, 1);
- var msg = messageFormat.replace(/%(\d)/g, function (whole, idx) {
- assert_1.assert(idx < args.length, 'Message reference must be in range');
- return args[idx];
- });
- var index = this.lastMarker.index;
- var line = this.scanner.lineNumber;
- var column = this.lastMarker.column + 1;
- this.errorHandler.tolerateError(index, line, column, msg);
- };
- // Throw an exception because of the token.
- Parser.prototype.unexpectedTokenError = function (token, message) {
- var msg = message || messages_1.Messages.UnexpectedToken;
- var value;
- if (token) {
- if (!message) {
- msg = (token.type === 2 /* EOF */) ? messages_1.Messages.UnexpectedEOS :
- (token.type === 3 /* Identifier */) ? messages_1.Messages.UnexpectedIdentifier :
- (token.type === 6 /* NumericLiteral */) ? messages_1.Messages.UnexpectedNumber :
- (token.type === 8 /* StringLiteral */) ? messages_1.Messages.UnexpectedString :
- (token.type === 10 /* Template */) ? messages_1.Messages.UnexpectedTemplate :
- messages_1.Messages.UnexpectedToken;
- if (token.type === 4 /* Keyword */) {
- if (this.scanner.isFutureReservedWord(token.value)) {
- msg = messages_1.Messages.UnexpectedReserved;
- }
- else if (this.context.strict && this.scanner.isStrictModeReservedWord(token.value)) {
- msg = messages_1.Messages.StrictReservedWord;
- }
- }
- }
- value = token.value;
- }
- else {
- value = 'ILLEGAL';
- }
- msg = msg.replace('%0', value);
- if (token && typeof token.lineNumber === 'number') {
- var index = token.start;
- var line = token.lineNumber;
- var lastMarkerLineStart = this.lastMarker.index - this.lastMarker.column;
- var column = token.start - lastMarkerLineStart + 1;
- return this.errorHandler.createError(index, line, column, msg);
- }
- else {
- var index = this.lastMarker.index;
- var line = this.lastMarker.line;
- var column = this.lastMarker.column + 1;
- return this.errorHandler.createError(index, line, column, msg);
- }
- };
- Parser.prototype.throwUnexpectedToken = function (token, message) {
- throw this.unexpectedTokenError(token, message);
- };
- Parser.prototype.tolerateUnexpectedToken = function (token, message) {
- this.errorHandler.tolerate(this.unexpectedTokenError(token, message));
- };
- Parser.prototype.collectComments = function () {
- if (!this.config.comment) {
- this.scanner.scanComments();
- }
- else {
- var comments = this.scanner.scanComments();
- if (comments.length > 0 && this.delegate) {
- for (var i = 0; i < comments.length; ++i) {
- var e = comments[i];
- var node = void 0;
- node = {
- type: e.multiLine ? 'BlockComment' : 'LineComment',
- value: this.scanner.source.slice(e.slice[0], e.slice[1])
- };
- if (this.config.range) {
- node.range = e.range;
- }
- if (this.config.loc) {
- node.loc = e.loc;
- }
- var metadata = {
- start: {
- line: e.loc.start.line,
- column: e.loc.start.column,
- offset: e.range[0]
- },
- end: {
- line: e.loc.end.line,
- column: e.loc.end.column,
- offset: e.range[1]
- }
- };
- this.delegate(node, metadata);
- }
- }
- }
- };
- // From internal representation to an external structure
- Parser.prototype.getTokenRaw = function (token) {
- return this.scanner.source.slice(token.start, token.end);
- };
- Parser.prototype.convertToken = function (token) {
- var t = {
- type: token_1.TokenName[token.type],
- value: this.getTokenRaw(token)
- };
- if (this.config.range) {
- t.range = [token.start, token.end];
- }
- if (this.config.loc) {
- t.loc = {
- start: {
- line: this.startMarker.line,
- column: this.startMarker.column
- },
- end: {
- line: this.scanner.lineNumber,
- column: this.scanner.index - this.scanner.lineStart
- }
- };
- }
- if (token.type === 9 /* RegularExpression */) {
- var pattern = token.pattern;
- var flags = token.flags;
- t.regex = { pattern: pattern, flags: flags };
- }
- return t;
- };
- Parser.prototype.nextToken = function () {
- var token = this.lookahead;
- this.lastMarker.index = this.scanner.index;
- this.lastMarker.line = this.scanner.lineNumber;
- this.lastMarker.column = this.scanner.index - this.scanner.lineStart;
- this.collectComments();
- if (this.scanner.index !== this.startMarker.index) {
- this.startMarker.index = this.scanner.index;
- this.startMarker.line = this.scanner.lineNumber;
- this.startMarker.column = this.scanner.index - this.scanner.lineStart;
- }
- var next = this.scanner.lex();
- this.hasLineTerminator = (token.lineNumber !== next.lineNumber);
- if (next && this.context.strict && next.type === 3 /* Identifier */) {
- if (this.scanner.isStrictModeReservedWord(next.value)) {
- next.type = 4 /* Keyword */;
- }
- }
- this.lookahead = next;
- if (this.config.tokens && next.type !== 2 /* EOF */) {
- this.tokens.push(this.convertToken(next));
- }
- return token;
- };
- Parser.prototype.nextRegexToken = function () {
- this.collectComments();
- var token = this.scanner.scanRegExp();
- if (this.config.tokens) {
- // Pop the previous token, '/' or '/='
- // This is added from the lookahead token.
- this.tokens.pop();
- this.tokens.push(this.convertToken(token));
- }
- // Prime the next lookahead.
- this.lookahead = token;
- this.nextToken();
- return token;
- };
- Parser.prototype.createNode = function () {
- return {
- index: this.startMarker.index,
- line: this.startMarker.line,
- column: this.startMarker.column
- };
- };
- Parser.prototype.startNode = function (token, lastLineStart) {
- if (lastLineStart === void 0) { lastLineStart = 0; }
- var column = token.start - token.lineStart;
- var line = token.lineNumber;
- if (column < 0) {
- column += lastLineStart;
- line--;
- }
- return {
- index: token.start,
- line: line,
- column: column
- };
- };
- Parser.prototype.finalize = function (marker, node) {
- if (this.config.range) {
- node.range = [marker.index, this.lastMarker.index];
- }
- if (this.config.loc) {
- node.loc = {
- start: {
- line: marker.line,
- column: marker.column,
- },
- end: {
- line: this.lastMarker.line,
- column: this.lastMarker.column
- }
- };
- if (this.config.source) {
- node.loc.source = this.config.source;
- }
- }
- if (this.delegate) {
- var metadata = {
- start: {
- line: marker.line,
- column: marker.column,
- offset: marker.index
- },
- end: {
- line: this.lastMarker.line,
- column: this.lastMarker.column,
- offset: this.lastMarker.index
- }
- };
- this.delegate(node, metadata);
- }
- return node;
- };
- // Expect the next token to match the specified punctuator.
- // If not, an exception will be thrown.
- Parser.prototype.expect = function (value) {
- var token = this.nextToken();
- if (token.type !== 7 /* Punctuator */ || token.value !== value) {
- this.throwUnexpectedToken(token);
- }
- };
- // Quietly expect a comma when in tolerant mode, otherwise delegates to expect().
- Parser.prototype.expectCommaSeparator = function () {
- if (this.config.tolerant) {
- var token = this.lookahead;
- if (token.type === 7 /* Punctuator */ && token.value === ',') {
- this.nextToken();
- }
- else if (token.type === 7 /* Punctuator */ && token.value === ';') {
- this.nextToken();
- this.tolerateUnexpectedToken(token);
- }
- else {
- this.tolerateUnexpectedToken(token, messages_1.Messages.UnexpectedToken);
- }
- }
- else {
- this.expect(',');
- }
- };
- // Expect the next token to match the specified keyword.
- // If not, an exception will be thrown.
- Parser.prototype.expectKeyword = function (keyword) {
- var token = this.nextToken();
- if (token.type !== 4 /* Keyword */ || token.value !== keyword) {
- this.throwUnexpectedToken(token);
- }
- };
- // Return true if the next token matches the specified punctuator.
- Parser.prototype.match = function (value) {
- return this.lookahead.type === 7 /* Punctuator */ && this.lookahead.value === value;
- };
- // Return true if the next token matches the specified keyword
- Parser.prototype.matchKeyword = function (keyword) {
- return this.lookahead.type === 4 /* Keyword */ && this.lookahead.value === keyword;
- };
- // Return true if the next token matches the specified contextual keyword
- // (where an identifier is sometimes a keyword depending on the context)
- Parser.prototype.matchContextualKeyword = function (keyword) {
- return this.lookahead.type === 3 /* Identifier */ && this.lookahead.value === keyword;
- };
- // Return true if the next token is an assignment operator
- Parser.prototype.matchAssign = function () {
- if (this.lookahead.type !== 7 /* Punctuator */) {
- return false;
- }
- var op = this.lookahead.value;
- return op === '=' ||
- op === '*=' ||
- op === '**=' ||
- op === '/=' ||
- op === '%=' ||
- op === '+=' ||
- op === '-=' ||
- op === '<<=' ||
- op === '>>=' ||
- op === '>>>=' ||
- op === '&=' ||
- op === '^=' ||
- op === '|=';
- };
- // Cover grammar support.
- //
- // When an assignment expression position starts with an left parenthesis, the determination of the type
- // of the syntax is to be deferred arbitrarily long until the end of the parentheses pair (plus a lookahead)
- // or the first comma. This situation also defers the determination of all the expressions nested in the pair.
- //
- // There are three productions that can be parsed in a parentheses pair that needs to be determined
- // after the outermost pair is closed. They are:
- //
- // 1. AssignmentExpression
- // 2. BindingElements
- // 3. AssignmentTargets
- //
- // In order to avoid exponential backtracking, we use two flags to denote if the production can be
- // binding element or assignment target.
- //
- // The three productions have the relationship:
- //
- // BindingElements ⊆ AssignmentTargets ⊆ AssignmentExpression
- //
- // with a single exception that CoverInitializedName when used directly in an Expression, generates
- // an early error. Therefore, we need the third state, firstCoverInitializedNameError, to track the
- // first usage of CoverInitializedName and report it when we reached the end of the parentheses pair.
- //
- // isolateCoverGrammar function runs the given parser function with a new cover grammar context, and it does not
- // effect the current flags. This means the production the parser parses is only used as an expression. Therefore
- // the CoverInitializedName check is conducted.
- //
- // inheritCoverGrammar function runs the given parse function with a new cover grammar context, and it propagates
- // the flags outside of the parser. This means the production the parser parses is used as a part of a potential
- // pattern. The CoverInitializedName check is deferred.
- Parser.prototype.isolateCoverGrammar = function (parseFunction) {
- var previousIsBindingElement = this.context.isBindingElement;
- var previousIsAssignmentTarget = this.context.isAssignmentTarget;
- var previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError;
- this.context.isBindingElement = true;
- this.context.isAssignmentTarget = true;
- this.context.firstCoverInitializedNameError = null;
- var result = parseFunction.call(this);
- if (this.context.firstCoverInitializedNameError !== null) {
- this.throwUnexpectedToken(this.context.firstCoverInitializedNameError);
- }
- this.context.isBindingElement = previousIsBindingElement;
- this.context.isAssignmentTarget = previousIsAssignmentTarget;
- this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError;
- return result;
- };
- Parser.prototype.inheritCoverGrammar = function (parseFunction) {
- var previousIsBindingElement = this.context.isBindingElement;
- var previousIsAssignmentTarget = this.context.isAssignmentTarget;
- var previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError;
- this.context.isBindingElement = true;
- this.context.isAssignmentTarget = true;
- this.context.firstCoverInitializedNameError = null;
- var result = parseFunction.call(this);
- this.context.isBindingElement = this.context.isBindingElement && previousIsBindingElement;
- this.context.isAssignmentTarget = this.context.isAssignmentTarget && previousIsAssignmentTarget;
- this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError || this.context.firstCoverInitializedNameError;
- return result;
- };
- Parser.prototype.consumeSemicolon = function () {
- if (this.match(';')) {
- this.nextToken();
- }
- else if (!this.hasLineTerminator) {
- if (this.lookahead.type !== 2 /* EOF */ && !this.match('}')) {
- this.throwUnexpectedToken(this.lookahead);
- }
- this.lastMarker.index = this.startMarker.index;
- this.lastMarker.line = this.startMarker.line;
- this.lastMarker.column = this.startMarker.column;
- }
- };
- // https://tc39.github.io/ecma262/#sec-primary-expression
- Parser.prototype.parsePrimaryExpression = function () {
- var node = this.createNode();
- var expr;
- var token, raw;
- switch (this.lookahead.type) {
- case 3 /* Identifier */:
- if ((this.context.isModule || this.context.await) && this.lookahead.value === 'await') {
- this.tolerateUnexpectedToken(this.lookahead);
- }
- expr = this.matchAsyncFunction() ? this.parseFunctionExpression() : this.finalize(node, new Node.Identifier(this.nextToken().value));
- break;
- case 6 /* NumericLiteral */:
- case 8 /* StringLiteral */:
- if (this.context.strict && this.lookahead.octal) {
- this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.StrictOctalLiteral);
- }
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- token = this.nextToken();
- raw = this.getTokenRaw(token);
- expr = this.finalize(node, new Node.Literal(token.value, raw));
- break;
- case 1 /* BooleanLiteral */:
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- token = this.nextToken();
- raw = this.getTokenRaw(token);
- expr = this.finalize(node, new Node.Literal(token.value === 'true', raw));
- break;
- case 5 /* NullLiteral */:
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- token = this.nextToken();
- raw = this.getTokenRaw(token);
- expr = this.finalize(node, new Node.Literal(null, raw));
- break;
- case 10 /* Template */:
- expr = this.parseTemplateLiteral();
- break;
- case 7 /* Punctuator */:
- switch (this.lookahead.value) {
- case '(':
- this.context.isBindingElement = false;
- expr = this.inheritCoverGrammar(this.parseGroupExpression);
- break;
- case '[':
- expr = this.inheritCoverGrammar(this.parseArrayInitializer);
- break;
- case '{':
- expr = this.inheritCoverGrammar(this.parseObjectInitializer);
- break;
- case '/':
- case '/=':
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- this.scanner.index = this.startMarker.index;
- token = this.nextRegexToken();
- raw = this.getTokenRaw(token);
- expr = this.finalize(node, new Node.RegexLiteral(token.regex, raw, token.pattern, token.flags));
- break;
- default:
- expr = this.throwUnexpectedToken(this.nextToken());
- }
- break;
- case 4 /* Keyword */:
- if (!this.context.strict && this.context.allowYield && this.matchKeyword('yield')) {
- expr = this.parseIdentifierName();
- }
- else if (!this.context.strict && this.matchKeyword('let')) {
- expr = this.finalize(node, new Node.Identifier(this.nextToken().value));
- }
- else {
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- if (this.matchKeyword('function')) {
- expr = this.parseFunctionExpression();
- }
- else if (this.matchKeyword('this')) {
- this.nextToken();
- expr = this.finalize(node, new Node.ThisExpression());
- }
- else if (this.matchKeyword('class')) {
- expr = this.parseClassExpression();
- }
- else {
- expr = this.throwUnexpectedToken(this.nextToken());
- }
- }
- break;
- default:
- expr = this.throwUnexpectedToken(this.nextToken());
- }
- return expr;
- };
- // https://tc39.github.io/ecma262/#sec-array-initializer
- Parser.prototype.parseSpreadElement = function () {
- var node = this.createNode();
- this.expect('...');
- var arg = this.inheritCoverGrammar(this.parseAssignmentExpression);
- return this.finalize(node, new Node.SpreadElement(arg));
- };
- Parser.prototype.parseArrayInitializer = function () {
- var node = this.createNode();
- var elements = [];
- this.expect('[');
- while (!this.match(']')) {
- if (this.match(',')) {
- this.nextToken();
- elements.push(null);
- }
- else if (this.match('...')) {
- var element = this.parseSpreadElement();
- if (!this.match(']')) {
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- this.expect(',');
- }
- elements.push(element);
- }
- else {
- elements.push(this.inheritCoverGrammar(this.parseAssignmentExpression));
- if (!this.match(']')) {
- this.expect(',');
- }
- }
- }
- this.expect(']');
- return this.finalize(node, new Node.ArrayExpression(elements));
- };
- // https://tc39.github.io/ecma262/#sec-object-initializer
- Parser.prototype.parsePropertyMethod = function (params) {
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- var previousStrict = this.context.strict;
- var previousAllowStrictDirective = this.context.allowStrictDirective;
- this.context.allowStrictDirective = params.simple;
- var body = this.isolateCoverGrammar(this.parseFunctionSourceElements);
- if (this.context.strict && params.firstRestricted) {
- this.tolerateUnexpectedToken(params.firstRestricted, params.message);
- }
- if (this.context.strict && params.stricted) {
- this.tolerateUnexpectedToken(params.stricted, params.message);
- }
- this.context.strict = previousStrict;
- this.context.allowStrictDirective = previousAllowStrictDirective;
- return body;
- };
- Parser.prototype.parsePropertyMethodFunction = function () {
- var isGenerator = false;
- var node = this.createNode();
- var previousAllowYield = this.context.allowYield;
- this.context.allowYield = true;
- var params = this.parseFormalParameters();
- var method = this.parsePropertyMethod(params);
- this.context.allowYield = previousAllowYield;
- return this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator));
- };
- Parser.prototype.parsePropertyMethodAsyncFunction = function () {
- var node = this.createNode();
- var previousAllowYield = this.context.allowYield;
- var previousAwait = this.context.await;
- this.context.allowYield = false;
- this.context.await = true;
- var params = this.parseFormalParameters();
- var method = this.parsePropertyMethod(params);
- this.context.allowYield = previousAllowYield;
- this.context.await = previousAwait;
- return this.finalize(node, new Node.AsyncFunctionExpression(null, params.params, method));
- };
- Parser.prototype.parseObjectPropertyKey = function () {
- var node = this.createNode();
- var token = this.nextToken();
- var key;
- switch (token.type) {
- case 8 /* StringLiteral */:
- case 6 /* NumericLiteral */:
- if (this.context.strict && token.octal) {
- this.tolerateUnexpectedToken(token, messages_1.Messages.StrictOctalLiteral);
- }
- var raw = this.getTokenRaw(token);
- key = this.finalize(node, new Node.Literal(token.value, raw));
- break;
- case 3 /* Identifier */:
- case 1 /* BooleanLiteral */:
- case 5 /* NullLiteral */:
- case 4 /* Keyword */:
- key = this.finalize(node, new Node.Identifier(token.value));
- break;
- case 7 /* Punctuator */:
- if (token.value === '[') {
- key = this.isolateCoverGrammar(this.parseAssignmentExpression);
- this.expect(']');
- }
- else {
- key = this.throwUnexpectedToken(token);
- }
- break;
- default:
- key = this.throwUnexpectedToken(token);
- }
- return key;
- };
- Parser.prototype.isPropertyKey = function (key, value) {
- return (key.type === syntax_1.Syntax.Identifier && key.name === value) ||
- (key.type === syntax_1.Syntax.Literal && key.value === value);
- };
- Parser.prototype.parseObjectProperty = function (hasProto) {
- var node = this.createNode();
- var token = this.lookahead;
- var kind;
- var key = null;
- var value = null;
- var computed = false;
- var method = false;
- var shorthand = false;
- var isAsync = false;
- if (token.type === 3 /* Identifier */) {
- var id = token.value;
- this.nextToken();
- computed = this.match('[');
- isAsync = !this.hasLineTerminator && (id === 'async') &&
- !this.match(':') && !this.match('(') && !this.match('*') && !this.match(',');
- key = isAsync ? this.parseObjectPropertyKey() : this.finalize(node, new Node.Identifier(id));
- }
- else if (this.match('*')) {
- this.nextToken();
- }
- else {
- computed = this.match('[');
- key = this.parseObjectPropertyKey();
- }
- var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead);
- if (token.type === 3 /* Identifier */ && !isAsync && token.value === 'get' && lookaheadPropertyKey) {
- kind = 'get';
- computed = this.match('[');
- key = this.parseObjectPropertyKey();
- this.context.allowYield = false;
- value = this.parseGetterMethod();
- }
- else if (token.type === 3 /* Identifier */ && !isAsync && token.value === 'set' && lookaheadPropertyKey) {
- kind = 'set';
- computed = this.match('[');
- key = this.parseObjectPropertyKey();
- value = this.parseSetterMethod();
- }
- else if (token.type === 7 /* Punctuator */ && token.value === '*' && lookaheadPropertyKey) {
- kind = 'init';
- computed = this.match('[');
- key = this.parseObjectPropertyKey();
- value = this.parseGeneratorMethod();
- method = true;
- }
- else {
- if (!key) {
- this.throwUnexpectedToken(this.lookahead);
- }
- kind = 'init';
- if (this.match(':') && !isAsync) {
- if (!computed && this.isPropertyKey(key, '__proto__')) {
- if (hasProto.value) {
- this.tolerateError(messages_1.Messages.DuplicateProtoProperty);
- }
- hasProto.value = true;
- }
- this.nextToken();
- value = this.inheritCoverGrammar(this.parseAssignmentExpression);
- }
- else if (this.match('(')) {
- value = isAsync ? this.parsePropertyMethodAsyncFunction() : this.parsePropertyMethodFunction();
- method = true;
- }
- else if (token.type === 3 /* Identifier */) {
- var id = this.finalize(node, new Node.Identifier(token.value));
- if (this.match('=')) {
- this.context.firstCoverInitializedNameError = this.lookahead;
- this.nextToken();
- shorthand = true;
- var init = this.isolateCoverGrammar(this.parseAssignmentExpression);
- value = this.finalize(node, new Node.AssignmentPattern(id, init));
- }
- else {
- shorthand = true;
- value = id;
- }
- }
- else {
- this.throwUnexpectedToken(this.nextToken());
- }
- }
- return this.finalize(node, new Node.Property(kind, key, computed, value, method, shorthand));
- };
- Parser.prototype.parseObjectInitializer = function () {
- var node = this.createNode();
- this.expect('{');
- var properties = [];
- var hasProto = { value: false };
- while (!this.match('}')) {
- properties.push(this.parseObjectProperty(hasProto));
- if (!this.match('}')) {
- this.expectCommaSeparator();
- }
- }
- this.expect('}');
- return this.finalize(node, new Node.ObjectExpression(properties));
- };
- // https://tc39.github.io/ecma262/#sec-template-literals
- Parser.prototype.parseTemplateHead = function () {
- assert_1.assert(this.lookahead.head, 'Template literal must start with a template head');
- var node = this.createNode();
- var token = this.nextToken();
- var raw = token.value;
- var cooked = token.cooked;
- return this.finalize(node, new Node.TemplateElement({ raw: raw, cooked: cooked }, token.tail));
- };
- Parser.prototype.parseTemplateElement = function () {
- if (this.lookahead.type !== 10 /* Template */) {
- this.throwUnexpectedToken();
- }
- var node = this.createNode();
- var token = this.nextToken();
- var raw = token.value;
- var cooked = token.cooked;
- return this.finalize(node, new Node.TemplateElement({ raw: raw, cooked: cooked }, token.tail));
- };
- Parser.prototype.parseTemplateLiteral = function () {
- var node = this.createNode();
- var expressions = [];
- var quasis = [];
- var quasi = this.parseTemplateHead();
- quasis.push(quasi);
- while (!quasi.tail) {
- expressions.push(this.parseExpression());
- quasi = this.parseTemplateElement();
- quasis.push(quasi);
- }
- return this.finalize(node, new Node.TemplateLiteral(quasis, expressions));
- };
- // https://tc39.github.io/ecma262/#sec-grouping-operator
- Parser.prototype.reinterpretExpressionAsPattern = function (expr) {
- switch (expr.type) {
- case syntax_1.Syntax.Identifier:
- case syntax_1.Syntax.MemberExpression:
- case syntax_1.Syntax.RestElement:
- case syntax_1.Syntax.AssignmentPattern:
- break;
- case syntax_1.Syntax.SpreadElement:
- expr.type = syntax_1.Syntax.RestElement;
- this.reinterpretExpressionAsPattern(expr.argument);
- break;
- case syntax_1.Syntax.ArrayExpression:
- expr.type = syntax_1.Syntax.ArrayPattern;
- for (var i = 0; i < expr.elements.length; i++) {
- if (expr.elements[i] !== null) {
- this.reinterpretExpressionAsPattern(expr.elements[i]);
- }
- }
- break;
- case syntax_1.Syntax.ObjectExpression:
- expr.type = syntax_1.Syntax.ObjectPattern;
- for (var i = 0; i < expr.properties.length; i++) {
- this.reinterpretExpressionAsPattern(expr.properties[i].value);
- }
- break;
- case syntax_1.Syntax.AssignmentExpression:
- expr.type = syntax_1.Syntax.AssignmentPattern;
- delete expr.operator;
- this.reinterpretExpressionAsPattern(expr.left);
- break;
- default:
- // Allow other node type for tolerant parsing.
- break;
- }
- };
- Parser.prototype.parseGroupExpression = function () {
- var expr;
- this.expect('(');
- if (this.match(')')) {
- this.nextToken();
- if (!this.match('=>')) {
- this.expect('=>');
- }
- expr = {
- type: ArrowParameterPlaceHolder,
- params: [],
- async: false
- };
- }
- else {
- var startToken = this.lookahead;
- var params = [];
- if (this.match('...')) {
- expr = this.parseRestElement(params);
- this.expect(')');
- if (!this.match('=>')) {
- this.expect('=>');
- }
- expr = {
- type: ArrowParameterPlaceHolder,
- params: [expr],
- async: false
- };
- }
- else {
- var arrow = false;
- this.context.isBindingElement = true;
- expr = this.inheritCoverGrammar(this.parseAssignmentExpression);
- if (this.match(',')) {
- var expressions = [];
- this.context.isAssignmentTarget = false;
- expressions.push(expr);
- while (this.lookahead.type !== 2 /* EOF */) {
- if (!this.match(',')) {
- break;
- }
- this.nextToken();
- if (this.match(')')) {
- this.nextToken();
- for (var i = 0; i < expressions.length; i++) {
- this.reinterpretExpressionAsPattern(expressions[i]);
- }
- arrow = true;
- expr = {
- type: ArrowParameterPlaceHolder,
- params: expressions,
- async: false
- };
- }
- else if (this.match('...')) {
- if (!this.context.isBindingElement) {
- this.throwUnexpectedToken(this.lookahead);
- }
- expressions.push(this.parseRestElement(params));
- this.expect(')');
- if (!this.match('=>')) {
- this.expect('=>');
- }
- this.context.isBindingElement = false;
- for (var i = 0; i < expressions.length; i++) {
- this.reinterpretExpressionAsPattern(expressions[i]);
- }
- arrow = true;
- expr = {
- type: ArrowParameterPlaceHolder,
- params: expressions,
- async: false
- };
- }
- else {
- expressions.push(this.inheritCoverGrammar(this.parseAssignmentExpression));
- }
- if (arrow) {
- break;
- }
- }
- if (!arrow) {
- expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions));
- }
- }
- if (!arrow) {
- this.expect(')');
- if (this.match('=>')) {
- if (expr.type === syntax_1.Syntax.Identifier && expr.name === 'yield') {
- arrow = true;
- expr = {
- type: ArrowParameterPlaceHolder,
- params: [expr],
- async: false
- };
- }
- if (!arrow) {
- if (!this.context.isBindingElement) {
- this.throwUnexpectedToken(this.lookahead);
- }
- if (expr.type === syntax_1.Syntax.SequenceExpression) {
- for (var i = 0; i < expr.expressions.length; i++) {
- this.reinterpretExpressionAsPattern(expr.expressions[i]);
- }
- }
- else {
- this.reinterpretExpressionAsPattern(expr);
- }
- var parameters = (expr.type === syntax_1.Syntax.SequenceExpression ? expr.expressions : [expr]);
- expr = {
- type: ArrowParameterPlaceHolder,
- params: parameters,
- async: false
- };
- }
- }
- this.context.isBindingElement = false;
- }
- }
- }
- return expr;
- };
- // https://tc39.github.io/ecma262/#sec-left-hand-side-expressions
- Parser.prototype.parseArguments = function () {
- this.expect('(');
- var args = [];
- if (!this.match(')')) {
- while (true) {
- var expr = this.match('...') ? this.parseSpreadElement() :
- this.isolateCoverGrammar(this.parseAssignmentExpression);
- args.push(expr);
- if (this.match(')')) {
- break;
- }
- this.expectCommaSeparator();
- if (this.match(')')) {
- break;
- }
- }
- }
- this.expect(')');
- return args;
- };
- Parser.prototype.isIdentifierName = function (token) {
- return token.type === 3 /* Identifier */ ||
- token.type === 4 /* Keyword */ ||
- token.type === 1 /* BooleanLiteral */ ||
- token.type === 5 /* NullLiteral */;
- };
- Parser.prototype.parseIdentifierName = function () {
- var node = this.createNode();
- var token = this.nextToken();
- if (!this.isIdentifierName(token)) {
- this.throwUnexpectedToken(token);
- }
- return this.finalize(node, new Node.Identifier(token.value));
- };
- Parser.prototype.parseNewExpression = function () {
- var node = this.createNode();
- var id = this.parseIdentifierName();
- assert_1.assert(id.name === 'new', 'New expression must start with `new`');
- var expr;
- if (this.match('.')) {
- this.nextToken();
- if (this.lookahead.type === 3 /* Identifier */ && this.context.inFunctionBody && this.lookahead.value === 'target') {
- var property = this.parseIdentifierName();
- expr = new Node.MetaProperty(id, property);
- }
- else {
- this.throwUnexpectedToken(this.lookahead);
- }
- }
- else {
- var callee = this.isolateCoverGrammar(this.parseLeftHandSideExpression);
- var args = this.match('(') ? this.parseArguments() : [];
- expr = new Node.NewExpression(callee, args);
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- }
- return this.finalize(node, expr);
- };
- Parser.prototype.parseAsyncArgument = function () {
- var arg = this.parseAssignmentExpression();
- this.context.firstCoverInitializedNameError = null;
- return arg;
- };
- Parser.prototype.parseAsyncArguments = function () {
- this.expect('(');
- var args = [];
- if (!this.match(')')) {
- while (true) {
- var expr = this.match('...') ? this.parseSpreadElement() :
- this.isolateCoverGrammar(this.parseAsyncArgument);
- args.push(expr);
- if (this.match(')')) {
- break;
- }
- this.expectCommaSeparator();
- if (this.match(')')) {
- break;
- }
- }
- }
- this.expect(')');
- return args;
- };
- Parser.prototype.parseLeftHandSideExpressionAllowCall = function () {
- var startToken = this.lookahead;
- var maybeAsync = this.matchContextualKeyword('async');
- var previousAllowIn = this.context.allowIn;
- this.context.allowIn = true;
- var expr;
- if (this.matchKeyword('super') && this.context.inFunctionBody) {
- expr = this.createNode();
- this.nextToken();
- expr = this.finalize(expr, new Node.Super());
- if (!this.match('(') && !this.match('.') && !this.match('[')) {
- this.throwUnexpectedToken(this.lookahead);
- }
- }
- else {
- expr = this.inheritCoverGrammar(this.matchKeyword('new') ? this.parseNewExpression : this.parsePrimaryExpression);
- }
- while (true) {
- if (this.match('.')) {
- this.context.isBindingElement = false;
- this.context.isAssignmentTarget = true;
- this.expect('.');
- var property = this.parseIdentifierName();
- expr = this.finalize(this.startNode(startToken), new Node.StaticMemberExpression(expr, property));
- }
- else if (this.match('(')) {
- var asyncArrow = maybeAsync && (startToken.lineNumber === this.lookahead.lineNumber);
- this.context.isBindingElement = false;
- this.context.isAssignmentTarget = false;
- var args = asyncArrow ? this.parseAsyncArguments() : this.parseArguments();
- expr = this.finalize(this.startNode(startToken), new Node.CallExpression(expr, args));
- if (asyncArrow && this.match('=>')) {
- for (var i = 0; i < args.length; ++i) {
- this.reinterpretExpressionAsPattern(args[i]);
- }
- expr = {
- type: ArrowParameterPlaceHolder,
- params: args,
- async: true
- };
- }
- }
- else if (this.match('[')) {
- this.context.isBindingElement = false;
- this.context.isAssignmentTarget = true;
- this.expect('[');
- var property = this.isolateCoverGrammar(this.parseExpression);
- this.expect(']');
- expr = this.finalize(this.startNode(startToken), new Node.ComputedMemberExpression(expr, property));
- }
- else if (this.lookahead.type === 10 /* Template */ && this.lookahead.head) {
- var quasi = this.parseTemplateLiteral();
- expr = this.finalize(this.startNode(startToken), new Node.TaggedTemplateExpression(expr, quasi));
- }
- else {
- break;
- }
- }
- this.context.allowIn = previousAllowIn;
- return expr;
- };
- Parser.prototype.parseSuper = function () {
- var node = this.createNode();
- this.expectKeyword('super');
- if (!this.match('[') && !this.match('.')) {
- this.throwUnexpectedToken(this.lookahead);
- }
- return this.finalize(node, new Node.Super());
- };
- Parser.prototype.parseLeftHandSideExpression = function () {
- assert_1.assert(this.context.allowIn, 'callee of new expression always allow in keyword.');
- var node = this.startNode(this.lookahead);
- var expr = (this.matchKeyword('super') && this.context.inFunctionBody) ? this.parseSuper() :
- this.inheritCoverGrammar(this.matchKeyword('new') ? this.parseNewExpression : this.parsePrimaryExpression);
- while (true) {
- if (this.match('[')) {
- this.context.isBindingElement = false;
- this.context.isAssignmentTarget = true;
- this.expect('[');
- var property = this.isolateCoverGrammar(this.parseExpression);
- this.expect(']');
- expr = this.finalize(node, new Node.ComputedMemberExpression(expr, property));
- }
- else if (this.match('.')) {
- this.context.isBindingElement = false;
- this.context.isAssignmentTarget = true;
- this.expect('.');
- var property = this.parseIdentifierName();
- expr = this.finalize(node, new Node.StaticMemberExpression(expr, property));
- }
- else if (this.lookahead.type === 10 /* Template */ && this.lookahead.head) {
- var quasi = this.parseTemplateLiteral();
- expr = this.finalize(node, new Node.TaggedTemplateExpression(expr, quasi));
- }
- else {
- break;
- }
- }
- return expr;
- };
- // https://tc39.github.io/ecma262/#sec-update-expressions
- Parser.prototype.parseUpdateExpression = function () {
- var expr;
- var startToken = this.lookahead;
- if (this.match('++') || this.match('--')) {
- var node = this.startNode(startToken);
- var token = this.nextToken();
- expr = this.inheritCoverGrammar(this.parseUnaryExpression);
- if (this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name)) {
- this.tolerateError(messages_1.Messages.StrictLHSPrefix);
- }
- if (!this.context.isAssignmentTarget) {
- this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);
- }
- var prefix = true;
- expr = this.finalize(node, new Node.UpdateExpression(token.value, expr, prefix));
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- }
- else {
- expr = this.inheritCoverGrammar(this.parseLeftHandSideExpressionAllowCall);
- if (!this.hasLineTerminator && this.lookahead.type === 7 /* Punctuator */) {
- if (this.match('++') || this.match('--')) {
- if (this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name)) {
- this.tolerateError(messages_1.Messages.StrictLHSPostfix);
- }
- if (!this.context.isAssignmentTarget) {
- this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);
- }
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- var operator = this.nextToken().value;
- var prefix = false;
- expr = this.finalize(this.startNode(startToken), new Node.UpdateExpression(operator, expr, prefix));
- }
- }
- }
- return expr;
- };
- // https://tc39.github.io/ecma262/#sec-unary-operators
- Parser.prototype.parseAwaitExpression = function () {
- var node = this.createNode();
- this.nextToken();
- var argument = this.parseUnaryExpression();
- return this.finalize(node, new Node.AwaitExpression(argument));
- };
- Parser.prototype.parseUnaryExpression = function () {
- var expr;
- if (this.match('+') || this.match('-') || this.match('~') || this.match('!') ||
- this.matchKeyword('delete') || this.matchKeyword('void') || this.matchKeyword('typeof')) {
- var node = this.startNode(this.lookahead);
- var token = this.nextToken();
- expr = this.inheritCoverGrammar(this.parseUnaryExpression);
- expr = this.finalize(node, new Node.UnaryExpression(token.value, expr));
- if (this.context.strict && expr.operator === 'delete' && expr.argument.type === syntax_1.Syntax.Identifier) {
- this.tolerateError(messages_1.Messages.StrictDelete);
- }
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- }
- else if (this.context.await && this.matchContextualKeyword('await')) {
- expr = this.parseAwaitExpression();
- }
- else {
- expr = this.parseUpdateExpression();
- }
- return expr;
- };
- Parser.prototype.parseExponentiationExpression = function () {
- var startToken = this.lookahead;
- var expr = this.inheritCoverGrammar(this.parseUnaryExpression);
- if (expr.type !== syntax_1.Syntax.UnaryExpression && this.match('**')) {
- this.nextToken();
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- var left = expr;
- var right = this.isolateCoverGrammar(this.parseExponentiationExpression);
- expr = this.finalize(this.startNode(startToken), new Node.BinaryExpression('**', left, right));
- }
- return expr;
- };
- // https://tc39.github.io/ecma262/#sec-exp-operator
- // https://tc39.github.io/ecma262/#sec-multiplicative-operators
- // https://tc39.github.io/ecma262/#sec-additive-operators
- // https://tc39.github.io/ecma262/#sec-bitwise-shift-operators
- // https://tc39.github.io/ecma262/#sec-relational-operators
- // https://tc39.github.io/ecma262/#sec-equality-operators
- // https://tc39.github.io/ecma262/#sec-binary-bitwise-operators
- // https://tc39.github.io/ecma262/#sec-binary-logical-operators
- Parser.prototype.binaryPrecedence = function (token) {
- var op = token.value;
- var precedence;
- if (token.type === 7 /* Punctuator */) {
- precedence = this.operatorPrecedence[op] || 0;
- }
- else if (token.type === 4 /* Keyword */) {
- precedence = (op === 'instanceof' || (this.context.allowIn && op === 'in')) ? 7 : 0;
- }
- else {
- precedence = 0;
- }
- return precedence;
- };
- Parser.prototype.parseBinaryExpression = function () {
- var startToken = this.lookahead;
- var expr = this.inheritCoverGrammar(this.parseExponentiationExpression);
- var token = this.lookahead;
- var prec = this.binaryPrecedence(token);
- if (prec > 0) {
- this.nextToken();
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- var markers = [startToken, this.lookahead];
- var left = expr;
- var right = this.isolateCoverGrammar(this.parseExponentiationExpression);
- var stack = [left, token.value, right];
- var precedences = [prec];
- while (true) {
- prec = this.binaryPrecedence(this.lookahead);
- if (prec <= 0) {
- break;
- }
- // Reduce: make a binary expression from the three topmost entries.
- while ((stack.length > 2) && (prec <= precedences[precedences.length - 1])) {
- right = stack.pop();
- var operator = stack.pop();
- precedences.pop();
- left = stack.pop();
- markers.pop();
- var node = this.startNode(markers[markers.length - 1]);
- stack.push(this.finalize(node, new Node.BinaryExpression(operator, left, right)));
- }
- // Shift.
- stack.push(this.nextToken().value);
- precedences.push(prec);
- markers.push(this.lookahead);
- stack.push(this.isolateCoverGrammar(this.parseExponentiationExpression));
- }
- // Final reduce to clean-up the stack.
- var i = stack.length - 1;
- expr = stack[i];
- var lastMarker = markers.pop();
- while (i > 1) {
- var marker = markers.pop();
- var lastLineStart = lastMarker && lastMarker.lineStart;
- var node = this.startNode(marker, lastLineStart);
- var operator = stack[i - 1];
- expr = this.finalize(node, new Node.BinaryExpression(operator, stack[i - 2], expr));
- i -= 2;
- lastMarker = marker;
- }
- }
- return expr;
- };
- // https://tc39.github.io/ecma262/#sec-conditional-operator
- Parser.prototype.parseConditionalExpression = function () {
- var startToken = this.lookahead;
- var expr = this.inheritCoverGrammar(this.parseBinaryExpression);
- if (this.match('?')) {
- this.nextToken();
- var previousAllowIn = this.context.allowIn;
- this.context.allowIn = true;
- var consequent = this.isolateCoverGrammar(this.parseAssignmentExpression);
- this.context.allowIn = previousAllowIn;
- this.expect(':');
- var alternate = this.isolateCoverGrammar(this.parseAssignmentExpression);
- expr = this.finalize(this.startNode(startToken), new Node.ConditionalExpression(expr, consequent, alternate));
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- }
- return expr;
- };
- // https://tc39.github.io/ecma262/#sec-assignment-operators
- Parser.prototype.checkPatternParam = function (options, param) {
- switch (param.type) {
- case syntax_1.Syntax.Identifier:
- this.validateParam(options, param, param.name);
- break;
- case syntax_1.Syntax.RestElement:
- this.checkPatternParam(options, param.argument);
- break;
- case syntax_1.Syntax.AssignmentPattern:
- this.checkPatternParam(options, param.left);
- break;
- case syntax_1.Syntax.ArrayPattern:
- for (var i = 0; i < param.elements.length; i++) {
- if (param.elements[i] !== null) {
- this.checkPatternParam(options, param.elements[i]);
- }
- }
- break;
- case syntax_1.Syntax.ObjectPattern:
- for (var i = 0; i < param.properties.length; i++) {
- this.checkPatternParam(options, param.properties[i].value);
- }
- break;
- default:
- break;
- }
- options.simple = options.simple && (param instanceof Node.Identifier);
- };
- Parser.prototype.reinterpretAsCoverFormalsList = function (expr) {
- var params = [expr];
- var options;
- var asyncArrow = false;
- switch (expr.type) {
- case syntax_1.Syntax.Identifier:
- break;
- case ArrowParameterPlaceHolder:
- params = expr.params;
- asyncArrow = expr.async;
- break;
- default:
- return null;
- }
- options = {
- simple: true,
- paramSet: {}
- };
- for (var i = 0; i < params.length; ++i) {
- var param = params[i];
- if (param.type === syntax_1.Syntax.AssignmentPattern) {
- if (param.right.type === syntax_1.Syntax.YieldExpression) {
- if (param.right.argument) {
- this.throwUnexpectedToken(this.lookahead);
- }
- param.right.type = syntax_1.Syntax.Identifier;
- param.right.name = 'yield';
- delete param.right.argument;
- delete param.right.delegate;
- }
- }
- else if (asyncArrow && param.type === syntax_1.Syntax.Identifier && param.name === 'await') {
- this.throwUnexpectedToken(this.lookahead);
- }
- this.checkPatternParam(options, param);
- params[i] = param;
- }
- if (this.context.strict || !this.context.allowYield) {
- for (var i = 0; i < params.length; ++i) {
- var param = params[i];
- if (param.type === syntax_1.Syntax.YieldExpression) {
- this.throwUnexpectedToken(this.lookahead);
- }
- }
- }
- if (options.message === messages_1.Messages.StrictParamDupe) {
- var token = this.context.strict ? options.stricted : options.firstRestricted;
- this.throwUnexpectedToken(token, options.message);
- }
- return {
- simple: options.simple,
- params: params,
- stricted: options.stricted,
- firstRestricted: options.firstRestricted,
- message: options.message
- };
- };
- Parser.prototype.parseAssignmentExpression = function () {
- var expr;
- if (!this.context.allowYield && this.matchKeyword('yield')) {
- expr = this.parseYieldExpression();
- }
- else {
- var startToken = this.lookahead;
- var token = startToken;
- expr = this.parseConditionalExpression();
- if (token.type === 3 /* Identifier */ && (token.lineNumber === this.lookahead.lineNumber) && token.value === 'async') {
- if (this.lookahead.type === 3 /* Identifier */ || this.matchKeyword('yield')) {
- var arg = this.parsePrimaryExpression();
- this.reinterpretExpressionAsPattern(arg);
- expr = {
- type: ArrowParameterPlaceHolder,
- params: [arg],
- async: true
- };
- }
- }
- if (expr.type === ArrowParameterPlaceHolder || this.match('=>')) {
- // https://tc39.github.io/ecma262/#sec-arrow-function-definitions
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- var isAsync = expr.async;
- var list = this.reinterpretAsCoverFormalsList(expr);
- if (list) {
- if (this.hasLineTerminator) {
- this.tolerateUnexpectedToken(this.lookahead);
- }
- this.context.firstCoverInitializedNameError = null;
- var previousStrict = this.context.strict;
- var previousAllowStrictDirective = this.context.allowStrictDirective;
- this.context.allowStrictDirective = list.simple;
- var previousAllowYield = this.context.allowYield;
- var previousAwait = this.context.await;
- this.context.allowYield = true;
- this.context.await = isAsync;
- var node = this.startNode(startToken);
- this.expect('=>');
- var body = void 0;
- if (this.match('{')) {
- var previousAllowIn = this.context.allowIn;
- this.context.allowIn = true;
- body = this.parseFunctionSourceElements();
- this.context.allowIn = previousAllowIn;
- }
- else {
- body = this.isolateCoverGrammar(this.parseAssignmentExpression);
- }
- var expression = body.type !== syntax_1.Syntax.BlockStatement;
- if (this.context.strict && list.firstRestricted) {
- this.throwUnexpectedToken(list.firstRestricted, list.message);
- }
- if (this.context.strict && list.stricted) {
- this.tolerateUnexpectedToken(list.stricted, list.message);
- }
- expr = isAsync ? this.finalize(node, new Node.AsyncArrowFunctionExpression(list.params, body, expression)) :
- this.finalize(node, new Node.ArrowFunctionExpression(list.params, body, expression));
- this.context.strict = previousStrict;
- this.context.allowStrictDirective = previousAllowStrictDirective;
- this.context.allowYield = previousAllowYield;
- this.context.await = previousAwait;
- }
- }
- else {
- if (this.matchAssign()) {
- if (!this.context.isAssignmentTarget) {
- this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);
- }
- if (this.context.strict && expr.type === syntax_1.Syntax.Identifier) {
- var id = expr;
- if (this.scanner.isRestrictedWord(id.name)) {
- this.tolerateUnexpectedToken(token, messages_1.Messages.StrictLHSAssignment);
- }
- if (this.scanner.isStrictModeReservedWord(id.name)) {
- this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord);
- }
- }
- if (!this.match('=')) {
- this.context.isAssignmentTarget = false;
- this.context.isBindingElement = false;
- }
- else {
- this.reinterpretExpressionAsPattern(expr);
- }
- token = this.nextToken();
- var operator = token.value;
- var right = this.isolateCoverGrammar(this.parseAssignmentExpression);
- expr = this.finalize(this.startNode(startToken), new Node.AssignmentExpression(operator, expr, right));
- this.context.firstCoverInitializedNameError = null;
- }
- }
- }
- return expr;
- };
- // https://tc39.github.io/ecma262/#sec-comma-operator
- Parser.prototype.parseExpression = function () {
- var startToken = this.lookahead;
- var expr = this.isolateCoverGrammar(this.parseAssignmentExpression);
- if (this.match(',')) {
- var expressions = [];
- expressions.push(expr);
- while (this.lookahead.type !== 2 /* EOF */) {
- if (!this.match(',')) {
- break;
- }
- this.nextToken();
- expressions.push(this.isolateCoverGrammar(this.parseAssignmentExpression));
- }
- expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions));
- }
- return expr;
- };
- // https://tc39.github.io/ecma262/#sec-block
- Parser.prototype.parseStatementListItem = function () {
- var statement;
- this.context.isAssignmentTarget = true;
- this.context.isBindingElement = true;
- if (this.lookahead.type === 4 /* Keyword */) {
- switch (this.lookahead.value) {
- case 'export':
- if (!this.context.isModule) {
- this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalExportDeclaration);
- }
- statement = this.parseExportDeclaration();
- break;
- case 'import':
- if (!this.context.isModule) {
- this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalImportDeclaration);
- }
- statement = this.parseImportDeclaration();
- break;
- case 'const':
- statement = this.parseLexicalDeclaration({ inFor: false });
- break;
- case 'function':
- statement = this.parseFunctionDeclaration();
- break;
- case 'class':
- statement = this.parseClassDeclaration();
- break;
- case 'let':
- statement = this.isLexicalDeclaration() ? this.parseLexicalDeclaration({ inFor: false }) : this.parseStatement();
- break;
- default:
- statement = this.parseStatement();
- break;
- }
- }
- else {
- statement = this.parseStatement();
- }
- return statement;
- };
- Parser.prototype.parseBlock = function () {
- var node = this.createNode();
- this.expect('{');
- var block = [];
- while (true) {
- if (this.match('}')) {
- break;
- }
- block.push(this.parseStatementListItem());
- }
- this.expect('}');
- return this.finalize(node, new Node.BlockStatement(block));
- };
- // https://tc39.github.io/ecma262/#sec-let-and-const-declarations
- Parser.prototype.parseLexicalBinding = function (kind, options) {
- var node = this.createNode();
- var params = [];
- var id = this.parsePattern(params, kind);
- if (this.context.strict && id.type === syntax_1.Syntax.Identifier) {
- if (this.scanner.isRestrictedWord(id.name)) {
- this.tolerateError(messages_1.Messages.StrictVarName);
- }
- }
- var init = null;
- if (kind === 'const') {
- if (!this.matchKeyword('in') && !this.matchContextualKeyword('of')) {
- if (this.match('=')) {
- this.nextToken();
- init = this.isolateCoverGrammar(this.parseAssignmentExpression);
- }
- else {
- this.throwError(messages_1.Messages.DeclarationMissingInitializer, 'const');
- }
- }
- }
- else if ((!options.inFor && id.type !== syntax_1.Syntax.Identifier) || this.match('=')) {
- this.expect('=');
- init = this.isolateCoverGrammar(this.parseAssignmentExpression);
- }
- return this.finalize(node, new Node.VariableDeclarator(id, init));
- };
- Parser.prototype.parseBindingList = function (kind, options) {
- var list = [this.parseLexicalBinding(kind, options)];
- while (this.match(',')) {
- this.nextToken();
- list.push(this.parseLexicalBinding(kind, options));
- }
- return list;
- };
- Parser.prototype.isLexicalDeclaration = function () {
- var state = this.scanner.saveState();
- this.scanner.scanComments();
- var next = this.scanner.lex();
- this.scanner.restoreState(state);
- return (next.type === 3 /* Identifier */) ||
- (next.type === 7 /* Punctuator */ && next.value === '[') ||
- (next.type === 7 /* Punctuator */ && next.value === '{') ||
- (next.type === 4 /* Keyword */ && next.value === 'let') ||
- (next.type === 4 /* Keyword */ && next.value === 'yield');
- };
- Parser.prototype.parseLexicalDeclaration = function (options) {
- var node = this.createNode();
- var kind = this.nextToken().value;
- assert_1.assert(kind === 'let' || kind === 'const', 'Lexical declaration must be either let or const');
- var declarations = this.parseBindingList(kind, options);
- this.consumeSemicolon();
- return this.finalize(node, new Node.VariableDeclaration(declarations, kind));
- };
- // https://tc39.github.io/ecma262/#sec-destructuring-binding-patterns
- Parser.prototype.parseBindingRestElement = function (params, kind) {
- var node = this.createNode();
- this.expect('...');
- var arg = this.parsePattern(params, kind);
- return this.finalize(node, new Node.RestElement(arg));
- };
- Parser.prototype.parseArrayPattern = function (params, kind) {
- var node = this.createNode();
- this.expect('[');
- var elements = [];
- while (!this.match(']')) {
- if (this.match(',')) {
- this.nextToken();
- elements.push(null);
- }
- else {
- if (this.match('...')) {
- elements.push(this.parseBindingRestElement(params, kind));
- break;
- }
- else {
- elements.push(this.parsePatternWithDefault(params, kind));
- }
- if (!this.match(']')) {
- this.expect(',');
- }
- }
- }
- this.expect(']');
- return this.finalize(node, new Node.ArrayPattern(elements));
- };
- Parser.prototype.parsePropertyPattern = function (params, kind) {
- var node = this.createNode();
- var computed = false;
- var shorthand = false;
- var method = false;
- var key;
- var value;
- if (this.lookahead.type === 3 /* Identifier */) {
- var keyToken = this.lookahead;
- key = this.parseVariableIdentifier();
- var init = this.finalize(node, new Node.Identifier(keyToken.value));
- if (this.match('=')) {
- params.push(keyToken);
- shorthand = true;
- this.nextToken();
- var expr = this.parseAssignmentExpression();
- value = this.finalize(this.startNode(keyToken), new Node.AssignmentPattern(init, expr));
- }
- else if (!this.match(':')) {
- params.push(keyToken);
- shorthand = true;
- value = init;
- }
- else {
- this.expect(':');
- value = this.parsePatternWithDefault(params, kind);
- }
- }
- else {
- computed = this.match('[');
- key = this.parseObjectPropertyKey();
- this.expect(':');
- value = this.parsePatternWithDefault(params, kind);
- }
- return this.finalize(node, new Node.Property('init', key, computed, value, method, shorthand));
- };
- Parser.prototype.parseObjectPattern = function (params, kind) {
- var node = this.createNode();
- var properties = [];
- this.expect('{');
- while (!this.match('}')) {
- properties.push(this.parsePropertyPattern(params, kind));
- if (!this.match('}')) {
- this.expect(',');
- }
- }
- this.expect('}');
- return this.finalize(node, new Node.ObjectPattern(properties));
- };
- Parser.prototype.parsePattern = function (params, kind) {
- var pattern;
- if (this.match('[')) {
- pattern = this.parseArrayPattern(params, kind);
- }
- else if (this.match('{')) {
- pattern = this.parseObjectPattern(params, kind);
- }
- else {
- if (this.matchKeyword('let') && (kind === 'const' || kind === 'let')) {
- this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.LetInLexicalBinding);
- }
- params.push(this.lookahead);
- pattern = this.parseVariableIdentifier(kind);
- }
- return pattern;
- };
- Parser.prototype.parsePatternWithDefault = function (params, kind) {
- var startToken = this.lookahead;
- var pattern = this.parsePattern(params, kind);
- if (this.match('=')) {
- this.nextToken();
- var previousAllowYield = this.context.allowYield;
- this.context.allowYield = true;
- var right = this.isolateCoverGrammar(this.parseAssignmentExpression);
- this.context.allowYield = previousAllowYield;
- pattern = this.finalize(this.startNode(startToken), new Node.AssignmentPattern(pattern, right));
- }
- return pattern;
- };
- // https://tc39.github.io/ecma262/#sec-variable-statement
- Parser.prototype.parseVariableIdentifier = function (kind) {
- var node = this.createNode();
- var token = this.nextToken();
- if (token.type === 4 /* Keyword */ && token.value === 'yield') {
- if (this.context.strict) {
- this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord);
- }
- else if (!this.context.allowYield) {
- this.throwUnexpectedToken(token);
- }
- }
- else if (token.type !== 3 /* Identifier */) {
- if (this.context.strict && token.type === 4 /* Keyword */ && this.scanner.isStrictModeReservedWord(token.value)) {
- this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord);
- }
- else {
- if (this.context.strict || token.value !== 'let' || kind !== 'var') {
- this.throwUnexpectedToken(token);
- }
- }
- }
- else if ((this.context.isModule || this.context.await) && token.type === 3 /* Identifier */ && token.value === 'await') {
- this.tolerateUnexpectedToken(token);
- }
- return this.finalize(node, new Node.Identifier(token.value));
- };
- Parser.prototype.parseVariableDeclaration = function (options) {
- var node = this.createNode();
- var params = [];
- var id = this.parsePattern(params, 'var');
- if (this.context.strict && id.type === syntax_1.Syntax.Identifier) {
- if (this.scanner.isRestrictedWord(id.name)) {
- this.tolerateError(messages_1.Messages.StrictVarName);
- }
- }
- var init = null;
- if (this.match('=')) {
- this.nextToken();
- init = this.isolateCoverGrammar(this.parseAssignmentExpression);
- }
- else if (id.type !== syntax_1.Syntax.Identifier && !options.inFor) {
- this.expect('=');
- }
- return this.finalize(node, new Node.VariableDeclarator(id, init));
- };
- Parser.prototype.parseVariableDeclarationList = function (options) {
- var opt = { inFor: options.inFor };
- var list = [];
- list.push(this.parseVariableDeclaration(opt));
- while (this.match(',')) {
- this.nextToken();
- list.push(this.parseVariableDeclaration(opt));
- }
- return list;
- };
- Parser.prototype.parseVariableStatement = function () {
- var node = this.createNode();
- this.expectKeyword('var');
- var declarations = this.parseVariableDeclarationList({ inFor: false });
- this.consumeSemicolon();
- return this.finalize(node, new Node.VariableDeclaration(declarations, 'var'));
- };
- // https://tc39.github.io/ecma262/#sec-empty-statement
- Parser.prototype.parseEmptyStatement = function () {
- var node = this.createNode();
- this.expect(';');
- return this.finalize(node, new Node.EmptyStatement());
- };
- // https://tc39.github.io/ecma262/#sec-expression-statement
- Parser.prototype.parseExpressionStatement = function () {
- var node = this.createNode();
- var expr = this.parseExpression();
- this.consumeSemicolon();
- return this.finalize(node, new Node.ExpressionStatement(expr));
- };
- // https://tc39.github.io/ecma262/#sec-if-statement
- Parser.prototype.parseIfClause = function () {
- if (this.context.strict && this.matchKeyword('function')) {
- this.tolerateError(messages_1.Messages.StrictFunction);
- }
- return this.parseStatement();
- };
- Parser.prototype.parseIfStatement = function () {
- var node = this.createNode();
- var consequent;
- var alternate = null;
- this.expectKeyword('if');
- this.expect('(');
- var test = this.parseExpression();
- if (!this.match(')') && this.config.tolerant) {
- this.tolerateUnexpectedToken(this.nextToken());
- consequent = this.finalize(this.createNode(), new Node.EmptyStatement());
- }
- else {
- this.expect(')');
- consequent = this.parseIfClause();
- if (this.matchKeyword('else')) {
- this.nextToken();
- alternate = this.parseIfClause();
- }
- }
- return this.finalize(node, new Node.IfStatement(test, consequent, alternate));
- };
- // https://tc39.github.io/ecma262/#sec-do-while-statement
- Parser.prototype.parseDoWhileStatement = function () {
- var node = this.createNode();
- this.expectKeyword('do');
- var previousInIteration = this.context.inIteration;
- this.context.inIteration = true;
- var body = this.parseStatement();
- this.context.inIteration = previousInIteration;
- this.expectKeyword('while');
- this.expect('(');
- var test = this.parseExpression();
- if (!this.match(')') && this.config.tolerant) {
- this.tolerateUnexpectedToken(this.nextToken());
- }
- else {
- this.expect(')');
- if (this.match(';')) {
- this.nextToken();
- }
- }
- return this.finalize(node, new Node.DoWhileStatement(body, test));
- };
- // https://tc39.github.io/ecma262/#sec-while-statement
- Parser.prototype.parseWhileStatement = function () {
- var node = this.createNode();
- var body;
- this.expectKeyword('while');
- this.expect('(');
- var test = this.parseExpression();
- if (!this.match(')') && this.config.tolerant) {
- this.tolerateUnexpectedToken(this.nextToken());
- body = this.finalize(this.createNode(), new Node.EmptyStatement());
- }
- else {
- this.expect(')');
- var previousInIteration = this.context.inIteration;
- this.context.inIteration = true;
- body = this.parseStatement();
- this.context.inIteration = previousInIteration;
- }
- return this.finalize(node, new Node.WhileStatement(test, body));
- };
- // https://tc39.github.io/ecma262/#sec-for-statement
- // https://tc39.github.io/ecma262/#sec-for-in-and-for-of-statements
- Parser.prototype.parseForStatement = function () {
- var init = null;
- var test = null;
- var update = null;
- var forIn = true;
- var left, right;
- var node = this.createNode();
- this.expectKeyword('for');
- this.expect('(');
- if (this.match(';')) {
- this.nextToken();
- }
- else {
- if (this.matchKeyword('var')) {
- init = this.createNode();
- this.nextToken();
- var previousAllowIn = this.context.allowIn;
- this.context.allowIn = false;
- var declarations = this.parseVariableDeclarationList({ inFor: true });
- this.context.allowIn = previousAllowIn;
- if (declarations.length === 1 && this.matchKeyword('in')) {
- var decl = declarations[0];
- if (decl.init && (decl.id.type === syntax_1.Syntax.ArrayPattern || decl.id.type === syntax_1.Syntax.ObjectPattern || this.context.strict)) {
- this.tolerateError(messages_1.Messages.ForInOfLoopInitializer, 'for-in');
- }
- init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var'));
- this.nextToken();
- left = init;
- right = this.parseExpression();
- init = null;
- }
- else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword('of')) {
- init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var'));
- this.nextToken();
- left = init;
- right = this.parseAssignmentExpression();
- init = null;
- forIn = false;
- }
- else {
- init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var'));
- this.expect(';');
- }
- }
- else if (this.matchKeyword('const') || this.matchKeyword('let')) {
- init = this.createNode();
- var kind = this.nextToken().value;
- if (!this.context.strict && this.lookahead.value === 'in') {
- init = this.finalize(init, new Node.Identifier(kind));
- this.nextToken();
- left = init;
- right = this.parseExpression();
- init = null;
- }
- else {
- var previousAllowIn = this.context.allowIn;
- this.context.allowIn = false;
- var declarations = this.parseBindingList(kind, { inFor: true });
- this.context.allowIn = previousAllowIn;
- if (declarations.length === 1 && declarations[0].init === null && this.matchKeyword('in')) {
- init = this.finalize(init, new Node.VariableDeclaration(declarations, kind));
- this.nextToken();
- left = init;
- right = this.parseExpression();
- init = null;
- }
- else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword('of')) {
- init = this.finalize(init, new Node.VariableDeclaration(declarations, kind));
- this.nextToken();
- left = init;
- right = this.parseAssignmentExpression();
- init = null;
- forIn = false;
- }
- else {
- this.consumeSemicolon();
- init = this.finalize(init, new Node.VariableDeclaration(declarations, kind));
- }
- }
- }
- else {
- var initStartToken = this.lookahead;
- var previousAllowIn = this.context.allowIn;
- this.context.allowIn = false;
- init = this.inheritCoverGrammar(this.parseAssignmentExpression);
- this.context.allowIn = previousAllowIn;
- if (this.matchKeyword('in')) {
- if (!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) {
- this.tolerateError(messages_1.Messages.InvalidLHSInForIn);
- }
- this.nextToken();
- this.reinterpretExpressionAsPattern(init);
- left = init;
- right = this.parseExpression();
- init = null;
- }
- else if (this.matchContextualKeyword('of')) {
- if (!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) {
- this.tolerateError(messages_1.Messages.InvalidLHSInForLoop);
- }
- this.nextToken();
- this.reinterpretExpressionAsPattern(init);
- left = init;
- right = this.parseAssignmentExpression();
- init = null;
- forIn = false;
- }
- else {
- if (this.match(',')) {
- var initSeq = [init];
- while (this.match(',')) {
- this.nextToken();
- initSeq.push(this.isolateCoverGrammar(this.parseAssignmentExpression));
- }
- init = this.finalize(this.startNode(initStartToken), new Node.SequenceExpression(initSeq));
- }
- this.expect(';');
- }
- }
- }
- if (typeof left === 'undefined') {
- if (!this.match(';')) {
- test = this.parseExpression();
- }
- this.expect(';');
- if (!this.match(')')) {
- update = this.parseExpression();
- }
- }
- var body;
- if (!this.match(')') && this.config.tolerant) {
- this.tolerateUnexpectedToken(this.nextToken());
- body = this.finalize(this.createNode(), new Node.EmptyStatement());
- }
- else {
- this.expect(')');
- var previousInIteration = this.context.inIteration;
- this.context.inIteration = true;
- body = this.isolateCoverGrammar(this.parseStatement);
- this.context.inIteration = previousInIteration;
- }
- return (typeof left === 'undefined') ?
- this.finalize(node, new Node.ForStatement(init, test, update, body)) :
- forIn ? this.finalize(node, new Node.ForInStatement(left, right, body)) :
- this.finalize(node, new Node.ForOfStatement(left, right, body));
- };
- // https://tc39.github.io/ecma262/#sec-continue-statement
- Parser.prototype.parseContinueStatement = function () {
- var node = this.createNode();
- this.expectKeyword('continue');
- var label = null;
- if (this.lookahead.type === 3 /* Identifier */ && !this.hasLineTerminator) {
- var id = this.parseVariableIdentifier();
- label = id;
- var key = '$' + id.name;
- if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {
- this.throwError(messages_1.Messages.UnknownLabel, id.name);
- }
- }
- this.consumeSemicolon();
- if (label === null && !this.context.inIteration) {
- this.throwError(messages_1.Messages.IllegalContinue);
- }
- return this.finalize(node, new Node.ContinueStatement(label));
- };
- // https://tc39.github.io/ecma262/#sec-break-statement
- Parser.prototype.parseBreakStatement = function () {
- var node = this.createNode();
- this.expectKeyword('break');
- var label = null;
- if (this.lookahead.type === 3 /* Identifier */ && !this.hasLineTerminator) {
- var id = this.parseVariableIdentifier();
- var key = '$' + id.name;
- if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {
- this.throwError(messages_1.Messages.UnknownLabel, id.name);
- }
- label = id;
- }
- this.consumeSemicolon();
- if (label === null && !this.context.inIteration && !this.context.inSwitch) {
- this.throwError(messages_1.Messages.IllegalBreak);
- }
- return this.finalize(node, new Node.BreakStatement(label));
- };
- // https://tc39.github.io/ecma262/#sec-return-statement
- Parser.prototype.parseReturnStatement = function () {
- if (!this.context.inFunctionBody) {
- this.tolerateError(messages_1.Messages.IllegalReturn);
- }
- var node = this.createNode();
- this.expectKeyword('return');
- var hasArgument = (!this.match(';') && !this.match('}') &&
- !this.hasLineTerminator && this.lookahead.type !== 2 /* EOF */) ||
- this.lookahead.type === 8 /* StringLiteral */ ||
- this.lookahead.type === 10 /* Template */;
- var argument = hasArgument ? this.parseExpression() : null;
- this.consumeSemicolon();
- return this.finalize(node, new Node.ReturnStatement(argument));
- };
- // https://tc39.github.io/ecma262/#sec-with-statement
- Parser.prototype.parseWithStatement = function () {
- if (this.context.strict) {
- this.tolerateError(messages_1.Messages.StrictModeWith);
- }
- var node = this.createNode();
- var body;
- this.expectKeyword('with');
- this.expect('(');
- var object = this.parseExpression();
- if (!this.match(')') && this.config.tolerant) {
- this.tolerateUnexpectedToken(this.nextToken());
- body = this.finalize(this.createNode(), new Node.EmptyStatement());
- }
- else {
- this.expect(')');
- body = this.parseStatement();
- }
- return this.finalize(node, new Node.WithStatement(object, body));
- };
- // https://tc39.github.io/ecma262/#sec-switch-statement
- Parser.prototype.parseSwitchCase = function () {
- var node = this.createNode();
- var test;
- if (this.matchKeyword('default')) {
- this.nextToken();
- test = null;
- }
- else {
- this.expectKeyword('case');
- test = this.parseExpression();
- }
- this.expect(':');
- var consequent = [];
- while (true) {
- if (this.match('}') || this.matchKeyword('default') || this.matchKeyword('case')) {
- break;
- }
- consequent.push(this.parseStatementListItem());
- }
- return this.finalize(node, new Node.SwitchCase(test, consequent));
- };
- Parser.prototype.parseSwitchStatement = function () {
- var node = this.createNode();
- this.expectKeyword('switch');
- this.expect('(');
- var discriminant = this.parseExpression();
- this.expect(')');
- var previousInSwitch = this.context.inSwitch;
- this.context.inSwitch = true;
- var cases = [];
- var defaultFound = false;
- this.expect('{');
- while (true) {
- if (this.match('}')) {
- break;
- }
- var clause = this.parseSwitchCase();
- if (clause.test === null) {
- if (defaultFound) {
- this.throwError(messages_1.Messages.MultipleDefaultsInSwitch);
- }
- defaultFound = true;
- }
- cases.push(clause);
- }
- this.expect('}');
- this.context.inSwitch = previousInSwitch;
- return this.finalize(node, new Node.SwitchStatement(discriminant, cases));
- };
- // https://tc39.github.io/ecma262/#sec-labelled-statements
- Parser.prototype.parseLabelledStatement = function () {
- var node = this.createNode();
- var expr = this.parseExpression();
- var statement;
- if ((expr.type === syntax_1.Syntax.Identifier) && this.match(':')) {
- this.nextToken();
- var id = expr;
- var key = '$' + id.name;
- if (Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {
- this.throwError(messages_1.Messages.Redeclaration, 'Label', id.name);
- }
- this.context.labelSet[key] = true;
- var body = void 0;
- if (this.matchKeyword('class')) {
- this.tolerateUnexpectedToken(this.lookahead);
- body = this.parseClassDeclaration();
- }
- else if (this.matchKeyword('function')) {
- var token = this.lookahead;
- var declaration = this.parseFunctionDeclaration();
- if (this.context.strict) {
- this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunction);
- }
- else if (declaration.generator) {
- this.tolerateUnexpectedToken(token, messages_1.Messages.GeneratorInLegacyContext);
- }
- body = declaration;
- }
- else {
- body = this.parseStatement();
- }
- delete this.context.labelSet[key];
- statement = new Node.LabeledStatement(id, body);
- }
- else {
- this.consumeSemicolon();
- statement = new Node.ExpressionStatement(expr);
- }
- return this.finalize(node, statement);
- };
- // https://tc39.github.io/ecma262/#sec-throw-statement
- Parser.prototype.parseThrowStatement = function () {
- var node = this.createNode();
- this.expectKeyword('throw');
- if (this.hasLineTerminator) {
- this.throwError(messages_1.Messages.NewlineAfterThrow);
- }
- var argument = this.parseExpression();
- this.consumeSemicolon();
- return this.finalize(node, new Node.ThrowStatement(argument));
- };
- // https://tc39.github.io/ecma262/#sec-try-statement
- Parser.prototype.parseCatchClause = function () {
- var node = this.createNode();
- this.expectKeyword('catch');
- this.expect('(');
- if (this.match(')')) {
- this.throwUnexpectedToken(this.lookahead);
- }
- var params = [];
- var param = this.parsePattern(params);
- var paramMap = {};
- for (var i = 0; i < params.length; i++) {
- var key = '$' + params[i].value;
- if (Object.prototype.hasOwnProperty.call(paramMap, key)) {
- this.tolerateError(messages_1.Messages.DuplicateBinding, params[i].value);
- }
- paramMap[key] = true;
- }
- if (this.context.strict && param.type === syntax_1.Syntax.Identifier) {
- if (this.scanner.isRestrictedWord(param.name)) {
- this.tolerateError(messages_1.Messages.StrictCatchVariable);
- }
- }
- this.expect(')');
- var body = this.parseBlock();
- return this.finalize(node, new Node.CatchClause(param, body));
- };
- Parser.prototype.parseFinallyClause = function () {
- this.expectKeyword('finally');
- return this.parseBlock();
- };
- Parser.prototype.parseTryStatement = function () {
- var node = this.createNode();
- this.expectKeyword('try');
- var block = this.parseBlock();
- var handler = this.matchKeyword('catch') ? this.parseCatchClause() : null;
- var finalizer = this.matchKeyword('finally') ? this.parseFinallyClause() : null;
- if (!handler && !finalizer) {
- this.throwError(messages_1.Messages.NoCatchOrFinally);
- }
- return this.finalize(node, new Node.TryStatement(block, handler, finalizer));
- };
- // https://tc39.github.io/ecma262/#sec-debugger-statement
- Parser.prototype.parseDebuggerStatement = function () {
- var node = this.createNode();
- this.expectKeyword('debugger');
- this.consumeSemicolon();
- return this.finalize(node, new Node.DebuggerStatement());
- };
- // https://tc39.github.io/ecma262/#sec-ecmascript-language-statements-and-declarations
- Parser.prototype.parseStatement = function () {
- var statement;
- switch (this.lookahead.type) {
- case 1 /* BooleanLiteral */:
- case 5 /* NullLiteral */:
- case 6 /* NumericLiteral */:
- case 8 /* StringLiteral */:
- case 10 /* Template */:
- case 9 /* RegularExpression */:
- statement = this.parseExpressionStatement();
- break;
- case 7 /* Punctuator */:
- var value = this.lookahead.value;
- if (value === '{') {
- statement = this.parseBlock();
- }
- else if (value === '(') {
- statement = this.parseExpressionStatement();
- }
- else if (value === ';') {
- statement = this.parseEmptyStatement();
- }
- else {
- statement = this.parseExpressionStatement();
- }
- break;
- case 3 /* Identifier */:
- statement = this.matchAsyncFunction() ? this.parseFunctionDeclaration() : this.parseLabelledStatement();
- break;
- case 4 /* Keyword */:
- switch (this.lookahead.value) {
- case 'break':
- statement = this.parseBreakStatement();
- break;
- case 'continue':
- statement = this.parseContinueStatement();
- break;
- case 'debugger':
- statement = this.parseDebuggerStatement();
- break;
- case 'do':
- statement = this.parseDoWhileStatement();
- break;
- case 'for':
- statement = this.parseForStatement();
- break;
- case 'function':
- statement = this.parseFunctionDeclaration();
- break;
- case 'if':
- statement = this.parseIfStatement();
- break;
- case 'return':
- statement = this.parseReturnStatement();
- break;
- case 'switch':
- statement = this.parseSwitchStatement();
- break;
- case 'throw':
- statement = this.parseThrowStatement();
- break;
- case 'try':
- statement = this.parseTryStatement();
- break;
- case 'var':
- statement = this.parseVariableStatement();
- break;
- case 'while':
- statement = this.parseWhileStatement();
- break;
- case 'with':
- statement = this.parseWithStatement();
- break;
- default:
- statement = this.parseExpressionStatement();
- break;
- }
- break;
- default:
- statement = this.throwUnexpectedToken(this.lookahead);
- }
- return statement;
- };
- // https://tc39.github.io/ecma262/#sec-function-definitions
- Parser.prototype.parseFunctionSourceElements = function () {
- var node = this.createNode();
- this.expect('{');
- var body = this.parseDirectivePrologues();
- var previousLabelSet = this.context.labelSet;
- var previousInIteration = this.context.inIteration;
- var previousInSwitch = this.context.inSwitch;
- var previousInFunctionBody = this.context.inFunctionBody;
- this.context.labelSet = {};
- this.context.inIteration = false;
- this.context.inSwitch = false;
- this.context.inFunctionBody = true;
- while (this.lookahead.type !== 2 /* EOF */) {
- if (this.match('}')) {
- break;
- }
- body.push(this.parseStatementListItem());
- }
- this.expect('}');
- this.context.labelSet = previousLabelSet;
- this.context.inIteration = previousInIteration;
- this.context.inSwitch = previousInSwitch;
- this.context.inFunctionBody = previousInFunctionBody;
- return this.finalize(node, new Node.BlockStatement(body));
- };
- Parser.prototype.validateParam = function (options, param, name) {
- var key = '$' + name;
- if (this.context.strict) {
- if (this.scanner.isRestrictedWord(name)) {
- options.stricted = param;
- options.message = messages_1.Messages.StrictParamName;
- }
- if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {
- options.stricted = param;
- options.message = messages_1.Messages.StrictParamDupe;
- }
- }
- else if (!options.firstRestricted) {
- if (this.scanner.isRestrictedWord(name)) {
- options.firstRestricted = param;
- options.message = messages_1.Messages.StrictParamName;
- }
- else if (this.scanner.isStrictModeReservedWord(name)) {
- options.firstRestricted = param;
- options.message = messages_1.Messages.StrictReservedWord;
- }
- else if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {
- options.stricted = param;
- options.message = messages_1.Messages.StrictParamDupe;
- }
- }
- /* istanbul ignore next */
- if (typeof Object.defineProperty === 'function') {
- Object.defineProperty(options.paramSet, key, { value: true, enumerable: true, writable: true, configurable: true });
- }
- else {
- options.paramSet[key] = true;
- }
- };
- Parser.prototype.parseRestElement = function (params) {
- var node = this.createNode();
- this.expect('...');
- var arg = this.parsePattern(params);
- if (this.match('=')) {
- this.throwError(messages_1.Messages.DefaultRestParameter);
- }
- if (!this.match(')')) {
- this.throwError(messages_1.Messages.ParameterAfterRestParameter);
- }
- return this.finalize(node, new Node.RestElement(arg));
- };
- Parser.prototype.parseFormalParameter = function (options) {
- var params = [];
- var param = this.match('...') ? this.parseRestElement(params) : this.parsePatternWithDefault(params);
- for (var i = 0; i < params.length; i++) {
- this.validateParam(options, params[i], params[i].value);
- }
- options.simple = options.simple && (param instanceof Node.Identifier);
- options.params.push(param);
- };
- Parser.prototype.parseFormalParameters = function (firstRestricted) {
- var options;
- options = {
- simple: true,
- params: [],
- firstRestricted: firstRestricted
- };
- this.expect('(');
- if (!this.match(')')) {
- options.paramSet = {};
- while (this.lookahead.type !== 2 /* EOF */) {
- this.parseFormalParameter(options);
- if (this.match(')')) {
- break;
- }
- this.expect(',');
- if (this.match(')')) {
- break;
- }
- }
- }
- this.expect(')');
- return {
- simple: options.simple,
- params: options.params,
- stricted: options.stricted,
- firstRestricted: options.firstRestricted,
- message: options.message
- };
- };
- Parser.prototype.matchAsyncFunction = function () {
- var match = this.matchContextualKeyword('async');
- if (match) {
- var state = this.scanner.saveState();
- this.scanner.scanComments();
- var next = this.scanner.lex();
- this.scanner.restoreState(state);
- match = (state.lineNumber === next.lineNumber) && (next.type === 4 /* Keyword */) && (next.value === 'function');
- }
- return match;
- };
- Parser.prototype.parseFunctionDeclaration = function (identifierIsOptional) {
- var node = this.createNode();
- var isAsync = this.matchContextualKeyword('async');
- if (isAsync) {
- this.nextToken();
- }
- this.expectKeyword('function');
- var isGenerator = isAsync ? false : this.match('*');
- if (isGenerator) {
- this.nextToken();
- }
- var message;
- var id = null;
- var firstRestricted = null;
- if (!identifierIsOptional || !this.match('(')) {
- var token = this.lookahead;
- id = this.parseVariableIdentifier();
- if (this.context.strict) {
- if (this.scanner.isRestrictedWord(token.value)) {
- this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName);
- }
- }
- else {
- if (this.scanner.isRestrictedWord(token.value)) {
- firstRestricted = token;
- message = messages_1.Messages.StrictFunctionName;
- }
- else if (this.scanner.isStrictModeReservedWord(token.value)) {
- firstRestricted = token;
- message = messages_1.Messages.StrictReservedWord;
- }
- }
- }
- var previousAllowAwait = this.context.await;
- var previousAllowYield = this.context.allowYield;
- this.context.await = isAsync;
- this.context.allowYield = !isGenerator;
- var formalParameters = this.parseFormalParameters(firstRestricted);
- var params = formalParameters.params;
- var stricted = formalParameters.stricted;
- firstRestricted = formalParameters.firstRestricted;
- if (formalParameters.message) {
- message = formalParameters.message;
- }
- var previousStrict = this.context.strict;
- var previousAllowStrictDirective = this.context.allowStrictDirective;
- this.context.allowStrictDirective = formalParameters.simple;
- var body = this.parseFunctionSourceElements();
- if (this.context.strict && firstRestricted) {
- this.throwUnexpectedToken(firstRestricted, message);
- }
- if (this.context.strict && stricted) {
- this.tolerateUnexpectedToken(stricted, message);
- }
- this.context.strict = previousStrict;
- this.context.allowStrictDirective = previousAllowStrictDirective;
- this.context.await = previousAllowAwait;
- this.context.allowYield = previousAllowYield;
- return isAsync ? this.finalize(node, new Node.AsyncFunctionDeclaration(id, params, body)) :
- this.finalize(node, new Node.FunctionDeclaration(id, params, body, isGenerator));
- };
- Parser.prototype.parseFunctionExpression = function () {
- var node = this.createNode();
- var isAsync = this.matchContextualKeyword('async');
- if (isAsync) {
- this.nextToken();
- }
- this.expectKeyword('function');
- var isGenerator = isAsync ? false : this.match('*');
- if (isGenerator) {
- this.nextToken();
- }
- var message;
- var id = null;
- var firstRestricted;
- var previousAllowAwait = this.context.await;
- var previousAllowYield = this.context.allowYield;
- this.context.await = isAsync;
- this.context.allowYield = !isGenerator;
- if (!this.match('(')) {
- var token = this.lookahead;
- id = (!this.context.strict && !isGenerator && this.matchKeyword('yield')) ? this.parseIdentifierName() : this.parseVariableIdentifier();
- if (this.context.strict) {
- if (this.scanner.isRestrictedWord(token.value)) {
- this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName);
- }
- }
- else {
- if (this.scanner.isRestrictedWord(token.value)) {
- firstRestricted = token;
- message = messages_1.Messages.StrictFunctionName;
- }
- else if (this.scanner.isStrictModeReservedWord(token.value)) {
- firstRestricted = token;
- message = messages_1.Messages.StrictReservedWord;
- }
- }
- }
- var formalParameters = this.parseFormalParameters(firstRestricted);
- var params = formalParameters.params;
- var stricted = formalParameters.stricted;
- firstRestricted = formalParameters.firstRestricted;
- if (formalParameters.message) {
- message = formalParameters.message;
- }
- var previousStrict = this.context.strict;
- var previousAllowStrictDirective = this.context.allowStrictDirective;
- this.context.allowStrictDirective = formalParameters.simple;
- var body = this.parseFunctionSourceElements();
- if (this.context.strict && firstRestricted) {
- this.throwUnexpectedToken(firstRestricted, message);
- }
- if (this.context.strict && stricted) {
- this.tolerateUnexpectedToken(stricted, message);
- }
- this.context.strict = previousStrict;
- this.context.allowStrictDirective = previousAllowStrictDirective;
- this.context.await = previousAllowAwait;
- this.context.allowYield = previousAllowYield;
- return isAsync ? this.finalize(node, new Node.AsyncFunctionExpression(id, params, body)) :
- this.finalize(node, new Node.FunctionExpression(id, params, body, isGenerator));
- };
- // https://tc39.github.io/ecma262/#sec-directive-prologues-and-the-use-strict-directive
- Parser.prototype.parseDirective = function () {
- var token = this.lookahead;
- var node = this.createNode();
- var expr = this.parseExpression();
- var directive = (expr.type === syntax_1.Syntax.Literal) ? this.getTokenRaw(token).slice(1, -1) : null;
- this.consumeSemicolon();
- return this.finalize(node, directive ? new Node.Directive(expr, directive) : new Node.ExpressionStatement(expr));
- };
- Parser.prototype.parseDirectivePrologues = function () {
- var firstRestricted = null;
- var body = [];
- while (true) {
- var token = this.lookahead;
- if (token.type !== 8 /* StringLiteral */) {
- break;
- }
- var statement = this.parseDirective();
- body.push(statement);
- var directive = statement.directive;
- if (typeof directive !== 'string') {
- break;
- }
- if (directive === 'use strict') {
- this.context.strict = true;
- if (firstRestricted) {
- this.tolerateUnexpectedToken(firstRestricted, messages_1.Messages.StrictOctalLiteral);
- }
- if (!this.context.allowStrictDirective) {
- this.tolerateUnexpectedToken(token, messages_1.Messages.IllegalLanguageModeDirective);
- }
- }
- else {
- if (!firstRestricted && token.octal) {
- firstRestricted = token;
- }
- }
- }
- return body;
- };
- // https://tc39.github.io/ecma262/#sec-method-definitions
- Parser.prototype.qualifiedPropertyName = function (token) {
- switch (token.type) {
- case 3 /* Identifier */:
- case 8 /* StringLiteral */:
- case 1 /* BooleanLiteral */:
- case 5 /* NullLiteral */:
- case 6 /* NumericLiteral */:
- case 4 /* Keyword */:
- return true;
- case 7 /* Punctuator */:
- return token.value === '[';
- default:
- break;
- }
- return false;
- };
- Parser.prototype.parseGetterMethod = function () {
- var node = this.createNode();
- var isGenerator = false;
- var previousAllowYield = this.context.allowYield;
- this.context.allowYield = !isGenerator;
- var formalParameters = this.parseFormalParameters();
- if (formalParameters.params.length > 0) {
- this.tolerateError(messages_1.Messages.BadGetterArity);
- }
- var method = this.parsePropertyMethod(formalParameters);
- this.context.allowYield = previousAllowYield;
- return this.finalize(node, new Node.FunctionExpression(null, formalParameters.params, method, isGenerator));
- };
- Parser.prototype.parseSetterMethod = function () {
- var node = this.createNode();
- var isGenerator = false;
- var previousAllowYield = this.context.allowYield;
- this.context.allowYield = !isGenerator;
- var formalParameters = this.parseFormalParameters();
- if (formalParameters.params.length !== 1) {
- this.tolerateError(messages_1.Messages.BadSetterArity);
- }
- else if (formalParameters.params[0] instanceof Node.RestElement) {
- this.tolerateError(messages_1.Messages.BadSetterRestParameter);
- }
- var method = this.parsePropertyMethod(formalParameters);
- this.context.allowYield = previousAllowYield;
- return this.finalize(node, new Node.FunctionExpression(null, formalParameters.params, method, isGenerator));
- };
- Parser.prototype.parseGeneratorMethod = function () {
- var node = this.createNode();
- var isGenerator = true;
- var previousAllowYield = this.context.allowYield;
- this.context.allowYield = true;
- var params = this.parseFormalParameters();
- this.context.allowYield = false;
- var method = this.parsePropertyMethod(params);
- this.context.allowYield = previousAllowYield;
- return this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator));
- };
- // https://tc39.github.io/ecma262/#sec-generator-function-definitions
- Parser.prototype.isStartOfExpression = function () {
- var start = true;
- var value = this.lookahead.value;
- switch (this.lookahead.type) {
- case 7 /* Punctuator */:
- start = (value === '[') || (value === '(') || (value === '{') ||
- (value === '+') || (value === '-') ||
- (value === '!') || (value === '~') ||
- (value === '++') || (value === '--') ||
- (value === '/') || (value === '/='); // regular expression literal
- break;
- case 4 /* Keyword */:
- start = (value === 'class') || (value === 'delete') ||
- (value === 'function') || (value === 'let') || (value === 'new') ||
- (value === 'super') || (value === 'this') || (value === 'typeof') ||
- (value === 'void') || (value === 'yield');
- break;
- default:
- break;
- }
- return start;
- };
- Parser.prototype.parseYieldExpression = function () {
- var node = this.createNode();
- this.expectKeyword('yield');
- var argument = null;
- var delegate = false;
- if (!this.hasLineTerminator) {
- var previousAllowYield = this.context.allowYield;
- this.context.allowYield = false;
- delegate = this.match('*');
- if (delegate) {
- this.nextToken();
- argument = this.parseAssignmentExpression();
- }
- else if (this.isStartOfExpression()) {
- argument = this.parseAssignmentExpression();
- }
- this.context.allowYield = previousAllowYield;
- }
- return this.finalize(node, new Node.YieldExpression(argument, delegate));
- };
- // https://tc39.github.io/ecma262/#sec-class-definitions
- Parser.prototype.parseClassElement = function (hasConstructor) {
- var token = this.lookahead;
- var node = this.createNode();
- var kind = '';
- var key = null;
- var value = null;
- var computed = false;
- var method = false;
- var isStatic = false;
- var isAsync = false;
- if (this.match('*')) {
- this.nextToken();
- }
- else {
- computed = this.match('[');
- key = this.parseObjectPropertyKey();
- var id = key;
- if (id.name === 'static' && (this.qualifiedPropertyName(this.lookahead) || this.match('*'))) {
- token = this.lookahead;
- isStatic = true;
- computed = this.match('[');
- if (this.match('*')) {
- this.nextToken();
- }
- else {
- key = this.parseObjectPropertyKey();
- }
- }
- if ((token.type === 3 /* Identifier */) && !this.hasLineTerminator && (token.value === 'async')) {
- var punctuator = this.lookahead.value;
- if (punctuator !== ':' && punctuator !== '(' && punctuator !== '*') {
- isAsync = true;
- token = this.lookahead;
- key = this.parseObjectPropertyKey();
- if (token.type === 3 /* Identifier */ && token.value === 'constructor') {
- this.tolerateUnexpectedToken(token, messages_1.Messages.ConstructorIsAsync);
- }
- }
- }
- }
- var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead);
- if (token.type === 3 /* Identifier */) {
- if (token.value === 'get' && lookaheadPropertyKey) {
- kind = 'get';
- computed = this.match('[');
- key = this.parseObjectPropertyKey();
- this.context.allowYield = false;
- value = this.parseGetterMethod();
- }
- else if (token.value === 'set' && lookaheadPropertyKey) {
- kind = 'set';
- computed = this.match('[');
- key = this.parseObjectPropertyKey();
- value = this.parseSetterMethod();
- }
- }
- else if (token.type === 7 /* Punctuator */ && token.value === '*' && lookaheadPropertyKey) {
- kind = 'init';
- computed = this.match('[');
- key = this.parseObjectPropertyKey();
- value = this.parseGeneratorMethod();
- method = true;
- }
- if (!kind && key && this.match('(')) {
- kind = 'init';
- value = isAsync ? this.parsePropertyMethodAsyncFunction() : this.parsePropertyMethodFunction();
- method = true;
- }
- if (!kind) {
- this.throwUnexpectedToken(this.lookahead);
- }
- if (kind === 'init') {
- kind = 'method';
- }
- if (!computed) {
- if (isStatic && this.isPropertyKey(key, 'prototype')) {
- this.throwUnexpectedToken(token, messages_1.Messages.StaticPrototype);
- }
- if (!isStatic && this.isPropertyKey(key, 'constructor')) {
- if (kind !== 'method' || !method || (value && value.generator)) {
- this.throwUnexpectedToken(token, messages_1.Messages.ConstructorSpecialMethod);
- }
- if (hasConstructor.value) {
- this.throwUnexpectedToken(token, messages_1.Messages.DuplicateConstructor);
- }
- else {
- hasConstructor.value = true;
- }
- kind = 'constructor';
- }
- }
- return this.finalize(node, new Node.MethodDefinition(key, computed, value, kind, isStatic));
- };
- Parser.prototype.parseClassElementList = function () {
- var body = [];
- var hasConstructor = { value: false };
- this.expect('{');
- while (!this.match('}')) {
- if (this.match(';')) {
- this.nextToken();
- }
- else {
- body.push(this.parseClassElement(hasConstructor));
- }
- }
- this.expect('}');
- return body;
- };
- Parser.prototype.parseClassBody = function () {
- var node = this.createNode();
- var elementList = this.parseClassElementList();
- return this.finalize(node, new Node.ClassBody(elementList));
- };
- Parser.prototype.parseClassDeclaration = function (identifierIsOptional) {
- var node = this.createNode();
- var previousStrict = this.context.strict;
- this.context.strict = true;
- this.expectKeyword('class');
- var id = (identifierIsOptional && (this.lookahead.type !== 3 /* Identifier */)) ? null : this.parseVariableIdentifier();
- var superClass = null;
- if (this.matchKeyword('extends')) {
- this.nextToken();
- superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall);
- }
- var classBody = this.parseClassBody();
- this.context.strict = previousStrict;
- return this.finalize(node, new Node.ClassDeclaration(id, superClass, classBody));
- };
- Parser.prototype.parseClassExpression = function () {
- var node = this.createNode();
- var previousStrict = this.context.strict;
- this.context.strict = true;
- this.expectKeyword('class');
- var id = (this.lookahead.type === 3 /* Identifier */) ? this.parseVariableIdentifier() : null;
- var superClass = null;
- if (this.matchKeyword('extends')) {
- this.nextToken();
- superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall);
- }
- var classBody = this.parseClassBody();
- this.context.strict = previousStrict;
- return this.finalize(node, new Node.ClassExpression(id, superClass, classBody));
- };
- // https://tc39.github.io/ecma262/#sec-scripts
- // https://tc39.github.io/ecma262/#sec-modules
- Parser.prototype.parseModule = function () {
- this.context.strict = true;
- this.context.isModule = true;
- this.scanner.isModule = true;
- var node = this.createNode();
- var body = this.parseDirectivePrologues();
- while (this.lookahead.type !== 2 /* EOF */) {
- body.push(this.parseStatementListItem());
- }
- return this.finalize(node, new Node.Module(body));
- };
- Parser.prototype.parseScript = function () {
- var node = this.createNode();
- var body = this.parseDirectivePrologues();
- while (this.lookahead.type !== 2 /* EOF */) {
- body.push(this.parseStatementListItem());
- }
- return this.finalize(node, new Node.Script(body));
- };
- // https://tc39.github.io/ecma262/#sec-imports
- Parser.prototype.parseModuleSpecifier = function () {
- var node = this.createNode();
- if (this.lookahead.type !== 8 /* StringLiteral */) {
- this.throwError(messages_1.Messages.InvalidModuleSpecifier);
- }
- var token = this.nextToken();
- var raw = this.getTokenRaw(token);
- return this.finalize(node, new Node.Literal(token.value, raw));
- };
- // import {<foo as bar>} ...;
- Parser.prototype.parseImportSpecifier = function () {
- var node = this.createNode();
- var imported;
- var local;
- if (this.lookahead.type === 3 /* Identifier */) {
- imported = this.parseVariableIdentifier();
- local = imported;
- if (this.matchContextualKeyword('as')) {
- this.nextToken();
- local = this.parseVariableIdentifier();
- }
- }
- else {
- imported = this.parseIdentifierName();
- local = imported;
- if (this.matchContextualKeyword('as')) {
- this.nextToken();
- local = this.parseVariableIdentifier();
- }
- else {
- this.throwUnexpectedToken(this.nextToken());
- }
- }
- return this.finalize(node, new Node.ImportSpecifier(local, imported));
- };
- // {foo, bar as bas}
- Parser.prototype.parseNamedImports = function () {
- this.expect('{');
- var specifiers = [];
- while (!this.match('}')) {
- specifiers.push(this.parseImportSpecifier());
- if (!this.match('}')) {
- this.expect(',');
- }
- }
- this.expect('}');
- return specifiers;
- };
- // import <foo> ...;
- Parser.prototype.parseImportDefaultSpecifier = function () {
- var node = this.createNode();
- var local = this.parseIdentifierName();
- return this.finalize(node, new Node.ImportDefaultSpecifier(local));
- };
- // import <* as foo> ...;
- Parser.prototype.parseImportNamespaceSpecifier = function () {
- var node = this.createNode();
- this.expect('*');
- if (!this.matchContextualKeyword('as')) {
- this.throwError(messages_1.Messages.NoAsAfterImportNamespace);
- }
- this.nextToken();
- var local = this.parseIdentifierName();
- return this.finalize(node, new Node.ImportNamespaceSpecifier(local));
- };
- Parser.prototype.parseImportDeclaration = function () {
- if (this.context.inFunctionBody) {
- this.throwError(messages_1.Messages.IllegalImportDeclaration);
- }
- var node = this.createNode();
- this.expectKeyword('import');
- var src;
- var specifiers = [];
- if (this.lookahead.type === 8 /* StringLiteral */) {
- // import 'foo';
- src = this.parseModuleSpecifier();
- }
- else {
- if (this.match('{')) {
- // import {bar}
- specifiers = specifiers.concat(this.parseNamedImports());
- }
- else if (this.match('*')) {
- // import * as foo
- specifiers.push(this.parseImportNamespaceSpecifier());
- }
- else if (this.isIdentifierName(this.lookahead) && !this.matchKeyword('default')) {
- // import foo
- specifiers.push(this.parseImportDefaultSpecifier());
- if (this.match(',')) {
- this.nextToken();
- if (this.match('*')) {
- // import foo, * as foo
- specifiers.push(this.parseImportNamespaceSpecifier());
- }
- else if (this.match('{')) {
- // import foo, {bar}
- specifiers = specifiers.concat(this.parseNamedImports());
- }
- else {
- this.throwUnexpectedToken(this.lookahead);
- }
- }
- }
- else {
- this.throwUnexpectedToken(this.nextToken());
- }
- if (!this.matchContextualKeyword('from')) {
- var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause;
- this.throwError(message, this.lookahead.value);
- }
- this.nextToken();
- src = this.parseModuleSpecifier();
- }
- this.consumeSemicolon();
- return this.finalize(node, new Node.ImportDeclaration(specifiers, src));
- };
- // https://tc39.github.io/ecma262/#sec-exports
- Parser.prototype.parseExportSpecifier = function () {
- var node = this.createNode();
- var local = this.parseIdentifierName();
- var exported = local;
- if (this.matchContextualKeyword('as')) {
- this.nextToken();
- exported = this.parseIdentifierName();
- }
- return this.finalize(node, new Node.ExportSpecifier(local, exported));
- };
- Parser.prototype.parseExportDeclaration = function () {
- if (this.context.inFunctionBody) {
- this.throwError(messages_1.Messages.IllegalExportDeclaration);
- }
- var node = this.createNode();
- this.expectKeyword('export');
- var exportDeclaration;
- if (this.matchKeyword('default')) {
- // export default ...
- this.nextToken();
- if (this.matchKeyword('function')) {
- // export default function foo () {}
- // export default function () {}
- var declaration = this.parseFunctionDeclaration(true);
- exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));
- }
- else if (this.matchKeyword('class')) {
- // export default class foo {}
- var declaration = this.parseClassDeclaration(true);
- exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));
- }
- else if (this.matchContextualKeyword('async')) {
- // export default async function f () {}
- // export default async function () {}
- // export default async x => x
- var declaration = this.matchAsyncFunction() ? this.parseFunctionDeclaration(true) : this.parseAssignmentExpression();
- exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));
- }
- else {
- if (this.matchContextualKeyword('from')) {
- this.throwError(messages_1.Messages.UnexpectedToken, this.lookahead.value);
- }
- // export default {};
- // export default [];
- // export default (1 + 2);
- var declaration = this.match('{') ? this.parseObjectInitializer() :
- this.match('[') ? this.parseArrayInitializer() : this.parseAssignmentExpression();
- this.consumeSemicolon();
- exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));
- }
- }
- else if (this.match('*')) {
- // export * from 'foo';
- this.nextToken();
- if (!this.matchContextualKeyword('from')) {
- var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause;
- this.throwError(message, this.lookahead.value);
- }
- this.nextToken();
- var src = this.parseModuleSpecifier();
- this.consumeSemicolon();
- exportDeclaration = this.finalize(node, new Node.ExportAllDeclaration(src));
- }
- else if (this.lookahead.type === 4 /* Keyword */) {
- // export var f = 1;
- var declaration = void 0;
- switch (this.lookahead.value) {
- case 'let':
- case 'const':
- declaration = this.parseLexicalDeclaration({ inFor: false });
- break;
- case 'var':
- case 'class':
- case 'function':
- declaration = this.parseStatementListItem();
- break;
- default:
- this.throwUnexpectedToken(this.lookahead);
- }
- exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(declaration, [], null));
- }
- else if (this.matchAsyncFunction()) {
- var declaration = this.parseFunctionDeclaration();
- exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(declaration, [], null));
- }
- else {
- var specifiers = [];
- var source = null;
- var isExportFromIdentifier = false;
- this.expect('{');
- while (!this.match('}')) {
- isExportFromIdentifier = isExportFromIdentifier || this.matchKeyword('default');
- specifiers.push(this.parseExportSpecifier());
- if (!this.match('}')) {
- this.expect(',');
- }
- }
- this.expect('}');
- if (this.matchContextualKeyword('from')) {
- // export {default} from 'foo';
- // export {foo} from 'foo';
- this.nextToken();
- source = this.parseModuleSpecifier();
- this.consumeSemicolon();
- }
- else if (isExportFromIdentifier) {
- // export {default}; // missing fromClause
- var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause;
- this.throwError(message, this.lookahead.value);
- }
- else {
- // export {foo};
- this.consumeSemicolon();
- }
- exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(null, specifiers, source));
- }
- return exportDeclaration;
- };
- return Parser;
- }());
- exports.Parser = Parser;
- /***/ },
- /* 9 */
- /***/ function(module, exports) {
- "use strict";
- // Ensure the condition is true, otherwise throw an error.
- // This is only to have a better contract semantic, i.e. another safety net
- // to catch a logic error. The condition shall be fulfilled in normal case.
- // Do NOT use this to enforce a certain condition on any user input.
- Object.defineProperty(exports, "__esModule", { value: true });
- function assert(condition, message) {
- /* istanbul ignore if */
- if (!condition) {
- throw new Error('ASSERT: ' + message);
- }
- }
- exports.assert = assert;
- /***/ },
- /* 10 */
- /***/ function(module, exports) {
- "use strict";
- /* tslint:disable:max-classes-per-file */
- Object.defineProperty(exports, "__esModule", { value: true });
- var ErrorHandler = (function () {
- function ErrorHandler() {
- this.errors = [];
- this.tolerant = false;
- }
- ErrorHandler.prototype.recordError = function (error) {
- this.errors.push(error);
- };
- ErrorHandler.prototype.tolerate = function (error) {
- if (this.tolerant) {
- this.recordError(error);
- }
- else {
- throw error;
- }
- };
- ErrorHandler.prototype.constructError = function (msg, column) {
- var error = new Error(msg);
- try {
- throw error;
- }
- catch (base) {
- /* istanbul ignore else */
- if (Object.create && Object.defineProperty) {
- error = Object.create(base);
- Object.defineProperty(error, 'column', { value: column });
- }
- }
- /* istanbul ignore next */
- return error;
- };
- ErrorHandler.prototype.createError = function (index, line, col, description) {
- var msg = 'Line ' + line + ': ' + description;
- var error = this.constructError(msg, col);
- error.index = index;
- error.lineNumber = line;
- error.description = description;
- return error;
- };
- ErrorHandler.prototype.throwError = function (index, line, col, description) {
- throw this.createError(index, line, col, description);
- };
- ErrorHandler.prototype.tolerateError = function (index, line, col, description) {
- var error = this.createError(index, line, col, description);
- if (this.tolerant) {
- this.recordError(error);
- }
- else {
- throw error;
- }
- };
- return ErrorHandler;
- }());
- exports.ErrorHandler = ErrorHandler;
- /***/ },
- /* 11 */
- /***/ function(module, exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- // Error messages should be identical to V8.
- exports.Messages = {
- BadGetterArity: 'Getter must not have any formal parameters',
- BadSetterArity: 'Setter must have exactly one formal parameter',
- BadSetterRestParameter: 'Setter function argument must not be a rest parameter',
- ConstructorIsAsync: 'Class constructor may not be an async method',
- ConstructorSpecialMethod: 'Class constructor may not be an accessor',
- DeclarationMissingInitializer: 'Missing initializer in %0 declaration',
- DefaultRestParameter: 'Unexpected token =',
- DuplicateBinding: 'Duplicate binding %0',
- DuplicateConstructor: 'A class may only have one constructor',
- DuplicateProtoProperty: 'Duplicate __proto__ fields are not allowed in object literals',
- ForInOfLoopInitializer: '%0 loop variable declaration may not have an initializer',
- GeneratorInLegacyContext: 'Generator declarations are not allowed in legacy contexts',
- IllegalBreak: 'Illegal break statement',
- IllegalContinue: 'Illegal continue statement',
- IllegalExportDeclaration: 'Unexpected token',
- IllegalImportDeclaration: 'Unexpected token',
- IllegalLanguageModeDirective: 'Illegal \'use strict\' directive in function with non-simple parameter list',
- IllegalReturn: 'Illegal return statement',
- InvalidEscapedReservedWord: 'Keyword must not contain escaped characters',
- InvalidHexEscapeSequence: 'Invalid hexadecimal escape sequence',
- InvalidLHSInAssignment: 'Invalid left-hand side in assignment',
- InvalidLHSInForIn: 'Invalid left-hand side in for-in',
- InvalidLHSInForLoop: 'Invalid left-hand side in for-loop',
- InvalidModuleSpecifier: 'Unexpected token',
- InvalidRegExp: 'Invalid regular expression',
- LetInLexicalBinding: 'let is disallowed as a lexically bound name',
- MissingFromClause: 'Unexpected token',
- MultipleDefaultsInSwitch: 'More than one default clause in switch statement',
- NewlineAfterThrow: 'Illegal newline after throw',
- NoAsAfterImportNamespace: 'Unexpected token',
- NoCatchOrFinally: 'Missing catch or finally after try',
- ParameterAfterRestParameter: 'Rest parameter must be last formal parameter',
- Redeclaration: '%0 \'%1\' has already been declared',
- StaticPrototype: 'Classes may not have static property named prototype',
- StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode',
- StrictDelete: 'Delete of an unqualified identifier in strict mode.',
- StrictFunction: 'In strict mode code, functions can only be declared at top level or inside a block',
- StrictFunctionName: 'Function name may not be eval or arguments in strict mode',
- StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode',
- StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode',
- StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode',
- StrictModeWith: 'Strict mode code may not include a with statement',
- StrictOctalLiteral: 'Octal literals are not allowed in strict mode.',
- StrictParamDupe: 'Strict mode function may not have duplicate parameter names',
- StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode',
- StrictReservedWord: 'Use of future reserved word in strict mode',
- StrictVarName: 'Variable name may not be eval or arguments in strict mode',
- TemplateOctalLiteral: 'Octal literals are not allowed in template strings.',
- UnexpectedEOS: 'Unexpected end of input',
- UnexpectedIdentifier: 'Unexpected identifier',
- UnexpectedNumber: 'Unexpected number',
- UnexpectedReserved: 'Unexpected reserved word',
- UnexpectedString: 'Unexpected string',
- UnexpectedTemplate: 'Unexpected quasi %0',
- UnexpectedToken: 'Unexpected token %0',
- UnexpectedTokenIllegal: 'Unexpected token ILLEGAL',
- UnknownLabel: 'Undefined label \'%0\'',
- UnterminatedRegExp: 'Invalid regular expression: missing /'
- };
- /***/ },
- /* 12 */
- /***/ function(module, exports, __nested_webpack_require_226595__) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var assert_1 = __nested_webpack_require_226595__(9);
- var character_1 = __nested_webpack_require_226595__(4);
- var messages_1 = __nested_webpack_require_226595__(11);
- function hexValue(ch) {
- return '0123456789abcdef'.indexOf(ch.toLowerCase());
- }
- function octalValue(ch) {
- return '01234567'.indexOf(ch);
- }
- var Scanner = (function () {
- function Scanner(code, handler) {
- this.source = code;
- this.errorHandler = handler;
- this.trackComment = false;
- this.isModule = false;
- this.length = code.length;
- this.index = 0;
- this.lineNumber = (code.length > 0) ? 1 : 0;
- this.lineStart = 0;
- this.curlyStack = [];
- }
- Scanner.prototype.saveState = function () {
- return {
- index: this.index,
- lineNumber: this.lineNumber,
- lineStart: this.lineStart
- };
- };
- Scanner.prototype.restoreState = function (state) {
- this.index = state.index;
- this.lineNumber = state.lineNumber;
- this.lineStart = state.lineStart;
- };
- Scanner.prototype.eof = function () {
- return this.index >= this.length;
- };
- Scanner.prototype.throwUnexpectedToken = function (message) {
- if (message === void 0) { message = messages_1.Messages.UnexpectedTokenIllegal; }
- return this.errorHandler.throwError(this.index, this.lineNumber, this.index - this.lineStart + 1, message);
- };
- Scanner.prototype.tolerateUnexpectedToken = function (message) {
- if (message === void 0) { message = messages_1.Messages.UnexpectedTokenIllegal; }
- this.errorHandler.tolerateError(this.index, this.lineNumber, this.index - this.lineStart + 1, message);
- };
- // https://tc39.github.io/ecma262/#sec-comments
- Scanner.prototype.skipSingleLineComment = function (offset) {
- var comments = [];
- var start, loc;
- if (this.trackComment) {
- comments = [];
- start = this.index - offset;
- loc = {
- start: {
- line: this.lineNumber,
- column: this.index - this.lineStart - offset
- },
- end: {}
- };
- }
- while (!this.eof()) {
- var ch = this.source.charCodeAt(this.index);
- ++this.index;
- if (character_1.Character.isLineTerminator(ch)) {
- if (this.trackComment) {
- loc.end = {
- line: this.lineNumber,
- column: this.index - this.lineStart - 1
- };
- var entry = {
- multiLine: false,
- slice: [start + offset, this.index - 1],
- range: [start, this.index - 1],
- loc: loc
- };
- comments.push(entry);
- }
- if (ch === 13 && this.source.charCodeAt(this.index) === 10) {
- ++this.index;
- }
- ++this.lineNumber;
- this.lineStart = this.index;
- return comments;
- }
- }
- if (this.trackComment) {
- loc.end = {
- line: this.lineNumber,
- column: this.index - this.lineStart
- };
- var entry = {
- multiLine: false,
- slice: [start + offset, this.index],
- range: [start, this.index],
- loc: loc
- };
- comments.push(entry);
- }
- return comments;
- };
- Scanner.prototype.skipMultiLineComment = function () {
- var comments = [];
- var start, loc;
- if (this.trackComment) {
- comments = [];
- start = this.index - 2;
- loc = {
- start: {
- line: this.lineNumber,
- column: this.index - this.lineStart - 2
- },
- end: {}
- };
- }
- while (!this.eof()) {
- var ch = this.source.charCodeAt(this.index);
- if (character_1.Character.isLineTerminator(ch)) {
- if (ch === 0x0D && this.source.charCodeAt(this.index + 1) === 0x0A) {
- ++this.index;
- }
- ++this.lineNumber;
- ++this.index;
- this.lineStart = this.index;
- }
- else if (ch === 0x2A) {
- // Block comment ends with '*/'.
- if (this.source.charCodeAt(this.index + 1) === 0x2F) {
- this.index += 2;
- if (this.trackComment) {
- loc.end = {
- line: this.lineNumber,
- column: this.index - this.lineStart
- };
- var entry = {
- multiLine: true,
- slice: [start + 2, this.index - 2],
- range: [start, this.index],
- loc: loc
- };
- comments.push(entry);
- }
- return comments;
- }
- ++this.index;
- }
- else {
- ++this.index;
- }
- }
- // Ran off the end of the file - the whole thing is a comment
- if (this.trackComment) {
- loc.end = {
- line: this.lineNumber,
- column: this.index - this.lineStart
- };
- var entry = {
- multiLine: true,
- slice: [start + 2, this.index],
- range: [start, this.index],
- loc: loc
- };
- comments.push(entry);
- }
- this.tolerateUnexpectedToken();
- return comments;
- };
- Scanner.prototype.scanComments = function () {
- var comments;
- if (this.trackComment) {
- comments = [];
- }
- var start = (this.index === 0);
- while (!this.eof()) {
- var ch = this.source.charCodeAt(this.index);
- if (character_1.Character.isWhiteSpace(ch)) {
- ++this.index;
- }
- else if (character_1.Character.isLineTerminator(ch)) {
- ++this.index;
- if (ch === 0x0D && this.source.charCodeAt(this.index) === 0x0A) {
- ++this.index;
- }
- ++this.lineNumber;
- this.lineStart = this.index;
- start = true;
- }
- else if (ch === 0x2F) {
- ch = this.source.charCodeAt(this.index + 1);
- if (ch === 0x2F) {
- this.index += 2;
- var comment = this.skipSingleLineComment(2);
- if (this.trackComment) {
- comments = comments.concat(comment);
- }
- start = true;
- }
- else if (ch === 0x2A) {
- this.index += 2;
- var comment = this.skipMultiLineComment();
- if (this.trackComment) {
- comments = comments.concat(comment);
- }
- }
- else {
- break;
- }
- }
- else if (start && ch === 0x2D) {
- // U+003E is '>'
- if ((this.source.charCodeAt(this.index + 1) === 0x2D) && (this.source.charCodeAt(this.index + 2) === 0x3E)) {
- // '-->' is a single-line comment
- this.index += 3;
- var comment = this.skipSingleLineComment(3);
- if (this.trackComment) {
- comments = comments.concat(comment);
- }
- }
- else {
- break;
- }
- }
- else if (ch === 0x3C && !this.isModule) {
- if (this.source.slice(this.index + 1, this.index + 4) === '!--') {
- this.index += 4; // `<!--`
- var comment = this.skipSingleLineComment(4);
- if (this.trackComment) {
- comments = comments.concat(comment);
- }
- }
- else {
- break;
- }
- }
- else {
- break;
- }
- }
- return comments;
- };
- // https://tc39.github.io/ecma262/#sec-future-reserved-words
- Scanner.prototype.isFutureReservedWord = function (id) {
- switch (id) {
- case 'enum':
- case 'export':
- case 'import':
- case 'super':
- return true;
- default:
- return false;
- }
- };
- Scanner.prototype.isStrictModeReservedWord = function (id) {
- switch (id) {
- case 'implements':
- case 'interface':
- case 'package':
- case 'private':
- case 'protected':
- case 'public':
- case 'static':
- case 'yield':
- case 'let':
- return true;
- default:
- return false;
- }
- };
- Scanner.prototype.isRestrictedWord = function (id) {
- return id === 'eval' || id === 'arguments';
- };
- // https://tc39.github.io/ecma262/#sec-keywords
- Scanner.prototype.isKeyword = function (id) {
- switch (id.length) {
- case 2:
- return (id === 'if') || (id === 'in') || (id === 'do');
- case 3:
- return (id === 'var') || (id === 'for') || (id === 'new') ||
- (id === 'try') || (id === 'let');
- case 4:
- return (id === 'this') || (id === 'else') || (id === 'case') ||
- (id === 'void') || (id === 'with') || (id === 'enum');
- case 5:
- return (id === 'while') || (id === 'break') || (id === 'catch') ||
- (id === 'throw') || (id === 'const') || (id === 'yield') ||
- (id === 'class') || (id === 'super');
- case 6:
- return (id === 'return') || (id === 'typeof') || (id === 'delete') ||
- (id === 'switch') || (id === 'export') || (id === 'import');
- case 7:
- return (id === 'default') || (id === 'finally') || (id === 'extends');
- case 8:
- return (id === 'function') || (id === 'continue') || (id === 'debugger');
- case 10:
- return (id === 'instanceof');
- default:
- return false;
- }
- };
- Scanner.prototype.codePointAt = function (i) {
- var cp = this.source.charCodeAt(i);
- if (cp >= 0xD800 && cp <= 0xDBFF) {
- var second = this.source.charCodeAt(i + 1);
- if (second >= 0xDC00 && second <= 0xDFFF) {
- var first = cp;
- cp = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;
- }
- }
- return cp;
- };
- Scanner.prototype.scanHexEscape = function (prefix) {
- var len = (prefix === 'u') ? 4 : 2;
- var code = 0;
- for (var i = 0; i < len; ++i) {
- if (!this.eof() && character_1.Character.isHexDigit(this.source.charCodeAt(this.index))) {
- code = code * 16 + hexValue(this.source[this.index++]);
- }
- else {
- return null;
- }
- }
- return String.fromCharCode(code);
- };
- Scanner.prototype.scanUnicodeCodePointEscape = function () {
- var ch = this.source[this.index];
- var code = 0;
- // At least, one hex digit is required.
- if (ch === '}') {
- this.throwUnexpectedToken();
- }
- while (!this.eof()) {
- ch = this.source[this.index++];
- if (!character_1.Character.isHexDigit(ch.charCodeAt(0))) {
- break;
- }
- code = code * 16 + hexValue(ch);
- }
- if (code > 0x10FFFF || ch !== '}') {
- this.throwUnexpectedToken();
- }
- return character_1.Character.fromCodePoint(code);
- };
- Scanner.prototype.getIdentifier = function () {
- var start = this.index++;
- while (!this.eof()) {
- var ch = this.source.charCodeAt(this.index);
- if (ch === 0x5C) {
- // Blackslash (U+005C) marks Unicode escape sequence.
- this.index = start;
- return this.getComplexIdentifier();
- }
- else if (ch >= 0xD800 && ch < 0xDFFF) {
- // Need to handle surrogate pairs.
- this.index = start;
- return this.getComplexIdentifier();
- }
- if (character_1.Character.isIdentifierPart(ch)) {
- ++this.index;
- }
- else {
- break;
- }
- }
- return this.source.slice(start, this.index);
- };
- Scanner.prototype.getComplexIdentifier = function () {
- var cp = this.codePointAt(this.index);
- var id = character_1.Character.fromCodePoint(cp);
- this.index += id.length;
- // '\u' (U+005C, U+0075) denotes an escaped character.
- var ch;
- if (cp === 0x5C) {
- if (this.source.charCodeAt(this.index) !== 0x75) {
- this.throwUnexpectedToken();
- }
- ++this.index;
- if (this.source[this.index] === '{') {
- ++this.index;
- ch = this.scanUnicodeCodePointEscape();
- }
- else {
- ch = this.scanHexEscape('u');
- if (ch === null || ch === '\\' || !character_1.Character.isIdentifierStart(ch.charCodeAt(0))) {
- this.throwUnexpectedToken();
- }
- }
- id = ch;
- }
- while (!this.eof()) {
- cp = this.codePointAt(this.index);
- if (!character_1.Character.isIdentifierPart(cp)) {
- break;
- }
- ch = character_1.Character.fromCodePoint(cp);
- id += ch;
- this.index += ch.length;
- // '\u' (U+005C, U+0075) denotes an escaped character.
- if (cp === 0x5C) {
- id = id.substr(0, id.length - 1);
- if (this.source.charCodeAt(this.index) !== 0x75) {
- this.throwUnexpectedToken();
- }
- ++this.index;
- if (this.source[this.index] === '{') {
- ++this.index;
- ch = this.scanUnicodeCodePointEscape();
- }
- else {
- ch = this.scanHexEscape('u');
- if (ch === null || ch === '\\' || !character_1.Character.isIdentifierPart(ch.charCodeAt(0))) {
- this.throwUnexpectedToken();
- }
- }
- id += ch;
- }
- }
- return id;
- };
- Scanner.prototype.octalToDecimal = function (ch) {
- // \0 is not octal escape sequence
- var octal = (ch !== '0');
- var code = octalValue(ch);
- if (!this.eof() && character_1.Character.isOctalDigit(this.source.charCodeAt(this.index))) {
- octal = true;
- code = code * 8 + octalValue(this.source[this.index++]);
- // 3 digits are only allowed when string starts
- // with 0, 1, 2, 3
- if ('0123'.indexOf(ch) >= 0 && !this.eof() && character_1.Character.isOctalDigit(this.source.charCodeAt(this.index))) {
- code = code * 8 + octalValue(this.source[this.index++]);
- }
- }
- return {
- code: code,
- octal: octal
- };
- };
- // https://tc39.github.io/ecma262/#sec-names-and-keywords
- Scanner.prototype.scanIdentifier = function () {
- var type;
- var start = this.index;
- // Backslash (U+005C) starts an escaped character.
- var id = (this.source.charCodeAt(start) === 0x5C) ? this.getComplexIdentifier() : this.getIdentifier();
- // There is no keyword or literal with only one character.
- // Thus, it must be an identifier.
- if (id.length === 1) {
- type = 3 /* Identifier */;
- }
- else if (this.isKeyword(id)) {
- type = 4 /* Keyword */;
- }
- else if (id === 'null') {
- type = 5 /* NullLiteral */;
- }
- else if (id === 'true' || id === 'false') {
- type = 1 /* BooleanLiteral */;
- }
- else {
- type = 3 /* Identifier */;
- }
- if (type !== 3 /* Identifier */ && (start + id.length !== this.index)) {
- var restore = this.index;
- this.index = start;
- this.tolerateUnexpectedToken(messages_1.Messages.InvalidEscapedReservedWord);
- this.index = restore;
- }
- return {
- type: type,
- value: id,
- lineNumber: this.lineNumber,
- lineStart: this.lineStart,
- start: start,
- end: this.index
- };
- };
- // https://tc39.github.io/ecma262/#sec-punctuators
- Scanner.prototype.scanPunctuator = function () {
- var start = this.index;
- // Check for most common single-character punctuators.
- var str = this.source[this.index];
- switch (str) {
- case '(':
- case '{':
- if (str === '{') {
- this.curlyStack.push('{');
- }
- ++this.index;
- break;
- case '.':
- ++this.index;
- if (this.source[this.index] === '.' && this.source[this.index + 1] === '.') {
- // Spread operator: ...
- this.index += 2;
- str = '...';
- }
- break;
- case '}':
- ++this.index;
- this.curlyStack.pop();
- break;
- case ')':
- case ';':
- case ',':
- case '[':
- case ']':
- case ':':
- case '?':
- case '~':
- ++this.index;
- break;
- default:
- // 4-character punctuator.
- str = this.source.substr(this.index, 4);
- if (str === '>>>=') {
- this.index += 4;
- }
- else {
- // 3-character punctuators.
- str = str.substr(0, 3);
- if (str === '===' || str === '!==' || str === '>>>' ||
- str === '<<=' || str === '>>=' || str === '**=') {
- this.index += 3;
- }
- else {
- // 2-character punctuators.
- str = str.substr(0, 2);
- if (str === '&&' || str === '||' || str === '==' || str === '!=' ||
- str === '+=' || str === '-=' || str === '*=' || str === '/=' ||
- str === '++' || str === '--' || str === '<<' || str === '>>' ||
- str === '&=' || str === '|=' || str === '^=' || str === '%=' ||
- str === '<=' || str === '>=' || str === '=>' || str === '**') {
- this.index += 2;
- }
- else {
- // 1-character punctuators.
- str = this.source[this.index];
- if ('<>=!+-*%&|^/'.indexOf(str) >= 0) {
- ++this.index;
- }
- }
- }
- }
- }
- if (this.index === start) {
- this.throwUnexpectedToken();
- }
- return {
- type: 7 /* Punctuator */,
- value: str,
- lineNumber: this.lineNumber,
- lineStart: this.lineStart,
- start: start,
- end: this.index
- };
- };
- // https://tc39.github.io/ecma262/#sec-literals-numeric-literals
- Scanner.prototype.scanHexLiteral = function (start) {
- var num = '';
- while (!this.eof()) {
- if (!character_1.Character.isHexDigit(this.source.charCodeAt(this.index))) {
- break;
- }
- num += this.source[this.index++];
- }
- if (num.length === 0) {
- this.throwUnexpectedToken();
- }
- if (character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index))) {
- this.throwUnexpectedToken();
- }
- return {
- type: 6 /* NumericLiteral */,
- value: parseInt('0x' + num, 16),
- lineNumber: this.lineNumber,
- lineStart: this.lineStart,
- start: start,
- end: this.index
- };
- };
- Scanner.prototype.scanBinaryLiteral = function (start) {
- var num = '';
- var ch;
- while (!this.eof()) {
- ch = this.source[this.index];
- if (ch !== '0' && ch !== '1') {
- break;
- }
- num += this.source[this.index++];
- }
- if (num.length === 0) {
- // only 0b or 0B
- this.throwUnexpectedToken();
- }
- if (!this.eof()) {
- ch = this.source.charCodeAt(this.index);
- /* istanbul ignore else */
- if (character_1.Character.isIdentifierStart(ch) || character_1.Character.isDecimalDigit(ch)) {
- this.throwUnexpectedToken();
- }
- }
- return {
- type: 6 /* NumericLiteral */,
- value: parseInt(num, 2),
- lineNumber: this.lineNumber,
- lineStart: this.lineStart,
- start: start,
- end: this.index
- };
- };
- Scanner.prototype.scanOctalLiteral = function (prefix, start) {
- var num = '';
- var octal = false;
- if (character_1.Character.isOctalDigit(prefix.charCodeAt(0))) {
- octal = true;
- num = '0' + this.source[this.index++];
- }
- else {
- ++this.index;
- }
- while (!this.eof()) {
- if (!character_1.Character.isOctalDigit(this.source.charCodeAt(this.index))) {
- break;
- }
- num += this.source[this.index++];
- }
- if (!octal && num.length === 0) {
- // only 0o or 0O
- this.throwUnexpectedToken();
- }
- if (character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index)) || character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {
- this.throwUnexpectedToken();
- }
- return {
- type: 6 /* NumericLiteral */,
- value: parseInt(num, 8),
- octal: octal,
- lineNumber: this.lineNumber,
- lineStart: this.lineStart,
- start: start,
- end: this.index
- };
- };
- Scanner.prototype.isImplicitOctalLiteral = function () {
- // Implicit octal, unless there is a non-octal digit.
- // (Annex B.1.1 on Numeric Literals)
- for (var i = this.index + 1; i < this.length; ++i) {
- var ch = this.source[i];
- if (ch === '8' || ch === '9') {
- return false;
- }
- if (!character_1.Character.isOctalDigit(ch.charCodeAt(0))) {
- return true;
- }
- }
- return true;
- };
- Scanner.prototype.scanNumericLiteral = function () {
- var start = this.index;
- var ch = this.source[start];
- assert_1.assert(character_1.Character.isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'), 'Numeric literal must start with a decimal digit or a decimal point');
- var num = '';
- if (ch !== '.') {
- num = this.source[this.index++];
- ch = this.source[this.index];
- // Hex number starts with '0x'.
- // Octal number starts with '0'.
- // Octal number in ES6 starts with '0o'.
- // Binary number in ES6 starts with '0b'.
- if (num === '0') {
- if (ch === 'x' || ch === 'X') {
- ++this.index;
- return this.scanHexLiteral(start);
- }
- if (ch === 'b' || ch === 'B') {
- ++this.index;
- return this.scanBinaryLiteral(start);
- }
- if (ch === 'o' || ch === 'O') {
- return this.scanOctalLiteral(ch, start);
- }
- if (ch && character_1.Character.isOctalDigit(ch.charCodeAt(0))) {
- if (this.isImplicitOctalLiteral()) {
- return this.scanOctalLiteral(ch, start);
- }
- }
- }
- while (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {
- num += this.source[this.index++];
- }
- ch = this.source[this.index];
- }
- if (ch === '.') {
- num += this.source[this.index++];
- while (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {
- num += this.source[this.index++];
- }
- ch = this.source[this.index];
- }
- if (ch === 'e' || ch === 'E') {
- num += this.source[this.index++];
- ch = this.source[this.index];
- if (ch === '+' || ch === '-') {
- num += this.source[this.index++];
- }
- if (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {
- while (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {
- num += this.source[this.index++];
- }
- }
- else {
- this.throwUnexpectedToken();
- }
- }
- if (character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index))) {
- this.throwUnexpectedToken();
- }
- return {
- type: 6 /* NumericLiteral */,
- value: parseFloat(num),
- lineNumber: this.lineNumber,
- lineStart: this.lineStart,
- start: start,
- end: this.index
- };
- };
- // https://tc39.github.io/ecma262/#sec-literals-string-literals
- Scanner.prototype.scanStringLiteral = function () {
- var start = this.index;
- var quote = this.source[start];
- assert_1.assert((quote === '\'' || quote === '"'), 'String literal must starts with a quote');
- ++this.index;
- var octal = false;
- var str = '';
- while (!this.eof()) {
- var ch = this.source[this.index++];
- if (ch === quote) {
- quote = '';
- break;
- }
- else if (ch === '\\') {
- ch = this.source[this.index++];
- if (!ch || !character_1.Character.isLineTerminator(ch.charCodeAt(0))) {
- switch (ch) {
- case 'u':
- if (this.source[this.index] === '{') {
- ++this.index;
- str += this.scanUnicodeCodePointEscape();
- }
- else {
- var unescaped_1 = this.scanHexEscape(ch);
- if (unescaped_1 === null) {
- this.throwUnexpectedToken();
- }
- str += unescaped_1;
- }
- break;
- case 'x':
- var unescaped = this.scanHexEscape(ch);
- if (unescaped === null) {
- this.throwUnexpectedToken(messages_1.Messages.InvalidHexEscapeSequence);
- }
- str += unescaped;
- break;
- case 'n':
- str += '\n';
- break;
- case 'r':
- str += '\r';
- break;
- case 't':
- str += '\t';
- break;
- case 'b':
- str += '\b';
- break;
- case 'f':
- str += '\f';
- break;
- case 'v':
- str += '\x0B';
- break;
- case '8':
- case '9':
- str += ch;
- this.tolerateUnexpectedToken();
- break;
- default:
- if (ch && character_1.Character.isOctalDigit(ch.charCodeAt(0))) {
- var octToDec = this.octalToDecimal(ch);
- octal = octToDec.octal || octal;
- str += String.fromCharCode(octToDec.code);
- }
- else {
- str += ch;
- }
- break;
- }
- }
- else {
- ++this.lineNumber;
- if (ch === '\r' && this.source[this.index] === '\n') {
- ++this.index;
- }
- this.lineStart = this.index;
- }
- }
- else if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {
- break;
- }
- else {
- str += ch;
- }
- }
- if (quote !== '') {
- this.index = start;
- this.throwUnexpectedToken();
- }
- return {
- type: 8 /* StringLiteral */,
- value: str,
- octal: octal,
- lineNumber: this.lineNumber,
- lineStart: this.lineStart,
- start: start,
- end: this.index
- };
- };
- // https://tc39.github.io/ecma262/#sec-template-literal-lexical-components
- Scanner.prototype.scanTemplate = function () {
- var cooked = '';
- var terminated = false;
- var start = this.index;
- var head = (this.source[start] === '`');
- var tail = false;
- var rawOffset = 2;
- ++this.index;
- while (!this.eof()) {
- var ch = this.source[this.index++];
- if (ch === '`') {
- rawOffset = 1;
- tail = true;
- terminated = true;
- break;
- }
- else if (ch === '$') {
- if (this.source[this.index] === '{') {
- this.curlyStack.push('${');
- ++this.index;
- terminated = true;
- break;
- }
- cooked += ch;
- }
- else if (ch === '\\') {
- ch = this.source[this.index++];
- if (!character_1.Character.isLineTerminator(ch.charCodeAt(0))) {
- switch (ch) {
- case 'n':
- cooked += '\n';
- break;
- case 'r':
- cooked += '\r';
- break;
- case 't':
- cooked += '\t';
- break;
- case 'u':
- if (this.source[this.index] === '{') {
- ++this.index;
- cooked += this.scanUnicodeCodePointEscape();
- }
- else {
- var restore = this.index;
- var unescaped_2 = this.scanHexEscape(ch);
- if (unescaped_2 !== null) {
- cooked += unescaped_2;
- }
- else {
- this.index = restore;
- cooked += ch;
- }
- }
- break;
- case 'x':
- var unescaped = this.scanHexEscape(ch);
- if (unescaped === null) {
- this.throwUnexpectedToken(messages_1.Messages.InvalidHexEscapeSequence);
- }
- cooked += unescaped;
- break;
- case 'b':
- cooked += '\b';
- break;
- case 'f':
- cooked += '\f';
- break;
- case 'v':
- cooked += '\v';
- break;
- default:
- if (ch === '0') {
- if (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {
- // Illegal: \01 \02 and so on
- this.throwUnexpectedToken(messages_1.Messages.TemplateOctalLiteral);
- }
- cooked += '\0';
- }
- else if (character_1.Character.isOctalDigit(ch.charCodeAt(0))) {
- // Illegal: \1 \2
- this.throwUnexpectedToken(messages_1.Messages.TemplateOctalLiteral);
- }
- else {
- cooked += ch;
- }
- break;
- }
- }
- else {
- ++this.lineNumber;
- if (ch === '\r' && this.source[this.index] === '\n') {
- ++this.index;
- }
- this.lineStart = this.index;
- }
- }
- else if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {
- ++this.lineNumber;
- if (ch === '\r' && this.source[this.index] === '\n') {
- ++this.index;
- }
- this.lineStart = this.index;
- cooked += '\n';
- }
- else {
- cooked += ch;
- }
- }
- if (!terminated) {
- this.throwUnexpectedToken();
- }
- if (!head) {
- this.curlyStack.pop();
- }
- return {
- type: 10 /* Template */,
- value: this.source.slice(start + 1, this.index - rawOffset),
- cooked: cooked,
- head: head,
- tail: tail,
- lineNumber: this.lineNumber,
- lineStart: this.lineStart,
- start: start,
- end: this.index
- };
- };
- // https://tc39.github.io/ecma262/#sec-literals-regular-expression-literals
- Scanner.prototype.testRegExp = function (pattern, flags) {
- // The BMP character to use as a replacement for astral symbols when
- // translating an ES6 "u"-flagged pattern to an ES5-compatible
- // approximation.
- // Note: replacing with '\uFFFF' enables false positives in unlikely
- // scenarios. For example, `[\u{1044f}-\u{10440}]` is an invalid
- // pattern that would not be detected by this substitution.
- var astralSubstitute = '\uFFFF';
- var tmp = pattern;
- var self = this;
- if (flags.indexOf('u') >= 0) {
- tmp = tmp
- .replace(/\\u\{([0-9a-fA-F]+)\}|\\u([a-fA-F0-9]{4})/g, function ($0, $1, $2) {
- var codePoint = parseInt($1 || $2, 16);
- if (codePoint > 0x10FFFF) {
- self.throwUnexpectedToken(messages_1.Messages.InvalidRegExp);
- }
- if (codePoint <= 0xFFFF) {
- return String.fromCharCode(codePoint);
- }
- return astralSubstitute;
- })
- .replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, astralSubstitute);
- }
- // First, detect invalid regular expressions.
- try {
- RegExp(tmp);
- }
- catch (e) {
- this.throwUnexpectedToken(messages_1.Messages.InvalidRegExp);
- }
- // Return a regular expression object for this pattern-flag pair, or
- // `null` in case the current environment doesn't support the flags it
- // uses.
- try {
- return new RegExp(pattern, flags);
- }
- catch (exception) {
- /* istanbul ignore next */
- return null;
- }
- };
- Scanner.prototype.scanRegExpBody = function () {
- var ch = this.source[this.index];
- assert_1.assert(ch === '/', 'Regular expression literal must start with a slash');
- var str = this.source[this.index++];
- var classMarker = false;
- var terminated = false;
- while (!this.eof()) {
- ch = this.source[this.index++];
- str += ch;
- if (ch === '\\') {
- ch = this.source[this.index++];
- // https://tc39.github.io/ecma262/#sec-literals-regular-expression-literals
- if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {
- this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp);
- }
- str += ch;
- }
- else if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {
- this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp);
- }
- else if (classMarker) {
- if (ch === ']') {
- classMarker = false;
- }
- }
- else {
- if (ch === '/') {
- terminated = true;
- break;
- }
- else if (ch === '[') {
- classMarker = true;
- }
- }
- }
- if (!terminated) {
- this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp);
- }
- // Exclude leading and trailing slash.
- return str.substr(1, str.length - 2);
- };
- Scanner.prototype.scanRegExpFlags = function () {
- var str = '';
- var flags = '';
- while (!this.eof()) {
- var ch = this.source[this.index];
- if (!character_1.Character.isIdentifierPart(ch.charCodeAt(0))) {
- break;
- }
- ++this.index;
- if (ch === '\\' && !this.eof()) {
- ch = this.source[this.index];
- if (ch === 'u') {
- ++this.index;
- var restore = this.index;
- var char = this.scanHexEscape('u');
- if (char !== null) {
- flags += char;
- for (str += '\\u'; restore < this.index; ++restore) {
- str += this.source[restore];
- }
- }
- else {
- this.index = restore;
- flags += 'u';
- str += '\\u';
- }
- this.tolerateUnexpectedToken();
- }
- else {
- str += '\\';
- this.tolerateUnexpectedToken();
- }
- }
- else {
- flags += ch;
- str += ch;
- }
- }
- return flags;
- };
- Scanner.prototype.scanRegExp = function () {
- var start = this.index;
- var pattern = this.scanRegExpBody();
- var flags = this.scanRegExpFlags();
- var value = this.testRegExp(pattern, flags);
- return {
- type: 9 /* RegularExpression */,
- value: '',
- pattern: pattern,
- flags: flags,
- regex: value,
- lineNumber: this.lineNumber,
- lineStart: this.lineStart,
- start: start,
- end: this.index
- };
- };
- Scanner.prototype.lex = function () {
- if (this.eof()) {
- return {
- type: 2 /* EOF */,
- value: '',
- lineNumber: this.lineNumber,
- lineStart: this.lineStart,
- start: this.index,
- end: this.index
- };
- }
- var cp = this.source.charCodeAt(this.index);
- if (character_1.Character.isIdentifierStart(cp)) {
- return this.scanIdentifier();
- }
- // Very common: ( and ) and ;
- if (cp === 0x28 || cp === 0x29 || cp === 0x3B) {
- return this.scanPunctuator();
- }
- // String literal starts with single quote (U+0027) or double quote (U+0022).
- if (cp === 0x27 || cp === 0x22) {
- return this.scanStringLiteral();
- }
- // Dot (.) U+002E can also start a floating-point number, hence the need
- // to check the next character.
- if (cp === 0x2E) {
- if (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index + 1))) {
- return this.scanNumericLiteral();
- }
- return this.scanPunctuator();
- }
- if (character_1.Character.isDecimalDigit(cp)) {
- return this.scanNumericLiteral();
- }
- // Template literals start with ` (U+0060) for template head
- // or } (U+007D) for template middle or template tail.
- if (cp === 0x60 || (cp === 0x7D && this.curlyStack[this.curlyStack.length - 1] === '${')) {
- return this.scanTemplate();
- }
- // Possible identifier start in a surrogate pair.
- if (cp >= 0xD800 && cp < 0xDFFF) {
- if (character_1.Character.isIdentifierStart(this.codePointAt(this.index))) {
- return this.scanIdentifier();
- }
- }
- return this.scanPunctuator();
- };
- return Scanner;
- }());
- exports.Scanner = Scanner;
- /***/ },
- /* 13 */
- /***/ function(module, exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.TokenName = {};
- exports.TokenName[1 /* BooleanLiteral */] = 'Boolean';
- exports.TokenName[2 /* EOF */] = '<end>';
- exports.TokenName[3 /* Identifier */] = 'Identifier';
- exports.TokenName[4 /* Keyword */] = 'Keyword';
- exports.TokenName[5 /* NullLiteral */] = 'Null';
- exports.TokenName[6 /* NumericLiteral */] = 'Numeric';
- exports.TokenName[7 /* Punctuator */] = 'Punctuator';
- exports.TokenName[8 /* StringLiteral */] = 'String';
- exports.TokenName[9 /* RegularExpression */] = 'RegularExpression';
- exports.TokenName[10 /* Template */] = 'Template';
- /***/ },
- /* 14 */
- /***/ function(module, exports) {
- "use strict";
- // Generated by generate-xhtml-entities.js. DO NOT MODIFY!
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.XHTMLEntities = {
- quot: '\u0022',
- amp: '\u0026',
- apos: '\u0027',
- gt: '\u003E',
- nbsp: '\u00A0',
- iexcl: '\u00A1',
- cent: '\u00A2',
- pound: '\u00A3',
- curren: '\u00A4',
- yen: '\u00A5',
- brvbar: '\u00A6',
- sect: '\u00A7',
- uml: '\u00A8',
- copy: '\u00A9',
- ordf: '\u00AA',
- laquo: '\u00AB',
- not: '\u00AC',
- shy: '\u00AD',
- reg: '\u00AE',
- macr: '\u00AF',
- deg: '\u00B0',
- plusmn: '\u00B1',
- sup2: '\u00B2',
- sup3: '\u00B3',
- acute: '\u00B4',
- micro: '\u00B5',
- para: '\u00B6',
- middot: '\u00B7',
- cedil: '\u00B8',
- sup1: '\u00B9',
- ordm: '\u00BA',
- raquo: '\u00BB',
- frac14: '\u00BC',
- frac12: '\u00BD',
- frac34: '\u00BE',
- iquest: '\u00BF',
- Agrave: '\u00C0',
- Aacute: '\u00C1',
- Acirc: '\u00C2',
- Atilde: '\u00C3',
- Auml: '\u00C4',
- Aring: '\u00C5',
- AElig: '\u00C6',
- Ccedil: '\u00C7',
- Egrave: '\u00C8',
- Eacute: '\u00C9',
- Ecirc: '\u00CA',
- Euml: '\u00CB',
- Igrave: '\u00CC',
- Iacute: '\u00CD',
- Icirc: '\u00CE',
- Iuml: '\u00CF',
- ETH: '\u00D0',
- Ntilde: '\u00D1',
- Ograve: '\u00D2',
- Oacute: '\u00D3',
- Ocirc: '\u00D4',
- Otilde: '\u00D5',
- Ouml: '\u00D6',
- times: '\u00D7',
- Oslash: '\u00D8',
- Ugrave: '\u00D9',
- Uacute: '\u00DA',
- Ucirc: '\u00DB',
- Uuml: '\u00DC',
- Yacute: '\u00DD',
- THORN: '\u00DE',
- szlig: '\u00DF',
- agrave: '\u00E0',
- aacute: '\u00E1',
- acirc: '\u00E2',
- atilde: '\u00E3',
- auml: '\u00E4',
- aring: '\u00E5',
- aelig: '\u00E6',
- ccedil: '\u00E7',
- egrave: '\u00E8',
- eacute: '\u00E9',
- ecirc: '\u00EA',
- euml: '\u00EB',
- igrave: '\u00EC',
- iacute: '\u00ED',
- icirc: '\u00EE',
- iuml: '\u00EF',
- eth: '\u00F0',
- ntilde: '\u00F1',
- ograve: '\u00F2',
- oacute: '\u00F3',
- ocirc: '\u00F4',
- otilde: '\u00F5',
- ouml: '\u00F6',
- divide: '\u00F7',
- oslash: '\u00F8',
- ugrave: '\u00F9',
- uacute: '\u00FA',
- ucirc: '\u00FB',
- uuml: '\u00FC',
- yacute: '\u00FD',
- thorn: '\u00FE',
- yuml: '\u00FF',
- OElig: '\u0152',
- oelig: '\u0153',
- Scaron: '\u0160',
- scaron: '\u0161',
- Yuml: '\u0178',
- fnof: '\u0192',
- circ: '\u02C6',
- tilde: '\u02DC',
- Alpha: '\u0391',
- Beta: '\u0392',
- Gamma: '\u0393',
- Delta: '\u0394',
- Epsilon: '\u0395',
- Zeta: '\u0396',
- Eta: '\u0397',
- Theta: '\u0398',
- Iota: '\u0399',
- Kappa: '\u039A',
- Lambda: '\u039B',
- Mu: '\u039C',
- Nu: '\u039D',
- Xi: '\u039E',
- Omicron: '\u039F',
- Pi: '\u03A0',
- Rho: '\u03A1',
- Sigma: '\u03A3',
- Tau: '\u03A4',
- Upsilon: '\u03A5',
- Phi: '\u03A6',
- Chi: '\u03A7',
- Psi: '\u03A8',
- Omega: '\u03A9',
- alpha: '\u03B1',
- beta: '\u03B2',
- gamma: '\u03B3',
- delta: '\u03B4',
- epsilon: '\u03B5',
- zeta: '\u03B6',
- eta: '\u03B7',
- theta: '\u03B8',
- iota: '\u03B9',
- kappa: '\u03BA',
- lambda: '\u03BB',
- mu: '\u03BC',
- nu: '\u03BD',
- xi: '\u03BE',
- omicron: '\u03BF',
- pi: '\u03C0',
- rho: '\u03C1',
- sigmaf: '\u03C2',
- sigma: '\u03C3',
- tau: '\u03C4',
- upsilon: '\u03C5',
- phi: '\u03C6',
- chi: '\u03C7',
- psi: '\u03C8',
- omega: '\u03C9',
- thetasym: '\u03D1',
- upsih: '\u03D2',
- piv: '\u03D6',
- ensp: '\u2002',
- emsp: '\u2003',
- thinsp: '\u2009',
- zwnj: '\u200C',
- zwj: '\u200D',
- lrm: '\u200E',
- rlm: '\u200F',
- ndash: '\u2013',
- mdash: '\u2014',
- lsquo: '\u2018',
- rsquo: '\u2019',
- sbquo: '\u201A',
- ldquo: '\u201C',
- rdquo: '\u201D',
- bdquo: '\u201E',
- dagger: '\u2020',
- Dagger: '\u2021',
- bull: '\u2022',
- hellip: '\u2026',
- permil: '\u2030',
- prime: '\u2032',
- Prime: '\u2033',
- lsaquo: '\u2039',
- rsaquo: '\u203A',
- oline: '\u203E',
- frasl: '\u2044',
- euro: '\u20AC',
- image: '\u2111',
- weierp: '\u2118',
- real: '\u211C',
- trade: '\u2122',
- alefsym: '\u2135',
- larr: '\u2190',
- uarr: '\u2191',
- rarr: '\u2192',
- darr: '\u2193',
- harr: '\u2194',
- crarr: '\u21B5',
- lArr: '\u21D0',
- uArr: '\u21D1',
- rArr: '\u21D2',
- dArr: '\u21D3',
- hArr: '\u21D4',
- forall: '\u2200',
- part: '\u2202',
- exist: '\u2203',
- empty: '\u2205',
- nabla: '\u2207',
- isin: '\u2208',
- notin: '\u2209',
- ni: '\u220B',
- prod: '\u220F',
- sum: '\u2211',
- minus: '\u2212',
- lowast: '\u2217',
- radic: '\u221A',
- prop: '\u221D',
- infin: '\u221E',
- ang: '\u2220',
- and: '\u2227',
- or: '\u2228',
- cap: '\u2229',
- cup: '\u222A',
- int: '\u222B',
- there4: '\u2234',
- sim: '\u223C',
- cong: '\u2245',
- asymp: '\u2248',
- ne: '\u2260',
- equiv: '\u2261',
- le: '\u2264',
- ge: '\u2265',
- sub: '\u2282',
- sup: '\u2283',
- nsub: '\u2284',
- sube: '\u2286',
- supe: '\u2287',
- oplus: '\u2295',
- otimes: '\u2297',
- perp: '\u22A5',
- sdot: '\u22C5',
- lceil: '\u2308',
- rceil: '\u2309',
- lfloor: '\u230A',
- rfloor: '\u230B',
- loz: '\u25CA',
- spades: '\u2660',
- clubs: '\u2663',
- hearts: '\u2665',
- diams: '\u2666',
- lang: '\u27E8',
- rang: '\u27E9'
- };
- /***/ },
- /* 15 */
- /***/ function(module, exports, __nested_webpack_require_277122__) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var error_handler_1 = __nested_webpack_require_277122__(10);
- var scanner_1 = __nested_webpack_require_277122__(12);
- var token_1 = __nested_webpack_require_277122__(13);
- var Reader = (function () {
- function Reader() {
- this.values = [];
- this.curly = this.paren = -1;
- }
- // A function following one of those tokens is an expression.
- Reader.prototype.beforeFunctionExpression = function (t) {
- return ['(', '{', '[', 'in', 'typeof', 'instanceof', 'new',
- 'return', 'case', 'delete', 'throw', 'void',
- // assignment operators
- '=', '+=', '-=', '*=', '**=', '/=', '%=', '<<=', '>>=', '>>>=',
- '&=', '|=', '^=', ',',
- // binary/unary operators
- '+', '-', '*', '**', '/', '%', '++', '--', '<<', '>>', '>>>', '&',
- '|', '^', '!', '~', '&&', '||', '?', ':', '===', '==', '>=',
- '<=', '<', '>', '!=', '!=='].indexOf(t) >= 0;
- };
- // Determine if forward slash (/) is an operator or part of a regular expression
- // https://github.com/mozilla/sweet.js/wiki/design
- Reader.prototype.isRegexStart = function () {
- var previous = this.values[this.values.length - 1];
- var regex = (previous !== null);
- switch (previous) {
- case 'this':
- case ']':
- regex = false;
- break;
- case ')':
- var keyword = this.values[this.paren - 1];
- regex = (keyword === 'if' || keyword === 'while' || keyword === 'for' || keyword === 'with');
- break;
- case '}':
- // Dividing a function by anything makes little sense,
- // but we have to check for that.
- regex = false;
- if (this.values[this.curly - 3] === 'function') {
- // Anonymous function, e.g. function(){} /42
- var check = this.values[this.curly - 4];
- regex = check ? !this.beforeFunctionExpression(check) : false;
- }
- else if (this.values[this.curly - 4] === 'function') {
- // Named function, e.g. function f(){} /42/
- var check = this.values[this.curly - 5];
- regex = check ? !this.beforeFunctionExpression(check) : true;
- }
- break;
- default:
- break;
- }
- return regex;
- };
- Reader.prototype.push = function (token) {
- if (token.type === 7 /* Punctuator */ || token.type === 4 /* Keyword */) {
- if (token.value === '{') {
- this.curly = this.values.length;
- }
- else if (token.value === '(') {
- this.paren = this.values.length;
- }
- this.values.push(token.value);
- }
- else {
- this.values.push(null);
- }
- };
- return Reader;
- }());
- var Tokenizer = (function () {
- function Tokenizer(code, config) {
- this.errorHandler = new error_handler_1.ErrorHandler();
- this.errorHandler.tolerant = config ? (typeof config.tolerant === 'boolean' && config.tolerant) : false;
- this.scanner = new scanner_1.Scanner(code, this.errorHandler);
- this.scanner.trackComment = config ? (typeof config.comment === 'boolean' && config.comment) : false;
- this.trackRange = config ? (typeof config.range === 'boolean' && config.range) : false;
- this.trackLoc = config ? (typeof config.loc === 'boolean' && config.loc) : false;
- this.buffer = [];
- this.reader = new Reader();
- }
- Tokenizer.prototype.errors = function () {
- return this.errorHandler.errors;
- };
- Tokenizer.prototype.getNextToken = function () {
- if (this.buffer.length === 0) {
- var comments = this.scanner.scanComments();
- if (this.scanner.trackComment) {
- for (var i = 0; i < comments.length; ++i) {
- var e = comments[i];
- var value = this.scanner.source.slice(e.slice[0], e.slice[1]);
- var comment = {
- type: e.multiLine ? 'BlockComment' : 'LineComment',
- value: value
- };
- if (this.trackRange) {
- comment.range = e.range;
- }
- if (this.trackLoc) {
- comment.loc = e.loc;
- }
- this.buffer.push(comment);
- }
- }
- if (!this.scanner.eof()) {
- var loc = void 0;
- if (this.trackLoc) {
- loc = {
- start: {
- line: this.scanner.lineNumber,
- column: this.scanner.index - this.scanner.lineStart
- },
- end: {}
- };
- }
- var startRegex = (this.scanner.source[this.scanner.index] === '/') && this.reader.isRegexStart();
- var token = startRegex ? this.scanner.scanRegExp() : this.scanner.lex();
- this.reader.push(token);
- var entry = {
- type: token_1.TokenName[token.type],
- value: this.scanner.source.slice(token.start, token.end)
- };
- if (this.trackRange) {
- entry.range = [token.start, token.end];
- }
- if (this.trackLoc) {
- loc.end = {
- line: this.scanner.lineNumber,
- column: this.scanner.index - this.scanner.lineStart
- };
- entry.loc = loc;
- }
- if (token.type === 9 /* RegularExpression */) {
- var pattern = token.pattern;
- var flags = token.flags;
- entry.regex = { pattern: pattern, flags: flags };
- }
- this.buffer.push(entry);
- }
- }
- return this.buffer.shift();
- };
- return Tokenizer;
- }());
- exports.Tokenizer = Tokenizer;
- /***/ }
- /******/ ])
- });
- ;
- /***/ }),
- /***/ 93320:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- var yaml = __webpack_require__(51294);
- module.exports = yaml;
- /***/ }),
- /***/ 51294:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- var loader = __webpack_require__(40028);
- var dumper = __webpack_require__(96157);
- function deprecated(name) {
- return function () {
- throw new Error('Function ' + name + ' is deprecated and cannot be used.');
- };
- }
- module.exports.Type = __webpack_require__(53899);
- module.exports.Schema = __webpack_require__(82409);
- module.exports.FAILSAFE_SCHEMA = __webpack_require__(75322);
- module.exports.JSON_SCHEMA = __webpack_require__(65796);
- module.exports.CORE_SCHEMA = __webpack_require__(17318);
- module.exports.DEFAULT_SAFE_SCHEMA = __webpack_require__(5972);
- module.exports.DEFAULT_FULL_SCHEMA = __webpack_require__(19321);
- module.exports.load = loader.load;
- module.exports.loadAll = loader.loadAll;
- module.exports.safeLoad = loader.safeLoad;
- module.exports.safeLoadAll = loader.safeLoadAll;
- module.exports.dump = dumper.dump;
- module.exports.safeDump = dumper.safeDump;
- module.exports.YAMLException = __webpack_require__(14884);
- // Deprecated schema names from JS-YAML 2.0.x
- module.exports.MINIMAL_SCHEMA = __webpack_require__(75322);
- module.exports.SAFE_SCHEMA = __webpack_require__(5972);
- module.exports.DEFAULT_SCHEMA = __webpack_require__(19321);
- // Deprecated functions from JS-YAML 1.x.x
- module.exports.scan = deprecated('scan');
- module.exports.parse = deprecated('parse');
- module.exports.compose = deprecated('compose');
- module.exports.addConstructor = deprecated('addConstructor');
- /***/ }),
- /***/ 25596:
- /***/ ((module) => {
- "use strict";
- function isNothing(subject) {
- return (typeof subject === 'undefined') || (subject === null);
- }
- function isObject(subject) {
- return (typeof subject === 'object') && (subject !== null);
- }
- function toArray(sequence) {
- if (Array.isArray(sequence)) return sequence;
- else if (isNothing(sequence)) return [];
- return [ sequence ];
- }
- function extend(target, source) {
- var index, length, key, sourceKeys;
- if (source) {
- sourceKeys = Object.keys(source);
- for (index = 0, length = sourceKeys.length; index < length; index += 1) {
- key = sourceKeys[index];
- target[key] = source[key];
- }
- }
- return target;
- }
- function repeat(string, count) {
- var result = '', cycle;
- for (cycle = 0; cycle < count; cycle += 1) {
- result += string;
- }
- return result;
- }
- function isNegativeZero(number) {
- return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number);
- }
- module.exports.isNothing = isNothing;
- module.exports.isObject = isObject;
- module.exports.toArray = toArray;
- module.exports.repeat = repeat;
- module.exports.isNegativeZero = isNegativeZero;
- module.exports.extend = extend;
- /***/ }),
- /***/ 96157:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- /*eslint-disable no-use-before-define*/
- var common = __webpack_require__(25596);
- var YAMLException = __webpack_require__(14884);
- var DEFAULT_FULL_SCHEMA = __webpack_require__(19321);
- var DEFAULT_SAFE_SCHEMA = __webpack_require__(5972);
- var _toString = Object.prototype.toString;
- var _hasOwnProperty = Object.prototype.hasOwnProperty;
- var CHAR_TAB = 0x09; /* Tab */
- var CHAR_LINE_FEED = 0x0A; /* LF */
- var CHAR_CARRIAGE_RETURN = 0x0D; /* CR */
- var CHAR_SPACE = 0x20; /* Space */
- var CHAR_EXCLAMATION = 0x21; /* ! */
- var CHAR_DOUBLE_QUOTE = 0x22; /* " */
- var CHAR_SHARP = 0x23; /* # */
- var CHAR_PERCENT = 0x25; /* % */
- var CHAR_AMPERSAND = 0x26; /* & */
- var CHAR_SINGLE_QUOTE = 0x27; /* ' */
- var CHAR_ASTERISK = 0x2A; /* * */
- var CHAR_COMMA = 0x2C; /* , */
- var CHAR_MINUS = 0x2D; /* - */
- var CHAR_COLON = 0x3A; /* : */
- var CHAR_EQUALS = 0x3D; /* = */
- var CHAR_GREATER_THAN = 0x3E; /* > */
- var CHAR_QUESTION = 0x3F; /* ? */
- var CHAR_COMMERCIAL_AT = 0x40; /* @ */
- var CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */
- var CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */
- var CHAR_GRAVE_ACCENT = 0x60; /* ` */
- var CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */
- var CHAR_VERTICAL_LINE = 0x7C; /* | */
- var CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */
- var ESCAPE_SEQUENCES = {};
- ESCAPE_SEQUENCES[0x00] = '\\0';
- ESCAPE_SEQUENCES[0x07] = '\\a';
- ESCAPE_SEQUENCES[0x08] = '\\b';
- ESCAPE_SEQUENCES[0x09] = '\\t';
- ESCAPE_SEQUENCES[0x0A] = '\\n';
- ESCAPE_SEQUENCES[0x0B] = '\\v';
- ESCAPE_SEQUENCES[0x0C] = '\\f';
- ESCAPE_SEQUENCES[0x0D] = '\\r';
- ESCAPE_SEQUENCES[0x1B] = '\\e';
- ESCAPE_SEQUENCES[0x22] = '\\"';
- ESCAPE_SEQUENCES[0x5C] = '\\\\';
- ESCAPE_SEQUENCES[0x85] = '\\N';
- ESCAPE_SEQUENCES[0xA0] = '\\_';
- ESCAPE_SEQUENCES[0x2028] = '\\L';
- ESCAPE_SEQUENCES[0x2029] = '\\P';
- var DEPRECATED_BOOLEANS_SYNTAX = [
- 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON',
- 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF'
- ];
- function compileStyleMap(schema, map) {
- var result, keys, index, length, tag, style, type;
- if (map === null) return {};
- result = {};
- keys = Object.keys(map);
- for (index = 0, length = keys.length; index < length; index += 1) {
- tag = keys[index];
- style = String(map[tag]);
- if (tag.slice(0, 2) === '!!') {
- tag = 'tag:yaml.org,2002:' + tag.slice(2);
- }
- type = schema.compiledTypeMap['fallback'][tag];
- if (type && _hasOwnProperty.call(type.styleAliases, style)) {
- style = type.styleAliases[style];
- }
- result[tag] = style;
- }
- return result;
- }
- function encodeHex(character) {
- var string, handle, length;
- string = character.toString(16).toUpperCase();
- if (character <= 0xFF) {
- handle = 'x';
- length = 2;
- } else if (character <= 0xFFFF) {
- handle = 'u';
- length = 4;
- } else if (character <= 0xFFFFFFFF) {
- handle = 'U';
- length = 8;
- } else {
- throw new YAMLException('code point within a string may not be greater than 0xFFFFFFFF');
- }
- return '\\' + handle + common.repeat('0', length - string.length) + string;
- }
- function State(options) {
- this.schema = options['schema'] || DEFAULT_FULL_SCHEMA;
- this.indent = Math.max(1, (options['indent'] || 2));
- this.noArrayIndent = options['noArrayIndent'] || false;
- this.skipInvalid = options['skipInvalid'] || false;
- this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']);
- this.styleMap = compileStyleMap(this.schema, options['styles'] || null);
- this.sortKeys = options['sortKeys'] || false;
- this.lineWidth = options['lineWidth'] || 80;
- this.noRefs = options['noRefs'] || false;
- this.noCompatMode = options['noCompatMode'] || false;
- this.condenseFlow = options['condenseFlow'] || false;
- this.implicitTypes = this.schema.compiledImplicit;
- this.explicitTypes = this.schema.compiledExplicit;
- this.tag = null;
- this.result = '';
- this.duplicates = [];
- this.usedDuplicates = null;
- }
- // Indents every line in a string. Empty lines (\n only) are not indented.
- function indentString(string, spaces) {
- var ind = common.repeat(' ', spaces),
- position = 0,
- next = -1,
- result = '',
- line,
- length = string.length;
- while (position < length) {
- next = string.indexOf('\n', position);
- if (next === -1) {
- line = string.slice(position);
- position = length;
- } else {
- line = string.slice(position, next + 1);
- position = next + 1;
- }
- if (line.length && line !== '\n') result += ind;
- result += line;
- }
- return result;
- }
- function generateNextLine(state, level) {
- return '\n' + common.repeat(' ', state.indent * level);
- }
- function testImplicitResolving(state, str) {
- var index, length, type;
- for (index = 0, length = state.implicitTypes.length; index < length; index += 1) {
- type = state.implicitTypes[index];
- if (type.resolve(str)) {
- return true;
- }
- }
- return false;
- }
- // [33] s-white ::= s-space | s-tab
- function isWhitespace(c) {
- return c === CHAR_SPACE || c === CHAR_TAB;
- }
- // Returns true if the character can be printed without escaping.
- // From YAML 1.2: "any allowed characters known to be non-printable
- // should also be escaped. [However,] This isn’t mandatory"
- // Derived from nb-char - \t - #x85 - #xA0 - #x2028 - #x2029.
- function isPrintable(c) {
- return (0x00020 <= c && c <= 0x00007E)
- || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029)
- || ((0x0E000 <= c && c <= 0x00FFFD) && c !== 0xFEFF /* BOM */)
- || (0x10000 <= c && c <= 0x10FFFF);
- }
- // [34] ns-char ::= nb-char - s-white
- // [27] nb-char ::= c-printable - b-char - c-byte-order-mark
- // [26] b-char ::= b-line-feed | b-carriage-return
- // [24] b-line-feed ::= #xA /* LF */
- // [25] b-carriage-return ::= #xD /* CR */
- // [3] c-byte-order-mark ::= #xFEFF
- function isNsChar(c) {
- return isPrintable(c) && !isWhitespace(c)
- // byte-order-mark
- && c !== 0xFEFF
- // b-char
- && c !== CHAR_CARRIAGE_RETURN
- && c !== CHAR_LINE_FEED;
- }
- // Simplified test for values allowed after the first character in plain style.
- function isPlainSafe(c, prev) {
- // Uses a subset of nb-char - c-flow-indicator - ":" - "#"
- // where nb-char ::= c-printable - b-char - c-byte-order-mark.
- return isPrintable(c) && c !== 0xFEFF
- // - c-flow-indicator
- && c !== CHAR_COMMA
- && c !== CHAR_LEFT_SQUARE_BRACKET
- && c !== CHAR_RIGHT_SQUARE_BRACKET
- && c !== CHAR_LEFT_CURLY_BRACKET
- && c !== CHAR_RIGHT_CURLY_BRACKET
- // - ":" - "#"
- // /* An ns-char preceding */ "#"
- && c !== CHAR_COLON
- && ((c !== CHAR_SHARP) || (prev && isNsChar(prev)));
- }
- // Simplified test for values allowed as the first character in plain style.
- function isPlainSafeFirst(c) {
- // Uses a subset of ns-char - c-indicator
- // where ns-char = nb-char - s-white.
- return isPrintable(c) && c !== 0xFEFF
- && !isWhitespace(c) // - s-white
- // - (c-indicator ::=
- // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}”
- && c !== CHAR_MINUS
- && c !== CHAR_QUESTION
- && c !== CHAR_COLON
- && c !== CHAR_COMMA
- && c !== CHAR_LEFT_SQUARE_BRACKET
- && c !== CHAR_RIGHT_SQUARE_BRACKET
- && c !== CHAR_LEFT_CURLY_BRACKET
- && c !== CHAR_RIGHT_CURLY_BRACKET
- // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “"”
- && c !== CHAR_SHARP
- && c !== CHAR_AMPERSAND
- && c !== CHAR_ASTERISK
- && c !== CHAR_EXCLAMATION
- && c !== CHAR_VERTICAL_LINE
- && c !== CHAR_EQUALS
- && c !== CHAR_GREATER_THAN
- && c !== CHAR_SINGLE_QUOTE
- && c !== CHAR_DOUBLE_QUOTE
- // | “%” | “@” | “`”)
- && c !== CHAR_PERCENT
- && c !== CHAR_COMMERCIAL_AT
- && c !== CHAR_GRAVE_ACCENT;
- }
- // Determines whether block indentation indicator is required.
- function needIndentIndicator(string) {
- var leadingSpaceRe = /^\n* /;
- return leadingSpaceRe.test(string);
- }
- var STYLE_PLAIN = 1,
- STYLE_SINGLE = 2,
- STYLE_LITERAL = 3,
- STYLE_FOLDED = 4,
- STYLE_DOUBLE = 5;
- // Determines which scalar styles are possible and returns the preferred style.
- // lineWidth = -1 => no limit.
- // Pre-conditions: str.length > 0.
- // Post-conditions:
- // STYLE_PLAIN or STYLE_SINGLE => no \n are in the string.
- // STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1).
- // STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1).
- function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType) {
- var i;
- var char, prev_char;
- var hasLineBreak = false;
- var hasFoldableLine = false; // only checked if shouldTrackWidth
- var shouldTrackWidth = lineWidth !== -1;
- var previousLineBreak = -1; // count the first line correctly
- var plain = isPlainSafeFirst(string.charCodeAt(0))
- && !isWhitespace(string.charCodeAt(string.length - 1));
- if (singleLineOnly) {
- // Case: no block styles.
- // Check for disallowed characters to rule out plain and single.
- for (i = 0; i < string.length; i++) {
- char = string.charCodeAt(i);
- if (!isPrintable(char)) {
- return STYLE_DOUBLE;
- }
- prev_char = i > 0 ? string.charCodeAt(i - 1) : null;
- plain = plain && isPlainSafe(char, prev_char);
- }
- } else {
- // Case: block styles permitted.
- for (i = 0; i < string.length; i++) {
- char = string.charCodeAt(i);
- if (char === CHAR_LINE_FEED) {
- hasLineBreak = true;
- // Check if any line can be folded.
- if (shouldTrackWidth) {
- hasFoldableLine = hasFoldableLine ||
- // Foldable line = too long, and not more-indented.
- (i - previousLineBreak - 1 > lineWidth &&
- string[previousLineBreak + 1] !== ' ');
- previousLineBreak = i;
- }
- } else if (!isPrintable(char)) {
- return STYLE_DOUBLE;
- }
- prev_char = i > 0 ? string.charCodeAt(i - 1) : null;
- plain = plain && isPlainSafe(char, prev_char);
- }
- // in case the end is missing a \n
- hasFoldableLine = hasFoldableLine || (shouldTrackWidth &&
- (i - previousLineBreak - 1 > lineWidth &&
- string[previousLineBreak + 1] !== ' '));
- }
- // Although every style can represent \n without escaping, prefer block styles
- // for multiline, since they're more readable and they don't add empty lines.
- // Also prefer folding a super-long line.
- if (!hasLineBreak && !hasFoldableLine) {
- // Strings interpretable as another type have to be quoted;
- // e.g. the string 'true' vs. the boolean true.
- return plain && !testAmbiguousType(string)
- ? STYLE_PLAIN : STYLE_SINGLE;
- }
- // Edge case: block indentation indicator can only have one digit.
- if (indentPerLevel > 9 && needIndentIndicator(string)) {
- return STYLE_DOUBLE;
- }
- // At this point we know block styles are valid.
- // Prefer literal style unless we want to fold.
- return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL;
- }
- // Note: line breaking/folding is implemented for only the folded style.
- // NB. We drop the last trailing newline (if any) of a returned block scalar
- // since the dumper adds its own newline. This always works:
- // • No ending newline => unaffected; already using strip "-" chomping.
- // • Ending newline => removed then restored.
- // Importantly, this keeps the "+" chomp indicator from gaining an extra line.
- function writeScalar(state, string, level, iskey) {
- state.dump = (function () {
- if (string.length === 0) {
- return "''";
- }
- if (!state.noCompatMode &&
- DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1) {
- return "'" + string + "'";
- }
- var indent = state.indent * Math.max(1, level); // no 0-indent scalars
- // As indentation gets deeper, let the width decrease monotonically
- // to the lower bound min(state.lineWidth, 40).
- // Note that this implies
- // state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound.
- // state.lineWidth > 40 + state.indent: width decreases until the lower bound.
- // This behaves better than a constant minimum width which disallows narrower options,
- // or an indent threshold which causes the width to suddenly increase.
- var lineWidth = state.lineWidth === -1
- ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent);
- // Without knowing if keys are implicit/explicit, assume implicit for safety.
- var singleLineOnly = iskey
- // No block styles in flow mode.
- || (state.flowLevel > -1 && level >= state.flowLevel);
- function testAmbiguity(string) {
- return testImplicitResolving(state, string);
- }
- switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, testAmbiguity)) {
- case STYLE_PLAIN:
- return string;
- case STYLE_SINGLE:
- return "'" + string.replace(/'/g, "''") + "'";
- case STYLE_LITERAL:
- return '|' + blockHeader(string, state.indent)
- + dropEndingNewline(indentString(string, indent));
- case STYLE_FOLDED:
- return '>' + blockHeader(string, state.indent)
- + dropEndingNewline(indentString(foldString(string, lineWidth), indent));
- case STYLE_DOUBLE:
- return '"' + escapeString(string, lineWidth) + '"';
- default:
- throw new YAMLException('impossible error: invalid scalar style');
- }
- }());
- }
- // Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9.
- function blockHeader(string, indentPerLevel) {
- var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : '';
- // note the special case: the string '\n' counts as a "trailing" empty line.
- var clip = string[string.length - 1] === '\n';
- var keep = clip && (string[string.length - 2] === '\n' || string === '\n');
- var chomp = keep ? '+' : (clip ? '' : '-');
- return indentIndicator + chomp + '\n';
- }
- // (See the note for writeScalar.)
- function dropEndingNewline(string) {
- return string[string.length - 1] === '\n' ? string.slice(0, -1) : string;
- }
- // Note: a long line without a suitable break point will exceed the width limit.
- // Pre-conditions: every char in str isPrintable, str.length > 0, width > 0.
- function foldString(string, width) {
- // In folded style, $k$ consecutive newlines output as $k+1$ newlines—
- // unless they're before or after a more-indented line, or at the very
- // beginning or end, in which case $k$ maps to $k$.
- // Therefore, parse each chunk as newline(s) followed by a content line.
- var lineRe = /(\n+)([^\n]*)/g;
- // first line (possibly an empty line)
- var result = (function () {
- var nextLF = string.indexOf('\n');
- nextLF = nextLF !== -1 ? nextLF : string.length;
- lineRe.lastIndex = nextLF;
- return foldLine(string.slice(0, nextLF), width);
- }());
- // If we haven't reached the first content line yet, don't add an extra \n.
- var prevMoreIndented = string[0] === '\n' || string[0] === ' ';
- var moreIndented;
- // rest of the lines
- var match;
- while ((match = lineRe.exec(string))) {
- var prefix = match[1], line = match[2];
- moreIndented = (line[0] === ' ');
- result += prefix
- + (!prevMoreIndented && !moreIndented && line !== ''
- ? '\n' : '')
- + foldLine(line, width);
- prevMoreIndented = moreIndented;
- }
- return result;
- }
- // Greedy line breaking.
- // Picks the longest line under the limit each time,
- // otherwise settles for the shortest line over the limit.
- // NB. More-indented lines *cannot* be folded, as that would add an extra \n.
- function foldLine(line, width) {
- if (line === '' || line[0] === ' ') return line;
- // Since a more-indented line adds a \n, breaks can't be followed by a space.
- var breakRe = / [^ ]/g; // note: the match index will always be <= length-2.
- var match;
- // start is an inclusive index. end, curr, and next are exclusive.
- var start = 0, end, curr = 0, next = 0;
- var result = '';
- // Invariants: 0 <= start <= length-1.
- // 0 <= curr <= next <= max(0, length-2). curr - start <= width.
- // Inside the loop:
- // A match implies length >= 2, so curr and next are <= length-2.
- while ((match = breakRe.exec(line))) {
- next = match.index;
- // maintain invariant: curr - start <= width
- if (next - start > width) {
- end = (curr > start) ? curr : next; // derive end <= length-2
- result += '\n' + line.slice(start, end);
- // skip the space that was output as \n
- start = end + 1; // derive start <= length-1
- }
- curr = next;
- }
- // By the invariants, start <= length-1, so there is something left over.
- // It is either the whole string or a part starting from non-whitespace.
- result += '\n';
- // Insert a break if the remainder is too long and there is a break available.
- if (line.length - start > width && curr > start) {
- result += line.slice(start, curr) + '\n' + line.slice(curr + 1);
- } else {
- result += line.slice(start);
- }
- return result.slice(1); // drop extra \n joiner
- }
- // Escapes a double-quoted string.
- function escapeString(string) {
- var result = '';
- var char, nextChar;
- var escapeSeq;
- for (var i = 0; i < string.length; i++) {
- char = string.charCodeAt(i);
- // Check for surrogate pairs (reference Unicode 3.0 section "3.7 Surrogates").
- if (char >= 0xD800 && char <= 0xDBFF/* high surrogate */) {
- nextChar = string.charCodeAt(i + 1);
- if (nextChar >= 0xDC00 && nextChar <= 0xDFFF/* low surrogate */) {
- // Combine the surrogate pair and store it escaped.
- result += encodeHex((char - 0xD800) * 0x400 + nextChar - 0xDC00 + 0x10000);
- // Advance index one extra since we already used that char here.
- i++; continue;
- }
- }
- escapeSeq = ESCAPE_SEQUENCES[char];
- result += !escapeSeq && isPrintable(char)
- ? string[i]
- : escapeSeq || encodeHex(char);
- }
- return result;
- }
- function writeFlowSequence(state, level, object) {
- var _result = '',
- _tag = state.tag,
- index,
- length;
- for (index = 0, length = object.length; index < length; index += 1) {
- // Write only valid elements.
- if (writeNode(state, level, object[index], false, false)) {
- if (index !== 0) _result += ',' + (!state.condenseFlow ? ' ' : '');
- _result += state.dump;
- }
- }
- state.tag = _tag;
- state.dump = '[' + _result + ']';
- }
- function writeBlockSequence(state, level, object, compact) {
- var _result = '',
- _tag = state.tag,
- index,
- length;
- for (index = 0, length = object.length; index < length; index += 1) {
- // Write only valid elements.
- if (writeNode(state, level + 1, object[index], true, true)) {
- if (!compact || index !== 0) {
- _result += generateNextLine(state, level);
- }
- if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {
- _result += '-';
- } else {
- _result += '- ';
- }
- _result += state.dump;
- }
- }
- state.tag = _tag;
- state.dump = _result || '[]'; // Empty sequence if no valid values.
- }
- function writeFlowMapping(state, level, object) {
- var _result = '',
- _tag = state.tag,
- objectKeyList = Object.keys(object),
- index,
- length,
- objectKey,
- objectValue,
- pairBuffer;
- for (index = 0, length = objectKeyList.length; index < length; index += 1) {
- pairBuffer = '';
- if (index !== 0) pairBuffer += ', ';
- if (state.condenseFlow) pairBuffer += '"';
- objectKey = objectKeyList[index];
- objectValue = object[objectKey];
- if (!writeNode(state, level, objectKey, false, false)) {
- continue; // Skip this pair because of invalid key;
- }
- if (state.dump.length > 1024) pairBuffer += '? ';
- pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' ');
- if (!writeNode(state, level, objectValue, false, false)) {
- continue; // Skip this pair because of invalid value.
- }
- pairBuffer += state.dump;
- // Both key and value are valid.
- _result += pairBuffer;
- }
- state.tag = _tag;
- state.dump = '{' + _result + '}';
- }
- function writeBlockMapping(state, level, object, compact) {
- var _result = '',
- _tag = state.tag,
- objectKeyList = Object.keys(object),
- index,
- length,
- objectKey,
- objectValue,
- explicitPair,
- pairBuffer;
- // Allow sorting keys so that the output file is deterministic
- if (state.sortKeys === true) {
- // Default sorting
- objectKeyList.sort();
- } else if (typeof state.sortKeys === 'function') {
- // Custom sort function
- objectKeyList.sort(state.sortKeys);
- } else if (state.sortKeys) {
- // Something is wrong
- throw new YAMLException('sortKeys must be a boolean or a function');
- }
- for (index = 0, length = objectKeyList.length; index < length; index += 1) {
- pairBuffer = '';
- if (!compact || index !== 0) {
- pairBuffer += generateNextLine(state, level);
- }
- objectKey = objectKeyList[index];
- objectValue = object[objectKey];
- if (!writeNode(state, level + 1, objectKey, true, true, true)) {
- continue; // Skip this pair because of invalid key.
- }
- explicitPair = (state.tag !== null && state.tag !== '?') ||
- (state.dump && state.dump.length > 1024);
- if (explicitPair) {
- if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {
- pairBuffer += '?';
- } else {
- pairBuffer += '? ';
- }
- }
- pairBuffer += state.dump;
- if (explicitPair) {
- pairBuffer += generateNextLine(state, level);
- }
- if (!writeNode(state, level + 1, objectValue, true, explicitPair)) {
- continue; // Skip this pair because of invalid value.
- }
- if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {
- pairBuffer += ':';
- } else {
- pairBuffer += ': ';
- }
- pairBuffer += state.dump;
- // Both key and value are valid.
- _result += pairBuffer;
- }
- state.tag = _tag;
- state.dump = _result || '{}'; // Empty mapping if no valid pairs.
- }
- function detectType(state, object, explicit) {
- var _result, typeList, index, length, type, style;
- typeList = explicit ? state.explicitTypes : state.implicitTypes;
- for (index = 0, length = typeList.length; index < length; index += 1) {
- type = typeList[index];
- if ((type.instanceOf || type.predicate) &&
- (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) &&
- (!type.predicate || type.predicate(object))) {
- state.tag = explicit ? type.tag : '?';
- if (type.represent) {
- style = state.styleMap[type.tag] || type.defaultStyle;
- if (_toString.call(type.represent) === '[object Function]') {
- _result = type.represent(object, style);
- } else if (_hasOwnProperty.call(type.represent, style)) {
- _result = type.represent[style](object, style);
- } else {
- throw new YAMLException('!<' + type.tag + '> tag resolver accepts not "' + style + '" style');
- }
- state.dump = _result;
- }
- return true;
- }
- }
- return false;
- }
- // Serializes `object` and writes it to global `result`.
- // Returns true on success, or false on invalid object.
- //
- function writeNode(state, level, object, block, compact, iskey) {
- state.tag = null;
- state.dump = object;
- if (!detectType(state, object, false)) {
- detectType(state, object, true);
- }
- var type = _toString.call(state.dump);
- if (block) {
- block = (state.flowLevel < 0 || state.flowLevel > level);
- }
- var objectOrArray = type === '[object Object]' || type === '[object Array]',
- duplicateIndex,
- duplicate;
- if (objectOrArray) {
- duplicateIndex = state.duplicates.indexOf(object);
- duplicate = duplicateIndex !== -1;
- }
- if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) {
- compact = false;
- }
- if (duplicate && state.usedDuplicates[duplicateIndex]) {
- state.dump = '*ref_' + duplicateIndex;
- } else {
- if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) {
- state.usedDuplicates[duplicateIndex] = true;
- }
- if (type === '[object Object]') {
- if (block && (Object.keys(state.dump).length !== 0)) {
- writeBlockMapping(state, level, state.dump, compact);
- if (duplicate) {
- state.dump = '&ref_' + duplicateIndex + state.dump;
- }
- } else {
- writeFlowMapping(state, level, state.dump);
- if (duplicate) {
- state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;
- }
- }
- } else if (type === '[object Array]') {
- var arrayLevel = (state.noArrayIndent && (level > 0)) ? level - 1 : level;
- if (block && (state.dump.length !== 0)) {
- writeBlockSequence(state, arrayLevel, state.dump, compact);
- if (duplicate) {
- state.dump = '&ref_' + duplicateIndex + state.dump;
- }
- } else {
- writeFlowSequence(state, arrayLevel, state.dump);
- if (duplicate) {
- state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;
- }
- }
- } else if (type === '[object String]') {
- if (state.tag !== '?') {
- writeScalar(state, state.dump, level, iskey);
- }
- } else {
- if (state.skipInvalid) return false;
- throw new YAMLException('unacceptable kind of an object to dump ' + type);
- }
- if (state.tag !== null && state.tag !== '?') {
- state.dump = '!<' + state.tag + '> ' + state.dump;
- }
- }
- return true;
- }
- function getDuplicateReferences(object, state) {
- var objects = [],
- duplicatesIndexes = [],
- index,
- length;
- inspectNode(object, objects, duplicatesIndexes);
- for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) {
- state.duplicates.push(objects[duplicatesIndexes[index]]);
- }
- state.usedDuplicates = new Array(length);
- }
- function inspectNode(object, objects, duplicatesIndexes) {
- var objectKeyList,
- index,
- length;
- if (object !== null && typeof object === 'object') {
- index = objects.indexOf(object);
- if (index !== -1) {
- if (duplicatesIndexes.indexOf(index) === -1) {
- duplicatesIndexes.push(index);
- }
- } else {
- objects.push(object);
- if (Array.isArray(object)) {
- for (index = 0, length = object.length; index < length; index += 1) {
- inspectNode(object[index], objects, duplicatesIndexes);
- }
- } else {
- objectKeyList = Object.keys(object);
- for (index = 0, length = objectKeyList.length; index < length; index += 1) {
- inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes);
- }
- }
- }
- }
- }
- function dump(input, options) {
- options = options || {};
- var state = new State(options);
- if (!state.noRefs) getDuplicateReferences(input, state);
- if (writeNode(state, 0, input, true, true)) return state.dump + '\n';
- return '';
- }
- function safeDump(input, options) {
- return dump(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options));
- }
- module.exports.dump = dump;
- module.exports.safeDump = safeDump;
- /***/ }),
- /***/ 14884:
- /***/ ((module) => {
- "use strict";
- // YAML error class. http://stackoverflow.com/questions/8458984
- //
- function YAMLException(reason, mark) {
- // Super constructor
- Error.call(this);
- this.name = 'YAMLException';
- this.reason = reason;
- this.mark = mark;
- this.message = (this.reason || '(unknown reason)') + (this.mark ? ' ' + this.mark.toString() : '');
- // Include stack trace in error object
- if (Error.captureStackTrace) {
- // Chrome and NodeJS
- Error.captureStackTrace(this, this.constructor);
- } else {
- // FF, IE 10+ and Safari 6+. Fallback for others
- this.stack = (new Error()).stack || '';
- }
- }
- // Inherit from Error
- YAMLException.prototype = Object.create(Error.prototype);
- YAMLException.prototype.constructor = YAMLException;
- YAMLException.prototype.toString = function toString(compact) {
- var result = this.name + ': ';
- result += this.reason || '(unknown reason)';
- if (!compact && this.mark) {
- result += ' ' + this.mark.toString();
- }
- return result;
- };
- module.exports = YAMLException;
- /***/ }),
- /***/ 40028:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- /*eslint-disable max-len,no-use-before-define*/
- var common = __webpack_require__(25596);
- var YAMLException = __webpack_require__(14884);
- var Mark = __webpack_require__(77334);
- var DEFAULT_SAFE_SCHEMA = __webpack_require__(5972);
- var DEFAULT_FULL_SCHEMA = __webpack_require__(19321);
- var _hasOwnProperty = Object.prototype.hasOwnProperty;
- var CONTEXT_FLOW_IN = 1;
- var CONTEXT_FLOW_OUT = 2;
- var CONTEXT_BLOCK_IN = 3;
- var CONTEXT_BLOCK_OUT = 4;
- var CHOMPING_CLIP = 1;
- var CHOMPING_STRIP = 2;
- var CHOMPING_KEEP = 3;
- var PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
- var PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/;
- var PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/;
- var PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i;
- var PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;
- function _class(obj) { return Object.prototype.toString.call(obj); }
- function is_EOL(c) {
- return (c === 0x0A/* LF */) || (c === 0x0D/* CR */);
- }
- function is_WHITE_SPACE(c) {
- return (c === 0x09/* Tab */) || (c === 0x20/* Space */);
- }
- function is_WS_OR_EOL(c) {
- return (c === 0x09/* Tab */) ||
- (c === 0x20/* Space */) ||
- (c === 0x0A/* LF */) ||
- (c === 0x0D/* CR */);
- }
- function is_FLOW_INDICATOR(c) {
- return c === 0x2C/* , */ ||
- c === 0x5B/* [ */ ||
- c === 0x5D/* ] */ ||
- c === 0x7B/* { */ ||
- c === 0x7D/* } */;
- }
- function fromHexCode(c) {
- var lc;
- if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {
- return c - 0x30;
- }
- /*eslint-disable no-bitwise*/
- lc = c | 0x20;
- if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) {
- return lc - 0x61 + 10;
- }
- return -1;
- }
- function escapedHexLen(c) {
- if (c === 0x78/* x */) { return 2; }
- if (c === 0x75/* u */) { return 4; }
- if (c === 0x55/* U */) { return 8; }
- return 0;
- }
- function fromDecimalCode(c) {
- if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {
- return c - 0x30;
- }
- return -1;
- }
- function simpleEscapeSequence(c) {
- /* eslint-disable indent */
- return (c === 0x30/* 0 */) ? '\x00' :
- (c === 0x61/* a */) ? '\x07' :
- (c === 0x62/* b */) ? '\x08' :
- (c === 0x74/* t */) ? '\x09' :
- (c === 0x09/* Tab */) ? '\x09' :
- (c === 0x6E/* n */) ? '\x0A' :
- (c === 0x76/* v */) ? '\x0B' :
- (c === 0x66/* f */) ? '\x0C' :
- (c === 0x72/* r */) ? '\x0D' :
- (c === 0x65/* e */) ? '\x1B' :
- (c === 0x20/* Space */) ? ' ' :
- (c === 0x22/* " */) ? '\x22' :
- (c === 0x2F/* / */) ? '/' :
- (c === 0x5C/* \ */) ? '\x5C' :
- (c === 0x4E/* N */) ? '\x85' :
- (c === 0x5F/* _ */) ? '\xA0' :
- (c === 0x4C/* L */) ? '\u2028' :
- (c === 0x50/* P */) ? '\u2029' : '';
- }
- function charFromCodepoint(c) {
- if (c <= 0xFFFF) {
- return String.fromCharCode(c);
- }
- // Encode UTF-16 surrogate pair
- // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF
- return String.fromCharCode(
- ((c - 0x010000) >> 10) + 0xD800,
- ((c - 0x010000) & 0x03FF) + 0xDC00
- );
- }
- var simpleEscapeCheck = new Array(256); // integer, for fast access
- var simpleEscapeMap = new Array(256);
- for (var i = 0; i < 256; i++) {
- simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0;
- simpleEscapeMap[i] = simpleEscapeSequence(i);
- }
- function State(input, options) {
- this.input = input;
- this.filename = options['filename'] || null;
- this.schema = options['schema'] || DEFAULT_FULL_SCHEMA;
- this.onWarning = options['onWarning'] || null;
- this.legacy = options['legacy'] || false;
- this.json = options['json'] || false;
- this.listener = options['listener'] || null;
- this.implicitTypes = this.schema.compiledImplicit;
- this.typeMap = this.schema.compiledTypeMap;
- this.length = input.length;
- this.position = 0;
- this.line = 0;
- this.lineStart = 0;
- this.lineIndent = 0;
- this.documents = [];
- /*
- this.version;
- this.checkLineBreaks;
- this.tagMap;
- this.anchorMap;
- this.tag;
- this.anchor;
- this.kind;
- this.result;*/
- }
- function generateError(state, message) {
- return new YAMLException(
- message,
- new Mark(state.filename, state.input, state.position, state.line, (state.position - state.lineStart)));
- }
- function throwError(state, message) {
- throw generateError(state, message);
- }
- function throwWarning(state, message) {
- if (state.onWarning) {
- state.onWarning.call(null, generateError(state, message));
- }
- }
- var directiveHandlers = {
- YAML: function handleYamlDirective(state, name, args) {
- var match, major, minor;
- if (state.version !== null) {
- throwError(state, 'duplication of %YAML directive');
- }
- if (args.length !== 1) {
- throwError(state, 'YAML directive accepts exactly one argument');
- }
- match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]);
- if (match === null) {
- throwError(state, 'ill-formed argument of the YAML directive');
- }
- major = parseInt(match[1], 10);
- minor = parseInt(match[2], 10);
- if (major !== 1) {
- throwError(state, 'unacceptable YAML version of the document');
- }
- state.version = args[0];
- state.checkLineBreaks = (minor < 2);
- if (minor !== 1 && minor !== 2) {
- throwWarning(state, 'unsupported YAML version of the document');
- }
- },
- TAG: function handleTagDirective(state, name, args) {
- var handle, prefix;
- if (args.length !== 2) {
- throwError(state, 'TAG directive accepts exactly two arguments');
- }
- handle = args[0];
- prefix = args[1];
- if (!PATTERN_TAG_HANDLE.test(handle)) {
- throwError(state, 'ill-formed tag handle (first argument) of the TAG directive');
- }
- if (_hasOwnProperty.call(state.tagMap, handle)) {
- throwError(state, 'there is a previously declared suffix for "' + handle + '" tag handle');
- }
- if (!PATTERN_TAG_URI.test(prefix)) {
- throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive');
- }
- state.tagMap[handle] = prefix;
- }
- };
- function captureSegment(state, start, end, checkJson) {
- var _position, _length, _character, _result;
- if (start < end) {
- _result = state.input.slice(start, end);
- if (checkJson) {
- for (_position = 0, _length = _result.length; _position < _length; _position += 1) {
- _character = _result.charCodeAt(_position);
- if (!(_character === 0x09 ||
- (0x20 <= _character && _character <= 0x10FFFF))) {
- throwError(state, 'expected valid JSON character');
- }
- }
- } else if (PATTERN_NON_PRINTABLE.test(_result)) {
- throwError(state, 'the stream contains non-printable characters');
- }
- state.result += _result;
- }
- }
- function mergeMappings(state, destination, source, overridableKeys) {
- var sourceKeys, key, index, quantity;
- if (!common.isObject(source)) {
- throwError(state, 'cannot merge mappings; the provided source object is unacceptable');
- }
- sourceKeys = Object.keys(source);
- for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {
- key = sourceKeys[index];
- if (!_hasOwnProperty.call(destination, key)) {
- destination[key] = source[key];
- overridableKeys[key] = true;
- }
- }
- }
- function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startPos) {
- var index, quantity;
- // The output is a plain object here, so keys can only be strings.
- // We need to convert keyNode to a string, but doing so can hang the process
- // (deeply nested arrays that explode exponentially using aliases).
- if (Array.isArray(keyNode)) {
- keyNode = Array.prototype.slice.call(keyNode);
- for (index = 0, quantity = keyNode.length; index < quantity; index += 1) {
- if (Array.isArray(keyNode[index])) {
- throwError(state, 'nested arrays are not supported inside keys');
- }
- if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') {
- keyNode[index] = '[object Object]';
- }
- }
- }
- // Avoid code execution in load() via toString property
- // (still use its own toString for arrays, timestamps,
- // and whatever user schema extensions happen to have @@toStringTag)
- if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') {
- keyNode = '[object Object]';
- }
- keyNode = String(keyNode);
- if (_result === null) {
- _result = {};
- }
- if (keyTag === 'tag:yaml.org,2002:merge') {
- if (Array.isArray(valueNode)) {
- for (index = 0, quantity = valueNode.length; index < quantity; index += 1) {
- mergeMappings(state, _result, valueNode[index], overridableKeys);
- }
- } else {
- mergeMappings(state, _result, valueNode, overridableKeys);
- }
- } else {
- if (!state.json &&
- !_hasOwnProperty.call(overridableKeys, keyNode) &&
- _hasOwnProperty.call(_result, keyNode)) {
- state.line = startLine || state.line;
- state.position = startPos || state.position;
- throwError(state, 'duplicated mapping key');
- }
- _result[keyNode] = valueNode;
- delete overridableKeys[keyNode];
- }
- return _result;
- }
- function readLineBreak(state) {
- var ch;
- ch = state.input.charCodeAt(state.position);
- if (ch === 0x0A/* LF */) {
- state.position++;
- } else if (ch === 0x0D/* CR */) {
- state.position++;
- if (state.input.charCodeAt(state.position) === 0x0A/* LF */) {
- state.position++;
- }
- } else {
- throwError(state, 'a line break is expected');
- }
- state.line += 1;
- state.lineStart = state.position;
- }
- function skipSeparationSpace(state, allowComments, checkIndent) {
- var lineBreaks = 0,
- ch = state.input.charCodeAt(state.position);
- while (ch !== 0) {
- while (is_WHITE_SPACE(ch)) {
- ch = state.input.charCodeAt(++state.position);
- }
- if (allowComments && ch === 0x23/* # */) {
- do {
- ch = state.input.charCodeAt(++state.position);
- } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0);
- }
- if (is_EOL(ch)) {
- readLineBreak(state);
- ch = state.input.charCodeAt(state.position);
- lineBreaks++;
- state.lineIndent = 0;
- while (ch === 0x20/* Space */) {
- state.lineIndent++;
- ch = state.input.charCodeAt(++state.position);
- }
- } else {
- break;
- }
- }
- if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) {
- throwWarning(state, 'deficient indentation');
- }
- return lineBreaks;
- }
- function testDocumentSeparator(state) {
- var _position = state.position,
- ch;
- ch = state.input.charCodeAt(_position);
- // Condition state.position === state.lineStart is tested
- // in parent on each call, for efficiency. No needs to test here again.
- if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) &&
- ch === state.input.charCodeAt(_position + 1) &&
- ch === state.input.charCodeAt(_position + 2)) {
- _position += 3;
- ch = state.input.charCodeAt(_position);
- if (ch === 0 || is_WS_OR_EOL(ch)) {
- return true;
- }
- }
- return false;
- }
- function writeFoldedLines(state, count) {
- if (count === 1) {
- state.result += ' ';
- } else if (count > 1) {
- state.result += common.repeat('\n', count - 1);
- }
- }
- function readPlainScalar(state, nodeIndent, withinFlowCollection) {
- var preceding,
- following,
- captureStart,
- captureEnd,
- hasPendingContent,
- _line,
- _lineStart,
- _lineIndent,
- _kind = state.kind,
- _result = state.result,
- ch;
- ch = state.input.charCodeAt(state.position);
- if (is_WS_OR_EOL(ch) ||
- is_FLOW_INDICATOR(ch) ||
- ch === 0x23/* # */ ||
- ch === 0x26/* & */ ||
- ch === 0x2A/* * */ ||
- ch === 0x21/* ! */ ||
- ch === 0x7C/* | */ ||
- ch === 0x3E/* > */ ||
- ch === 0x27/* ' */ ||
- ch === 0x22/* " */ ||
- ch === 0x25/* % */ ||
- ch === 0x40/* @ */ ||
- ch === 0x60/* ` */) {
- return false;
- }
- if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) {
- following = state.input.charCodeAt(state.position + 1);
- if (is_WS_OR_EOL(following) ||
- withinFlowCollection && is_FLOW_INDICATOR(following)) {
- return false;
- }
- }
- state.kind = 'scalar';
- state.result = '';
- captureStart = captureEnd = state.position;
- hasPendingContent = false;
- while (ch !== 0) {
- if (ch === 0x3A/* : */) {
- following = state.input.charCodeAt(state.position + 1);
- if (is_WS_OR_EOL(following) ||
- withinFlowCollection && is_FLOW_INDICATOR(following)) {
- break;
- }
- } else if (ch === 0x23/* # */) {
- preceding = state.input.charCodeAt(state.position - 1);
- if (is_WS_OR_EOL(preceding)) {
- break;
- }
- } else if ((state.position === state.lineStart && testDocumentSeparator(state)) ||
- withinFlowCollection && is_FLOW_INDICATOR(ch)) {
- break;
- } else if (is_EOL(ch)) {
- _line = state.line;
- _lineStart = state.lineStart;
- _lineIndent = state.lineIndent;
- skipSeparationSpace(state, false, -1);
- if (state.lineIndent >= nodeIndent) {
- hasPendingContent = true;
- ch = state.input.charCodeAt(state.position);
- continue;
- } else {
- state.position = captureEnd;
- state.line = _line;
- state.lineStart = _lineStart;
- state.lineIndent = _lineIndent;
- break;
- }
- }
- if (hasPendingContent) {
- captureSegment(state, captureStart, captureEnd, false);
- writeFoldedLines(state, state.line - _line);
- captureStart = captureEnd = state.position;
- hasPendingContent = false;
- }
- if (!is_WHITE_SPACE(ch)) {
- captureEnd = state.position + 1;
- }
- ch = state.input.charCodeAt(++state.position);
- }
- captureSegment(state, captureStart, captureEnd, false);
- if (state.result) {
- return true;
- }
- state.kind = _kind;
- state.result = _result;
- return false;
- }
- function readSingleQuotedScalar(state, nodeIndent) {
- var ch,
- captureStart, captureEnd;
- ch = state.input.charCodeAt(state.position);
- if (ch !== 0x27/* ' */) {
- return false;
- }
- state.kind = 'scalar';
- state.result = '';
- state.position++;
- captureStart = captureEnd = state.position;
- while ((ch = state.input.charCodeAt(state.position)) !== 0) {
- if (ch === 0x27/* ' */) {
- captureSegment(state, captureStart, state.position, true);
- ch = state.input.charCodeAt(++state.position);
- if (ch === 0x27/* ' */) {
- captureStart = state.position;
- state.position++;
- captureEnd = state.position;
- } else {
- return true;
- }
- } else if (is_EOL(ch)) {
- captureSegment(state, captureStart, captureEnd, true);
- writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));
- captureStart = captureEnd = state.position;
- } else if (state.position === state.lineStart && testDocumentSeparator(state)) {
- throwError(state, 'unexpected end of the document within a single quoted scalar');
- } else {
- state.position++;
- captureEnd = state.position;
- }
- }
- throwError(state, 'unexpected end of the stream within a single quoted scalar');
- }
- function readDoubleQuotedScalar(state, nodeIndent) {
- var captureStart,
- captureEnd,
- hexLength,
- hexResult,
- tmp,
- ch;
- ch = state.input.charCodeAt(state.position);
- if (ch !== 0x22/* " */) {
- return false;
- }
- state.kind = 'scalar';
- state.result = '';
- state.position++;
- captureStart = captureEnd = state.position;
- while ((ch = state.input.charCodeAt(state.position)) !== 0) {
- if (ch === 0x22/* " */) {
- captureSegment(state, captureStart, state.position, true);
- state.position++;
- return true;
- } else if (ch === 0x5C/* \ */) {
- captureSegment(state, captureStart, state.position, true);
- ch = state.input.charCodeAt(++state.position);
- if (is_EOL(ch)) {
- skipSeparationSpace(state, false, nodeIndent);
- // TODO: rework to inline fn with no type cast?
- } else if (ch < 256 && simpleEscapeCheck[ch]) {
- state.result += simpleEscapeMap[ch];
- state.position++;
- } else if ((tmp = escapedHexLen(ch)) > 0) {
- hexLength = tmp;
- hexResult = 0;
- for (; hexLength > 0; hexLength--) {
- ch = state.input.charCodeAt(++state.position);
- if ((tmp = fromHexCode(ch)) >= 0) {
- hexResult = (hexResult << 4) + tmp;
- } else {
- throwError(state, 'expected hexadecimal character');
- }
- }
- state.result += charFromCodepoint(hexResult);
- state.position++;
- } else {
- throwError(state, 'unknown escape sequence');
- }
- captureStart = captureEnd = state.position;
- } else if (is_EOL(ch)) {
- captureSegment(state, captureStart, captureEnd, true);
- writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));
- captureStart = captureEnd = state.position;
- } else if (state.position === state.lineStart && testDocumentSeparator(state)) {
- throwError(state, 'unexpected end of the document within a double quoted scalar');
- } else {
- state.position++;
- captureEnd = state.position;
- }
- }
- throwError(state, 'unexpected end of the stream within a double quoted scalar');
- }
- function readFlowCollection(state, nodeIndent) {
- var readNext = true,
- _line,
- _tag = state.tag,
- _result,
- _anchor = state.anchor,
- following,
- terminator,
- isPair,
- isExplicitPair,
- isMapping,
- overridableKeys = {},
- keyNode,
- keyTag,
- valueNode,
- ch;
- ch = state.input.charCodeAt(state.position);
- if (ch === 0x5B/* [ */) {
- terminator = 0x5D;/* ] */
- isMapping = false;
- _result = [];
- } else if (ch === 0x7B/* { */) {
- terminator = 0x7D;/* } */
- isMapping = true;
- _result = {};
- } else {
- return false;
- }
- if (state.anchor !== null) {
- state.anchorMap[state.anchor] = _result;
- }
- ch = state.input.charCodeAt(++state.position);
- while (ch !== 0) {
- skipSeparationSpace(state, true, nodeIndent);
- ch = state.input.charCodeAt(state.position);
- if (ch === terminator) {
- state.position++;
- state.tag = _tag;
- state.anchor = _anchor;
- state.kind = isMapping ? 'mapping' : 'sequence';
- state.result = _result;
- return true;
- } else if (!readNext) {
- throwError(state, 'missed comma between flow collection entries');
- }
- keyTag = keyNode = valueNode = null;
- isPair = isExplicitPair = false;
- if (ch === 0x3F/* ? */) {
- following = state.input.charCodeAt(state.position + 1);
- if (is_WS_OR_EOL(following)) {
- isPair = isExplicitPair = true;
- state.position++;
- skipSeparationSpace(state, true, nodeIndent);
- }
- }
- _line = state.line;
- composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);
- keyTag = state.tag;
- keyNode = state.result;
- skipSeparationSpace(state, true, nodeIndent);
- ch = state.input.charCodeAt(state.position);
- if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) {
- isPair = true;
- ch = state.input.charCodeAt(++state.position);
- skipSeparationSpace(state, true, nodeIndent);
- composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);
- valueNode = state.result;
- }
- if (isMapping) {
- storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode);
- } else if (isPair) {
- _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode));
- } else {
- _result.push(keyNode);
- }
- skipSeparationSpace(state, true, nodeIndent);
- ch = state.input.charCodeAt(state.position);
- if (ch === 0x2C/* , */) {
- readNext = true;
- ch = state.input.charCodeAt(++state.position);
- } else {
- readNext = false;
- }
- }
- throwError(state, 'unexpected end of the stream within a flow collection');
- }
- function readBlockScalar(state, nodeIndent) {
- var captureStart,
- folding,
- chomping = CHOMPING_CLIP,
- didReadContent = false,
- detectedIndent = false,
- textIndent = nodeIndent,
- emptyLines = 0,
- atMoreIndented = false,
- tmp,
- ch;
- ch = state.input.charCodeAt(state.position);
- if (ch === 0x7C/* | */) {
- folding = false;
- } else if (ch === 0x3E/* > */) {
- folding = true;
- } else {
- return false;
- }
- state.kind = 'scalar';
- state.result = '';
- while (ch !== 0) {
- ch = state.input.charCodeAt(++state.position);
- if (ch === 0x2B/* + */ || ch === 0x2D/* - */) {
- if (CHOMPING_CLIP === chomping) {
- chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP;
- } else {
- throwError(state, 'repeat of a chomping mode identifier');
- }
- } else if ((tmp = fromDecimalCode(ch)) >= 0) {
- if (tmp === 0) {
- throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one');
- } else if (!detectedIndent) {
- textIndent = nodeIndent + tmp - 1;
- detectedIndent = true;
- } else {
- throwError(state, 'repeat of an indentation width identifier');
- }
- } else {
- break;
- }
- }
- if (is_WHITE_SPACE(ch)) {
- do { ch = state.input.charCodeAt(++state.position); }
- while (is_WHITE_SPACE(ch));
- if (ch === 0x23/* # */) {
- do { ch = state.input.charCodeAt(++state.position); }
- while (!is_EOL(ch) && (ch !== 0));
- }
- }
- while (ch !== 0) {
- readLineBreak(state);
- state.lineIndent = 0;
- ch = state.input.charCodeAt(state.position);
- while ((!detectedIndent || state.lineIndent < textIndent) &&
- (ch === 0x20/* Space */)) {
- state.lineIndent++;
- ch = state.input.charCodeAt(++state.position);
- }
- if (!detectedIndent && state.lineIndent > textIndent) {
- textIndent = state.lineIndent;
- }
- if (is_EOL(ch)) {
- emptyLines++;
- continue;
- }
- // End of the scalar.
- if (state.lineIndent < textIndent) {
- // Perform the chomping.
- if (chomping === CHOMPING_KEEP) {
- state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines);
- } else if (chomping === CHOMPING_CLIP) {
- if (didReadContent) { // i.e. only if the scalar is not empty.
- state.result += '\n';
- }
- }
- // Break this `while` cycle and go to the funciton's epilogue.
- break;
- }
- // Folded style: use fancy rules to handle line breaks.
- if (folding) {
- // Lines starting with white space characters (more-indented lines) are not folded.
- if (is_WHITE_SPACE(ch)) {
- atMoreIndented = true;
- // except for the first content line (cf. Example 8.1)
- state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines);
- // End of more-indented block.
- } else if (atMoreIndented) {
- atMoreIndented = false;
- state.result += common.repeat('\n', emptyLines + 1);
- // Just one line break - perceive as the same line.
- } else if (emptyLines === 0) {
- if (didReadContent) { // i.e. only if we have already read some scalar content.
- state.result += ' ';
- }
- // Several line breaks - perceive as different lines.
- } else {
- state.result += common.repeat('\n', emptyLines);
- }
- // Literal style: just add exact number of line breaks between content lines.
- } else {
- // Keep all line breaks except the header line break.
- state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines);
- }
- didReadContent = true;
- detectedIndent = true;
- emptyLines = 0;
- captureStart = state.position;
- while (!is_EOL(ch) && (ch !== 0)) {
- ch = state.input.charCodeAt(++state.position);
- }
- captureSegment(state, captureStart, state.position, false);
- }
- return true;
- }
- function readBlockSequence(state, nodeIndent) {
- var _line,
- _tag = state.tag,
- _anchor = state.anchor,
- _result = [],
- following,
- detected = false,
- ch;
- if (state.anchor !== null) {
- state.anchorMap[state.anchor] = _result;
- }
- ch = state.input.charCodeAt(state.position);
- while (ch !== 0) {
- if (ch !== 0x2D/* - */) {
- break;
- }
- following = state.input.charCodeAt(state.position + 1);
- if (!is_WS_OR_EOL(following)) {
- break;
- }
- detected = true;
- state.position++;
- if (skipSeparationSpace(state, true, -1)) {
- if (state.lineIndent <= nodeIndent) {
- _result.push(null);
- ch = state.input.charCodeAt(state.position);
- continue;
- }
- }
- _line = state.line;
- composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true);
- _result.push(state.result);
- skipSeparationSpace(state, true, -1);
- ch = state.input.charCodeAt(state.position);
- if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) {
- throwError(state, 'bad indentation of a sequence entry');
- } else if (state.lineIndent < nodeIndent) {
- break;
- }
- }
- if (detected) {
- state.tag = _tag;
- state.anchor = _anchor;
- state.kind = 'sequence';
- state.result = _result;
- return true;
- }
- return false;
- }
- function readBlockMapping(state, nodeIndent, flowIndent) {
- var following,
- allowCompact,
- _line,
- _pos,
- _tag = state.tag,
- _anchor = state.anchor,
- _result = {},
- overridableKeys = {},
- keyTag = null,
- keyNode = null,
- valueNode = null,
- atExplicitKey = false,
- detected = false,
- ch;
- if (state.anchor !== null) {
- state.anchorMap[state.anchor] = _result;
- }
- ch = state.input.charCodeAt(state.position);
- while (ch !== 0) {
- following = state.input.charCodeAt(state.position + 1);
- _line = state.line; // Save the current line.
- _pos = state.position;
- //
- // Explicit notation case. There are two separate blocks:
- // first for the key (denoted by "?") and second for the value (denoted by ":")
- //
- if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) {
- if (ch === 0x3F/* ? */) {
- if (atExplicitKey) {
- storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null);
- keyTag = keyNode = valueNode = null;
- }
- detected = true;
- atExplicitKey = true;
- allowCompact = true;
- } else if (atExplicitKey) {
- // i.e. 0x3A/* : */ === character after the explicit key.
- atExplicitKey = false;
- allowCompact = true;
- } else {
- throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line');
- }
- state.position += 1;
- ch = following;
- //
- // Implicit notation case. Flow-style node as the key first, then ":", and the value.
- //
- } else if (composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) {
- if (state.line === _line) {
- ch = state.input.charCodeAt(state.position);
- while (is_WHITE_SPACE(ch)) {
- ch = state.input.charCodeAt(++state.position);
- }
- if (ch === 0x3A/* : */) {
- ch = state.input.charCodeAt(++state.position);
- if (!is_WS_OR_EOL(ch)) {
- throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping');
- }
- if (atExplicitKey) {
- storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null);
- keyTag = keyNode = valueNode = null;
- }
- detected = true;
- atExplicitKey = false;
- allowCompact = false;
- keyTag = state.tag;
- keyNode = state.result;
- } else if (detected) {
- throwError(state, 'can not read an implicit mapping pair; a colon is missed');
- } else {
- state.tag = _tag;
- state.anchor = _anchor;
- return true; // Keep the result of `composeNode`.
- }
- } else if (detected) {
- throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key');
- } else {
- state.tag = _tag;
- state.anchor = _anchor;
- return true; // Keep the result of `composeNode`.
- }
- } else {
- break; // Reading is done. Go to the epilogue.
- }
- //
- // Common reading code for both explicit and implicit notations.
- //
- if (state.line === _line || state.lineIndent > nodeIndent) {
- if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {
- if (atExplicitKey) {
- keyNode = state.result;
- } else {
- valueNode = state.result;
- }
- }
- if (!atExplicitKey) {
- storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _pos);
- keyTag = keyNode = valueNode = null;
- }
- skipSeparationSpace(state, true, -1);
- ch = state.input.charCodeAt(state.position);
- }
- if (state.lineIndent > nodeIndent && (ch !== 0)) {
- throwError(state, 'bad indentation of a mapping entry');
- } else if (state.lineIndent < nodeIndent) {
- break;
- }
- }
- //
- // Epilogue.
- //
- // Special case: last mapping's node contains only the key in explicit notation.
- if (atExplicitKey) {
- storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null);
- }
- // Expose the resulting mapping.
- if (detected) {
- state.tag = _tag;
- state.anchor = _anchor;
- state.kind = 'mapping';
- state.result = _result;
- }
- return detected;
- }
- function readTagProperty(state) {
- var _position,
- isVerbatim = false,
- isNamed = false,
- tagHandle,
- tagName,
- ch;
- ch = state.input.charCodeAt(state.position);
- if (ch !== 0x21/* ! */) return false;
- if (state.tag !== null) {
- throwError(state, 'duplication of a tag property');
- }
- ch = state.input.charCodeAt(++state.position);
- if (ch === 0x3C/* < */) {
- isVerbatim = true;
- ch = state.input.charCodeAt(++state.position);
- } else if (ch === 0x21/* ! */) {
- isNamed = true;
- tagHandle = '!!';
- ch = state.input.charCodeAt(++state.position);
- } else {
- tagHandle = '!';
- }
- _position = state.position;
- if (isVerbatim) {
- do { ch = state.input.charCodeAt(++state.position); }
- while (ch !== 0 && ch !== 0x3E/* > */);
- if (state.position < state.length) {
- tagName = state.input.slice(_position, state.position);
- ch = state.input.charCodeAt(++state.position);
- } else {
- throwError(state, 'unexpected end of the stream within a verbatim tag');
- }
- } else {
- while (ch !== 0 && !is_WS_OR_EOL(ch)) {
- if (ch === 0x21/* ! */) {
- if (!isNamed) {
- tagHandle = state.input.slice(_position - 1, state.position + 1);
- if (!PATTERN_TAG_HANDLE.test(tagHandle)) {
- throwError(state, 'named tag handle cannot contain such characters');
- }
- isNamed = true;
- _position = state.position + 1;
- } else {
- throwError(state, 'tag suffix cannot contain exclamation marks');
- }
- }
- ch = state.input.charCodeAt(++state.position);
- }
- tagName = state.input.slice(_position, state.position);
- if (PATTERN_FLOW_INDICATORS.test(tagName)) {
- throwError(state, 'tag suffix cannot contain flow indicator characters');
- }
- }
- if (tagName && !PATTERN_TAG_URI.test(tagName)) {
- throwError(state, 'tag name cannot contain such characters: ' + tagName);
- }
- if (isVerbatim) {
- state.tag = tagName;
- } else if (_hasOwnProperty.call(state.tagMap, tagHandle)) {
- state.tag = state.tagMap[tagHandle] + tagName;
- } else if (tagHandle === '!') {
- state.tag = '!' + tagName;
- } else if (tagHandle === '!!') {
- state.tag = 'tag:yaml.org,2002:' + tagName;
- } else {
- throwError(state, 'undeclared tag handle "' + tagHandle + '"');
- }
- return true;
- }
- function readAnchorProperty(state) {
- var _position,
- ch;
- ch = state.input.charCodeAt(state.position);
- if (ch !== 0x26/* & */) return false;
- if (state.anchor !== null) {
- throwError(state, 'duplication of an anchor property');
- }
- ch = state.input.charCodeAt(++state.position);
- _position = state.position;
- while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {
- ch = state.input.charCodeAt(++state.position);
- }
- if (state.position === _position) {
- throwError(state, 'name of an anchor node must contain at least one character');
- }
- state.anchor = state.input.slice(_position, state.position);
- return true;
- }
- function readAlias(state) {
- var _position, alias,
- ch;
- ch = state.input.charCodeAt(state.position);
- if (ch !== 0x2A/* * */) return false;
- ch = state.input.charCodeAt(++state.position);
- _position = state.position;
- while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {
- ch = state.input.charCodeAt(++state.position);
- }
- if (state.position === _position) {
- throwError(state, 'name of an alias node must contain at least one character');
- }
- alias = state.input.slice(_position, state.position);
- if (!_hasOwnProperty.call(state.anchorMap, alias)) {
- throwError(state, 'unidentified alias "' + alias + '"');
- }
- state.result = state.anchorMap[alias];
- skipSeparationSpace(state, true, -1);
- return true;
- }
- function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) {
- var allowBlockStyles,
- allowBlockScalars,
- allowBlockCollections,
- indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this<parent
- atNewLine = false,
- hasContent = false,
- typeIndex,
- typeQuantity,
- type,
- flowIndent,
- blockIndent;
- if (state.listener !== null) {
- state.listener('open', state);
- }
- state.tag = null;
- state.anchor = null;
- state.kind = null;
- state.result = null;
- allowBlockStyles = allowBlockScalars = allowBlockCollections =
- CONTEXT_BLOCK_OUT === nodeContext ||
- CONTEXT_BLOCK_IN === nodeContext;
- if (allowToSeek) {
- if (skipSeparationSpace(state, true, -1)) {
- atNewLine = true;
- if (state.lineIndent > parentIndent) {
- indentStatus = 1;
- } else if (state.lineIndent === parentIndent) {
- indentStatus = 0;
- } else if (state.lineIndent < parentIndent) {
- indentStatus = -1;
- }
- }
- }
- if (indentStatus === 1) {
- while (readTagProperty(state) || readAnchorProperty(state)) {
- if (skipSeparationSpace(state, true, -1)) {
- atNewLine = true;
- allowBlockCollections = allowBlockStyles;
- if (state.lineIndent > parentIndent) {
- indentStatus = 1;
- } else if (state.lineIndent === parentIndent) {
- indentStatus = 0;
- } else if (state.lineIndent < parentIndent) {
- indentStatus = -1;
- }
- } else {
- allowBlockCollections = false;
- }
- }
- }
- if (allowBlockCollections) {
- allowBlockCollections = atNewLine || allowCompact;
- }
- if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {
- if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) {
- flowIndent = parentIndent;
- } else {
- flowIndent = parentIndent + 1;
- }
- blockIndent = state.position - state.lineStart;
- if (indentStatus === 1) {
- if (allowBlockCollections &&
- (readBlockSequence(state, blockIndent) ||
- readBlockMapping(state, blockIndent, flowIndent)) ||
- readFlowCollection(state, flowIndent)) {
- hasContent = true;
- } else {
- if ((allowBlockScalars && readBlockScalar(state, flowIndent)) ||
- readSingleQuotedScalar(state, flowIndent) ||
- readDoubleQuotedScalar(state, flowIndent)) {
- hasContent = true;
- } else if (readAlias(state)) {
- hasContent = true;
- if (state.tag !== null || state.anchor !== null) {
- throwError(state, 'alias node should not have any properties');
- }
- } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {
- hasContent = true;
- if (state.tag === null) {
- state.tag = '?';
- }
- }
- if (state.anchor !== null) {
- state.anchorMap[state.anchor] = state.result;
- }
- }
- } else if (indentStatus === 0) {
- // Special case: block sequences are allowed to have same indentation level as the parent.
- // http://www.yaml.org/spec/1.2/spec.html#id2799784
- hasContent = allowBlockCollections && readBlockSequence(state, blockIndent);
- }
- }
- if (state.tag !== null && state.tag !== '!') {
- if (state.tag === '?') {
- // Implicit resolving is not allowed for non-scalar types, and '?'
- // non-specific tag is only automatically assigned to plain scalars.
- //
- // We only need to check kind conformity in case user explicitly assigns '?'
- // tag, for example like this: "!<?> [0]"
- //
- if (state.result !== null && state.kind !== 'scalar') {
- throwError(state, 'unacceptable node kind for !<?> tag; it should be "scalar", not "' + state.kind + '"');
- }
- for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) {
- type = state.implicitTypes[typeIndex];
- if (type.resolve(state.result)) { // `state.result` updated in resolver if matched
- state.result = type.construct(state.result);
- state.tag = type.tag;
- if (state.anchor !== null) {
- state.anchorMap[state.anchor] = state.result;
- }
- break;
- }
- }
- } else if (_hasOwnProperty.call(state.typeMap[state.kind || 'fallback'], state.tag)) {
- type = state.typeMap[state.kind || 'fallback'][state.tag];
- if (state.result !== null && type.kind !== state.kind) {
- throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"');
- }
- if (!type.resolve(state.result)) { // `state.result` updated in resolver if matched
- throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag');
- } else {
- state.result = type.construct(state.result);
- if (state.anchor !== null) {
- state.anchorMap[state.anchor] = state.result;
- }
- }
- } else {
- throwError(state, 'unknown tag !<' + state.tag + '>');
- }
- }
- if (state.listener !== null) {
- state.listener('close', state);
- }
- return state.tag !== null || state.anchor !== null || hasContent;
- }
- function readDocument(state) {
- var documentStart = state.position,
- _position,
- directiveName,
- directiveArgs,
- hasDirectives = false,
- ch;
- state.version = null;
- state.checkLineBreaks = state.legacy;
- state.tagMap = {};
- state.anchorMap = {};
- while ((ch = state.input.charCodeAt(state.position)) !== 0) {
- skipSeparationSpace(state, true, -1);
- ch = state.input.charCodeAt(state.position);
- if (state.lineIndent > 0 || ch !== 0x25/* % */) {
- break;
- }
- hasDirectives = true;
- ch = state.input.charCodeAt(++state.position);
- _position = state.position;
- while (ch !== 0 && !is_WS_OR_EOL(ch)) {
- ch = state.input.charCodeAt(++state.position);
- }
- directiveName = state.input.slice(_position, state.position);
- directiveArgs = [];
- if (directiveName.length < 1) {
- throwError(state, 'directive name must not be less than one character in length');
- }
- while (ch !== 0) {
- while (is_WHITE_SPACE(ch)) {
- ch = state.input.charCodeAt(++state.position);
- }
- if (ch === 0x23/* # */) {
- do { ch = state.input.charCodeAt(++state.position); }
- while (ch !== 0 && !is_EOL(ch));
- break;
- }
- if (is_EOL(ch)) break;
- _position = state.position;
- while (ch !== 0 && !is_WS_OR_EOL(ch)) {
- ch = state.input.charCodeAt(++state.position);
- }
- directiveArgs.push(state.input.slice(_position, state.position));
- }
- if (ch !== 0) readLineBreak(state);
- if (_hasOwnProperty.call(directiveHandlers, directiveName)) {
- directiveHandlers[directiveName](state, directiveName, directiveArgs);
- } else {
- throwWarning(state, 'unknown document directive "' + directiveName + '"');
- }
- }
- skipSeparationSpace(state, true, -1);
- if (state.lineIndent === 0 &&
- state.input.charCodeAt(state.position) === 0x2D/* - */ &&
- state.input.charCodeAt(state.position + 1) === 0x2D/* - */ &&
- state.input.charCodeAt(state.position + 2) === 0x2D/* - */) {
- state.position += 3;
- skipSeparationSpace(state, true, -1);
- } else if (hasDirectives) {
- throwError(state, 'directives end mark is expected');
- }
- composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);
- skipSeparationSpace(state, true, -1);
- if (state.checkLineBreaks &&
- PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) {
- throwWarning(state, 'non-ASCII line breaks are interpreted as content');
- }
- state.documents.push(state.result);
- if (state.position === state.lineStart && testDocumentSeparator(state)) {
- if (state.input.charCodeAt(state.position) === 0x2E/* . */) {
- state.position += 3;
- skipSeparationSpace(state, true, -1);
- }
- return;
- }
- if (state.position < (state.length - 1)) {
- throwError(state, 'end of the stream or a document separator is expected');
- } else {
- return;
- }
- }
- function loadDocuments(input, options) {
- input = String(input);
- options = options || {};
- if (input.length !== 0) {
- // Add tailing `\n` if not exists
- if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ &&
- input.charCodeAt(input.length - 1) !== 0x0D/* CR */) {
- input += '\n';
- }
- // Strip BOM
- if (input.charCodeAt(0) === 0xFEFF) {
- input = input.slice(1);
- }
- }
- var state = new State(input, options);
- var nullpos = input.indexOf('\0');
- if (nullpos !== -1) {
- state.position = nullpos;
- throwError(state, 'null byte is not allowed in input');
- }
- // Use 0 as string terminator. That significantly simplifies bounds check.
- state.input += '\0';
- while (state.input.charCodeAt(state.position) === 0x20/* Space */) {
- state.lineIndent += 1;
- state.position += 1;
- }
- while (state.position < (state.length - 1)) {
- readDocument(state);
- }
- return state.documents;
- }
- function loadAll(input, iterator, options) {
- if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') {
- options = iterator;
- iterator = null;
- }
- var documents = loadDocuments(input, options);
- if (typeof iterator !== 'function') {
- return documents;
- }
- for (var index = 0, length = documents.length; index < length; index += 1) {
- iterator(documents[index]);
- }
- }
- function load(input, options) {
- var documents = loadDocuments(input, options);
- if (documents.length === 0) {
- /*eslint-disable no-undefined*/
- return undefined;
- } else if (documents.length === 1) {
- return documents[0];
- }
- throw new YAMLException('expected a single document in the stream, but found more');
- }
- function safeLoadAll(input, iterator, options) {
- if (typeof iterator === 'object' && iterator !== null && typeof options === 'undefined') {
- options = iterator;
- iterator = null;
- }
- return loadAll(input, iterator, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options));
- }
- function safeLoad(input, options) {
- return load(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options));
- }
- module.exports.loadAll = loadAll;
- module.exports.load = load;
- module.exports.safeLoadAll = safeLoadAll;
- module.exports.safeLoad = safeLoad;
- /***/ }),
- /***/ 77334:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- var common = __webpack_require__(25596);
- function Mark(name, buffer, position, line, column) {
- this.name = name;
- this.buffer = buffer;
- this.position = position;
- this.line = line;
- this.column = column;
- }
- Mark.prototype.getSnippet = function getSnippet(indent, maxLength) {
- var head, start, tail, end, snippet;
- if (!this.buffer) return null;
- indent = indent || 4;
- maxLength = maxLength || 75;
- head = '';
- start = this.position;
- while (start > 0 && '\x00\r\n\x85\u2028\u2029'.indexOf(this.buffer.charAt(start - 1)) === -1) {
- start -= 1;
- if (this.position - start > (maxLength / 2 - 1)) {
- head = ' ... ';
- start += 5;
- break;
- }
- }
- tail = '';
- end = this.position;
- while (end < this.buffer.length && '\x00\r\n\x85\u2028\u2029'.indexOf(this.buffer.charAt(end)) === -1) {
- end += 1;
- if (end - this.position > (maxLength / 2 - 1)) {
- tail = ' ... ';
- end -= 5;
- break;
- }
- }
- snippet = this.buffer.slice(start, end);
- return common.repeat(' ', indent) + head + snippet + tail + '\n' +
- common.repeat(' ', indent + this.position - start + head.length) + '^';
- };
- Mark.prototype.toString = function toString(compact) {
- var snippet, where = '';
- if (this.name) {
- where += 'in "' + this.name + '" ';
- }
- where += 'at line ' + (this.line + 1) + ', column ' + (this.column + 1);
- if (!compact) {
- snippet = this.getSnippet();
- if (snippet) {
- where += ':\n' + snippet;
- }
- }
- return where;
- };
- module.exports = Mark;
- /***/ }),
- /***/ 82409:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- /*eslint-disable max-len*/
- var common = __webpack_require__(25596);
- var YAMLException = __webpack_require__(14884);
- var Type = __webpack_require__(53899);
- function compileList(schema, name, result) {
- var exclude = [];
- schema.include.forEach(function (includedSchema) {
- result = compileList(includedSchema, name, result);
- });
- schema[name].forEach(function (currentType) {
- result.forEach(function (previousType, previousIndex) {
- if (previousType.tag === currentType.tag && previousType.kind === currentType.kind) {
- exclude.push(previousIndex);
- }
- });
- result.push(currentType);
- });
- return result.filter(function (type, index) {
- return exclude.indexOf(index) === -1;
- });
- }
- function compileMap(/* lists... */) {
- var result = {
- scalar: {},
- sequence: {},
- mapping: {},
- fallback: {}
- }, index, length;
- function collectType(type) {
- result[type.kind][type.tag] = result['fallback'][type.tag] = type;
- }
- for (index = 0, length = arguments.length; index < length; index += 1) {
- arguments[index].forEach(collectType);
- }
- return result;
- }
- function Schema(definition) {
- this.include = definition.include || [];
- this.implicit = definition.implicit || [];
- this.explicit = definition.explicit || [];
- this.implicit.forEach(function (type) {
- if (type.loadKind && type.loadKind !== 'scalar') {
- throw new YAMLException('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.');
- }
- });
- this.compiledImplicit = compileList(this, 'implicit', []);
- this.compiledExplicit = compileList(this, 'explicit', []);
- this.compiledTypeMap = compileMap(this.compiledImplicit, this.compiledExplicit);
- }
- Schema.DEFAULT = null;
- Schema.create = function createSchema() {
- var schemas, types;
- switch (arguments.length) {
- case 1:
- schemas = Schema.DEFAULT;
- types = arguments[0];
- break;
- case 2:
- schemas = arguments[0];
- types = arguments[1];
- break;
- default:
- throw new YAMLException('Wrong number of arguments for Schema.create function');
- }
- schemas = common.toArray(schemas);
- types = common.toArray(types);
- if (!schemas.every(function (schema) { return schema instanceof Schema; })) {
- throw new YAMLException('Specified list of super schemas (or a single Schema object) contains a non-Schema object.');
- }
- if (!types.every(function (type) { return type instanceof Type; })) {
- throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.');
- }
- return new Schema({
- include: schemas,
- explicit: types
- });
- };
- module.exports = Schema;
- /***/ }),
- /***/ 17318:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- // Standard YAML's Core schema.
- // http://www.yaml.org/spec/1.2/spec.html#id2804923
- //
- // NOTE: JS-YAML does not support schema-specific tag resolution restrictions.
- // So, Core schema has no distinctions from JSON schema is JS-YAML.
- var Schema = __webpack_require__(82409);
- module.exports = new Schema({
- include: [
- __webpack_require__(65796)
- ]
- });
- /***/ }),
- /***/ 19321:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- // JS-YAML's default schema for `load` function.
- // It is not described in the YAML specification.
- //
- // This schema is based on JS-YAML's default safe schema and includes
- // JavaScript-specific types: !!js/undefined, !!js/regexp and !!js/function.
- //
- // Also this schema is used as default base schema at `Schema.create` function.
- var Schema = __webpack_require__(82409);
- module.exports = Schema.DEFAULT = new Schema({
- include: [
- __webpack_require__(5972)
- ],
- explicit: [
- __webpack_require__(70575),
- __webpack_require__(97287),
- __webpack_require__(89811)
- ]
- });
- /***/ }),
- /***/ 5972:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- // JS-YAML's default schema for `safeLoad` function.
- // It is not described in the YAML specification.
- //
- // This schema is based on standard YAML's Core schema and includes most of
- // extra types described at YAML tag repository. (http://yaml.org/type/)
- var Schema = __webpack_require__(82409);
- module.exports = new Schema({
- include: [
- __webpack_require__(17318)
- ],
- implicit: [
- __webpack_require__(56145),
- __webpack_require__(243)
- ],
- explicit: [
- __webpack_require__(18964),
- __webpack_require__(3878),
- __webpack_require__(68244),
- __webpack_require__(67300)
- ]
- });
- /***/ }),
- /***/ 75322:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- // Standard YAML's Failsafe schema.
- // http://www.yaml.org/spec/1.2/spec.html#id2802346
- var Schema = __webpack_require__(82409);
- module.exports = new Schema({
- explicit: [
- __webpack_require__(79483),
- __webpack_require__(43745),
- __webpack_require__(86553)
- ]
- });
- /***/ }),
- /***/ 65796:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- // Standard YAML's JSON schema.
- // http://www.yaml.org/spec/1.2/spec.html#id2803231
- //
- // NOTE: JS-YAML does not support schema-specific tag resolution restrictions.
- // So, this schema is not such strict as defined in the YAML specification.
- // It allows numbers in binary notaion, use `Null` and `NULL` as `null`, etc.
- var Schema = __webpack_require__(82409);
- module.exports = new Schema({
- include: [
- __webpack_require__(75322)
- ],
- implicit: [
- __webpack_require__(3022),
- __webpack_require__(2648),
- __webpack_require__(95979),
- __webpack_require__(53456)
- ]
- });
- /***/ }),
- /***/ 53899:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- var YAMLException = __webpack_require__(14884);
- var TYPE_CONSTRUCTOR_OPTIONS = [
- 'kind',
- 'resolve',
- 'construct',
- 'instanceOf',
- 'predicate',
- 'represent',
- 'defaultStyle',
- 'styleAliases'
- ];
- var YAML_NODE_KINDS = [
- 'scalar',
- 'sequence',
- 'mapping'
- ];
- function compileStyleAliases(map) {
- var result = {};
- if (map !== null) {
- Object.keys(map).forEach(function (style) {
- map[style].forEach(function (alias) {
- result[String(alias)] = style;
- });
- });
- }
- return result;
- }
- function Type(tag, options) {
- options = options || {};
- Object.keys(options).forEach(function (name) {
- if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {
- throw new YAMLException('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.');
- }
- });
- // TODO: Add tag format check.
- this.tag = tag;
- this.kind = options['kind'] || null;
- this.resolve = options['resolve'] || function () { return true; };
- this.construct = options['construct'] || function (data) { return data; };
- this.instanceOf = options['instanceOf'] || null;
- this.predicate = options['predicate'] || null;
- this.represent = options['represent'] || null;
- this.defaultStyle = options['defaultStyle'] || null;
- this.styleAliases = compileStyleAliases(options['styleAliases'] || null);
- if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {
- throw new YAMLException('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.');
- }
- }
- module.exports = Type;
- /***/ }),
- /***/ 18964:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- /*eslint-disable no-bitwise*/
- var NodeBuffer;
- try {
- // A trick for browserified version, to not include `Buffer` shim
- var _require = undefined;
- NodeBuffer = __webpack_require__(64293).Buffer;
- } catch (__) {}
- var Type = __webpack_require__(53899);
- // [ 64, 65, 66 ] -> [ padding, CR, LF ]
- var BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r';
- function resolveYamlBinary(data) {
- if (data === null) return false;
- var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP;
- // Convert one by one.
- for (idx = 0; idx < max; idx++) {
- code = map.indexOf(data.charAt(idx));
- // Skip CR/LF
- if (code > 64) continue;
- // Fail on illegal characters
- if (code < 0) return false;
- bitlen += 6;
- }
- // If there are any bits left, source was corrupted
- return (bitlen % 8) === 0;
- }
- function constructYamlBinary(data) {
- var idx, tailbits,
- input = data.replace(/[\r\n=]/g, ''), // remove CR/LF & padding to simplify scan
- max = input.length,
- map = BASE64_MAP,
- bits = 0,
- result = [];
- // Collect by 6*4 bits (3 bytes)
- for (idx = 0; idx < max; idx++) {
- if ((idx % 4 === 0) && idx) {
- result.push((bits >> 16) & 0xFF);
- result.push((bits >> 8) & 0xFF);
- result.push(bits & 0xFF);
- }
- bits = (bits << 6) | map.indexOf(input.charAt(idx));
- }
- // Dump tail
- tailbits = (max % 4) * 6;
- if (tailbits === 0) {
- result.push((bits >> 16) & 0xFF);
- result.push((bits >> 8) & 0xFF);
- result.push(bits & 0xFF);
- } else if (tailbits === 18) {
- result.push((bits >> 10) & 0xFF);
- result.push((bits >> 2) & 0xFF);
- } else if (tailbits === 12) {
- result.push((bits >> 4) & 0xFF);
- }
- // Wrap into Buffer for NodeJS and leave Array for browser
- if (NodeBuffer) {
- // Support node 6.+ Buffer API when available
- return NodeBuffer.from ? NodeBuffer.from(result) : new NodeBuffer(result);
- }
- return result;
- }
- function representYamlBinary(object /*, style*/) {
- var result = '', bits = 0, idx, tail,
- max = object.length,
- map = BASE64_MAP;
- // Convert every three bytes to 4 ASCII characters.
- for (idx = 0; idx < max; idx++) {
- if ((idx % 3 === 0) && idx) {
- result += map[(bits >> 18) & 0x3F];
- result += map[(bits >> 12) & 0x3F];
- result += map[(bits >> 6) & 0x3F];
- result += map[bits & 0x3F];
- }
- bits = (bits << 8) + object[idx];
- }
- // Dump tail
- tail = max % 3;
- if (tail === 0) {
- result += map[(bits >> 18) & 0x3F];
- result += map[(bits >> 12) & 0x3F];
- result += map[(bits >> 6) & 0x3F];
- result += map[bits & 0x3F];
- } else if (tail === 2) {
- result += map[(bits >> 10) & 0x3F];
- result += map[(bits >> 4) & 0x3F];
- result += map[(bits << 2) & 0x3F];
- result += map[64];
- } else if (tail === 1) {
- result += map[(bits >> 2) & 0x3F];
- result += map[(bits << 4) & 0x3F];
- result += map[64];
- result += map[64];
- }
- return result;
- }
- function isBinary(object) {
- return NodeBuffer && NodeBuffer.isBuffer(object);
- }
- module.exports = new Type('tag:yaml.org,2002:binary', {
- kind: 'scalar',
- resolve: resolveYamlBinary,
- construct: constructYamlBinary,
- predicate: isBinary,
- represent: representYamlBinary
- });
- /***/ }),
- /***/ 2648:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- var Type = __webpack_require__(53899);
- function resolveYamlBoolean(data) {
- if (data === null) return false;
- var max = data.length;
- return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) ||
- (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE'));
- }
- function constructYamlBoolean(data) {
- return data === 'true' ||
- data === 'True' ||
- data === 'TRUE';
- }
- function isBoolean(object) {
- return Object.prototype.toString.call(object) === '[object Boolean]';
- }
- module.exports = new Type('tag:yaml.org,2002:bool', {
- kind: 'scalar',
- resolve: resolveYamlBoolean,
- construct: constructYamlBoolean,
- predicate: isBoolean,
- represent: {
- lowercase: function (object) { return object ? 'true' : 'false'; },
- uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; },
- camelcase: function (object) { return object ? 'True' : 'False'; }
- },
- defaultStyle: 'lowercase'
- });
- /***/ }),
- /***/ 53456:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- var common = __webpack_require__(25596);
- var Type = __webpack_require__(53899);
- var YAML_FLOAT_PATTERN = new RegExp(
- // 2.5e4, 2.5 and integers
- '^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' +
- // .2e4, .2
- // special case, seems not from spec
- '|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' +
- // 20:59
- '|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*' +
- // .inf
- '|[-+]?\\.(?:inf|Inf|INF)' +
- // .nan
- '|\\.(?:nan|NaN|NAN))$');
- function resolveYamlFloat(data) {
- if (data === null) return false;
- if (!YAML_FLOAT_PATTERN.test(data) ||
- // Quick hack to not allow integers end with `_`
- // Probably should update regexp & check speed
- data[data.length - 1] === '_') {
- return false;
- }
- return true;
- }
- function constructYamlFloat(data) {
- var value, sign, base, digits;
- value = data.replace(/_/g, '').toLowerCase();
- sign = value[0] === '-' ? -1 : 1;
- digits = [];
- if ('+-'.indexOf(value[0]) >= 0) {
- value = value.slice(1);
- }
- if (value === '.inf') {
- return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;
- } else if (value === '.nan') {
- return NaN;
- } else if (value.indexOf(':') >= 0) {
- value.split(':').forEach(function (v) {
- digits.unshift(parseFloat(v, 10));
- });
- value = 0.0;
- base = 1;
- digits.forEach(function (d) {
- value += d * base;
- base *= 60;
- });
- return sign * value;
- }
- return sign * parseFloat(value, 10);
- }
- var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;
- function representYamlFloat(object, style) {
- var res;
- if (isNaN(object)) {
- switch (style) {
- case 'lowercase': return '.nan';
- case 'uppercase': return '.NAN';
- case 'camelcase': return '.NaN';
- }
- } else if (Number.POSITIVE_INFINITY === object) {
- switch (style) {
- case 'lowercase': return '.inf';
- case 'uppercase': return '.INF';
- case 'camelcase': return '.Inf';
- }
- } else if (Number.NEGATIVE_INFINITY === object) {
- switch (style) {
- case 'lowercase': return '-.inf';
- case 'uppercase': return '-.INF';
- case 'camelcase': return '-.Inf';
- }
- } else if (common.isNegativeZero(object)) {
- return '-0.0';
- }
- res = object.toString(10);
- // JS stringifier can build scientific format without dots: 5e-100,
- // while YAML requres dot: 5.e-100. Fix it with simple hack
- return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res;
- }
- function isFloat(object) {
- return (Object.prototype.toString.call(object) === '[object Number]') &&
- (object % 1 !== 0 || common.isNegativeZero(object));
- }
- module.exports = new Type('tag:yaml.org,2002:float', {
- kind: 'scalar',
- resolve: resolveYamlFloat,
- construct: constructYamlFloat,
- predicate: isFloat,
- represent: representYamlFloat,
- defaultStyle: 'lowercase'
- });
- /***/ }),
- /***/ 95979:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- var common = __webpack_require__(25596);
- var Type = __webpack_require__(53899);
- function isHexCode(c) {
- return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) ||
- ((0x41/* A */ <= c) && (c <= 0x46/* F */)) ||
- ((0x61/* a */ <= c) && (c <= 0x66/* f */));
- }
- function isOctCode(c) {
- return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */));
- }
- function isDecCode(c) {
- return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */));
- }
- function resolveYamlInteger(data) {
- if (data === null) return false;
- var max = data.length,
- index = 0,
- hasDigits = false,
- ch;
- if (!max) return false;
- ch = data[index];
- // sign
- if (ch === '-' || ch === '+') {
- ch = data[++index];
- }
- if (ch === '0') {
- // 0
- if (index + 1 === max) return true;
- ch = data[++index];
- // base 2, base 8, base 16
- if (ch === 'b') {
- // base 2
- index++;
- for (; index < max; index++) {
- ch = data[index];
- if (ch === '_') continue;
- if (ch !== '0' && ch !== '1') return false;
- hasDigits = true;
- }
- return hasDigits && ch !== '_';
- }
- if (ch === 'x') {
- // base 16
- index++;
- for (; index < max; index++) {
- ch = data[index];
- if (ch === '_') continue;
- if (!isHexCode(data.charCodeAt(index))) return false;
- hasDigits = true;
- }
- return hasDigits && ch !== '_';
- }
- // base 8
- for (; index < max; index++) {
- ch = data[index];
- if (ch === '_') continue;
- if (!isOctCode(data.charCodeAt(index))) return false;
- hasDigits = true;
- }
- return hasDigits && ch !== '_';
- }
- // base 10 (except 0) or base 60
- // value should not start with `_`;
- if (ch === '_') return false;
- for (; index < max; index++) {
- ch = data[index];
- if (ch === '_') continue;
- if (ch === ':') break;
- if (!isDecCode(data.charCodeAt(index))) {
- return false;
- }
- hasDigits = true;
- }
- // Should have digits and should not end with `_`
- if (!hasDigits || ch === '_') return false;
- // if !base60 - done;
- if (ch !== ':') return true;
- // base60 almost not used, no needs to optimize
- return /^(:[0-5]?[0-9])+$/.test(data.slice(index));
- }
- function constructYamlInteger(data) {
- var value = data, sign = 1, ch, base, digits = [];
- if (value.indexOf('_') !== -1) {
- value = value.replace(/_/g, '');
- }
- ch = value[0];
- if (ch === '-' || ch === '+') {
- if (ch === '-') sign = -1;
- value = value.slice(1);
- ch = value[0];
- }
- if (value === '0') return 0;
- if (ch === '0') {
- if (value[1] === 'b') return sign * parseInt(value.slice(2), 2);
- if (value[1] === 'x') return sign * parseInt(value, 16);
- return sign * parseInt(value, 8);
- }
- if (value.indexOf(':') !== -1) {
- value.split(':').forEach(function (v) {
- digits.unshift(parseInt(v, 10));
- });
- value = 0;
- base = 1;
- digits.forEach(function (d) {
- value += (d * base);
- base *= 60;
- });
- return sign * value;
- }
- return sign * parseInt(value, 10);
- }
- function isInteger(object) {
- return (Object.prototype.toString.call(object)) === '[object Number]' &&
- (object % 1 === 0 && !common.isNegativeZero(object));
- }
- module.exports = new Type('tag:yaml.org,2002:int', {
- kind: 'scalar',
- resolve: resolveYamlInteger,
- construct: constructYamlInteger,
- predicate: isInteger,
- represent: {
- binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); },
- octal: function (obj) { return obj >= 0 ? '0' + obj.toString(8) : '-0' + obj.toString(8).slice(1); },
- decimal: function (obj) { return obj.toString(10); },
- /* eslint-disable max-len */
- hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1); }
- },
- defaultStyle: 'decimal',
- styleAliases: {
- binary: [ 2, 'bin' ],
- octal: [ 8, 'oct' ],
- decimal: [ 10, 'dec' ],
- hexadecimal: [ 16, 'hex' ]
- }
- });
- /***/ }),
- /***/ 89811:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- var esprima;
- // Browserified version does not have esprima
- //
- // 1. For node.js just require module as deps
- // 2. For browser try to require mudule via external AMD system.
- // If not found - try to fallback to window.esprima. If not
- // found too - then fail to parse.
- //
- try {
- // workaround to exclude package from browserify list.
- var _require = undefined;
- esprima = __webpack_require__(31072);
- } catch (_) {
- /* eslint-disable no-redeclare */
- /* global window */
- if (typeof window !== 'undefined') esprima = window.esprima;
- }
- var Type = __webpack_require__(53899);
- function resolveJavascriptFunction(data) {
- if (data === null) return false;
- try {
- var source = '(' + data + ')',
- ast = esprima.parse(source, { range: true });
- if (ast.type !== 'Program' ||
- ast.body.length !== 1 ||
- ast.body[0].type !== 'ExpressionStatement' ||
- (ast.body[0].expression.type !== 'ArrowFunctionExpression' &&
- ast.body[0].expression.type !== 'FunctionExpression')) {
- return false;
- }
- return true;
- } catch (err) {
- return false;
- }
- }
- function constructJavascriptFunction(data) {
- /*jslint evil:true*/
- var source = '(' + data + ')',
- ast = esprima.parse(source, { range: true }),
- params = [],
- body;
- if (ast.type !== 'Program' ||
- ast.body.length !== 1 ||
- ast.body[0].type !== 'ExpressionStatement' ||
- (ast.body[0].expression.type !== 'ArrowFunctionExpression' &&
- ast.body[0].expression.type !== 'FunctionExpression')) {
- throw new Error('Failed to resolve function');
- }
- ast.body[0].expression.params.forEach(function (param) {
- params.push(param.name);
- });
- body = ast.body[0].expression.body.range;
- // Esprima's ranges include the first '{' and the last '}' characters on
- // function expressions. So cut them out.
- if (ast.body[0].expression.body.type === 'BlockStatement') {
- /*eslint-disable no-new-func*/
- return new Function(params, source.slice(body[0] + 1, body[1] - 1));
- }
- // ES6 arrow functions can omit the BlockStatement. In that case, just return
- // the body.
- /*eslint-disable no-new-func*/
- return new Function(params, 'return ' + source.slice(body[0], body[1]));
- }
- function representJavascriptFunction(object /*, style*/) {
- return object.toString();
- }
- function isFunction(object) {
- return Object.prototype.toString.call(object) === '[object Function]';
- }
- module.exports = new Type('tag:yaml.org,2002:js/function', {
- kind: 'scalar',
- resolve: resolveJavascriptFunction,
- construct: constructJavascriptFunction,
- predicate: isFunction,
- represent: representJavascriptFunction
- });
- /***/ }),
- /***/ 97287:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- var Type = __webpack_require__(53899);
- function resolveJavascriptRegExp(data) {
- if (data === null) return false;
- if (data.length === 0) return false;
- var regexp = data,
- tail = /\/([gim]*)$/.exec(data),
- modifiers = '';
- // if regexp starts with '/' it can have modifiers and must be properly closed
- // `/foo/gim` - modifiers tail can be maximum 3 chars
- if (regexp[0] === '/') {
- if (tail) modifiers = tail[1];
- if (modifiers.length > 3) return false;
- // if expression starts with /, is should be properly terminated
- if (regexp[regexp.length - modifiers.length - 1] !== '/') return false;
- }
- return true;
- }
- function constructJavascriptRegExp(data) {
- var regexp = data,
- tail = /\/([gim]*)$/.exec(data),
- modifiers = '';
- // `/foo/gim` - tail can be maximum 4 chars
- if (regexp[0] === '/') {
- if (tail) modifiers = tail[1];
- regexp = regexp.slice(1, regexp.length - modifiers.length - 1);
- }
- return new RegExp(regexp, modifiers);
- }
- function representJavascriptRegExp(object /*, style*/) {
- var result = '/' + object.source + '/';
- if (object.global) result += 'g';
- if (object.multiline) result += 'm';
- if (object.ignoreCase) result += 'i';
- return result;
- }
- function isRegExp(object) {
- return Object.prototype.toString.call(object) === '[object RegExp]';
- }
- module.exports = new Type('tag:yaml.org,2002:js/regexp', {
- kind: 'scalar',
- resolve: resolveJavascriptRegExp,
- construct: constructJavascriptRegExp,
- predicate: isRegExp,
- represent: representJavascriptRegExp
- });
- /***/ }),
- /***/ 70575:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- var Type = __webpack_require__(53899);
- function resolveJavascriptUndefined() {
- return true;
- }
- function constructJavascriptUndefined() {
- /*eslint-disable no-undefined*/
- return undefined;
- }
- function representJavascriptUndefined() {
- return '';
- }
- function isUndefined(object) {
- return typeof object === 'undefined';
- }
- module.exports = new Type('tag:yaml.org,2002:js/undefined', {
- kind: 'scalar',
- resolve: resolveJavascriptUndefined,
- construct: constructJavascriptUndefined,
- predicate: isUndefined,
- represent: representJavascriptUndefined
- });
- /***/ }),
- /***/ 86553:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- var Type = __webpack_require__(53899);
- module.exports = new Type('tag:yaml.org,2002:map', {
- kind: 'mapping',
- construct: function (data) { return data !== null ? data : {}; }
- });
- /***/ }),
- /***/ 243:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- var Type = __webpack_require__(53899);
- function resolveYamlMerge(data) {
- return data === '<<' || data === null;
- }
- module.exports = new Type('tag:yaml.org,2002:merge', {
- kind: 'scalar',
- resolve: resolveYamlMerge
- });
- /***/ }),
- /***/ 3022:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- var Type = __webpack_require__(53899);
- function resolveYamlNull(data) {
- if (data === null) return true;
- var max = data.length;
- return (max === 1 && data === '~') ||
- (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL'));
- }
- function constructYamlNull() {
- return null;
- }
- function isNull(object) {
- return object === null;
- }
- module.exports = new Type('tag:yaml.org,2002:null', {
- kind: 'scalar',
- resolve: resolveYamlNull,
- construct: constructYamlNull,
- predicate: isNull,
- represent: {
- canonical: function () { return '~'; },
- lowercase: function () { return 'null'; },
- uppercase: function () { return 'NULL'; },
- camelcase: function () { return 'Null'; }
- },
- defaultStyle: 'lowercase'
- });
- /***/ }),
- /***/ 3878:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- var Type = __webpack_require__(53899);
- var _hasOwnProperty = Object.prototype.hasOwnProperty;
- var _toString = Object.prototype.toString;
- function resolveYamlOmap(data) {
- if (data === null) return true;
- var objectKeys = [], index, length, pair, pairKey, pairHasKey,
- object = data;
- for (index = 0, length = object.length; index < length; index += 1) {
- pair = object[index];
- pairHasKey = false;
- if (_toString.call(pair) !== '[object Object]') return false;
- for (pairKey in pair) {
- if (_hasOwnProperty.call(pair, pairKey)) {
- if (!pairHasKey) pairHasKey = true;
- else return false;
- }
- }
- if (!pairHasKey) return false;
- if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey);
- else return false;
- }
- return true;
- }
- function constructYamlOmap(data) {
- return data !== null ? data : [];
- }
- module.exports = new Type('tag:yaml.org,2002:omap', {
- kind: 'sequence',
- resolve: resolveYamlOmap,
- construct: constructYamlOmap
- });
- /***/ }),
- /***/ 68244:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- var Type = __webpack_require__(53899);
- var _toString = Object.prototype.toString;
- function resolveYamlPairs(data) {
- if (data === null) return true;
- var index, length, pair, keys, result,
- object = data;
- result = new Array(object.length);
- for (index = 0, length = object.length; index < length; index += 1) {
- pair = object[index];
- if (_toString.call(pair) !== '[object Object]') return false;
- keys = Object.keys(pair);
- if (keys.length !== 1) return false;
- result[index] = [ keys[0], pair[keys[0]] ];
- }
- return true;
- }
- function constructYamlPairs(data) {
- if (data === null) return [];
- var index, length, pair, keys, result,
- object = data;
- result = new Array(object.length);
- for (index = 0, length = object.length; index < length; index += 1) {
- pair = object[index];
- keys = Object.keys(pair);
- result[index] = [ keys[0], pair[keys[0]] ];
- }
- return result;
- }
- module.exports = new Type('tag:yaml.org,2002:pairs', {
- kind: 'sequence',
- resolve: resolveYamlPairs,
- construct: constructYamlPairs
- });
- /***/ }),
- /***/ 43745:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- var Type = __webpack_require__(53899);
- module.exports = new Type('tag:yaml.org,2002:seq', {
- kind: 'sequence',
- construct: function (data) { return data !== null ? data : []; }
- });
- /***/ }),
- /***/ 67300:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- var Type = __webpack_require__(53899);
- var _hasOwnProperty = Object.prototype.hasOwnProperty;
- function resolveYamlSet(data) {
- if (data === null) return true;
- var key, object = data;
- for (key in object) {
- if (_hasOwnProperty.call(object, key)) {
- if (object[key] !== null) return false;
- }
- }
- return true;
- }
- function constructYamlSet(data) {
- return data !== null ? data : {};
- }
- module.exports = new Type('tag:yaml.org,2002:set', {
- kind: 'mapping',
- resolve: resolveYamlSet,
- construct: constructYamlSet
- });
- /***/ }),
- /***/ 79483:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- var Type = __webpack_require__(53899);
- module.exports = new Type('tag:yaml.org,2002:str', {
- kind: 'scalar',
- construct: function (data) { return data !== null ? data : ''; }
- });
- /***/ }),
- /***/ 56145:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- var Type = __webpack_require__(53899);
- var YAML_DATE_REGEXP = new RegExp(
- '^([0-9][0-9][0-9][0-9])' + // [1] year
- '-([0-9][0-9])' + // [2] month
- '-([0-9][0-9])$'); // [3] day
- var YAML_TIMESTAMP_REGEXP = new RegExp(
- '^([0-9][0-9][0-9][0-9])' + // [1] year
- '-([0-9][0-9]?)' + // [2] month
- '-([0-9][0-9]?)' + // [3] day
- '(?:[Tt]|[ \\t]+)' + // ...
- '([0-9][0-9]?)' + // [4] hour
- ':([0-9][0-9])' + // [5] minute
- ':([0-9][0-9])' + // [6] second
- '(?:\\.([0-9]*))?' + // [7] fraction
- '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour
- '(?::([0-9][0-9]))?))?$'); // [11] tz_minute
- function resolveYamlTimestamp(data) {
- if (data === null) return false;
- if (YAML_DATE_REGEXP.exec(data) !== null) return true;
- if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true;
- return false;
- }
- function constructYamlTimestamp(data) {
- var match, year, month, day, hour, minute, second, fraction = 0,
- delta = null, tz_hour, tz_minute, date;
- match = YAML_DATE_REGEXP.exec(data);
- if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data);
- if (match === null) throw new Error('Date resolve error');
- // match: [1] year [2] month [3] day
- year = +(match[1]);
- month = +(match[2]) - 1; // JS month starts with 0
- day = +(match[3]);
- if (!match[4]) { // no hour
- return new Date(Date.UTC(year, month, day));
- }
- // match: [4] hour [5] minute [6] second [7] fraction
- hour = +(match[4]);
- minute = +(match[5]);
- second = +(match[6]);
- if (match[7]) {
- fraction = match[7].slice(0, 3);
- while (fraction.length < 3) { // milli-seconds
- fraction += '0';
- }
- fraction = +fraction;
- }
- // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute
- if (match[9]) {
- tz_hour = +(match[10]);
- tz_minute = +(match[11] || 0);
- delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds
- if (match[9] === '-') delta = -delta;
- }
- date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));
- if (delta) date.setTime(date.getTime() - delta);
- return date;
- }
- function representYamlTimestamp(object /*, style*/) {
- return object.toISOString();
- }
- module.exports = new Type('tag:yaml.org,2002:timestamp', {
- kind: 'scalar',
- resolve: resolveYamlTimestamp,
- construct: constructYamlTimestamp,
- instanceOf: Date,
- represent: representYamlTimestamp
- });
- /***/ }),
- /***/ 39593:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- // A linked list to keep track of recently-used-ness
- const Yallist = __webpack_require__(34411)
- const MAX = Symbol('max')
- const LENGTH = Symbol('length')
- const LENGTH_CALCULATOR = Symbol('lengthCalculator')
- const ALLOW_STALE = Symbol('allowStale')
- const MAX_AGE = Symbol('maxAge')
- const DISPOSE = Symbol('dispose')
- const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet')
- const LRU_LIST = Symbol('lruList')
- const CACHE = Symbol('cache')
- const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet')
- const naiveLength = () => 1
- // lruList is a yallist where the head is the youngest
- // item, and the tail is the oldest. the list contains the Hit
- // objects as the entries.
- // Each Hit object has a reference to its Yallist.Node. This
- // never changes.
- //
- // cache is a Map (or PseudoMap) that matches the keys to
- // the Yallist.Node object.
- class LRUCache {
- constructor (options) {
- if (typeof options === 'number')
- options = { max: options }
- if (!options)
- options = {}
- if (options.max && (typeof options.max !== 'number' || options.max < 0))
- throw new TypeError('max must be a non-negative number')
- // Kind of weird to have a default max of Infinity, but oh well.
- const max = this[MAX] = options.max || Infinity
- const lc = options.length || naiveLength
- this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc
- this[ALLOW_STALE] = options.stale || false
- if (options.maxAge && typeof options.maxAge !== 'number')
- throw new TypeError('maxAge must be a number')
- this[MAX_AGE] = options.maxAge || 0
- this[DISPOSE] = options.dispose
- this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false
- this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false
- this.reset()
- }
- // resize the cache when the max changes.
- set max (mL) {
- if (typeof mL !== 'number' || mL < 0)
- throw new TypeError('max must be a non-negative number')
- this[MAX] = mL || Infinity
- trim(this)
- }
- get max () {
- return this[MAX]
- }
- set allowStale (allowStale) {
- this[ALLOW_STALE] = !!allowStale
- }
- get allowStale () {
- return this[ALLOW_STALE]
- }
- set maxAge (mA) {
- if (typeof mA !== 'number')
- throw new TypeError('maxAge must be a non-negative number')
- this[MAX_AGE] = mA
- trim(this)
- }
- get maxAge () {
- return this[MAX_AGE]
- }
- // resize the cache when the lengthCalculator changes.
- set lengthCalculator (lC) {
- if (typeof lC !== 'function')
- lC = naiveLength
- if (lC !== this[LENGTH_CALCULATOR]) {
- this[LENGTH_CALCULATOR] = lC
- this[LENGTH] = 0
- this[LRU_LIST].forEach(hit => {
- hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key)
- this[LENGTH] += hit.length
- })
- }
- trim(this)
- }
- get lengthCalculator () { return this[LENGTH_CALCULATOR] }
- get length () { return this[LENGTH] }
- get itemCount () { return this[LRU_LIST].length }
- rforEach (fn, thisp) {
- thisp = thisp || this
- for (let walker = this[LRU_LIST].tail; walker !== null;) {
- const prev = walker.prev
- forEachStep(this, fn, walker, thisp)
- walker = prev
- }
- }
- forEach (fn, thisp) {
- thisp = thisp || this
- for (let walker = this[LRU_LIST].head; walker !== null;) {
- const next = walker.next
- forEachStep(this, fn, walker, thisp)
- walker = next
- }
- }
- keys () {
- return this[LRU_LIST].toArray().map(k => k.key)
- }
- values () {
- return this[LRU_LIST].toArray().map(k => k.value)
- }
- reset () {
- if (this[DISPOSE] &&
- this[LRU_LIST] &&
- this[LRU_LIST].length) {
- this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value))
- }
- this[CACHE] = new Map() // hash of items by key
- this[LRU_LIST] = new Yallist() // list of items in order of use recency
- this[LENGTH] = 0 // length of items in the list
- }
- dump () {
- return this[LRU_LIST].map(hit =>
- isStale(this, hit) ? false : {
- k: hit.key,
- v: hit.value,
- e: hit.now + (hit.maxAge || 0)
- }).toArray().filter(h => h)
- }
- dumpLru () {
- return this[LRU_LIST]
- }
- set (key, value, maxAge) {
- maxAge = maxAge || this[MAX_AGE]
- if (maxAge && typeof maxAge !== 'number')
- throw new TypeError('maxAge must be a number')
- const now = maxAge ? Date.now() : 0
- const len = this[LENGTH_CALCULATOR](value, key)
- if (this[CACHE].has(key)) {
- if (len > this[MAX]) {
- del(this, this[CACHE].get(key))
- return false
- }
- const node = this[CACHE].get(key)
- const item = node.value
- // dispose of the old one before overwriting
- // split out into 2 ifs for better coverage tracking
- if (this[DISPOSE]) {
- if (!this[NO_DISPOSE_ON_SET])
- this[DISPOSE](key, item.value)
- }
- item.now = now
- item.maxAge = maxAge
- item.value = value
- this[LENGTH] += len - item.length
- item.length = len
- this.get(key)
- trim(this)
- return true
- }
- const hit = new Entry(key, value, len, now, maxAge)
- // oversized objects fall out of cache automatically.
- if (hit.length > this[MAX]) {
- if (this[DISPOSE])
- this[DISPOSE](key, value)
- return false
- }
- this[LENGTH] += hit.length
- this[LRU_LIST].unshift(hit)
- this[CACHE].set(key, this[LRU_LIST].head)
- trim(this)
- return true
- }
- has (key) {
- if (!this[CACHE].has(key)) return false
- const hit = this[CACHE].get(key).value
- return !isStale(this, hit)
- }
- get (key) {
- return get(this, key, true)
- }
- peek (key) {
- return get(this, key, false)
- }
- pop () {
- const node = this[LRU_LIST].tail
- if (!node)
- return null
- del(this, node)
- return node.value
- }
- del (key) {
- del(this, this[CACHE].get(key))
- }
- load (arr) {
- // reset the cache
- this.reset()
- const now = Date.now()
- // A previous serialized cache has the most recent items first
- for (let l = arr.length - 1; l >= 0; l--) {
- const hit = arr[l]
- const expiresAt = hit.e || 0
- if (expiresAt === 0)
- // the item was created without expiration in a non aged cache
- this.set(hit.k, hit.v)
- else {
- const maxAge = expiresAt - now
- // dont add already expired items
- if (maxAge > 0) {
- this.set(hit.k, hit.v, maxAge)
- }
- }
- }
- }
- prune () {
- this[CACHE].forEach((value, key) => get(this, key, false))
- }
- }
- const get = (self, key, doUse) => {
- const node = self[CACHE].get(key)
- if (node) {
- const hit = node.value
- if (isStale(self, hit)) {
- del(self, node)
- if (!self[ALLOW_STALE])
- return undefined
- } else {
- if (doUse) {
- if (self[UPDATE_AGE_ON_GET])
- node.value.now = Date.now()
- self[LRU_LIST].unshiftNode(node)
- }
- }
- return hit.value
- }
- }
- const isStale = (self, hit) => {
- if (!hit || (!hit.maxAge && !self[MAX_AGE]))
- return false
- const diff = Date.now() - hit.now
- return hit.maxAge ? diff > hit.maxAge
- : self[MAX_AGE] && (diff > self[MAX_AGE])
- }
- const trim = self => {
- if (self[LENGTH] > self[MAX]) {
- for (let walker = self[LRU_LIST].tail;
- self[LENGTH] > self[MAX] && walker !== null;) {
- // We know that we're about to delete this one, and also
- // what the next least recently used key will be, so just
- // go ahead and set it now.
- const prev = walker.prev
- del(self, walker)
- walker = prev
- }
- }
- }
- const del = (self, node) => {
- if (node) {
- const hit = node.value
- if (self[DISPOSE])
- self[DISPOSE](hit.key, hit.value)
- self[LENGTH] -= hit.length
- self[CACHE].delete(hit.key)
- self[LRU_LIST].removeNode(node)
- }
- }
- class Entry {
- constructor (key, value, length, now, maxAge) {
- this.key = key
- this.value = value
- this.length = length
- this.now = now
- this.maxAge = maxAge || 0
- }
- }
- const forEachStep = (self, fn, node, thisp) => {
- let hit = node.value
- if (isStale(self, hit)) {
- del(self, node)
- if (!self[ALLOW_STALE])
- hit = undefined
- }
- if (hit)
- fn.call(thisp, hit.value, hit.key, self)
- }
- module.exports = LRUCache
- /***/ }),
- /***/ 91729:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const fs = __webpack_require__(35747)
- const promisify = __webpack_require__(60350)
- const isFunction = value => typeof value === "function"
- const names = [
- "access",
- "readFile",
- "writeFile",
- "copyFile",
- "close",
- "open",
- "read",
- "write",
- "rename",
- "rmdir",
- "mkdir",
- "readdir",
- "stat",
- "lstat",
- "fstat",
- "appendFile",
- "realpath",
- "link",
- "unlink",
- "readlink",
- "chmod",
- "fchmod",
- "chown",
- "fchown",
- "lchown",
- "fsync",
- "utimes",
- "futimes",
- "ftruncate"
- ]
- const pfs = promisify.some(fs, names.filter(name => isFunction(fs[name])))
- module.exports = pfs
- module.exports.default = pfs
- /***/ }),
- /***/ 60390:
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
- "use strict";
- Object.defineProperty(exports, "__esModule", ({ value: true }));
- exports.encode = exports.parsePackageString = void 0;
- const debug = __webpack_require__(15158)('snyk:module');
- const gitHost = __webpack_require__(19672);
- exports.default = parsePackageString;
- /**
- * Parses a string package id (name + optional version) to an object.
- *
- * This method used to be named `moduleToObject`.
- */
- function parsePackageString(nameAndMaybeVersion, versionOrOptions, options) {
- if (!nameAndMaybeVersion) {
- throw new Error('requires string to parse into module');
- }
- let version;
- if (versionOrOptions && !options && typeof versionOrOptions === 'object') {
- options = versionOrOptions;
- }
- else {
- version = versionOrOptions;
- }
- let str = nameAndMaybeVersion;
- // first, try the common case; there's no version, and it's a normal package name
- if (!version) {
- // foo, foo-bar, @foo/bar, com.example:test
- // none of these can be URLs, or versions
- const fastPath = /^(?:(?:[a-z-]+)|(?:@[a-z-]+\/[a-z-]+)|(?:[a-z-]+\.[.a-z-]+:[a-z-]+))$/;
- if (fastPath.test(str)) {
- return supported(str, { name: str, version: '*' }, options);
- }
- }
- if (version && str.lastIndexOf('@') < 1) {
- debug('appending version onto string');
- str += '@' + version;
- }
- // first try with regular git urls
- const gitObject = looksLikeUrl(str);
- if (gitObject) {
- // then the string looks like a url, let's try to parse it
- return supported(str, fromGitObject(gitObject), options);
- }
- let parts = str.split('@');
- if (str.indexOf('@') === 0) {
- // put the scoped package name back together
- parts = parts.slice(1);
- parts[0] = '@' + parts[0];
- }
- // then as a backup, try pkg@giturl
- const maybeGitObject = parts[1] && looksLikeUrl(parts[1]);
- if (maybeGitObject) {
- // then the string looks like a url, let's try to parse it
- return supported(str, fromGitObject(maybeGitObject), options);
- }
- if (parts.length === 1) {
- // no version
- parts.push('*');
- }
- const module = {
- name: parts[0],
- version: parts.slice(1).join('@'),
- };
- return supported(str, module, options);
- }
- exports.parsePackageString = parsePackageString;
- // git host from URL
- function looksLikeUrl(str) {
- if (str.slice(-1) === '/') {
- // strip the trailing slash since we can't parse it properly anyway
- str = str.slice(0, -1);
- }
- if (str.toLowerCase().indexOf('://github.com/') !== -1 &&
- str.indexOf('http') === 0) {
- // attempt to get better compat with our parser by stripping the github
- // and url parts
- // examples:
- // - https://github.com/Snyk/snyk/releases/tag/v1.14.2
- // - https://github.com/Snyk/vulndb/tree/snapshots
- // - https://github.com/Snyk/snyk/commit/75477b18
- const parts = str.replace(/https?:\/\/github.com\//, '').split('/');
- str = parts.shift() + '/' + parts.shift();
- if (parts.length) {
- str += '#' + parts.pop();
- }
- }
- const obj = gitHost.fromUrl(str);
- return obj;
- }
- function fromGitObject(obj) {
- // debug('parsed from hosted-git-info');
- /* istanbul ignore if */
- if (!obj.project || !obj.user) {
- // this should never actually occur
- const error = new Error('not supported: failed to fully parse');
- error.code = 501;
- throw error;
- }
- const module = {
- name: obj.project,
- version: obj.user + '/' + obj.project,
- };
- if (obj.committish) {
- module.version += '#' + obj.committish;
- }
- return module;
- }
- function encode(name) {
- return name[0] + encodeURIComponent(name.slice(1));
- }
- exports.encode = encode;
- function supported(str, module, options) {
- if (!options) {
- options = {};
- }
- if (options.packageManager === 'maven') {
- if (str.indexOf(':') === -1) {
- throw new Error('invalid Maven package name: ' + str);
- }
- return module;
- }
- const protocolMatch = module.version.match(/^(https?:)|(git[:+])/i);
- if (protocolMatch || module.name.indexOf('://') !== -1) {
- // we don't support non-npm modules atm
- debug('not supported %s@%s (ext)', module.name, module.version);
- if (options.loose) {
- delete module.version;
- }
- else {
- debug('external module: ' + toString(module));
- }
- }
- if (module.version === 'latest' || !module.version) {
- module.version = '*';
- }
- debug('%s => { name: "%s", version: "%s" }', str, module.name, module.version);
- return module;
- }
- function toString(module) {
- return module.name + '@' + module.version;
- }
- //# sourceMappingURL=index.js.map
- /***/ }),
- /***/ 84479:
- /***/ ((module) => {
- "use strict";
- var gitHosts = module.exports = {
- github: {
- // First two are insecure and generally shouldn't be used any more, but
- // they are still supported.
- 'protocols': [ 'git', 'http', 'git+ssh', 'git+https', 'ssh', 'https' ],
- 'domain': 'github.com',
- 'treepath': 'tree',
- 'filetemplate': 'https://{auth@}raw.githubusercontent.com/{user}/{project}/{committish}/{path}',
- 'bugstemplate': 'https://{domain}/{user}/{project}/issues',
- 'gittemplate': 'git://{auth@}{domain}/{user}/{project}.git{#committish}',
- 'tarballtemplate': 'https://codeload.{domain}/{user}/{project}/tar.gz/{committish}'
- },
- bitbucket: {
- 'protocols': [ 'git+ssh', 'git+https', 'ssh', 'https' ],
- 'domain': 'bitbucket.org',
- 'treepath': 'src',
- 'tarballtemplate': 'https://{domain}/{user}/{project}/get/{committish}.tar.gz'
- },
- gitlab: {
- 'protocols': [ 'git+ssh', 'git+https', 'ssh', 'https' ],
- 'domain': 'gitlab.com',
- 'treepath': 'tree',
- 'bugstemplate': 'https://{domain}/{user}/{project}/issues',
- 'httpstemplate': 'git+https://{auth@}{domain}/{user}/{projectPath}.git{#committish}',
- 'tarballtemplate': 'https://{domain}/{user}/{project}/repository/archive.tar.gz?ref={committish}',
- 'pathmatch': /^\/([^/]+)\/((?!.*(\/-\/|\/repository(\/[^/]+)?\/archive\.tar\.gz)).*?)(?:\.git|\/)?$/
- },
- gist: {
- 'protocols': [ 'git', 'git+ssh', 'git+https', 'ssh', 'https' ],
- 'domain': 'gist.github.com',
- 'pathmatch': /^[/](?:([^/]+)[/])?([a-z0-9]{7,})(?:[.]git)?$/,
- 'filetemplate': 'https://gist.githubusercontent.com/{user}/{project}/raw{/committish}/{path}',
- 'bugstemplate': 'https://{domain}/{project}',
- 'gittemplate': 'git://{domain}/{project}.git{#committish}',
- 'sshtemplate': 'git@{domain}:/{project}.git{#committish}',
- 'sshurltemplate': 'git+ssh://git@{domain}/{project}.git{#committish}',
- 'browsetemplate': 'https://{domain}/{project}{/committish}',
- 'browsefiletemplate': 'https://{domain}/{project}{/committish}{#path}',
- 'docstemplate': 'https://{domain}/{project}{/committish}',
- 'httpstemplate': 'git+https://{domain}/{project}.git{#committish}',
- 'shortcuttemplate': '{type}:{project}{#committish}',
- 'pathtemplate': '{project}{#committish}',
- 'tarballtemplate': 'https://codeload.github.com/gist/{project}/tar.gz/{committish}',
- 'hashformat': function (fragment) {
- return 'file-' + formatHashFragment(fragment)
- }
- }
- }
- var gitHostDefaults = {
- 'sshtemplate': 'git@{domain}:{user}/{project}.git{#committish}',
- 'sshurltemplate': 'git+ssh://git@{domain}/{user}/{project}.git{#committish}',
- 'browsetemplate': 'https://{domain}/{user}/{project}{/tree/committish}',
- 'browsefiletemplate': 'https://{domain}/{user}/{project}/{treepath}/{committish}/{path}{#fragment}',
- 'docstemplate': 'https://{domain}/{user}/{project}{/tree/committish}#readme',
- 'httpstemplate': 'git+https://{auth@}{domain}/{user}/{project}.git{#committish}',
- 'filetemplate': 'https://{domain}/{user}/{project}/raw/{committish}/{path}',
- 'shortcuttemplate': '{type}:{user}/{project}{#committish}',
- 'pathtemplate': '{user}/{project}{#committish}',
- 'pathmatch': /^[/]([^/]+)[/]([^/]+?)(?:[.]git|[/])?$/,
- 'hashformat': formatHashFragment
- }
- Object.keys(gitHosts).forEach(function (name) {
- Object.keys(gitHostDefaults).forEach(function (key) {
- if (gitHosts[name][key]) return
- gitHosts[name][key] = gitHostDefaults[key]
- })
- gitHosts[name].protocols_re = RegExp('^(' +
- gitHosts[name].protocols.map(function (protocol) {
- return protocol.replace(/([\\+*{}()[\]$^|])/g, '\\$1')
- }).join('|') + '):$')
- })
- function formatHashFragment (fragment) {
- return fragment.toLowerCase().replace(/^\W+|\/|\W+$/g, '').replace(/\W+/g, '-')
- }
- /***/ }),
- /***/ 11234:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- var gitHosts = __webpack_require__(84479)
- /* eslint-disable node/no-deprecated-api */
- // copy-pasta util._extend from node's source, to avoid pulling
- // the whole util module into peoples' webpack bundles.
- /* istanbul ignore next */
- var extend = Object.assign || function _extend (target, source) {
- // Don't do anything if source isn't an object
- if (source === null || typeof source !== 'object') return target
- const keys = Object.keys(source)
- let i = keys.length
- while (i--) {
- target[keys[i]] = source[keys[i]]
- }
- return target
- }
- module.exports = GitHost
- function GitHost (type, user, auth, project, committish, defaultRepresentation, opts) {
- var gitHostInfo = this
- gitHostInfo.type = type
- Object.keys(gitHosts[type]).forEach(function (key) {
- gitHostInfo[key] = gitHosts[type][key]
- })
- gitHostInfo.user = user
- gitHostInfo.auth = auth
- gitHostInfo.project = project
- gitHostInfo.committish = committish
- gitHostInfo.default = defaultRepresentation
- gitHostInfo.opts = opts || {}
- }
- GitHost.prototype.hash = function () {
- return this.committish ? '#' + this.committish : ''
- }
- GitHost.prototype._fill = function (template, opts) {
- if (!template) return
- var vars = extend({}, opts)
- vars.path = vars.path ? vars.path.replace(/^[/]+/g, '') : ''
- opts = extend(extend({}, this.opts), opts)
- var self = this
- Object.keys(this).forEach(function (key) {
- if (self[key] != null && vars[key] == null) vars[key] = self[key]
- })
- var rawAuth = vars.auth
- var rawcommittish = vars.committish
- var rawFragment = vars.fragment
- var rawPath = vars.path
- var rawProject = vars.project
- Object.keys(vars).forEach(function (key) {
- var value = vars[key]
- if ((key === 'path' || key === 'project') && typeof value === 'string') {
- vars[key] = value.split('/').map(function (pathComponent) {
- return encodeURIComponent(pathComponent)
- }).join('/')
- } else if (key !== 'domain') {
- vars[key] = encodeURIComponent(value)
- }
- })
- vars['auth@'] = rawAuth ? rawAuth + '@' : ''
- vars['#fragment'] = rawFragment ? '#' + this.hashformat(rawFragment) : ''
- vars.fragment = vars.fragment ? vars.fragment : ''
- vars['#path'] = rawPath ? '#' + this.hashformat(rawPath) : ''
- vars['/path'] = vars.path ? '/' + vars.path : ''
- vars.projectPath = rawProject.split('/').map(encodeURIComponent).join('/')
- if (opts.noCommittish) {
- vars['#committish'] = ''
- vars['/tree/committish'] = ''
- vars['/committish'] = ''
- vars.committish = ''
- } else {
- vars['#committish'] = rawcommittish ? '#' + rawcommittish : ''
- vars['/tree/committish'] = vars.committish
- ? '/' + vars.treepath + '/' + vars.committish
- : ''
- vars['/committish'] = vars.committish ? '/' + vars.committish : ''
- vars.committish = vars.committish || 'master'
- }
- var res = template
- Object.keys(vars).forEach(function (key) {
- res = res.replace(new RegExp('[{]' + key + '[}]', 'g'), vars[key])
- })
- if (opts.noGitPlus) {
- return res.replace(/^git[+]/, '')
- } else {
- return res
- }
- }
- GitHost.prototype.ssh = function (opts) {
- return this._fill(this.sshtemplate, opts)
- }
- GitHost.prototype.sshurl = function (opts) {
- return this._fill(this.sshurltemplate, opts)
- }
- GitHost.prototype.browse = function (P, F, opts) {
- if (typeof P === 'string') {
- if (typeof F !== 'string') {
- opts = F
- F = null
- }
- return this._fill(this.browsefiletemplate, extend({
- fragment: F,
- path: P
- }, opts))
- } else {
- return this._fill(this.browsetemplate, P)
- }
- }
- GitHost.prototype.docs = function (opts) {
- return this._fill(this.docstemplate, opts)
- }
- GitHost.prototype.bugs = function (opts) {
- return this._fill(this.bugstemplate, opts)
- }
- GitHost.prototype.https = function (opts) {
- return this._fill(this.httpstemplate, opts)
- }
- GitHost.prototype.git = function (opts) {
- return this._fill(this.gittemplate, opts)
- }
- GitHost.prototype.shortcut = function (opts) {
- return this._fill(this.shortcuttemplate, opts)
- }
- GitHost.prototype.path = function (opts) {
- return this._fill(this.pathtemplate, opts)
- }
- GitHost.prototype.tarball = function (opts_) {
- var opts = extend({}, opts_, { noCommittish: false })
- return this._fill(this.tarballtemplate, opts)
- }
- GitHost.prototype.file = function (P, opts) {
- return this._fill(this.filetemplate, extend({ path: P }, opts))
- }
- GitHost.prototype.getDefaultRepresentation = function () {
- return this.default
- }
- GitHost.prototype.toString = function (opts) {
- if (this.default && typeof this[this.default] === 'function') return this[this.default](opts)
- return this.sshurl(opts)
- }
- /***/ }),
- /***/ 19672:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- var url = __webpack_require__(78835)
- var gitHosts = __webpack_require__(84479)
- var GitHost = module.exports = __webpack_require__(11234)
- var LRU = __webpack_require__(64422)
- var cache = new LRU({max: 1000})
- var protocolToRepresentationMap = {
- 'git+ssh:': 'sshurl',
- 'git+https:': 'https',
- 'ssh:': 'sshurl',
- 'git:': 'git'
- }
- function protocolToRepresentation (protocol) {
- return protocolToRepresentationMap[protocol] || protocol.slice(0, -1)
- }
- var authProtocols = {
- 'git:': true,
- 'https:': true,
- 'git+https:': true,
- 'http:': true,
- 'git+http:': true
- }
- module.exports.fromUrl = function (giturl, opts) {
- if (typeof giturl !== 'string') return
- var key = giturl + JSON.stringify(opts || {})
- if (!cache.has(key)) {
- cache.set(key, fromUrl(giturl, opts))
- }
- return cache.get(key)
- }
- function fromUrl (giturl, opts) {
- if (giturl == null || giturl === '') return
- var url = fixupUnqualifiedGist(
- isGitHubShorthand(giturl) ? 'github:' + giturl : giturl
- )
- var parsed = parseGitUrl(url)
- var shortcutMatch = url.match(/^([^:]+):(?:[^@]+@)?(?:([^/]*)\/)?([^#]+)/)
- var matches = Object.keys(gitHosts).map(function (gitHostName) {
- try {
- var gitHostInfo = gitHosts[gitHostName]
- var auth = null
- if (parsed.auth && authProtocols[parsed.protocol]) {
- auth = parsed.auth
- }
- var committish = parsed.hash ? decodeURIComponent(parsed.hash.substr(1)) : null
- var user = null
- var project = null
- var defaultRepresentation = null
- if (shortcutMatch && shortcutMatch[1] === gitHostName) {
- user = shortcutMatch[2] && decodeURIComponent(shortcutMatch[2])
- project = decodeURIComponent(shortcutMatch[3].replace(/\.git$/, ''))
- defaultRepresentation = 'shortcut'
- } else {
- if (parsed.host && parsed.host !== gitHostInfo.domain && parsed.host.replace(/^www[.]/, '') !== gitHostInfo.domain) return
- if (!gitHostInfo.protocols_re.test(parsed.protocol)) return
- if (!parsed.path) return
- var pathmatch = gitHostInfo.pathmatch
- var matched = parsed.path.match(pathmatch)
- if (!matched) return
- /* istanbul ignore else */
- if (matched[1] !== null && matched[1] !== undefined) {
- user = decodeURIComponent(matched[1].replace(/^:/, ''))
- }
- project = decodeURIComponent(matched[2])
- defaultRepresentation = protocolToRepresentation(parsed.protocol)
- }
- return new GitHost(gitHostName, user, auth, project, committish, defaultRepresentation, opts)
- } catch (ex) {
- /* istanbul ignore else */
- if (ex instanceof URIError) {
- } else throw ex
- }
- }).filter(function (gitHostInfo) { return gitHostInfo })
- if (matches.length !== 1) return
- return matches[0]
- }
- function isGitHubShorthand (arg) {
- // Note: This does not fully test the git ref format.
- // See https://www.kernel.org/pub/software/scm/git/docs/git-check-ref-format.html
- //
- // The only way to do this properly would be to shell out to
- // git-check-ref-format, and as this is a fast sync function,
- // we don't want to do that. Just let git fail if it turns
- // out that the commit-ish is invalid.
- // GH usernames cannot start with . or -
- return /^[^:@%/\s.-][^:@%/\s]*[/][^:@\s/%]+(?:#.*)?$/.test(arg)
- }
- function fixupUnqualifiedGist (giturl) {
- // necessary for round-tripping gists
- var parsed = url.parse(giturl)
- if (parsed.protocol === 'gist:' && parsed.host && !parsed.path) {
- return parsed.protocol + '/' + parsed.host
- } else {
- return giturl
- }
- }
- function parseGitUrl (giturl) {
- var matched = giturl.match(/^([^@]+)@([^:/]+):[/]?((?:[^/]+[/])?[^/]+?)(?:[.]git)?(#.*)?$/)
- if (!matched) {
- var legacy = url.parse(giturl)
- if (legacy.auth) {
- // git urls can be in the form of scp-style/ssh-connect strings, like
- // git+ssh://user@host.com:some/path, which the legacy url parser
- // supports, but WhatWG url.URL class does not. However, the legacy
- // parser de-urlencodes the username and password, so something like
- // https://user%3An%40me:p%40ss%3Aword@x.com/ becomes
- // https://user:n@me:p@ss:word@x.com/ which is all kinds of wrong.
- // Pull off just the auth and host, so we dont' get the confusing
- // scp-style URL, then pass that to the WhatWG parser to get the
- // auth properly escaped.
- const authmatch = giturl.match(/[^@]+@[^:/]+/)
- /* istanbul ignore else - this should be impossible */
- if (authmatch) {
- var whatwg = new url.URL(authmatch[0])
- legacy.auth = whatwg.username || ''
- if (whatwg.password) legacy.auth += ':' + whatwg.password
- }
- }
- return legacy
- }
- return {
- protocol: 'git+ssh:',
- slashes: true,
- auth: matched[1],
- host: matched[2],
- port: null,
- hostname: matched[2],
- hash: matched[4],
- search: null,
- query: null,
- pathname: '/' + matched[3],
- path: '/' + matched[3],
- href: 'git+ssh://' + matched[1] + '@' + matched[2] +
- '/' + matched[3] + (matched[4] || '')
- }
- }
- /***/ }),
- /***/ 64422:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- // A linked list to keep track of recently-used-ness
- const Yallist = __webpack_require__(20891)
- const MAX = Symbol('max')
- const LENGTH = Symbol('length')
- const LENGTH_CALCULATOR = Symbol('lengthCalculator')
- const ALLOW_STALE = Symbol('allowStale')
- const MAX_AGE = Symbol('maxAge')
- const DISPOSE = Symbol('dispose')
- const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet')
- const LRU_LIST = Symbol('lruList')
- const CACHE = Symbol('cache')
- const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet')
- const naiveLength = () => 1
- // lruList is a yallist where the head is the youngest
- // item, and the tail is the oldest. the list contains the Hit
- // objects as the entries.
- // Each Hit object has a reference to its Yallist.Node. This
- // never changes.
- //
- // cache is a Map (or PseudoMap) that matches the keys to
- // the Yallist.Node object.
- class LRUCache {
- constructor (options) {
- if (typeof options === 'number')
- options = { max: options }
- if (!options)
- options = {}
- if (options.max && (typeof options.max !== 'number' || options.max < 0))
- throw new TypeError('max must be a non-negative number')
- // Kind of weird to have a default max of Infinity, but oh well.
- const max = this[MAX] = options.max || Infinity
- const lc = options.length || naiveLength
- this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc
- this[ALLOW_STALE] = options.stale || false
- if (options.maxAge && typeof options.maxAge !== 'number')
- throw new TypeError('maxAge must be a number')
- this[MAX_AGE] = options.maxAge || 0
- this[DISPOSE] = options.dispose
- this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false
- this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false
- this.reset()
- }
- // resize the cache when the max changes.
- set max (mL) {
- if (typeof mL !== 'number' || mL < 0)
- throw new TypeError('max must be a non-negative number')
- this[MAX] = mL || Infinity
- trim(this)
- }
- get max () {
- return this[MAX]
- }
- set allowStale (allowStale) {
- this[ALLOW_STALE] = !!allowStale
- }
- get allowStale () {
- return this[ALLOW_STALE]
- }
- set maxAge (mA) {
- if (typeof mA !== 'number')
- throw new TypeError('maxAge must be a non-negative number')
- this[MAX_AGE] = mA
- trim(this)
- }
- get maxAge () {
- return this[MAX_AGE]
- }
- // resize the cache when the lengthCalculator changes.
- set lengthCalculator (lC) {
- if (typeof lC !== 'function')
- lC = naiveLength
- if (lC !== this[LENGTH_CALCULATOR]) {
- this[LENGTH_CALCULATOR] = lC
- this[LENGTH] = 0
- this[LRU_LIST].forEach(hit => {
- hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key)
- this[LENGTH] += hit.length
- })
- }
- trim(this)
- }
- get lengthCalculator () { return this[LENGTH_CALCULATOR] }
- get length () { return this[LENGTH] }
- get itemCount () { return this[LRU_LIST].length }
- rforEach (fn, thisp) {
- thisp = thisp || this
- for (let walker = this[LRU_LIST].tail; walker !== null;) {
- const prev = walker.prev
- forEachStep(this, fn, walker, thisp)
- walker = prev
- }
- }
- forEach (fn, thisp) {
- thisp = thisp || this
- for (let walker = this[LRU_LIST].head; walker !== null;) {
- const next = walker.next
- forEachStep(this, fn, walker, thisp)
- walker = next
- }
- }
- keys () {
- return this[LRU_LIST].toArray().map(k => k.key)
- }
- values () {
- return this[LRU_LIST].toArray().map(k => k.value)
- }
- reset () {
- if (this[DISPOSE] &&
- this[LRU_LIST] &&
- this[LRU_LIST].length) {
- this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value))
- }
- this[CACHE] = new Map() // hash of items by key
- this[LRU_LIST] = new Yallist() // list of items in order of use recency
- this[LENGTH] = 0 // length of items in the list
- }
- dump () {
- return this[LRU_LIST].map(hit =>
- isStale(this, hit) ? false : {
- k: hit.key,
- v: hit.value,
- e: hit.now + (hit.maxAge || 0)
- }).toArray().filter(h => h)
- }
- dumpLru () {
- return this[LRU_LIST]
- }
- set (key, value, maxAge) {
- maxAge = maxAge || this[MAX_AGE]
- if (maxAge && typeof maxAge !== 'number')
- throw new TypeError('maxAge must be a number')
- const now = maxAge ? Date.now() : 0
- const len = this[LENGTH_CALCULATOR](value, key)
- if (this[CACHE].has(key)) {
- if (len > this[MAX]) {
- del(this, this[CACHE].get(key))
- return false
- }
- const node = this[CACHE].get(key)
- const item = node.value
- // dispose of the old one before overwriting
- // split out into 2 ifs for better coverage tracking
- if (this[DISPOSE]) {
- if (!this[NO_DISPOSE_ON_SET])
- this[DISPOSE](key, item.value)
- }
- item.now = now
- item.maxAge = maxAge
- item.value = value
- this[LENGTH] += len - item.length
- item.length = len
- this.get(key)
- trim(this)
- return true
- }
- const hit = new Entry(key, value, len, now, maxAge)
- // oversized objects fall out of cache automatically.
- if (hit.length > this[MAX]) {
- if (this[DISPOSE])
- this[DISPOSE](key, value)
- return false
- }
- this[LENGTH] += hit.length
- this[LRU_LIST].unshift(hit)
- this[CACHE].set(key, this[LRU_LIST].head)
- trim(this)
- return true
- }
- has (key) {
- if (!this[CACHE].has(key)) return false
- const hit = this[CACHE].get(key).value
- return !isStale(this, hit)
- }
- get (key) {
- return get(this, key, true)
- }
- peek (key) {
- return get(this, key, false)
- }
- pop () {
- const node = this[LRU_LIST].tail
- if (!node)
- return null
- del(this, node)
- return node.value
- }
- del (key) {
- del(this, this[CACHE].get(key))
- }
- load (arr) {
- // reset the cache
- this.reset()
- const now = Date.now()
- // A previous serialized cache has the most recent items first
- for (let l = arr.length - 1; l >= 0; l--) {
- const hit = arr[l]
- const expiresAt = hit.e || 0
- if (expiresAt === 0)
- // the item was created without expiration in a non aged cache
- this.set(hit.k, hit.v)
- else {
- const maxAge = expiresAt - now
- // dont add already expired items
- if (maxAge > 0) {
- this.set(hit.k, hit.v, maxAge)
- }
- }
- }
- }
- prune () {
- this[CACHE].forEach((value, key) => get(this, key, false))
- }
- }
- const get = (self, key, doUse) => {
- const node = self[CACHE].get(key)
- if (node) {
- const hit = node.value
- if (isStale(self, hit)) {
- del(self, node)
- if (!self[ALLOW_STALE])
- return undefined
- } else {
- if (doUse) {
- if (self[UPDATE_AGE_ON_GET])
- node.value.now = Date.now()
- self[LRU_LIST].unshiftNode(node)
- }
- }
- return hit.value
- }
- }
- const isStale = (self, hit) => {
- if (!hit || (!hit.maxAge && !self[MAX_AGE]))
- return false
- const diff = Date.now() - hit.now
- return hit.maxAge ? diff > hit.maxAge
- : self[MAX_AGE] && (diff > self[MAX_AGE])
- }
- const trim = self => {
- if (self[LENGTH] > self[MAX]) {
- for (let walker = self[LRU_LIST].tail;
- self[LENGTH] > self[MAX] && walker !== null;) {
- // We know that we're about to delete this one, and also
- // what the next least recently used key will be, so just
- // go ahead and set it now.
- const prev = walker.prev
- del(self, walker)
- walker = prev
- }
- }
- }
- const del = (self, node) => {
- if (node) {
- const hit = node.value
- if (self[DISPOSE])
- self[DISPOSE](hit.key, hit.value)
- self[LENGTH] -= hit.length
- self[CACHE].delete(hit.key)
- self[LRU_LIST].removeNode(node)
- }
- }
- class Entry {
- constructor (key, value, length, now, maxAge) {
- this.key = key
- this.value = value
- this.length = length
- this.now = now
- this.maxAge = maxAge || 0
- }
- }
- const forEachStep = (self, fn, node, thisp) => {
- let hit = node.value
- if (isStale(self, hit)) {
- del(self, node)
- if (!self[ALLOW_STALE])
- hit = undefined
- }
- if (hit)
- fn.call(thisp, hit.value, hit.key, self)
- }
- module.exports = LRUCache
- /***/ }),
- /***/ 65693:
- /***/ ((module) => {
- "use strict";
- module.exports = function (Yallist) {
- Yallist.prototype[Symbol.iterator] = function* () {
- for (let walker = this.head; walker; walker = walker.next) {
- yield walker.value
- }
- }
- }
- /***/ }),
- /***/ 20891:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- module.exports = Yallist
- Yallist.Node = Node
- Yallist.create = Yallist
- function Yallist (list) {
- var self = this
- if (!(self instanceof Yallist)) {
- self = new Yallist()
- }
- self.tail = null
- self.head = null
- self.length = 0
- if (list && typeof list.forEach === 'function') {
- list.forEach(function (item) {
- self.push(item)
- })
- } else if (arguments.length > 0) {
- for (var i = 0, l = arguments.length; i < l; i++) {
- self.push(arguments[i])
- }
- }
- return self
- }
- Yallist.prototype.removeNode = function (node) {
- if (node.list !== this) {
- throw new Error('removing node which does not belong to this list')
- }
- var next = node.next
- var prev = node.prev
- if (next) {
- next.prev = prev
- }
- if (prev) {
- prev.next = next
- }
- if (node === this.head) {
- this.head = next
- }
- if (node === this.tail) {
- this.tail = prev
- }
- node.list.length--
- node.next = null
- node.prev = null
- node.list = null
- return next
- }
- Yallist.prototype.unshiftNode = function (node) {
- if (node === this.head) {
- return
- }
- if (node.list) {
- node.list.removeNode(node)
- }
- var head = this.head
- node.list = this
- node.next = head
- if (head) {
- head.prev = node
- }
- this.head = node
- if (!this.tail) {
- this.tail = node
- }
- this.length++
- }
- Yallist.prototype.pushNode = function (node) {
- if (node === this.tail) {
- return
- }
- if (node.list) {
- node.list.removeNode(node)
- }
- var tail = this.tail
- node.list = this
- node.prev = tail
- if (tail) {
- tail.next = node
- }
- this.tail = node
- if (!this.head) {
- this.head = node
- }
- this.length++
- }
- Yallist.prototype.push = function () {
- for (var i = 0, l = arguments.length; i < l; i++) {
- push(this, arguments[i])
- }
- return this.length
- }
- Yallist.prototype.unshift = function () {
- for (var i = 0, l = arguments.length; i < l; i++) {
- unshift(this, arguments[i])
- }
- return this.length
- }
- Yallist.prototype.pop = function () {
- if (!this.tail) {
- return undefined
- }
- var res = this.tail.value
- this.tail = this.tail.prev
- if (this.tail) {
- this.tail.next = null
- } else {
- this.head = null
- }
- this.length--
- return res
- }
- Yallist.prototype.shift = function () {
- if (!this.head) {
- return undefined
- }
- var res = this.head.value
- this.head = this.head.next
- if (this.head) {
- this.head.prev = null
- } else {
- this.tail = null
- }
- this.length--
- return res
- }
- Yallist.prototype.forEach = function (fn, thisp) {
- thisp = thisp || this
- for (var walker = this.head, i = 0; walker !== null; i++) {
- fn.call(thisp, walker.value, i, this)
- walker = walker.next
- }
- }
- Yallist.prototype.forEachReverse = function (fn, thisp) {
- thisp = thisp || this
- for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {
- fn.call(thisp, walker.value, i, this)
- walker = walker.prev
- }
- }
- Yallist.prototype.get = function (n) {
- for (var i = 0, walker = this.head; walker !== null && i < n; i++) {
- // abort out of the list early if we hit a cycle
- walker = walker.next
- }
- if (i === n && walker !== null) {
- return walker.value
- }
- }
- Yallist.prototype.getReverse = function (n) {
- for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {
- // abort out of the list early if we hit a cycle
- walker = walker.prev
- }
- if (i === n && walker !== null) {
- return walker.value
- }
- }
- Yallist.prototype.map = function (fn, thisp) {
- thisp = thisp || this
- var res = new Yallist()
- for (var walker = this.head; walker !== null;) {
- res.push(fn.call(thisp, walker.value, this))
- walker = walker.next
- }
- return res
- }
- Yallist.prototype.mapReverse = function (fn, thisp) {
- thisp = thisp || this
- var res = new Yallist()
- for (var walker = this.tail; walker !== null;) {
- res.push(fn.call(thisp, walker.value, this))
- walker = walker.prev
- }
- return res
- }
- Yallist.prototype.reduce = function (fn, initial) {
- var acc
- var walker = this.head
- if (arguments.length > 1) {
- acc = initial
- } else if (this.head) {
- walker = this.head.next
- acc = this.head.value
- } else {
- throw new TypeError('Reduce of empty list with no initial value')
- }
- for (var i = 0; walker !== null; i++) {
- acc = fn(acc, walker.value, i)
- walker = walker.next
- }
- return acc
- }
- Yallist.prototype.reduceReverse = function (fn, initial) {
- var acc
- var walker = this.tail
- if (arguments.length > 1) {
- acc = initial
- } else if (this.tail) {
- walker = this.tail.prev
- acc = this.tail.value
- } else {
- throw new TypeError('Reduce of empty list with no initial value')
- }
- for (var i = this.length - 1; walker !== null; i--) {
- acc = fn(acc, walker.value, i)
- walker = walker.prev
- }
- return acc
- }
- Yallist.prototype.toArray = function () {
- var arr = new Array(this.length)
- for (var i = 0, walker = this.head; walker !== null; i++) {
- arr[i] = walker.value
- walker = walker.next
- }
- return arr
- }
- Yallist.prototype.toArrayReverse = function () {
- var arr = new Array(this.length)
- for (var i = 0, walker = this.tail; walker !== null; i++) {
- arr[i] = walker.value
- walker = walker.prev
- }
- return arr
- }
- Yallist.prototype.slice = function (from, to) {
- to = to || this.length
- if (to < 0) {
- to += this.length
- }
- from = from || 0
- if (from < 0) {
- from += this.length
- }
- var ret = new Yallist()
- if (to < from || to < 0) {
- return ret
- }
- if (from < 0) {
- from = 0
- }
- if (to > this.length) {
- to = this.length
- }
- for (var i = 0, walker = this.head; walker !== null && i < from; i++) {
- walker = walker.next
- }
- for (; walker !== null && i < to; i++, walker = walker.next) {
- ret.push(walker.value)
- }
- return ret
- }
- Yallist.prototype.sliceReverse = function (from, to) {
- to = to || this.length
- if (to < 0) {
- to += this.length
- }
- from = from || 0
- if (from < 0) {
- from += this.length
- }
- var ret = new Yallist()
- if (to < from || to < 0) {
- return ret
- }
- if (from < 0) {
- from = 0
- }
- if (to > this.length) {
- to = this.length
- }
- for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {
- walker = walker.prev
- }
- for (; walker !== null && i > from; i--, walker = walker.prev) {
- ret.push(walker.value)
- }
- return ret
- }
- Yallist.prototype.splice = function (start, deleteCount, ...nodes) {
- if (start > this.length) {
- start = this.length - 1
- }
- if (start < 0) {
- start = this.length + start;
- }
- for (var i = 0, walker = this.head; walker !== null && i < start; i++) {
- walker = walker.next
- }
- var ret = []
- for (var i = 0; walker && i < deleteCount; i++) {
- ret.push(walker.value)
- walker = this.removeNode(walker)
- }
- if (walker === null) {
- walker = this.tail
- }
- if (walker !== this.head && walker !== this.tail) {
- walker = walker.prev
- }
- for (var i = 0; i < nodes.length; i++) {
- walker = insert(this, walker, nodes[i])
- }
- return ret;
- }
- Yallist.prototype.reverse = function () {
- var head = this.head
- var tail = this.tail
- for (var walker = head; walker !== null; walker = walker.prev) {
- var p = walker.prev
- walker.prev = walker.next
- walker.next = p
- }
- this.head = tail
- this.tail = head
- return this
- }
- function insert (self, node, value) {
- var inserted = node === self.head ?
- new Node(value, null, node, self) :
- new Node(value, node, node.next, self)
- if (inserted.next === null) {
- self.tail = inserted
- }
- if (inserted.prev === null) {
- self.head = inserted
- }
- self.length++
- return inserted
- }
- function push (self, item) {
- self.tail = new Node(item, self.tail, null, self)
- if (!self.head) {
- self.head = self.tail
- }
- self.length++
- }
- function unshift (self, item) {
- self.head = new Node(item, null, self.head, self)
- if (!self.tail) {
- self.tail = self.head
- }
- self.length++
- }
- function Node (value, prev, next, list) {
- if (!(this instanceof Node)) {
- return new Node(value, prev, next, list)
- }
- this.list = list
- this.value = value
- if (prev) {
- prev.next = this
- this.prev = prev
- } else {
- this.prev = null
- }
- if (next) {
- next.prev = this
- this.next = next
- } else {
- this.next = null
- }
- }
- try {
- // add if support for Symbol.iterator is present
- __webpack_require__(65693)(Yallist)
- } catch (er) {}
- /***/ }),
- /***/ 70382:
- /***/ ((module) => {
- module.exports = addExclude;
- function addExclude(policy, pattern, group = 'global', options = {}) {
- if (!isPatternGroupValid(group)) {
- throw new Error('invalid file pattern-group');
- }
- policy.exclude = policy.exclude || {};
- let patterns = policy.exclude[group] || [];
- // Remove duplicates
- patterns = patterns.filter((p) => p !== pattern && !p[pattern]);
- options.created = new Date();
- const entry =
- !options.expires && !options.reason ? pattern : { [pattern]: options };
- policy.exclude[group] = [...patterns, entry];
- }
- function isPatternGroupValid(group) {
- return ['global', 'code', 'iac-drift'].includes(group);
- }
- /***/ }),
- /***/ 24763:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- module.exports = add;
- const debug = __webpack_require__(15158)('snyk:policy');
- const emailValidator = __webpack_require__(83999);
- const validReasonTypes = ['not-vulnerable', 'wont-fix', 'temporary-ignore'];
- function add(policy, type, options) {
- if (type !== 'ignore' && type !== 'patch') {
- throw new Error('policy.add: unknown type "' + type + '" to add to');
- }
- if (!options || !options.id || !options.path) {
- throw new Error('policy.add: required option props { id, path }');
- }
- const id = options.id;
- const path = options.path;
- const data = Object.keys(options).reduce(function (acc, curr) {
- if (curr === 'id' || curr === 'path') {
- return acc;
- }
- if (
- curr === 'reasonType' &&
- validReasonTypes.indexOf(options[curr]) === -1
- ) {
- throw new Error('invalid reasonType ' + options[curr]);
- }
- if (curr === 'ignoredBy') {
- if (typeof options[curr] !== 'object') {
- throw new Error('ignoredBy must be an object');
- }
- if (!emailValidator.validate(options[curr].email)) {
- throw new Error('ignoredBy.email must be a valid email address');
- }
- }
- acc[curr] = options[curr];
- return acc;
- }, {});
- if (!policy[type][id]) {
- policy[type][id] = [];
- }
- /* istanbul ignore if */
- if (policy[type][id][path]) {
- debug('policy.add: path already exists', policy[type][id][path]);
- }
- const rule = {};
- rule[path] = data;
- policy[type][id].push(rule);
- return policy;
- }
- /***/ }),
- /***/ 83105:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- // FIXME move to ext module
- module.exports = getVulnSource;
- const debug = __webpack_require__(15158)('snyk:policy');
- const resolve = __webpack_require__(7320);
- const path = __webpack_require__(85622);
- const statSync = __webpack_require__(35747).statSync;
- let { parsePackageString: moduleToObject } = __webpack_require__(60390);
- function getVulnSource(vuln, cwd, live) {
- const from = vuln.from.slice(1).map(function (pkg) {
- return moduleToObject(pkg).name;
- });
- const viaPath = path.resolve(
- cwd || process.cwd(),
- 'node_modules',
- from.join('/node_modules/')
- );
- let source = vuln.__filename ? path.dirname(vuln.__filename) : viaPath;
- // try to stat the directory, if it throws, it doesn't exist...
- try {
- statSync(source);
- } catch (e) {
- // ...which means the package is located in a parent path (from an
- // npm dedupe process), so we remove the module name from the path
- // and use the `resolve` package to navigate the node_modules up
- // through parent directories.
- try {
- source = resolve.sync(from.slice(-1).pop(), viaPath);
- } catch (e) {
- if (live) {
- throw e;
- }
- // otherwise this is a dry run so we don't mind that it won't be
- // able to patch - likely a scenario run, so it's fine that the
- // patch target won't be found
- }
- debug('found better source for package: %s', source);
- }
- return source;
- }
- /***/ }),
- /***/ 29695:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- module.exports = filterIgnored;
- const cloneDeep = __webpack_require__(83465);
- const debug = __webpack_require__(15158)('snyk:policy');
- const matchToRule = __webpack_require__(39147).matchToRule;
- // given an ignore ruleset (parsed from the .snyk yaml file) and a array of
- // vulnerabilities, return the vulnerabilities that *are not* ignored
- // see http://git.io/vCHmV for example of what ignore structure looks like
- function filterIgnored(
- ignore,
- vuln,
- filtered,
- matchStrategy = 'packageManager'
- ) {
- if (!ignore) {
- return vuln;
- }
- if (!filtered) {
- filtered = [];
- }
- debug('filtering ignored');
- const now = new Date().toJSON();
- return vuln
- .map(function (vuln) {
- const applySecurityPolicyIgnore = vulnHasSecurityPolicyIgnore(vuln);
- if (!ignore[vuln.id] && !applySecurityPolicyIgnore) {
- return vuln;
- }
- debug('%s has rules', vuln.id);
- let appliedRules = [];
- if (applySecurityPolicyIgnore) {
- // logic: if vuln has securityPolicyMetaData.ignore rule, that means it comes
- // after security rule applied with the ignore action, thus we have to apply
- // this ignore and not any others.
- // Security policies ignores we apply to all paths "*" and disregardIfFixable=false
- const rule = vuln.securityPolicyMetaData.ignore;
- const {
- created,
- disregardIfFixable,
- ignoredBy,
- path,
- reason = '',
- reasonType,
- source,
- } = rule;
- appliedRules = [
- {
- [path[0]]: {
- reason,
- reasonType,
- source,
- ignoredBy,
- created,
- disregardIfFixable,
- },
- },
- ];
- } else {
- // logic: loop through all rules (from `ignore[vuln.id]`), and if *any* dep
- // paths match our vuln.from dep chain AND the rule hasn't expired, then the
- // vulnerability is ignored. if none of the rules match, then let we'll
- // keep it.
- // if rules.find, then ignore vuln
- appliedRules = ignore[vuln.id].filter(function (rule) {
- const path = Object.keys(rule)[0]; // this is a string
- let expires = rule[path].expires;
- if (expires && expires.toJSON) {
- expires = expires.toJSON();
- }
- // first check if the path is a match on the rule
- const pathMatch = matchToRule(vuln, rule, matchStrategy);
- if (pathMatch && expires && expires < now) {
- debug('%s vuln rule has expired (%s)', vuln.id, expires);
- return false;
- }
- if (
- pathMatch &&
- rule[path].disregardIfFixable &&
- (vuln.isUpgradable || vuln.isPatchable)
- ) {
- debug(
- '%s vuln is fixable and rule is set to disregard if fixable',
- vuln.id
- );
- return false;
- }
- if (pathMatch) {
- if (debug.enabled) {
- debug(
- 'ignoring based on path match: %s ~= %s',
- path,
- vuln.from.slice(1).join(' > ')
- );
- }
- return true;
- }
- return false;
- });
- }
- if (appliedRules.length) {
- vuln.filtered = {
- ignored: appliedRules.map(function (rule) {
- const path = Object.keys(rule)[0];
- const ruleData = cloneDeep(rule[path]);
- ruleData.path = path.split(' > ');
- return ruleData;
- }),
- };
- filtered.push(vuln);
- }
- return appliedRules.length ? false : vuln;
- })
- .filter(Boolean);
- }
- const vulnHasSecurityPolicyIgnore = (vuln) => {
- return !!(vuln.securityPolicyMetaData && vuln.securityPolicyMetaData.ignore);
- };
- /***/ }),
- /***/ 10877:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- module.exports = filter;
- const debug = __webpack_require__(15158)('snyk:policy');
- const ignore = __webpack_require__(29695);
- const patch = __webpack_require__(1735);
- const notes = __webpack_require__(77156);
- // warning: mutates vulns
- function filter(vulns, policy, root, matchStrategy = 'packageManager') {
- if (!root) {
- root = process.cwd();
- }
- if (vulns.ok) {
- return vulns;
- }
- const filtered = {
- ignore: [],
- patch: [],
- };
- // strip the ignored modules from the results
- vulns.vulnerabilities = ignore(
- policy.ignore,
- vulns.vulnerabilities,
- filtered.ignore,
- matchStrategy
- );
- vulns.vulnerabilities = patch(
- policy.patch,
- vulns.vulnerabilities,
- root,
- policy.skipVerifyPatch ? true : false,
- filtered.patch
- );
- if (policy.suggest) {
- vulns.vulnerabilities = notes(policy.suggest, vulns.vulnerabilities, root);
- }
- // if there's no vulns after the ignore process, let's reset the `ok`
- // state and remove the vulns entirely.
- if (vulns.vulnerabilities.length === 0) {
- vulns.ok = true;
- vulns.vulnerabilities = [];
- }
- vulns.filtered = filtered;
- debug('> has threshold? %s', policy.failThreshold);
- if (policy.failThreshold && vulns.ok === false) {
- // check what's left and switch the failure flag if there's anything
- // under our threshold
- const levels = {
- high: 3,
- medium: 2,
- low: 1,
- };
- const level = levels[policy.failThreshold];
- vulns.ok = true;
- vulns.vulnerabilities.some(function (vuln) {
- if (levels[vuln.severity] >= level) {
- vulns.ok = false;
- return true; // breaks
- }
- });
- }
- return vulns;
- }
- /***/ }),
- /***/ 77156:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- module.exports = attachNotes;
- const debug = __webpack_require__(15158)('snyk:policy');
- const matchToRule = __webpack_require__(39147).matchToRule;
- function attachNotes(notes, vuln) {
- if (!notes) {
- return vuln;
- }
- debug('attaching notes');
- const now = new Date().toJSON();
- return vuln.map(function (vuln) {
- if (!notes[vuln.id]) {
- return vuln;
- }
- debug('%s has rules', vuln.id);
- // if rules.some, then add note to the vuln
- notes[vuln.id].forEach(function (rule) {
- const path = Object.keys(rule)[0]; // this is a string
- let expires = rule[path].expires;
- // first check if the path is a match on the rule
- const pathMatch = matchToRule(vuln, rule);
- if (expires && expires.toJSON) {
- expires = expires.toJSON();
- }
- if (pathMatch && expires && expires < now) {
- debug('%s vuln rule has expired (%s)', vuln.id, expires);
- return false;
- }
- if (
- pathMatch &&
- rule[path].disregardIfFixable &&
- (vuln.upgradePath.length || vuln.patches.length)
- ) {
- debug(
- '%s vuln is fixable and rule is set to disregard if fixable',
- vuln.id
- );
- return false;
- }
- if (pathMatch) {
- // strip any control characters in the 3rd party reason file
- const reason = rule[path].reason.replace('/[\x00-\x1F\x7F-\x9F]/u', '');
- if (debug.enabled) {
- debug(
- 'adding note based on path match: %s ~= %s',
- path,
- vuln.from.slice(1).join(' > ')
- );
- }
- vuln.note =
- 'Snyk policy in ' +
- rule[path].from +
- ' suggests ignoring this issue, with reason: ' +
- reason;
- }
- return false;
- });
- return vuln;
- });
- }
- /***/ }),
- /***/ 1735:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- module.exports = filterPatched;
- const cloneDeep = __webpack_require__(83465);
- const debug = __webpack_require__(15158)('snyk:policy');
- const matchToRule = __webpack_require__(39147).matchToRule;
- const path = __webpack_require__(85622);
- const statSync = __webpack_require__(35747).statSync;
- const getVulnSource = __webpack_require__(83105);
- // cwd is used for testing
- function filterPatched(patched, vulns, cwd, skipVerifyPatch, filteredPatches) {
- if (!patched) {
- return vulns;
- }
- if (!filteredPatches) {
- filteredPatches = [];
- }
- debug('filtering patched');
- return vulns
- .map(function (vuln) {
- if (!patched[vuln.id]) {
- return vuln;
- }
- debug('%s has rules', vuln.id);
- // logic: loop through all rules (from `patched[vuln.id]`), and if *any* dep
- // paths match our vuln.from dep chain AND a flag exists, then the
- // vulnerability is ignored. if none of the rules match, then let we'll
- // keep it.
- // if rules.find, then ignore vuln
- const vulnRules = patched[vuln.id]
- .map(function (rule) {
- // first check if the path is a match on the rule
- const pathMatch = matchToRule(vuln, rule);
- if (pathMatch) {
- const path = Object.keys(rule)[0]; // this is a string
- debug(
- '(patch) ignoring based on path match: %s ~= %s',
- path,
- vuln.from.slice(1).join(' > ')
- );
- return rule;
- }
- return false;
- })
- .filter(Boolean);
- // run through the potential rules to check if there's a patch flag in place
- const appliedRules = vulnRules.filter(function () {
- // the target directory where our module name will live
- if (skipVerifyPatch) {
- return true;
- }
- const source = getVulnSource(vuln, cwd, true);
- const id = vuln.id.replace(/:/g, '-');
- const flag = path.resolve(source, '.snyk-' + id + '.flag');
- const oldFlag = path.resolve(source, '.snyk-' + vuln.id + '.flag');
- let res = false;
- try {
- res = statSync(flag);
- } catch (e) {
- try {
- res = statSync(oldFlag);
- } catch (e) {}
- }
- debug('flag found for %s? %s', vuln.id);
- return !!res;
- });
- if (appliedRules.length) {
- vuln.filtered = {
- patches: appliedRules.map(function (rule) {
- const path = Object.keys(rule)[0];
- const ruleData = cloneDeep(rule[path]) || {};
- ruleData.path = path.split(' > ');
- return ruleData;
- }),
- };
- filteredPatches.push(vuln);
- }
- return appliedRules.length ? false : vuln;
- })
- .filter(Boolean);
- }
- /***/ }),
- /***/ 70535:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const fs = __webpack_require__(91729);
- const path = __webpack_require__(85622);
- const debug = __webpack_require__(15158)('snyk:policy');
- const match = __webpack_require__(39147);
- const parse = __webpack_require__(791);
- const tryRequire = __webpack_require__(14402);
- const filter = __webpack_require__(10877);
- const add = __webpack_require__(24763);
- const addExclude = __webpack_require__(70382);
- module.exports = {
- filter: filter,
- demunge: parse.demunge,
- load: load,
- save: save,
- getByVuln: match.getByVuln,
- matchToRule: match.matchToRule,
- loadFromText: loadFromText,
- add: add,
- addExclude: addExclude,
- create: create,
- };
- function create() {
- return loadFromText('');
- }
- // this is a function to allow our tests and fixtures to change cwd
- function defaultFilename() {
- return path.resolve(process.cwd(), '.snyk');
- }
- function attachMethods(policy) {
- policy.filter = function (vulns, root, matchStrategy = 'packageManager') {
- return filter(
- vulns,
- policy,
- root || path.dirname(policy.__filename),
- matchStrategy
- );
- };
- policy.save = save.bind(null, policy);
- policy.toString = parse.export.bind(null, policy);
- policy.demunge = parse.demunge.bind(null, policy);
- policy.add = add.bind(null, policy);
- policy.addIgnore = add.bind(null, policy, 'ignore');
- policy.addPatch = add.bind(null, policy, 'patch');
- policy.addExclude = addExclude.bind(null, policy);
- return policy;
- }
- function loadFromText(text) {
- return new Promise(function (resolve) {
- const policy = parse.import(text);
- const now = Date.now();
- policy.__filename = '';
- policy.__modified = now;
- policy.__created = now;
- resolve(policy);
- }).then(attachMethods);
- }
- function load(root, options) {
- if (!Array.isArray(root) && typeof root !== 'string') {
- options = root;
- root = null;
- }
- if (!root) {
- root = process.cwd();
- }
- if (!options) {
- options = {};
- }
- const ignorePolicy = !!options['ignore-policy'];
- let filename = '';
- if (Array.isArray(root)) {
- // we do a bit of a dance to get the first item in the array, and
- // use it as our filename
- filename = root[0];
- } else {
- if (root.indexOf('.snyk') === -1) {
- root = path.resolve(root, '.snyk');
- }
- filename = root;
- }
- if (filename.indexOf('.snyk') === -1) {
- filename = path.resolve(filename, '.snyk');
- }
- // Check if filename is directory and resolve to correct file path
- try {
- if (fs.lstatSync(filename).isDirectory()) {
- filename = path.join(filename, '/.snyk');
- }
- } catch (error) {
- if (error.code === 'ENOENT') {
- // Ignore if EOENT
- debug('ENOENT on file, while checking if directory');
- } else {
- throw error;
- }
- }
- const promise = new Promise(function (resolve) {
- if (ignorePolicy) {
- return resolve(parse.import());
- }
- if (!ignorePolicy && Array.isArray(root)) {
- return resolve(
- mergePolicies(root, options).then(function (res) {
- if (debug.enabled) {
- debug('final policy:');
- debug(JSON.stringify(res, '', 2));
- }
- return res;
- })
- );
- }
- resolve(fs.readFile(filename, 'utf8').then(parse.import));
- });
- const promises = [
- promise,
- fs.stat(filename).catch(function () {
- return {};
- }),
- ];
- return Promise.all(promises)
- .catch(function (error) {
- if (options.loose && error.code === 'ENOENT') {
- debug('ENOENT on file, but running loose');
- return [parse.import(), {}];
- }
- throw error;
- })
- .then(function (res) {
- const policy = res[0];
- policy.__modified = res[1].mtime;
- policy.__created = res[1].birthtime || res[1].ctime;
- if (options.loose && !policy.__modified) {
- policy.__filename = null;
- } else {
- policy.__filename = path.relative(process.cwd(), filename);
- }
- return policy;
- })
- .then(attachMethods);
- }
- function mergePolicies(policyDirs, options) {
- const ignoreTarget = options['trust-policies'] ? 'ignore' : 'suggest';
- return Promise.all(
- policyDirs.map(function (dir) {
- return load(dir, options);
- })
- ).then(function (policies) {
- // firstly extend the paths in the ignore and patch
- const rootPolicy = policies[0];
- const others = policies.slice(1);
- return Promise.all(
- others
- .filter(function (policy) {
- return policy.__filename; // filter out non loaded policies
- })
- .map(function (policy) {
- const filename = path.dirname(policy.__filename) + '/package.json';
- return tryRequire(filename).then(function (pkg) {
- const full = pkg.name + '@' + pkg.version;
- mergePath('ignore', ignoreTarget, full, rootPolicy, policy);
- mergePath('patch', 'patch', full, rootPolicy, policy);
- });
- })
- ).then(function () {
- return rootPolicy;
- });
- });
- }
- // note: mutates both objects, be warned!
- function mergePath(type, into, pathRoot, rootPolicy, policy) {
- if (!rootPolicy[into]) {
- rootPolicy[into] = {};
- }
- Object.keys(policy[type]).forEach(function (id) {
- // convert the path from `module@version` to `parent > module@version`
- policy[type][id] = policy[type][id].map(function (path) {
- // this is because our policy file format favours "readable" yaml,
- // instead of easy to use object structures.
- const key = Object.keys(path).pop();
- const newPath = {};
- newPath[pathRoot + ' > ' + key] = path[key];
- path[key] = path[key] || {};
- path[key].from = pathRoot;
- return newPath;
- });
- // add the rule if we don't have it in our policy already
- if (!rootPolicy[into][id]) {
- rootPolicy[into][id] = policy[type][id];
- return;
- }
- // otherwise we need to merge up manually
- rootPolicy[into][id] = rootPolicy[into][id].concat(policy[type][id]);
- });
- }
- function save(object, root, spinner) {
- const filename = root ? path.resolve(root, '.snyk') : defaultFilename();
- const lbl = 'Saving .snyk policy file...';
- if (!spinner) {
- spinner = function (res) {
- return Promise.resolve(res);
- };
- spinner.clear = spinner;
- }
- return spinner(lbl)
- .then(function () {
- return parse.export(object);
- })
- .then(function (yaml) {
- return fs.writeFile(filename, yaml);
- })
- .then(spinner.clear(lbl));
- }
- /***/ }),
- /***/ 39147:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- module.exports = {
- matchToRule: matchToRule,
- getByVuln: getByVuln,
- };
- const debug = __webpack_require__(15158)('snyk:policy');
- const debugPolicy = __webpack_require__(15158)('snyk:protect');
- const semver = __webpack_require__(23382);
- let { parsePackageString: moduleToObject } = __webpack_require__(60390);
- // matchPath will take the array of dependencies that a vulnerability came from
- // and try to match it to a string `path`. The path will look like this:
- // express-hbs@0.8.4 > handlebars@3.0.3 > uglify-js@2.3.6
- // note that the root package is never part of the path (i.e. jsbin@3.11.31)
- // the path can also use `*` as a wildcard _and_ use semver:
- // * > uglify-js@2.x
- // The matchPath will break the `path` down into it's component parts, and loop
- // through trying to get a positive match or not. For full examples of options
- // see http://git.io/vCH3N
- function matchPath(from, path) {
- const parts = path.split(' > ');
- debugPolicy('checking path: %s vs. %s', path, from);
- let offset = 0;
- const res = parts.every(function (pkg, i) {
- debugPolicy('for %s...(against %s)', pkg, from[i + offset]);
- let fromPkg = from[i + offset] ? moduleToObject(from[i + offset]) : {};
- if (pkg === '*') {
- debugPolicy('star rule');
- // handle the rule being `*` alone
- if (!parts[i + 1]) {
- return true;
- }
- const next = moduleToObject(parts[i + 1]);
- // assuming we're not at the end of the rule path, then try to find
- // the next matching package in the chain. So `* > semver` matches
- // `foo > bar > semver`
- if (next) {
- debugPolicy('next', next);
- // move forward until we find a matching package
- for (let j = i; i < parts.length; j++) {
- // if we've run out of paths, then we didn't match
- if (!from[i + offset]) {
- return false;
- }
- fromPkg = moduleToObject(from[i + offset]);
- debugPolicy('fromPkg', fromPkg, next);
- if (next.name === fromPkg.name) {
- // adjust for the `i` index incrementing in the next .every call
- offset--;
- debugPolicy('next has a match');
- break;
- }
- debugPolicy('pushing offset');
- offset++;
- }
- }
- return true;
- }
- debugPolicy('next test', pkg, fromPkg);
- if (pkg === from[i + offset]) {
- debugPolicy('exact match');
- return true;
- }
- const target = moduleToObject(pkg);
- let pkgVersion = target.version;
- // the * semver rule won't match pre-releases, which in our case is a
- // problem, so if the version is indeed *, we'll reset it to the exact same
- // version as our target package to allow for a match.
- if (pkgVersion === '*') {
- pkgVersion = fromPkg.version;
- }
- // shortcut version match, if it's exact, then skip the semver check
- if (target.name === fromPkg.name) {
- if (fromPkg.version === pkgVersion) {
- debugPolicy('exact version match');
- return true;
- }
- if (
- semver.valid(fromPkg.version) &&
- semver.satisfies(fromPkg.version, pkgVersion)
- ) {
- debugPolicy('semver match');
- return true;
- }
- }
- debugPolicy('failed match');
- return false;
- });
- debugPolicy('result of path test %s: %s', path, res);
- return res;
- }
- function matchToRule(vuln, rule, matchStrategy = 'packageManager') {
- return Object.keys(rule).some(function (path) {
- return matchToSingleRule(vuln, path, matchStrategy);
- });
- }
- function matchToSingleRule(vuln, path, matchStrategy) {
- if (matchStrategy === 'exact') {
- return matchExactWithStars(vuln, path);
- }
- // check for an exact match
- let pathMatch = false;
- const from = vuln.from.slice(1);
- if (path.indexOf(from.join(' > ')) !== -1) {
- debug('%s exact match from %s', vuln.id, from);
- pathMatch = true;
- } else if (matchPath(from, path)) {
- pathMatch = true;
- }
- return pathMatch;
- }
- function matchExactWithStars(vuln, path) {
- const parts = path.split(' > ');
- if (parts[parts.length - 1] === '*') {
- const paddingLength = vuln.from.length - parts.length;
- for (let i = 0; i < paddingLength; i++) {
- parts.push('*');
- }
- }
- if (parts.length !== vuln.from.length) {
- return false;
- }
- for (let i = 0; i < parts.length; i++) {
- if (parts[i] !== vuln.from[i] && parts[i] !== '*') {
- return false;
- }
- }
- return true;
- }
- function getByVuln(policy, vuln) {
- let found = null;
- if (!policy || !vuln) {
- return found;
- }
- ['ignore', 'patch'].forEach(function (key) {
- Object.keys(policy[key] || []).forEach(function (p) {
- if (p === vuln.id) {
- policy[key][p].forEach(function (rule) {
- if (matchToRule(vuln, rule)) {
- found = {
- type: key,
- id: vuln.id,
- rule: vuln.from,
- };
- const rootRule = Object.keys(rule).pop();
- Object.keys(rule[rootRule]).forEach(function (key) {
- found[key] = rule[rootRule][key];
- });
- }
- });
- }
- });
- });
- return found;
- }
- /***/ }),
- /***/ 56202:
- /***/ ((module) => {
- module.exports = addComments;
- const initialComment =
- '# Snyk (https://snyk.io) policy file, patches or ' +
- 'ignores known vulnerabilities.';
- const inlineComments = {
- ignore:
- '# ignores vulnerabilities until expiry date; change duration by ' +
- 'modifying expiry date',
- patch: '# patches apply the minimum changes required to fix a vulnerability',
- };
- function addComments(policyExport) {
- const lines = policyExport.split('\n');
- lines.unshift(initialComment);
- Object.keys(inlineComments).forEach(function (key) {
- const position = lines.indexOf(key + ':');
- if (position !== -1) {
- lines.splice(position, 0, inlineComments[key]);
- }
- });
- return lines.join('\n');
- }
- /***/ }),
- /***/ 72088:
- /***/ ((module) => {
- module.exports = demunge;
- function demunge(policy, apiRoot) {
- if (!apiRoot) {
- apiRoot = '';
- }
- const res = ['ignore', 'patch', 'exclude'].reduce(function (acc, type) {
- acc[type] = policy[type]
- ? Object.keys(policy[type]).map(function (id) {
- const paths = policy[type][id].map(function (pathObj) {
- if (type === 'exclude' && typeof pathObj === 'string') {
- return {
- path: pathObj,
- };
- }
- const path = Object.keys(pathObj).pop();
- const res = {
- path: path,
- };
- if (type === 'ignore' || type === 'exclude') {
- res.reason = pathObj[path].reason;
- res.expires =
- pathObj[path].expires && new Date(pathObj[path].expires);
- res.disregardIfFixable = pathObj[path].disregardIfFixable;
- }
- return res;
- });
- return {
- id: id,
- url: apiRoot + '/vuln/' + id,
- paths: paths,
- };
- })
- : [];
- return acc;
- }, {});
- res.version = policy.version;
- return res;
- }
- /***/ }),
- /***/ 791:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const cloneDeep = __webpack_require__(83465);
- const semver = __webpack_require__(23382);
- const yaml = __webpack_require__(93320);
- const addComments = __webpack_require__(56202);
- const { version: versionFromPackageJson } = __webpack_require__(4195);
- module.exports = {
- import: imports,
- export: exports,
- demunge: __webpack_require__(72088),
- version: version(),
- };
- const parsers = {
- v1: __webpack_require__(36414),
- };
- function imports(rawYaml) {
- let data = yaml.safeLoad(rawYaml || '');
- if (!data || typeof data !== 'object') {
- data = {};
- }
- if (!data.version) {
- data.version = version();
- }
- if (data.version === 'v1') {
- data.version = 'v1.0.0';
- }
- const parser = parsers['v' + semver.major(data.version.substr(1))];
- if (!parser) {
- throw new Error('unsupported version: ' + data.version);
- }
- return parser(data);
- }
- function exports(policy) {
- const data = cloneDeep(policy);
- // remove any private information on the policy
- Object.keys(data).map(function (key) {
- if (key.indexOf('__') === 0) {
- delete data[key];
- }
- if (data[key] == null) {
- // jshint ignore:line
- delete data[key];
- }
- // strip helper functions
- if (typeof data[key] === 'function') {
- delete data[key];
- }
- });
- // ensure we always update the version of the policy format
- data.version = version();
- // put inline comments into the exported yaml file
- return addComments(yaml.safeDump(data));
- }
- function version() {
- if (versionFromPackageJson && versionFromPackageJson !== '0.0.0') {
- return 'v' + versionFromPackageJson;
- }
- return 'v1.0.0';
- }
- /***/ }),
- /***/ 36414:
- /***/ ((module) => {
- // eventually we'll have v2 which will point to latestParser, and v1 will
- // need to process the old form of data and upgrade it to v2 structure
- module.exports = function imports(policy) {
- if (!policy.ignore) {
- policy.ignore = {};
- }
- if (!policy.patch) {
- policy.patch = {};
- }
- Object.keys(policy.patch).forEach(function (id) {
- if (!Array.isArray(policy.patch[id])) {
- delete policy.patch[id];
- }
- });
- checkForOldFormat(policy.ignore); // this is only an old issue on ignores
- validate(policy.ignore);
- validate(policy.patch);
- policy.failThreshold = getFailThreshold(policy);
- if (!policy.failThreshold) {
- // throw it away if it's not set
- delete policy.failThreshold;
- }
- return policy;
- };
- module.exports.needsFixing = needsFixing;
- function checkForOldFormat(ignore) {
- // this is a cursory test to ensure that we're working with a snyk format
- // that we recognise. if the property is an object, then it's the early
- // alpha format, and we'll throw
- Object.keys(ignore).forEach(function (id) {
- if (!Array.isArray(ignore[id])) {
- const error = new Error('old, unsupported .snyk format detected');
- error.code = 'OLD_DOTFILE_FORMAT';
- throw error;
- }
- });
- }
- function validate(policy) {
- const fix = needsFixing(policy);
- if (fix) {
- fix.forEach(function (item) {
- const o = {};
- o[item.key] = item.rule;
- policy[item.id].push(o);
- });
- }
- }
- function needsFixing(policy) {
- const move = [];
- Object.keys(policy).forEach(function (id) {
- policy[id].forEach(function (rule) {
- const keys = Object.keys(rule);
- keys.shift(); // drop the first
- if (keys === 0) {
- return;
- }
- // this means our policy has become corrupted, and we need to move
- // the additional keys into their own position in the policy
- keys.forEach(function (key) {
- move.push({
- id: id,
- key: key,
- rule: rule[key],
- });
- delete rule[key];
- });
- });
- });
- return move.length ? move : false;
- }
- function getFailThreshold(policy) {
- let threshold = null;
- // pluck the value out, and support all sorts of silly typos
- [
- 'failThreshold',
- 'fail_threshold',
- 'failthreshold',
- 'threshold',
- 'fail_threshhold',
- ].some(function (key) {
- // if we have the value, set it and return it - which will exit loop
- return (threshold = policy[key] || null); // jshint ignore:line
- });
- if (!threshold) {
- return null;
- }
- const valid = ['high', 'medium', 'low'];
- threshold = threshold.toLowerCase().trim();
- if (valid.indexOf(threshold) === -1) {
- const error = new Error('unknown threshold value "' + threshold + '"');
- error.code = 'POLICY_BAD_THRESHOLD';
- throw error;
- }
- return threshold;
- }
- /***/ }),
- /***/ 89006:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- // A linked list to keep track of recently-used-ness
- const Yallist = __webpack_require__(41898)
- const MAX = Symbol('max')
- const LENGTH = Symbol('length')
- const LENGTH_CALCULATOR = Symbol('lengthCalculator')
- const ALLOW_STALE = Symbol('allowStale')
- const MAX_AGE = Symbol('maxAge')
- const DISPOSE = Symbol('dispose')
- const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet')
- const LRU_LIST = Symbol('lruList')
- const CACHE = Symbol('cache')
- const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet')
- const naiveLength = () => 1
- // lruList is a yallist where the head is the youngest
- // item, and the tail is the oldest. the list contains the Hit
- // objects as the entries.
- // Each Hit object has a reference to its Yallist.Node. This
- // never changes.
- //
- // cache is a Map (or PseudoMap) that matches the keys to
- // the Yallist.Node object.
- class LRUCache {
- constructor (options) {
- if (typeof options === 'number')
- options = { max: options }
- if (!options)
- options = {}
- if (options.max && (typeof options.max !== 'number' || options.max < 0))
- throw new TypeError('max must be a non-negative number')
- // Kind of weird to have a default max of Infinity, but oh well.
- const max = this[MAX] = options.max || Infinity
- const lc = options.length || naiveLength
- this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc
- this[ALLOW_STALE] = options.stale || false
- if (options.maxAge && typeof options.maxAge !== 'number')
- throw new TypeError('maxAge must be a number')
- this[MAX_AGE] = options.maxAge || 0
- this[DISPOSE] = options.dispose
- this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false
- this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false
- this.reset()
- }
- // resize the cache when the max changes.
- set max (mL) {
- if (typeof mL !== 'number' || mL < 0)
- throw new TypeError('max must be a non-negative number')
- this[MAX] = mL || Infinity
- trim(this)
- }
- get max () {
- return this[MAX]
- }
- set allowStale (allowStale) {
- this[ALLOW_STALE] = !!allowStale
- }
- get allowStale () {
- return this[ALLOW_STALE]
- }
- set maxAge (mA) {
- if (typeof mA !== 'number')
- throw new TypeError('maxAge must be a non-negative number')
- this[MAX_AGE] = mA
- trim(this)
- }
- get maxAge () {
- return this[MAX_AGE]
- }
- // resize the cache when the lengthCalculator changes.
- set lengthCalculator (lC) {
- if (typeof lC !== 'function')
- lC = naiveLength
- if (lC !== this[LENGTH_CALCULATOR]) {
- this[LENGTH_CALCULATOR] = lC
- this[LENGTH] = 0
- this[LRU_LIST].forEach(hit => {
- hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key)
- this[LENGTH] += hit.length
- })
- }
- trim(this)
- }
- get lengthCalculator () { return this[LENGTH_CALCULATOR] }
- get length () { return this[LENGTH] }
- get itemCount () { return this[LRU_LIST].length }
- rforEach (fn, thisp) {
- thisp = thisp || this
- for (let walker = this[LRU_LIST].tail; walker !== null;) {
- const prev = walker.prev
- forEachStep(this, fn, walker, thisp)
- walker = prev
- }
- }
- forEach (fn, thisp) {
- thisp = thisp || this
- for (let walker = this[LRU_LIST].head; walker !== null;) {
- const next = walker.next
- forEachStep(this, fn, walker, thisp)
- walker = next
- }
- }
- keys () {
- return this[LRU_LIST].toArray().map(k => k.key)
- }
- values () {
- return this[LRU_LIST].toArray().map(k => k.value)
- }
- reset () {
- if (this[DISPOSE] &&
- this[LRU_LIST] &&
- this[LRU_LIST].length) {
- this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value))
- }
- this[CACHE] = new Map() // hash of items by key
- this[LRU_LIST] = new Yallist() // list of items in order of use recency
- this[LENGTH] = 0 // length of items in the list
- }
- dump () {
- return this[LRU_LIST].map(hit =>
- isStale(this, hit) ? false : {
- k: hit.key,
- v: hit.value,
- e: hit.now + (hit.maxAge || 0)
- }).toArray().filter(h => h)
- }
- dumpLru () {
- return this[LRU_LIST]
- }
- set (key, value, maxAge) {
- maxAge = maxAge || this[MAX_AGE]
- if (maxAge && typeof maxAge !== 'number')
- throw new TypeError('maxAge must be a number')
- const now = maxAge ? Date.now() : 0
- const len = this[LENGTH_CALCULATOR](value, key)
- if (this[CACHE].has(key)) {
- if (len > this[MAX]) {
- del(this, this[CACHE].get(key))
- return false
- }
- const node = this[CACHE].get(key)
- const item = node.value
- // dispose of the old one before overwriting
- // split out into 2 ifs for better coverage tracking
- if (this[DISPOSE]) {
- if (!this[NO_DISPOSE_ON_SET])
- this[DISPOSE](key, item.value)
- }
- item.now = now
- item.maxAge = maxAge
- item.value = value
- this[LENGTH] += len - item.length
- item.length = len
- this.get(key)
- trim(this)
- return true
- }
- const hit = new Entry(key, value, len, now, maxAge)
- // oversized objects fall out of cache automatically.
- if (hit.length > this[MAX]) {
- if (this[DISPOSE])
- this[DISPOSE](key, value)
- return false
- }
- this[LENGTH] += hit.length
- this[LRU_LIST].unshift(hit)
- this[CACHE].set(key, this[LRU_LIST].head)
- trim(this)
- return true
- }
- has (key) {
- if (!this[CACHE].has(key)) return false
- const hit = this[CACHE].get(key).value
- return !isStale(this, hit)
- }
- get (key) {
- return get(this, key, true)
- }
- peek (key) {
- return get(this, key, false)
- }
- pop () {
- const node = this[LRU_LIST].tail
- if (!node)
- return null
- del(this, node)
- return node.value
- }
- del (key) {
- del(this, this[CACHE].get(key))
- }
- load (arr) {
- // reset the cache
- this.reset()
- const now = Date.now()
- // A previous serialized cache has the most recent items first
- for (let l = arr.length - 1; l >= 0; l--) {
- const hit = arr[l]
- const expiresAt = hit.e || 0
- if (expiresAt === 0)
- // the item was created without expiration in a non aged cache
- this.set(hit.k, hit.v)
- else {
- const maxAge = expiresAt - now
- // dont add already expired items
- if (maxAge > 0) {
- this.set(hit.k, hit.v, maxAge)
- }
- }
- }
- }
- prune () {
- this[CACHE].forEach((value, key) => get(this, key, false))
- }
- }
- const get = (self, key, doUse) => {
- const node = self[CACHE].get(key)
- if (node) {
- const hit = node.value
- if (isStale(self, hit)) {
- del(self, node)
- if (!self[ALLOW_STALE])
- return undefined
- } else {
- if (doUse) {
- if (self[UPDATE_AGE_ON_GET])
- node.value.now = Date.now()
- self[LRU_LIST].unshiftNode(node)
- }
- }
- return hit.value
- }
- }
- const isStale = (self, hit) => {
- if (!hit || (!hit.maxAge && !self[MAX_AGE]))
- return false
- const diff = Date.now() - hit.now
- return hit.maxAge ? diff > hit.maxAge
- : self[MAX_AGE] && (diff > self[MAX_AGE])
- }
- const trim = self => {
- if (self[LENGTH] > self[MAX]) {
- for (let walker = self[LRU_LIST].tail;
- self[LENGTH] > self[MAX] && walker !== null;) {
- // We know that we're about to delete this one, and also
- // what the next least recently used key will be, so just
- // go ahead and set it now.
- const prev = walker.prev
- del(self, walker)
- walker = prev
- }
- }
- }
- const del = (self, node) => {
- if (node) {
- const hit = node.value
- if (self[DISPOSE])
- self[DISPOSE](hit.key, hit.value)
- self[LENGTH] -= hit.length
- self[CACHE].delete(hit.key)
- self[LRU_LIST].removeNode(node)
- }
- }
- class Entry {
- constructor (key, value, length, now, maxAge) {
- this.key = key
- this.value = value
- this.length = length
- this.now = now
- this.maxAge = maxAge || 0
- }
- }
- const forEachStep = (self, fn, node, thisp) => {
- let hit = node.value
- if (isStale(self, hit)) {
- del(self, node)
- if (!self[ALLOW_STALE])
- hit = undefined
- }
- if (hit)
- fn.call(thisp, hit.value, hit.key, self)
- }
- module.exports = LRUCache
- /***/ }),
- /***/ 60054:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const ANY = Symbol('SemVer ANY')
- // hoisted class for cyclic dependency
- class Comparator {
- static get ANY () {
- return ANY
- }
- constructor (comp, options) {
- options = parseOptions(options)
- if (comp instanceof Comparator) {
- if (comp.loose === !!options.loose) {
- return comp
- } else {
- comp = comp.value
- }
- }
- debug('comparator', comp, options)
- this.options = options
- this.loose = !!options.loose
- this.parse(comp)
- if (this.semver === ANY) {
- this.value = ''
- } else {
- this.value = this.operator + this.semver.version
- }
- debug('comp', this)
- }
- parse (comp) {
- const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]
- const m = comp.match(r)
- if (!m) {
- throw new TypeError(`Invalid comparator: ${comp}`)
- }
- this.operator = m[1] !== undefined ? m[1] : ''
- if (this.operator === '=') {
- this.operator = ''
- }
- // if it literally is just '>' or '' then allow anything.
- if (!m[2]) {
- this.semver = ANY
- } else {
- this.semver = new SemVer(m[2], this.options.loose)
- }
- }
- toString () {
- return this.value
- }
- test (version) {
- debug('Comparator.test', version, this.options.loose)
- if (this.semver === ANY || version === ANY) {
- return true
- }
- if (typeof version === 'string') {
- try {
- version = new SemVer(version, this.options)
- } catch (er) {
- return false
- }
- }
- return cmp(version, this.operator, this.semver, this.options)
- }
- intersects (comp, options) {
- if (!(comp instanceof Comparator)) {
- throw new TypeError('a Comparator is required')
- }
- if (!options || typeof options !== 'object') {
- options = {
- loose: !!options,
- includePrerelease: false
- }
- }
- if (this.operator === '') {
- if (this.value === '') {
- return true
- }
- return new Range(comp.value, options).test(this.value)
- } else if (comp.operator === '') {
- if (comp.value === '') {
- return true
- }
- return new Range(this.value, options).test(comp.semver)
- }
- const sameDirectionIncreasing =
- (this.operator === '>=' || this.operator === '>') &&
- (comp.operator === '>=' || comp.operator === '>')
- const sameDirectionDecreasing =
- (this.operator === '<=' || this.operator === '<') &&
- (comp.operator === '<=' || comp.operator === '<')
- const sameSemVer = this.semver.version === comp.semver.version
- const differentDirectionsInclusive =
- (this.operator === '>=' || this.operator === '<=') &&
- (comp.operator === '>=' || comp.operator === '<=')
- const oppositeDirectionsLessThan =
- cmp(this.semver, '<', comp.semver, options) &&
- (this.operator === '>=' || this.operator === '>') &&
- (comp.operator === '<=' || comp.operator === '<')
- const oppositeDirectionsGreaterThan =
- cmp(this.semver, '>', comp.semver, options) &&
- (this.operator === '<=' || this.operator === '<') &&
- (comp.operator === '>=' || comp.operator === '>')
- return (
- sameDirectionIncreasing ||
- sameDirectionDecreasing ||
- (sameSemVer && differentDirectionsInclusive) ||
- oppositeDirectionsLessThan ||
- oppositeDirectionsGreaterThan
- )
- }
- }
- module.exports = Comparator
- const parseOptions = __webpack_require__(26084)
- const {re, t} = __webpack_require__(50487)
- const cmp = __webpack_require__(16378)
- const debug = __webpack_require__(96738)
- const SemVer = __webpack_require__(39541)
- const Range = __webpack_require__(93031)
- /***/ }),
- /***/ 93031:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- // hoisted class for cyclic dependency
- class Range {
- constructor (range, options) {
- options = parseOptions(options)
- if (range instanceof Range) {
- if (
- range.loose === !!options.loose &&
- range.includePrerelease === !!options.includePrerelease
- ) {
- return range
- } else {
- return new Range(range.raw, options)
- }
- }
- if (range instanceof Comparator) {
- // just put it in the set and return
- this.raw = range.value
- this.set = [[range]]
- this.format()
- return this
- }
- this.options = options
- this.loose = !!options.loose
- this.includePrerelease = !!options.includePrerelease
- // First, split based on boolean or ||
- this.raw = range
- this.set = range
- .split(/\s*\|\|\s*/)
- // map the range to a 2d array of comparators
- .map(range => this.parseRange(range.trim()))
- // throw out any comparator lists that are empty
- // this generally means that it was not a valid range, which is allowed
- // in loose mode, but will still throw if the WHOLE range is invalid.
- .filter(c => c.length)
- if (!this.set.length) {
- throw new TypeError(`Invalid SemVer Range: ${range}`)
- }
- // if we have any that are not the null set, throw out null sets.
- if (this.set.length > 1) {
- // keep the first one, in case they're all null sets
- const first = this.set[0]
- this.set = this.set.filter(c => !isNullSet(c[0]))
- if (this.set.length === 0)
- this.set = [first]
- else if (this.set.length > 1) {
- // if we have any that are *, then the range is just *
- for (const c of this.set) {
- if (c.length === 1 && isAny(c[0])) {
- this.set = [c]
- break
- }
- }
- }
- }
- this.format()
- }
- format () {
- this.range = this.set
- .map((comps) => {
- return comps.join(' ').trim()
- })
- .join('||')
- .trim()
- return this.range
- }
- toString () {
- return this.range
- }
- parseRange (range) {
- range = range.trim()
- // memoize range parsing for performance.
- // this is a very hot path, and fully deterministic.
- const memoOpts = Object.keys(this.options).join(',')
- const memoKey = `parseRange:${memoOpts}:${range}`
- const cached = cache.get(memoKey)
- if (cached)
- return cached
- const loose = this.options.loose
- // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
- const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]
- range = range.replace(hr, hyphenReplace(this.options.includePrerelease))
- debug('hyphen replace', range)
- // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
- range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)
- debug('comparator trim', range, re[t.COMPARATORTRIM])
- // `~ 1.2.3` => `~1.2.3`
- range = range.replace(re[t.TILDETRIM], tildeTrimReplace)
- // `^ 1.2.3` => `^1.2.3`
- range = range.replace(re[t.CARETTRIM], caretTrimReplace)
- // normalize spaces
- range = range.split(/\s+/).join(' ')
- // At this point, the range is completely trimmed and
- // ready to be split into comparators.
- const compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]
- const rangeList = range
- .split(' ')
- .map(comp => parseComparator(comp, this.options))
- .join(' ')
- .split(/\s+/)
- // >=0.0.0 is equivalent to *
- .map(comp => replaceGTE0(comp, this.options))
- // in loose mode, throw out any that are not valid comparators
- .filter(this.options.loose ? comp => !!comp.match(compRe) : () => true)
- .map(comp => new Comparator(comp, this.options))
- // if any comparators are the null set, then replace with JUST null set
- // if more than one comparator, remove any * comparators
- // also, don't include the same comparator more than once
- const l = rangeList.length
- const rangeMap = new Map()
- for (const comp of rangeList) {
- if (isNullSet(comp))
- return [comp]
- rangeMap.set(comp.value, comp)
- }
- if (rangeMap.size > 1 && rangeMap.has(''))
- rangeMap.delete('')
- const result = [...rangeMap.values()]
- cache.set(memoKey, result)
- return result
- }
- intersects (range, options) {
- if (!(range instanceof Range)) {
- throw new TypeError('a Range is required')
- }
- return this.set.some((thisComparators) => {
- return (
- isSatisfiable(thisComparators, options) &&
- range.set.some((rangeComparators) => {
- return (
- isSatisfiable(rangeComparators, options) &&
- thisComparators.every((thisComparator) => {
- return rangeComparators.every((rangeComparator) => {
- return thisComparator.intersects(rangeComparator, options)
- })
- })
- )
- })
- )
- })
- }
- // if ANY of the sets match ALL of its comparators, then pass
- test (version) {
- if (!version) {
- return false
- }
- if (typeof version === 'string') {
- try {
- version = new SemVer(version, this.options)
- } catch (er) {
- return false
- }
- }
- for (let i = 0; i < this.set.length; i++) {
- if (testSet(this.set[i], version, this.options)) {
- return true
- }
- }
- return false
- }
- }
- module.exports = Range
- const LRU = __webpack_require__(89006)
- const cache = new LRU({ max: 1000 })
- const parseOptions = __webpack_require__(26084)
- const Comparator = __webpack_require__(60054)
- const debug = __webpack_require__(96738)
- const SemVer = __webpack_require__(39541)
- const {
- re,
- t,
- comparatorTrimReplace,
- tildeTrimReplace,
- caretTrimReplace
- } = __webpack_require__(50487)
- const isNullSet = c => c.value === '<0.0.0-0'
- const isAny = c => c.value === ''
- // take a set of comparators and determine whether there
- // exists a version which can satisfy it
- const isSatisfiable = (comparators, options) => {
- let result = true
- const remainingComparators = comparators.slice()
- let testComparator = remainingComparators.pop()
- while (result && remainingComparators.length) {
- result = remainingComparators.every((otherComparator) => {
- return testComparator.intersects(otherComparator, options)
- })
- testComparator = remainingComparators.pop()
- }
- return result
- }
- // comprised of xranges, tildes, stars, and gtlt's at this point.
- // already replaced the hyphen ranges
- // turn into a set of JUST comparators.
- const parseComparator = (comp, options) => {
- debug('comp', comp, options)
- comp = replaceCarets(comp, options)
- debug('caret', comp)
- comp = replaceTildes(comp, options)
- debug('tildes', comp)
- comp = replaceXRanges(comp, options)
- debug('xrange', comp)
- comp = replaceStars(comp, options)
- debug('stars', comp)
- return comp
- }
- const isX = id => !id || id.toLowerCase() === 'x' || id === '*'
- // ~, ~> --> * (any, kinda silly)
- // ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0
- // ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0
- // ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0
- // ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0
- // ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0
- const replaceTildes = (comp, options) =>
- comp.trim().split(/\s+/).map((comp) => {
- return replaceTilde(comp, options)
- }).join(' ')
- const replaceTilde = (comp, options) => {
- const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]
- return comp.replace(r, (_, M, m, p, pr) => {
- debug('tilde', comp, _, M, m, p, pr)
- let ret
- if (isX(M)) {
- ret = ''
- } else if (isX(m)) {
- ret = `>=${M}.0.0 <${+M + 1}.0.0-0`
- } else if (isX(p)) {
- // ~1.2 == >=1.2.0 <1.3.0-0
- ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`
- } else if (pr) {
- debug('replaceTilde pr', pr)
- ret = `>=${M}.${m}.${p}-${pr
- } <${M}.${+m + 1}.0-0`
- } else {
- // ~1.2.3 == >=1.2.3 <1.3.0-0
- ret = `>=${M}.${m}.${p
- } <${M}.${+m + 1}.0-0`
- }
- debug('tilde return', ret)
- return ret
- })
- }
- // ^ --> * (any, kinda silly)
- // ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0
- // ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0
- // ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0
- // ^1.2.3 --> >=1.2.3 <2.0.0-0
- // ^1.2.0 --> >=1.2.0 <2.0.0-0
- const replaceCarets = (comp, options) =>
- comp.trim().split(/\s+/).map((comp) => {
- return replaceCaret(comp, options)
- }).join(' ')
- const replaceCaret = (comp, options) => {
- debug('caret', comp, options)
- const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]
- const z = options.includePrerelease ? '-0' : ''
- return comp.replace(r, (_, M, m, p, pr) => {
- debug('caret', comp, _, M, m, p, pr)
- let ret
- if (isX(M)) {
- ret = ''
- } else if (isX(m)) {
- ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`
- } else if (isX(p)) {
- if (M === '0') {
- ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`
- } else {
- ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`
- }
- } else if (pr) {
- debug('replaceCaret pr', pr)
- if (M === '0') {
- if (m === '0') {
- ret = `>=${M}.${m}.${p}-${pr
- } <${M}.${m}.${+p + 1}-0`
- } else {
- ret = `>=${M}.${m}.${p}-${pr
- } <${M}.${+m + 1}.0-0`
- }
- } else {
- ret = `>=${M}.${m}.${p}-${pr
- } <${+M + 1}.0.0-0`
- }
- } else {
- debug('no pr')
- if (M === '0') {
- if (m === '0') {
- ret = `>=${M}.${m}.${p
- }${z} <${M}.${m}.${+p + 1}-0`
- } else {
- ret = `>=${M}.${m}.${p
- }${z} <${M}.${+m + 1}.0-0`
- }
- } else {
- ret = `>=${M}.${m}.${p
- } <${+M + 1}.0.0-0`
- }
- }
- debug('caret return', ret)
- return ret
- })
- }
- const replaceXRanges = (comp, options) => {
- debug('replaceXRanges', comp, options)
- return comp.split(/\s+/).map((comp) => {
- return replaceXRange(comp, options)
- }).join(' ')
- }
- const replaceXRange = (comp, options) => {
- comp = comp.trim()
- const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]
- return comp.replace(r, (ret, gtlt, M, m, p, pr) => {
- debug('xRange', comp, ret, gtlt, M, m, p, pr)
- const xM = isX(M)
- const xm = xM || isX(m)
- const xp = xm || isX(p)
- const anyX = xp
- if (gtlt === '=' && anyX) {
- gtlt = ''
- }
- // if we're including prereleases in the match, then we need
- // to fix this to -0, the lowest possible prerelease value
- pr = options.includePrerelease ? '-0' : ''
- if (xM) {
- if (gtlt === '>' || gtlt === '<') {
- // nothing is allowed
- ret = '<0.0.0-0'
- } else {
- // nothing is forbidden
- ret = '*'
- }
- } else if (gtlt && anyX) {
- // we know patch is an x, because we have any x at all.
- // replace X with 0
- if (xm) {
- m = 0
- }
- p = 0
- if (gtlt === '>') {
- // >1 => >=2.0.0
- // >1.2 => >=1.3.0
- gtlt = '>='
- if (xm) {
- M = +M + 1
- m = 0
- p = 0
- } else {
- m = +m + 1
- p = 0
- }
- } else if (gtlt === '<=') {
- // <=0.7.x is actually <0.8.0, since any 0.7.x should
- // pass. Similarly, <=7.x is actually <8.0.0, etc.
- gtlt = '<'
- if (xm) {
- M = +M + 1
- } else {
- m = +m + 1
- }
- }
- if (gtlt === '<')
- pr = '-0'
- ret = `${gtlt + M}.${m}.${p}${pr}`
- } else if (xm) {
- ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`
- } else if (xp) {
- ret = `>=${M}.${m}.0${pr
- } <${M}.${+m + 1}.0-0`
- }
- debug('xRange return', ret)
- return ret
- })
- }
- // Because * is AND-ed with everything else in the comparator,
- // and '' means "any version", just remove the *s entirely.
- const replaceStars = (comp, options) => {
- debug('replaceStars', comp, options)
- // Looseness is ignored here. star is always as loose as it gets!
- return comp.trim().replace(re[t.STAR], '')
- }
- const replaceGTE0 = (comp, options) => {
- debug('replaceGTE0', comp, options)
- return comp.trim()
- .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')
- }
- // This function is passed to string.replace(re[t.HYPHENRANGE])
- // M, m, patch, prerelease, build
- // 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
- // 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do
- // 1.2 - 3.4 => >=1.2.0 <3.5.0-0
- const hyphenReplace = incPr => ($0,
- from, fM, fm, fp, fpr, fb,
- to, tM, tm, tp, tpr, tb) => {
- if (isX(fM)) {
- from = ''
- } else if (isX(fm)) {
- from = `>=${fM}.0.0${incPr ? '-0' : ''}`
- } else if (isX(fp)) {
- from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`
- } else if (fpr) {
- from = `>=${from}`
- } else {
- from = `>=${from}${incPr ? '-0' : ''}`
- }
- if (isX(tM)) {
- to = ''
- } else if (isX(tm)) {
- to = `<${+tM + 1}.0.0-0`
- } else if (isX(tp)) {
- to = `<${tM}.${+tm + 1}.0-0`
- } else if (tpr) {
- to = `<=${tM}.${tm}.${tp}-${tpr}`
- } else if (incPr) {
- to = `<${tM}.${tm}.${+tp + 1}-0`
- } else {
- to = `<=${to}`
- }
- return (`${from} ${to}`).trim()
- }
- const testSet = (set, version, options) => {
- for (let i = 0; i < set.length; i++) {
- if (!set[i].test(version)) {
- return false
- }
- }
- if (version.prerelease.length && !options.includePrerelease) {
- // Find the set of versions that are allowed to have prereleases
- // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
- // That should allow `1.2.3-pr.2` to pass.
- // However, `1.2.4-alpha.notready` should NOT be allowed,
- // even though it's within the range set by the comparators.
- for (let i = 0; i < set.length; i++) {
- debug(set[i].semver)
- if (set[i].semver === Comparator.ANY) {
- continue
- }
- if (set[i].semver.prerelease.length > 0) {
- const allowed = set[i].semver
- if (allowed.major === version.major &&
- allowed.minor === version.minor &&
- allowed.patch === version.patch) {
- return true
- }
- }
- }
- // Version has a -pre, but it's not one of the ones we like.
- return false
- }
- return true
- }
- /***/ }),
- /***/ 39541:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const debug = __webpack_require__(96738)
- const { MAX_LENGTH, MAX_SAFE_INTEGER } = __webpack_require__(34504)
- const { re, t } = __webpack_require__(50487)
- const parseOptions = __webpack_require__(26084)
- const { compareIdentifiers } = __webpack_require__(37686)
- class SemVer {
- constructor (version, options) {
- options = parseOptions(options)
- if (version instanceof SemVer) {
- if (version.loose === !!options.loose &&
- version.includePrerelease === !!options.includePrerelease) {
- return version
- } else {
- version = version.version
- }
- } else if (typeof version !== 'string') {
- throw new TypeError(`Invalid Version: ${version}`)
- }
- if (version.length > MAX_LENGTH) {
- throw new TypeError(
- `version is longer than ${MAX_LENGTH} characters`
- )
- }
- debug('SemVer', version, options)
- this.options = options
- this.loose = !!options.loose
- // this isn't actually relevant for versions, but keep it so that we
- // don't run into trouble passing this.options around.
- this.includePrerelease = !!options.includePrerelease
- const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])
- if (!m) {
- throw new TypeError(`Invalid Version: ${version}`)
- }
- this.raw = version
- // these are actually numbers
- this.major = +m[1]
- this.minor = +m[2]
- this.patch = +m[3]
- if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
- throw new TypeError('Invalid major version')
- }
- if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
- throw new TypeError('Invalid minor version')
- }
- if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
- throw new TypeError('Invalid patch version')
- }
- // numberify any prerelease numeric ids
- if (!m[4]) {
- this.prerelease = []
- } else {
- this.prerelease = m[4].split('.').map((id) => {
- if (/^[0-9]+$/.test(id)) {
- const num = +id
- if (num >= 0 && num < MAX_SAFE_INTEGER) {
- return num
- }
- }
- return id
- })
- }
- this.build = m[5] ? m[5].split('.') : []
- this.format()
- }
- format () {
- this.version = `${this.major}.${this.minor}.${this.patch}`
- if (this.prerelease.length) {
- this.version += `-${this.prerelease.join('.')}`
- }
- return this.version
- }
- toString () {
- return this.version
- }
- compare (other) {
- debug('SemVer.compare', this.version, this.options, other)
- if (!(other instanceof SemVer)) {
- if (typeof other === 'string' && other === this.version) {
- return 0
- }
- other = new SemVer(other, this.options)
- }
- if (other.version === this.version) {
- return 0
- }
- return this.compareMain(other) || this.comparePre(other)
- }
- compareMain (other) {
- if (!(other instanceof SemVer)) {
- other = new SemVer(other, this.options)
- }
- return (
- compareIdentifiers(this.major, other.major) ||
- compareIdentifiers(this.minor, other.minor) ||
- compareIdentifiers(this.patch, other.patch)
- )
- }
- comparePre (other) {
- if (!(other instanceof SemVer)) {
- other = new SemVer(other, this.options)
- }
- // NOT having a prerelease is > having one
- if (this.prerelease.length && !other.prerelease.length) {
- return -1
- } else if (!this.prerelease.length && other.prerelease.length) {
- return 1
- } else if (!this.prerelease.length && !other.prerelease.length) {
- return 0
- }
- let i = 0
- do {
- const a = this.prerelease[i]
- const b = other.prerelease[i]
- debug('prerelease compare', i, a, b)
- if (a === undefined && b === undefined) {
- return 0
- } else if (b === undefined) {
- return 1
- } else if (a === undefined) {
- return -1
- } else if (a === b) {
- continue
- } else {
- return compareIdentifiers(a, b)
- }
- } while (++i)
- }
- compareBuild (other) {
- if (!(other instanceof SemVer)) {
- other = new SemVer(other, this.options)
- }
- let i = 0
- do {
- const a = this.build[i]
- const b = other.build[i]
- debug('prerelease compare', i, a, b)
- if (a === undefined && b === undefined) {
- return 0
- } else if (b === undefined) {
- return 1
- } else if (a === undefined) {
- return -1
- } else if (a === b) {
- continue
- } else {
- return compareIdentifiers(a, b)
- }
- } while (++i)
- }
- // preminor will bump the version up to the next minor release, and immediately
- // down to pre-release. premajor and prepatch work the same way.
- inc (release, identifier) {
- switch (release) {
- case 'premajor':
- this.prerelease.length = 0
- this.patch = 0
- this.minor = 0
- this.major++
- this.inc('pre', identifier)
- break
- case 'preminor':
- this.prerelease.length = 0
- this.patch = 0
- this.minor++
- this.inc('pre', identifier)
- break
- case 'prepatch':
- // If this is already a prerelease, it will bump to the next version
- // drop any prereleases that might already exist, since they are not
- // relevant at this point.
- this.prerelease.length = 0
- this.inc('patch', identifier)
- this.inc('pre', identifier)
- break
- // If the input is a non-prerelease version, this acts the same as
- // prepatch.
- case 'prerelease':
- if (this.prerelease.length === 0) {
- this.inc('patch', identifier)
- }
- this.inc('pre', identifier)
- break
- case 'major':
- // If this is a pre-major version, bump up to the same major version.
- // Otherwise increment major.
- // 1.0.0-5 bumps to 1.0.0
- // 1.1.0 bumps to 2.0.0
- if (
- this.minor !== 0 ||
- this.patch !== 0 ||
- this.prerelease.length === 0
- ) {
- this.major++
- }
- this.minor = 0
- this.patch = 0
- this.prerelease = []
- break
- case 'minor':
- // If this is a pre-minor version, bump up to the same minor version.
- // Otherwise increment minor.
- // 1.2.0-5 bumps to 1.2.0
- // 1.2.1 bumps to 1.3.0
- if (this.patch !== 0 || this.prerelease.length === 0) {
- this.minor++
- }
- this.patch = 0
- this.prerelease = []
- break
- case 'patch':
- // If this is not a pre-release version, it will increment the patch.
- // If it is a pre-release it will bump up to the same patch version.
- // 1.2.0-5 patches to 1.2.0
- // 1.2.0 patches to 1.2.1
- if (this.prerelease.length === 0) {
- this.patch++
- }
- this.prerelease = []
- break
- // This probably shouldn't be used publicly.
- // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.
- case 'pre':
- if (this.prerelease.length === 0) {
- this.prerelease = [0]
- } else {
- let i = this.prerelease.length
- while (--i >= 0) {
- if (typeof this.prerelease[i] === 'number') {
- this.prerelease[i]++
- i = -2
- }
- }
- if (i === -1) {
- // didn't increment anything
- this.prerelease.push(0)
- }
- }
- if (identifier) {
- // 1.2.0-beta.1 bumps to 1.2.0-beta.2,
- // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
- if (this.prerelease[0] === identifier) {
- if (isNaN(this.prerelease[1])) {
- this.prerelease = [identifier, 0]
- }
- } else {
- this.prerelease = [identifier, 0]
- }
- }
- break
- default:
- throw new Error(`invalid increment argument: ${release}`)
- }
- this.format()
- this.raw = this.version
- return this
- }
- }
- module.exports = SemVer
- /***/ }),
- /***/ 8870:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const parse = __webpack_require__(54847)
- const clean = (version, options) => {
- const s = parse(version.trim().replace(/^[=v]+/, ''), options)
- return s ? s.version : null
- }
- module.exports = clean
- /***/ }),
- /***/ 16378:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const eq = __webpack_require__(95576)
- const neq = __webpack_require__(98836)
- const gt = __webpack_require__(84021)
- const gte = __webpack_require__(39747)
- const lt = __webpack_require__(72680)
- const lte = __webpack_require__(26223)
- const cmp = (a, op, b, loose) => {
- switch (op) {
- case '===':
- if (typeof a === 'object')
- a = a.version
- if (typeof b === 'object')
- b = b.version
- return a === b
- case '!==':
- if (typeof a === 'object')
- a = a.version
- if (typeof b === 'object')
- b = b.version
- return a !== b
- case '':
- case '=':
- case '==':
- return eq(a, b, loose)
- case '!=':
- return neq(a, b, loose)
- case '>':
- return gt(a, b, loose)
- case '>=':
- return gte(a, b, loose)
- case '<':
- return lt(a, b, loose)
- case '<=':
- return lte(a, b, loose)
- default:
- throw new TypeError(`Invalid operator: ${op}`)
- }
- }
- module.exports = cmp
- /***/ }),
- /***/ 35195:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const SemVer = __webpack_require__(39541)
- const parse = __webpack_require__(54847)
- const {re, t} = __webpack_require__(50487)
- const coerce = (version, options) => {
- if (version instanceof SemVer) {
- return version
- }
- if (typeof version === 'number') {
- version = String(version)
- }
- if (typeof version !== 'string') {
- return null
- }
- options = options || {}
- let match = null
- if (!options.rtl) {
- match = version.match(re[t.COERCE])
- } else {
- // Find the right-most coercible string that does not share
- // a terminus with a more left-ward coercible string.
- // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'
- //
- // Walk through the string checking with a /g regexp
- // Manually set the index so as to pick up overlapping matches.
- // Stop when we get a match that ends at the string end, since no
- // coercible string can be more right-ward without the same terminus.
- let next
- while ((next = re[t.COERCERTL].exec(version)) &&
- (!match || match.index + match[0].length !== version.length)
- ) {
- if (!match ||
- next.index + next[0].length !== match.index + match[0].length) {
- match = next
- }
- re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length
- }
- // leave it in a clean state
- re[t.COERCERTL].lastIndex = -1
- }
- if (match === null)
- return null
- return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options)
- }
- module.exports = coerce
- /***/ }),
- /***/ 93668:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const SemVer = __webpack_require__(39541)
- const compareBuild = (a, b, loose) => {
- const versionA = new SemVer(a, loose)
- const versionB = new SemVer(b, loose)
- return versionA.compare(versionB) || versionA.compareBuild(versionB)
- }
- module.exports = compareBuild
- /***/ }),
- /***/ 80796:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const compare = __webpack_require__(28929)
- const compareLoose = (a, b) => compare(a, b, true)
- module.exports = compareLoose
- /***/ }),
- /***/ 28929:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const SemVer = __webpack_require__(39541)
- const compare = (a, b, loose) =>
- new SemVer(a, loose).compare(new SemVer(b, loose))
- module.exports = compare
- /***/ }),
- /***/ 36131:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const parse = __webpack_require__(54847)
- const eq = __webpack_require__(95576)
- const diff = (version1, version2) => {
- if (eq(version1, version2)) {
- return null
- } else {
- const v1 = parse(version1)
- const v2 = parse(version2)
- const hasPre = v1.prerelease.length || v2.prerelease.length
- const prefix = hasPre ? 'pre' : ''
- const defaultResult = hasPre ? 'prerelease' : ''
- for (const key in v1) {
- if (key === 'major' || key === 'minor' || key === 'patch') {
- if (v1[key] !== v2[key]) {
- return prefix + key
- }
- }
- }
- return defaultResult // may be undefined
- }
- }
- module.exports = diff
- /***/ }),
- /***/ 95576:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const compare = __webpack_require__(28929)
- const eq = (a, b, loose) => compare(a, b, loose) === 0
- module.exports = eq
- /***/ }),
- /***/ 84021:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const compare = __webpack_require__(28929)
- const gt = (a, b, loose) => compare(a, b, loose) > 0
- module.exports = gt
- /***/ }),
- /***/ 39747:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const compare = __webpack_require__(28929)
- const gte = (a, b, loose) => compare(a, b, loose) >= 0
- module.exports = gte
- /***/ }),
- /***/ 10127:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const SemVer = __webpack_require__(39541)
- const inc = (version, release, options, identifier) => {
- if (typeof (options) === 'string') {
- identifier = options
- options = undefined
- }
- try {
- return new SemVer(version, options).inc(release, identifier).version
- } catch (er) {
- return null
- }
- }
- module.exports = inc
- /***/ }),
- /***/ 72680:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const compare = __webpack_require__(28929)
- const lt = (a, b, loose) => compare(a, b, loose) < 0
- module.exports = lt
- /***/ }),
- /***/ 26223:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const compare = __webpack_require__(28929)
- const lte = (a, b, loose) => compare(a, b, loose) <= 0
- module.exports = lte
- /***/ }),
- /***/ 70957:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const SemVer = __webpack_require__(39541)
- const major = (a, loose) => new SemVer(a, loose).major
- module.exports = major
- /***/ }),
- /***/ 15122:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const SemVer = __webpack_require__(39541)
- const minor = (a, loose) => new SemVer(a, loose).minor
- module.exports = minor
- /***/ }),
- /***/ 98836:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const compare = __webpack_require__(28929)
- const neq = (a, b, loose) => compare(a, b, loose) !== 0
- module.exports = neq
- /***/ }),
- /***/ 54847:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const {MAX_LENGTH} = __webpack_require__(34504)
- const { re, t } = __webpack_require__(50487)
- const SemVer = __webpack_require__(39541)
- const parseOptions = __webpack_require__(26084)
- const parse = (version, options) => {
- options = parseOptions(options)
- if (version instanceof SemVer) {
- return version
- }
- if (typeof version !== 'string') {
- return null
- }
- if (version.length > MAX_LENGTH) {
- return null
- }
- const r = options.loose ? re[t.LOOSE] : re[t.FULL]
- if (!r.test(version)) {
- return null
- }
- try {
- return new SemVer(version, options)
- } catch (er) {
- return null
- }
- }
- module.exports = parse
- /***/ }),
- /***/ 61100:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const SemVer = __webpack_require__(39541)
- const patch = (a, loose) => new SemVer(a, loose).patch
- module.exports = patch
- /***/ }),
- /***/ 68761:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const parse = __webpack_require__(54847)
- const prerelease = (version, options) => {
- const parsed = parse(version, options)
- return (parsed && parsed.prerelease.length) ? parsed.prerelease : null
- }
- module.exports = prerelease
- /***/ }),
- /***/ 15444:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const compare = __webpack_require__(28929)
- const rcompare = (a, b, loose) => compare(b, a, loose)
- module.exports = rcompare
- /***/ }),
- /***/ 58354:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const compareBuild = __webpack_require__(93668)
- const rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))
- module.exports = rsort
- /***/ }),
- /***/ 76973:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const Range = __webpack_require__(93031)
- const satisfies = (version, range, options) => {
- try {
- range = new Range(range, options)
- } catch (er) {
- return false
- }
- return range.test(version)
- }
- module.exports = satisfies
- /***/ }),
- /***/ 84499:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const compareBuild = __webpack_require__(93668)
- const sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))
- module.exports = sort
- /***/ }),
- /***/ 26109:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const parse = __webpack_require__(54847)
- const valid = (version, options) => {
- const v = parse(version, options)
- return v ? v.version : null
- }
- module.exports = valid
- /***/ }),
- /***/ 23382:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- // just pre-load all the stuff that index.js lazily exports
- const internalRe = __webpack_require__(50487)
- module.exports = {
- re: internalRe.re,
- src: internalRe.src,
- tokens: internalRe.t,
- SEMVER_SPEC_VERSION: __webpack_require__(34504).SEMVER_SPEC_VERSION,
- SemVer: __webpack_require__(39541),
- compareIdentifiers: __webpack_require__(37686).compareIdentifiers,
- rcompareIdentifiers: __webpack_require__(37686).rcompareIdentifiers,
- parse: __webpack_require__(54847),
- valid: __webpack_require__(26109),
- clean: __webpack_require__(8870),
- inc: __webpack_require__(10127),
- diff: __webpack_require__(36131),
- major: __webpack_require__(70957),
- minor: __webpack_require__(15122),
- patch: __webpack_require__(61100),
- prerelease: __webpack_require__(68761),
- compare: __webpack_require__(28929),
- rcompare: __webpack_require__(15444),
- compareLoose: __webpack_require__(80796),
- compareBuild: __webpack_require__(93668),
- sort: __webpack_require__(84499),
- rsort: __webpack_require__(58354),
- gt: __webpack_require__(84021),
- lt: __webpack_require__(72680),
- eq: __webpack_require__(95576),
- neq: __webpack_require__(98836),
- gte: __webpack_require__(39747),
- lte: __webpack_require__(26223),
- cmp: __webpack_require__(16378),
- coerce: __webpack_require__(35195),
- Comparator: __webpack_require__(60054),
- Range: __webpack_require__(93031),
- satisfies: __webpack_require__(76973),
- toComparators: __webpack_require__(76380),
- maxSatisfying: __webpack_require__(96169),
- minSatisfying: __webpack_require__(98037),
- minVersion: __webpack_require__(66682),
- validRange: __webpack_require__(93372),
- outside: __webpack_require__(30623),
- gtr: __webpack_require__(84575),
- ltr: __webpack_require__(75887),
- intersects: __webpack_require__(97429),
- simplifyRange: __webpack_require__(97286),
- subset: __webpack_require__(6870),
- }
- /***/ }),
- /***/ 34504:
- /***/ ((module) => {
- // Note: this is the semver.org version of the spec that it implements
- // Not necessarily the package version of this code.
- const SEMVER_SPEC_VERSION = '2.0.0'
- const MAX_LENGTH = 256
- const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||
- /* istanbul ignore next */ 9007199254740991
- // Max safe segment length for coercion.
- const MAX_SAFE_COMPONENT_LENGTH = 16
- module.exports = {
- SEMVER_SPEC_VERSION,
- MAX_LENGTH,
- MAX_SAFE_INTEGER,
- MAX_SAFE_COMPONENT_LENGTH
- }
- /***/ }),
- /***/ 96738:
- /***/ ((module) => {
- const debug = (
- typeof process === 'object' &&
- process.env &&
- process.env.NODE_DEBUG &&
- /\bsemver\b/i.test(process.env.NODE_DEBUG)
- ) ? (...args) => console.error('SEMVER', ...args)
- : () => {}
- module.exports = debug
- /***/ }),
- /***/ 37686:
- /***/ ((module) => {
- const numeric = /^[0-9]+$/
- const compareIdentifiers = (a, b) => {
- const anum = numeric.test(a)
- const bnum = numeric.test(b)
- if (anum && bnum) {
- a = +a
- b = +b
- }
- return a === b ? 0
- : (anum && !bnum) ? -1
- : (bnum && !anum) ? 1
- : a < b ? -1
- : 1
- }
- const rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)
- module.exports = {
- compareIdentifiers,
- rcompareIdentifiers
- }
- /***/ }),
- /***/ 26084:
- /***/ ((module) => {
- // parse out just the options we care about so we always get a consistent
- // obj with keys in a consistent order.
- const opts = ['includePrerelease', 'loose', 'rtl']
- const parseOptions = options =>
- !options ? {}
- : typeof options !== 'object' ? { loose: true }
- : opts.filter(k => options[k]).reduce((options, k) => {
- options[k] = true
- return options
- }, {})
- module.exports = parseOptions
- /***/ }),
- /***/ 50487:
- /***/ ((module, exports, __webpack_require__) => {
- const { MAX_SAFE_COMPONENT_LENGTH } = __webpack_require__(34504)
- const debug = __webpack_require__(96738)
- exports = module.exports = {}
- // The actual regexps go on exports.re
- const re = exports.re = []
- const src = exports.src = []
- const t = exports.t = {}
- let R = 0
- const createToken = (name, value, isGlobal) => {
- const index = R++
- debug(index, value)
- t[name] = index
- src[index] = value
- re[index] = new RegExp(value, isGlobal ? 'g' : undefined)
- }
- // The following Regular Expressions can be used for tokenizing,
- // validating, and parsing SemVer version strings.
- // ## Numeric Identifier
- // A single `0`, or a non-zero digit followed by zero or more digits.
- createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*')
- createToken('NUMERICIDENTIFIERLOOSE', '[0-9]+')
- // ## Non-numeric Identifier
- // Zero or more digits, followed by a letter or hyphen, and then zero or
- // more letters, digits, or hyphens.
- createToken('NONNUMERICIDENTIFIER', '\\d*[a-zA-Z-][a-zA-Z0-9-]*')
- // ## Main Version
- // Three dot-separated numeric identifiers.
- createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` +
- `(${src[t.NUMERICIDENTIFIER]})\\.` +
- `(${src[t.NUMERICIDENTIFIER]})`)
- createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` +
- `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` +
- `(${src[t.NUMERICIDENTIFIERLOOSE]})`)
- // ## Pre-release Version Identifier
- // A numeric identifier, or a non-numeric identifier.
- createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]
- }|${src[t.NONNUMERICIDENTIFIER]})`)
- createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]
- }|${src[t.NONNUMERICIDENTIFIER]})`)
- // ## Pre-release Version
- // Hyphen, followed by one or more dot-separated pre-release version
- // identifiers.
- createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]
- }(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`)
- createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]
- }(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)
- // ## Build Metadata Identifier
- // Any combination of digits, letters, or hyphens.
- createToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+')
- // ## Build Metadata
- // Plus sign, followed by one or more period-separated build metadata
- // identifiers.
- createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER]
- }(?:\\.${src[t.BUILDIDENTIFIER]})*))`)
- // ## Full Version String
- // A main version, followed optionally by a pre-release version and
- // build metadata.
- // Note that the only major, minor, patch, and pre-release sections of
- // the version string are capturing groups. The build metadata is not a
- // capturing group, because it should not ever be used in version
- // comparison.
- createToken('FULLPLAIN', `v?${src[t.MAINVERSION]
- }${src[t.PRERELEASE]}?${
- src[t.BUILD]}?`)
- createToken('FULL', `^${src[t.FULLPLAIN]}$`)
- // like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
- // also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
- // common in the npm registry.
- createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE]
- }${src[t.PRERELEASELOOSE]}?${
- src[t.BUILD]}?`)
- createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)
- createToken('GTLT', '((?:<|>)?=?)')
- // Something like "2.*" or "1.2.x".
- // Note that "x.x" is a valid xRange identifer, meaning "any version"
- // Only the first item is strictly required.
- createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`)
- createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`)
- createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` +
- `(?:\\.(${src[t.XRANGEIDENTIFIER]})` +
- `(?:\\.(${src[t.XRANGEIDENTIFIER]})` +
- `(?:${src[t.PRERELEASE]})?${
- src[t.BUILD]}?` +
- `)?)?`)
- createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +
- `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +
- `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +
- `(?:${src[t.PRERELEASELOOSE]})?${
- src[t.BUILD]}?` +
- `)?)?`)
- createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`)
- createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`)
- // Coercion.
- // Extract anything that could conceivably be a part of a valid semver
- createToken('COERCE', `${'(^|[^\\d])' +
- '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +
- `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +
- `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +
- `(?:$|[^\\d])`)
- createToken('COERCERTL', src[t.COERCE], true)
- // Tilde ranges.
- // Meaning is "reasonably at or greater than"
- createToken('LONETILDE', '(?:~>?)')
- createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true)
- exports.tildeTrimReplace = '$1~'
- createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)
- createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)
- // Caret ranges.
- // Meaning is "at least and backwards compatible with"
- createToken('LONECARET', '(?:\\^)')
- createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true)
- exports.caretTrimReplace = '$1^'
- createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)
- createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)
- // A simple gt/lt/eq thing, or just "" to indicate "any version"
- createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`)
- createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`)
- // An expression to strip any whitespace between the gtlt and the thing
- // it modifies, so that `> 1.2.3` ==> `>1.2.3`
- createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT]
- }\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)
- exports.comparatorTrimReplace = '$1$2$3'
- // Something like `1.2.3 - 1.2.4`
- // Note that these all use the loose form, because they'll be
- // checked against either the strict or loose comparator form
- // later.
- createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` +
- `\\s+-\\s+` +
- `(${src[t.XRANGEPLAIN]})` +
- `\\s*$`)
- createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` +
- `\\s+-\\s+` +
- `(${src[t.XRANGEPLAINLOOSE]})` +
- `\\s*$`)
- // Star ranges basically just allow anything at all.
- createToken('STAR', '(<|>)?=?\\s*\\*')
- // >=0.0.0 is like a star
- createToken('GTE0', '^\\s*>=\\s*0\.0\.0\\s*$')
- createToken('GTE0PRE', '^\\s*>=\\s*0\.0\.0-0\\s*$')
- /***/ }),
- /***/ 84575:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- // Determine if version is greater than all the versions possible in the range.
- const outside = __webpack_require__(30623)
- const gtr = (version, range, options) => outside(version, range, '>', options)
- module.exports = gtr
- /***/ }),
- /***/ 97429:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const Range = __webpack_require__(93031)
- const intersects = (r1, r2, options) => {
- r1 = new Range(r1, options)
- r2 = new Range(r2, options)
- return r1.intersects(r2)
- }
- module.exports = intersects
- /***/ }),
- /***/ 75887:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const outside = __webpack_require__(30623)
- // Determine if version is less than all the versions possible in the range
- const ltr = (version, range, options) => outside(version, range, '<', options)
- module.exports = ltr
- /***/ }),
- /***/ 96169:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const SemVer = __webpack_require__(39541)
- const Range = __webpack_require__(93031)
- const maxSatisfying = (versions, range, options) => {
- let max = null
- let maxSV = null
- let rangeObj = null
- try {
- rangeObj = new Range(range, options)
- } catch (er) {
- return null
- }
- versions.forEach((v) => {
- if (rangeObj.test(v)) {
- // satisfies(v, range, options)
- if (!max || maxSV.compare(v) === -1) {
- // compare(max, v, true)
- max = v
- maxSV = new SemVer(max, options)
- }
- }
- })
- return max
- }
- module.exports = maxSatisfying
- /***/ }),
- /***/ 98037:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const SemVer = __webpack_require__(39541)
- const Range = __webpack_require__(93031)
- const minSatisfying = (versions, range, options) => {
- let min = null
- let minSV = null
- let rangeObj = null
- try {
- rangeObj = new Range(range, options)
- } catch (er) {
- return null
- }
- versions.forEach((v) => {
- if (rangeObj.test(v)) {
- // satisfies(v, range, options)
- if (!min || minSV.compare(v) === 1) {
- // compare(min, v, true)
- min = v
- minSV = new SemVer(min, options)
- }
- }
- })
- return min
- }
- module.exports = minSatisfying
- /***/ }),
- /***/ 66682:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const SemVer = __webpack_require__(39541)
- const Range = __webpack_require__(93031)
- const gt = __webpack_require__(84021)
- const minVersion = (range, loose) => {
- range = new Range(range, loose)
- let minver = new SemVer('0.0.0')
- if (range.test(minver)) {
- return minver
- }
- minver = new SemVer('0.0.0-0')
- if (range.test(minver)) {
- return minver
- }
- minver = null
- for (let i = 0; i < range.set.length; ++i) {
- const comparators = range.set[i]
- let setMin = null
- comparators.forEach((comparator) => {
- // Clone to avoid manipulating the comparator's semver object.
- const compver = new SemVer(comparator.semver.version)
- switch (comparator.operator) {
- case '>':
- if (compver.prerelease.length === 0) {
- compver.patch++
- } else {
- compver.prerelease.push(0)
- }
- compver.raw = compver.format()
- /* fallthrough */
- case '':
- case '>=':
- if (!setMin || gt(compver, setMin)) {
- setMin = compver
- }
- break
- case '<':
- case '<=':
- /* Ignore maximum versions */
- break
- /* istanbul ignore next */
- default:
- throw new Error(`Unexpected operation: ${comparator.operator}`)
- }
- })
- if (setMin && (!minver || gt(minver, setMin)))
- minver = setMin
- }
- if (minver && range.test(minver)) {
- return minver
- }
- return null
- }
- module.exports = minVersion
- /***/ }),
- /***/ 30623:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const SemVer = __webpack_require__(39541)
- const Comparator = __webpack_require__(60054)
- const {ANY} = Comparator
- const Range = __webpack_require__(93031)
- const satisfies = __webpack_require__(76973)
- const gt = __webpack_require__(84021)
- const lt = __webpack_require__(72680)
- const lte = __webpack_require__(26223)
- const gte = __webpack_require__(39747)
- const outside = (version, range, hilo, options) => {
- version = new SemVer(version, options)
- range = new Range(range, options)
- let gtfn, ltefn, ltfn, comp, ecomp
- switch (hilo) {
- case '>':
- gtfn = gt
- ltefn = lte
- ltfn = lt
- comp = '>'
- ecomp = '>='
- break
- case '<':
- gtfn = lt
- ltefn = gte
- ltfn = gt
- comp = '<'
- ecomp = '<='
- break
- default:
- throw new TypeError('Must provide a hilo val of "<" or ">"')
- }
- // If it satisfies the range it is not outside
- if (satisfies(version, range, options)) {
- return false
- }
- // From now on, variable terms are as if we're in "gtr" mode.
- // but note that everything is flipped for the "ltr" function.
- for (let i = 0; i < range.set.length; ++i) {
- const comparators = range.set[i]
- let high = null
- let low = null
- comparators.forEach((comparator) => {
- if (comparator.semver === ANY) {
- comparator = new Comparator('>=0.0.0')
- }
- high = high || comparator
- low = low || comparator
- if (gtfn(comparator.semver, high.semver, options)) {
- high = comparator
- } else if (ltfn(comparator.semver, low.semver, options)) {
- low = comparator
- }
- })
- // If the edge version comparator has a operator then our version
- // isn't outside it
- if (high.operator === comp || high.operator === ecomp) {
- return false
- }
- // If the lowest version comparator has an operator and our version
- // is less than it then it isn't higher than the range
- if ((!low.operator || low.operator === comp) &&
- ltefn(version, low.semver)) {
- return false
- } else if (low.operator === ecomp && ltfn(version, low.semver)) {
- return false
- }
- }
- return true
- }
- module.exports = outside
- /***/ }),
- /***/ 97286:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- // given a set of versions and a range, create a "simplified" range
- // that includes the same versions that the original range does
- // If the original range is shorter than the simplified one, return that.
- const satisfies = __webpack_require__(76973)
- const compare = __webpack_require__(28929)
- module.exports = (versions, range, options) => {
- const set = []
- let min = null
- let prev = null
- const v = versions.sort((a, b) => compare(a, b, options))
- for (const version of v) {
- const included = satisfies(version, range, options)
- if (included) {
- prev = version
- if (!min)
- min = version
- } else {
- if (prev) {
- set.push([min, prev])
- }
- prev = null
- min = null
- }
- }
- if (min)
- set.push([min, null])
- const ranges = []
- for (const [min, max] of set) {
- if (min === max)
- ranges.push(min)
- else if (!max && min === v[0])
- ranges.push('*')
- else if (!max)
- ranges.push(`>=${min}`)
- else if (min === v[0])
- ranges.push(`<=${max}`)
- else
- ranges.push(`${min} - ${max}`)
- }
- const simplified = ranges.join(' || ')
- const original = typeof range.raw === 'string' ? range.raw : String(range)
- return simplified.length < original.length ? simplified : range
- }
- /***/ }),
- /***/ 6870:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const Range = __webpack_require__(93031)
- const Comparator = __webpack_require__(60054)
- const { ANY } = Comparator
- const satisfies = __webpack_require__(76973)
- const compare = __webpack_require__(28929)
- // Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:
- // - Every simple range `r1, r2, ...` is a null set, OR
- // - Every simple range `r1, r2, ...` which is not a null set is a subset of
- // some `R1, R2, ...`
- //
- // Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:
- // - If c is only the ANY comparator
- // - If C is only the ANY comparator, return true
- // - Else if in prerelease mode, return false
- // - else replace c with `[>=0.0.0]`
- // - If C is only the ANY comparator
- // - if in prerelease mode, return true
- // - else replace C with `[>=0.0.0]`
- // - Let EQ be the set of = comparators in c
- // - If EQ is more than one, return true (null set)
- // - Let GT be the highest > or >= comparator in c
- // - Let LT be the lowest < or <= comparator in c
- // - If GT and LT, and GT.semver > LT.semver, return true (null set)
- // - If any C is a = range, and GT or LT are set, return false
- // - If EQ
- // - If GT, and EQ does not satisfy GT, return true (null set)
- // - If LT, and EQ does not satisfy LT, return true (null set)
- // - If EQ satisfies every C, return true
- // - Else return false
- // - If GT
- // - If GT.semver is lower than any > or >= comp in C, return false
- // - If GT is >=, and GT.semver does not satisfy every C, return false
- // - If GT.semver has a prerelease, and not in prerelease mode
- // - If no C has a prerelease and the GT.semver tuple, return false
- // - If LT
- // - If LT.semver is greater than any < or <= comp in C, return false
- // - If LT is <=, and LT.semver does not satisfy every C, return false
- // - If GT.semver has a prerelease, and not in prerelease mode
- // - If no C has a prerelease and the LT.semver tuple, return false
- // - Else return true
- const subset = (sub, dom, options = {}) => {
- if (sub === dom)
- return true
- sub = new Range(sub, options)
- dom = new Range(dom, options)
- let sawNonNull = false
- OUTER: for (const simpleSub of sub.set) {
- for (const simpleDom of dom.set) {
- const isSub = simpleSubset(simpleSub, simpleDom, options)
- sawNonNull = sawNonNull || isSub !== null
- if (isSub)
- continue OUTER
- }
- // the null set is a subset of everything, but null simple ranges in
- // a complex range should be ignored. so if we saw a non-null range,
- // then we know this isn't a subset, but if EVERY simple range was null,
- // then it is a subset.
- if (sawNonNull)
- return false
- }
- return true
- }
- const simpleSubset = (sub, dom, options) => {
- if (sub === dom)
- return true
- if (sub.length === 1 && sub[0].semver === ANY) {
- if (dom.length === 1 && dom[0].semver === ANY)
- return true
- else if (options.includePrerelease)
- sub = [ new Comparator('>=0.0.0-0') ]
- else
- sub = [ new Comparator('>=0.0.0') ]
- }
- if (dom.length === 1 && dom[0].semver === ANY) {
- if (options.includePrerelease)
- return true
- else
- dom = [ new Comparator('>=0.0.0') ]
- }
- const eqSet = new Set()
- let gt, lt
- for (const c of sub) {
- if (c.operator === '>' || c.operator === '>=')
- gt = higherGT(gt, c, options)
- else if (c.operator === '<' || c.operator === '<=')
- lt = lowerLT(lt, c, options)
- else
- eqSet.add(c.semver)
- }
- if (eqSet.size > 1)
- return null
- let gtltComp
- if (gt && lt) {
- gtltComp = compare(gt.semver, lt.semver, options)
- if (gtltComp > 0)
- return null
- else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<='))
- return null
- }
- // will iterate one or zero times
- for (const eq of eqSet) {
- if (gt && !satisfies(eq, String(gt), options))
- return null
- if (lt && !satisfies(eq, String(lt), options))
- return null
- for (const c of dom) {
- if (!satisfies(eq, String(c), options))
- return false
- }
- return true
- }
- let higher, lower
- let hasDomLT, hasDomGT
- // if the subset has a prerelease, we need a comparator in the superset
- // with the same tuple and a prerelease, or it's not a subset
- let needDomLTPre = lt &&
- !options.includePrerelease &&
- lt.semver.prerelease.length ? lt.semver : false
- let needDomGTPre = gt &&
- !options.includePrerelease &&
- gt.semver.prerelease.length ? gt.semver : false
- // exception: <1.2.3-0 is the same as <1.2.3
- if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&
- lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {
- needDomLTPre = false
- }
- for (const c of dom) {
- hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='
- hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='
- if (gt) {
- if (needDomGTPre) {
- if (c.semver.prerelease && c.semver.prerelease.length &&
- c.semver.major === needDomGTPre.major &&
- c.semver.minor === needDomGTPre.minor &&
- c.semver.patch === needDomGTPre.patch) {
- needDomGTPre = false
- }
- }
- if (c.operator === '>' || c.operator === '>=') {
- higher = higherGT(gt, c, options)
- if (higher === c && higher !== gt)
- return false
- } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options))
- return false
- }
- if (lt) {
- if (needDomLTPre) {
- if (c.semver.prerelease && c.semver.prerelease.length &&
- c.semver.major === needDomLTPre.major &&
- c.semver.minor === needDomLTPre.minor &&
- c.semver.patch === needDomLTPre.patch) {
- needDomLTPre = false
- }
- }
- if (c.operator === '<' || c.operator === '<=') {
- lower = lowerLT(lt, c, options)
- if (lower === c && lower !== lt)
- return false
- } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options))
- return false
- }
- if (!c.operator && (lt || gt) && gtltComp !== 0)
- return false
- }
- // if there was a < or >, and nothing in the dom, then must be false
- // UNLESS it was limited by another range in the other direction.
- // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0
- if (gt && hasDomLT && !lt && gtltComp !== 0)
- return false
- if (lt && hasDomGT && !gt && gtltComp !== 0)
- return false
- // we needed a prerelease range in a specific tuple, but didn't get one
- // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,
- // because it includes prereleases in the 1.2.3 tuple
- if (needDomGTPre || needDomLTPre)
- return false
- return true
- }
- // >=1.2.3 is lower than >1.2.3
- const higherGT = (a, b, options) => {
- if (!a)
- return b
- const comp = compare(a.semver, b.semver, options)
- return comp > 0 ? a
- : comp < 0 ? b
- : b.operator === '>' && a.operator === '>=' ? b
- : a
- }
- // <=1.2.3 is higher than <1.2.3
- const lowerLT = (a, b, options) => {
- if (!a)
- return b
- const comp = compare(a.semver, b.semver, options)
- return comp < 0 ? a
- : comp > 0 ? b
- : b.operator === '<' && a.operator === '<=' ? b
- : a
- }
- module.exports = subset
- /***/ }),
- /***/ 76380:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const Range = __webpack_require__(93031)
- // Mostly just for testing and legacy API reasons
- const toComparators = (range, options) =>
- new Range(range, options).set
- .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))
- module.exports = toComparators
- /***/ }),
- /***/ 93372:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- const Range = __webpack_require__(93031)
- const validRange = (range, options) => {
- try {
- // Return '*' instead of '' so that truthiness works.
- // This will throw if it's invalid anyway
- return new Range(range, options).range || '*'
- } catch (er) {
- return null
- }
- }
- module.exports = validRange
- /***/ }),
- /***/ 76816:
- /***/ ((module) => {
- "use strict";
- module.exports = function (Yallist) {
- Yallist.prototype[Symbol.iterator] = function* () {
- for (let walker = this.head; walker; walker = walker.next) {
- yield walker.value
- }
- }
- }
- /***/ }),
- /***/ 41898:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- module.exports = Yallist
- Yallist.Node = Node
- Yallist.create = Yallist
- function Yallist (list) {
- var self = this
- if (!(self instanceof Yallist)) {
- self = new Yallist()
- }
- self.tail = null
- self.head = null
- self.length = 0
- if (list && typeof list.forEach === 'function') {
- list.forEach(function (item) {
- self.push(item)
- })
- } else if (arguments.length > 0) {
- for (var i = 0, l = arguments.length; i < l; i++) {
- self.push(arguments[i])
- }
- }
- return self
- }
- Yallist.prototype.removeNode = function (node) {
- if (node.list !== this) {
- throw new Error('removing node which does not belong to this list')
- }
- var next = node.next
- var prev = node.prev
- if (next) {
- next.prev = prev
- }
- if (prev) {
- prev.next = next
- }
- if (node === this.head) {
- this.head = next
- }
- if (node === this.tail) {
- this.tail = prev
- }
- node.list.length--
- node.next = null
- node.prev = null
- node.list = null
- return next
- }
- Yallist.prototype.unshiftNode = function (node) {
- if (node === this.head) {
- return
- }
- if (node.list) {
- node.list.removeNode(node)
- }
- var head = this.head
- node.list = this
- node.next = head
- if (head) {
- head.prev = node
- }
- this.head = node
- if (!this.tail) {
- this.tail = node
- }
- this.length++
- }
- Yallist.prototype.pushNode = function (node) {
- if (node === this.tail) {
- return
- }
- if (node.list) {
- node.list.removeNode(node)
- }
- var tail = this.tail
- node.list = this
- node.prev = tail
- if (tail) {
- tail.next = node
- }
- this.tail = node
- if (!this.head) {
- this.head = node
- }
- this.length++
- }
- Yallist.prototype.push = function () {
- for (var i = 0, l = arguments.length; i < l; i++) {
- push(this, arguments[i])
- }
- return this.length
- }
- Yallist.prototype.unshift = function () {
- for (var i = 0, l = arguments.length; i < l; i++) {
- unshift(this, arguments[i])
- }
- return this.length
- }
- Yallist.prototype.pop = function () {
- if (!this.tail) {
- return undefined
- }
- var res = this.tail.value
- this.tail = this.tail.prev
- if (this.tail) {
- this.tail.next = null
- } else {
- this.head = null
- }
- this.length--
- return res
- }
- Yallist.prototype.shift = function () {
- if (!this.head) {
- return undefined
- }
- var res = this.head.value
- this.head = this.head.next
- if (this.head) {
- this.head.prev = null
- } else {
- this.tail = null
- }
- this.length--
- return res
- }
- Yallist.prototype.forEach = function (fn, thisp) {
- thisp = thisp || this
- for (var walker = this.head, i = 0; walker !== null; i++) {
- fn.call(thisp, walker.value, i, this)
- walker = walker.next
- }
- }
- Yallist.prototype.forEachReverse = function (fn, thisp) {
- thisp = thisp || this
- for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {
- fn.call(thisp, walker.value, i, this)
- walker = walker.prev
- }
- }
- Yallist.prototype.get = function (n) {
- for (var i = 0, walker = this.head; walker !== null && i < n; i++) {
- // abort out of the list early if we hit a cycle
- walker = walker.next
- }
- if (i === n && walker !== null) {
- return walker.value
- }
- }
- Yallist.prototype.getReverse = function (n) {
- for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {
- // abort out of the list early if we hit a cycle
- walker = walker.prev
- }
- if (i === n && walker !== null) {
- return walker.value
- }
- }
- Yallist.prototype.map = function (fn, thisp) {
- thisp = thisp || this
- var res = new Yallist()
- for (var walker = this.head; walker !== null;) {
- res.push(fn.call(thisp, walker.value, this))
- walker = walker.next
- }
- return res
- }
- Yallist.prototype.mapReverse = function (fn, thisp) {
- thisp = thisp || this
- var res = new Yallist()
- for (var walker = this.tail; walker !== null;) {
- res.push(fn.call(thisp, walker.value, this))
- walker = walker.prev
- }
- return res
- }
- Yallist.prototype.reduce = function (fn, initial) {
- var acc
- var walker = this.head
- if (arguments.length > 1) {
- acc = initial
- } else if (this.head) {
- walker = this.head.next
- acc = this.head.value
- } else {
- throw new TypeError('Reduce of empty list with no initial value')
- }
- for (var i = 0; walker !== null; i++) {
- acc = fn(acc, walker.value, i)
- walker = walker.next
- }
- return acc
- }
- Yallist.prototype.reduceReverse = function (fn, initial) {
- var acc
- var walker = this.tail
- if (arguments.length > 1) {
- acc = initial
- } else if (this.tail) {
- walker = this.tail.prev
- acc = this.tail.value
- } else {
- throw new TypeError('Reduce of empty list with no initial value')
- }
- for (var i = this.length - 1; walker !== null; i--) {
- acc = fn(acc, walker.value, i)
- walker = walker.prev
- }
- return acc
- }
- Yallist.prototype.toArray = function () {
- var arr = new Array(this.length)
- for (var i = 0, walker = this.head; walker !== null; i++) {
- arr[i] = walker.value
- walker = walker.next
- }
- return arr
- }
- Yallist.prototype.toArrayReverse = function () {
- var arr = new Array(this.length)
- for (var i = 0, walker = this.tail; walker !== null; i++) {
- arr[i] = walker.value
- walker = walker.prev
- }
- return arr
- }
- Yallist.prototype.slice = function (from, to) {
- to = to || this.length
- if (to < 0) {
- to += this.length
- }
- from = from || 0
- if (from < 0) {
- from += this.length
- }
- var ret = new Yallist()
- if (to < from || to < 0) {
- return ret
- }
- if (from < 0) {
- from = 0
- }
- if (to > this.length) {
- to = this.length
- }
- for (var i = 0, walker = this.head; walker !== null && i < from; i++) {
- walker = walker.next
- }
- for (; walker !== null && i < to; i++, walker = walker.next) {
- ret.push(walker.value)
- }
- return ret
- }
- Yallist.prototype.sliceReverse = function (from, to) {
- to = to || this.length
- if (to < 0) {
- to += this.length
- }
- from = from || 0
- if (from < 0) {
- from += this.length
- }
- var ret = new Yallist()
- if (to < from || to < 0) {
- return ret
- }
- if (from < 0) {
- from = 0
- }
- if (to > this.length) {
- to = this.length
- }
- for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {
- walker = walker.prev
- }
- for (; walker !== null && i > from; i--, walker = walker.prev) {
- ret.push(walker.value)
- }
- return ret
- }
- Yallist.prototype.splice = function (start, deleteCount, ...nodes) {
- if (start > this.length) {
- start = this.length - 1
- }
- if (start < 0) {
- start = this.length + start;
- }
- for (var i = 0, walker = this.head; walker !== null && i < start; i++) {
- walker = walker.next
- }
- var ret = []
- for (var i = 0; walker && i < deleteCount; i++) {
- ret.push(walker.value)
- walker = this.removeNode(walker)
- }
- if (walker === null) {
- walker = this.tail
- }
- if (walker !== this.head && walker !== this.tail) {
- walker = walker.prev
- }
- for (var i = 0; i < nodes.length; i++) {
- walker = insert(this, walker, nodes[i])
- }
- return ret;
- }
- Yallist.prototype.reverse = function () {
- var head = this.head
- var tail = this.tail
- for (var walker = head; walker !== null; walker = walker.prev) {
- var p = walker.prev
- walker.prev = walker.next
- walker.next = p
- }
- this.head = tail
- this.tail = head
- return this
- }
- function insert (self, node, value) {
- var inserted = node === self.head ?
- new Node(value, null, node, self) :
- new Node(value, node, node.next, self)
- if (inserted.next === null) {
- self.tail = inserted
- }
- if (inserted.prev === null) {
- self.head = inserted
- }
- self.length++
- return inserted
- }
- function push (self, item) {
- self.tail = new Node(item, self.tail, null, self)
- if (!self.head) {
- self.head = self.tail
- }
- self.length++
- }
- function unshift (self, item) {
- self.head = new Node(item, null, self.head, self)
- if (!self.tail) {
- self.tail = self.head
- }
- self.length++
- }
- function Node (value, prev, next, list) {
- if (!(this instanceof Node)) {
- return new Node(value, prev, next, list)
- }
- this.list = list
- this.value = value
- if (prev) {
- prev.next = this
- this.prev = prev
- } else {
- this.prev = null
- }
- if (next) {
- next.prev = this
- this.next = next
- } else {
- this.next = null
- }
- }
- try {
- // add if support for Symbol.iterator is present
- __webpack_require__(76816)(Yallist)
- } catch (er) {}
- /***/ }),
- /***/ 7320:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- module.exports = resolvePkg;
- module.exports.sync = sync;
- var fs = __webpack_require__(91729);
- var path = __webpack_require__(85622);
- var debug = __webpack_require__(15158)('snyk:resolve');
- function resolvePkg(name, basedir) {
- if (!basedir) {
- basedir = process.cwd();
- }
- var filename = path.resolve(basedir, 'node_modules', name, 'package.json');
- debug('%s: %s', name, filename);
- return fs.stat(filename).then(function (stat) {
- if (stat.isFile()) {
- return path.dirname(filename);
- }
- }).catch(function (error) {
- debug('%s: not found on %s (root? %s)', name, basedir, isRoot(basedir));
- if (isRoot(basedir)) {
- debug('at root');
- error = new Error('package not found ' + name);
- error.code = 'NO_PACKAGE_FOUND';
- throw error;
- }
- }).then(function (dir) {
- if (dir) {
- debug('%s: FOUND AT %s', name, dir);
- return dir;
- }
- debug('%s: cycling down', name);
- return resolvePkg(name, path.resolve(basedir, '..'));
- });
- }
- function sync(name, basedir) {
- if (!basedir) {
- basedir = process.cwd();
- }
- var filename = path.resolve(basedir, 'node_modules', name, 'package.json');
- debug('%s: %s', name, filename);
- var isFile = function (file) {
- var stat;
- try {
- stat = fs.statSync(file);
- } catch (error) {
- if (error && error.code === 'ENOENT') {
- return false;
- }
- }
- return stat.isFile() || stat.isFIFO();
- };
- if (isFile(filename)) {
- debug('%s: FOUND AT %s', name, filename);
- return path.dirname(filename);
- }
- if (isRoot(basedir)) {
- debug('%s: not found on %s (now at root)', name, filename);
- var error = new Error('package not found ' + name);
- error.code = 'NO_PACKAGE_FOUND';
- throw error;
- }
- debug('%s: cycling down', name);
- return sync(name, path.resolve(basedir, '..'));
- }
- function isRoot(dir) {
- var parsed = parse(dir);
- return parsed.root === parsed.dir && !parsed.base;
- }
- // FIXME determine whether this would work properly on windows in 0.10
- function parse(dir) {
- /* istanbul ignore else */
- // jscs:disable requireEarlyReturn
- if (path.parse) {
- return path.parse(dir);
- } else {
- var split = dir.split(path.sep);
- var root = split[0] + path.sep;
- return {
- base: split[1],
- root: root,
- dir: dir,
- };
- }
- // jscs:enable requireEarlyReturn
- }
- /***/ }),
- /***/ 14402:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- module.exports = tryRequire;
- const fsModule = __webpack_require__(35747);
- const util = __webpack_require__(31669);
- const path = __webpack_require__(85622);
- const debug = __webpack_require__(15158)('snyk:resolve:try-require');
- const cloneDeep = __webpack_require__(83465);
- const LRU = __webpack_require__(39593);
- const options = { max: 100, maxAge: 1000 * 60 * 60 };
- const cache = new LRU(options);
- const fs = {
- readFile: util.promisify(fsModule.readFile),
- stat: util.promisify(fsModule.stat),
- };
- module.exports.cache = cache; // allows for a reset
- function tryRequire(filename) {
- const cached = cache.get(filename);
- if (cached) {
- const res = cloneDeep(cached);
- /* istanbul ignore else */
- if (process.env.TAP) {
- res.__cached = true;
- }
- return Promise.resolve(res);
- }
- return fs
- .readFile(filename, 'utf8')
- .then(function (pkgStr) {
- let leadingBOM = '';
- if (pkgStr && pkgStr[0] === '\ufeff') {
- // String starts with UTF BOM. Remove it so that JSON.parse doesn't
- // stumble, but remember it for later use.
- pkgStr = pkgStr.slice(1);
- leadingBOM = '\ufeff';
- }
- const pkg = JSON.parse(pkgStr);
- pkg.leading = leadingBOM + pkgStr.match(/^(\s*){/)[1];
- pkg.trailing = pkgStr.match(/}(\s*)$/)[1];
- return pkg;
- })
- .catch(function (e) {
- debug('tryRequire silently failing on %s', e.message);
- return null;
- })
- .then(function (pkg) {
- if (!pkg) {
- return pkg;
- }
- // fixes potential issues later on
- if (!pkg.devDependencies) {
- pkg.devDependencies = {};
- }
- if (!pkg.dependencies) {
- pkg.dependencies = {};
- }
- if (!pkg.name) {
- pkg.name = path.basename(path.dirname(filename));
- }
- pkg.__filename = filename;
- // test for npm-shrinkwrap and find a .snyk policy file whilst we're at it
- const dir = path.dirname(filename);
- const promises = [
- fs.stat(path.resolve(dir, '.snyk')).catch(pass),
- fs.stat(path.resolve(dir, 'npm-shrinkwrap.json')).catch(pass),
- ];
- return Promise.all(promises).then(function (res) {
- if (!pkg.snyk) {
- pkg.snyk = res[0].isFile();
- }
- if (pkg.snyk) {
- pkg.snyk = dir;
- }
- if (res[1].isFile()) {
- pkg.shrinkwrap = true;
- }
- return pkg;
- });
- })
- .then(function (pkg) {
- cache.set(filename, pkg);
- return cloneDeep(pkg);
- });
- }
- const pass = function () {
- return {
- isFile: function () {
- return false;
- },
- };
- };
- /***/ }),
- /***/ 49602:
- /***/ ((module) => {
- "use strict";
- module.exports = function (Yallist) {
- Yallist.prototype[Symbol.iterator] = function* () {
- for (let walker = this.head; walker; walker = walker.next) {
- yield walker.value
- }
- }
- }
- /***/ }),
- /***/ 34411:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- module.exports = Yallist
- Yallist.Node = Node
- Yallist.create = Yallist
- function Yallist (list) {
- var self = this
- if (!(self instanceof Yallist)) {
- self = new Yallist()
- }
- self.tail = null
- self.head = null
- self.length = 0
- if (list && typeof list.forEach === 'function') {
- list.forEach(function (item) {
- self.push(item)
- })
- } else if (arguments.length > 0) {
- for (var i = 0, l = arguments.length; i < l; i++) {
- self.push(arguments[i])
- }
- }
- return self
- }
- Yallist.prototype.removeNode = function (node) {
- if (node.list !== this) {
- throw new Error('removing node which does not belong to this list')
- }
- var next = node.next
- var prev = node.prev
- if (next) {
- next.prev = prev
- }
- if (prev) {
- prev.next = next
- }
- if (node === this.head) {
- this.head = next
- }
- if (node === this.tail) {
- this.tail = prev
- }
- node.list.length--
- node.next = null
- node.prev = null
- node.list = null
- return next
- }
- Yallist.prototype.unshiftNode = function (node) {
- if (node === this.head) {
- return
- }
- if (node.list) {
- node.list.removeNode(node)
- }
- var head = this.head
- node.list = this
- node.next = head
- if (head) {
- head.prev = node
- }
- this.head = node
- if (!this.tail) {
- this.tail = node
- }
- this.length++
- }
- Yallist.prototype.pushNode = function (node) {
- if (node === this.tail) {
- return
- }
- if (node.list) {
- node.list.removeNode(node)
- }
- var tail = this.tail
- node.list = this
- node.prev = tail
- if (tail) {
- tail.next = node
- }
- this.tail = node
- if (!this.head) {
- this.head = node
- }
- this.length++
- }
- Yallist.prototype.push = function () {
- for (var i = 0, l = arguments.length; i < l; i++) {
- push(this, arguments[i])
- }
- return this.length
- }
- Yallist.prototype.unshift = function () {
- for (var i = 0, l = arguments.length; i < l; i++) {
- unshift(this, arguments[i])
- }
- return this.length
- }
- Yallist.prototype.pop = function () {
- if (!this.tail) {
- return undefined
- }
- var res = this.tail.value
- this.tail = this.tail.prev
- if (this.tail) {
- this.tail.next = null
- } else {
- this.head = null
- }
- this.length--
- return res
- }
- Yallist.prototype.shift = function () {
- if (!this.head) {
- return undefined
- }
- var res = this.head.value
- this.head = this.head.next
- if (this.head) {
- this.head.prev = null
- } else {
- this.tail = null
- }
- this.length--
- return res
- }
- Yallist.prototype.forEach = function (fn, thisp) {
- thisp = thisp || this
- for (var walker = this.head, i = 0; walker !== null; i++) {
- fn.call(thisp, walker.value, i, this)
- walker = walker.next
- }
- }
- Yallist.prototype.forEachReverse = function (fn, thisp) {
- thisp = thisp || this
- for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {
- fn.call(thisp, walker.value, i, this)
- walker = walker.prev
- }
- }
- Yallist.prototype.get = function (n) {
- for (var i = 0, walker = this.head; walker !== null && i < n; i++) {
- // abort out of the list early if we hit a cycle
- walker = walker.next
- }
- if (i === n && walker !== null) {
- return walker.value
- }
- }
- Yallist.prototype.getReverse = function (n) {
- for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {
- // abort out of the list early if we hit a cycle
- walker = walker.prev
- }
- if (i === n && walker !== null) {
- return walker.value
- }
- }
- Yallist.prototype.map = function (fn, thisp) {
- thisp = thisp || this
- var res = new Yallist()
- for (var walker = this.head; walker !== null;) {
- res.push(fn.call(thisp, walker.value, this))
- walker = walker.next
- }
- return res
- }
- Yallist.prototype.mapReverse = function (fn, thisp) {
- thisp = thisp || this
- var res = new Yallist()
- for (var walker = this.tail; walker !== null;) {
- res.push(fn.call(thisp, walker.value, this))
- walker = walker.prev
- }
- return res
- }
- Yallist.prototype.reduce = function (fn, initial) {
- var acc
- var walker = this.head
- if (arguments.length > 1) {
- acc = initial
- } else if (this.head) {
- walker = this.head.next
- acc = this.head.value
- } else {
- throw new TypeError('Reduce of empty list with no initial value')
- }
- for (var i = 0; walker !== null; i++) {
- acc = fn(acc, walker.value, i)
- walker = walker.next
- }
- return acc
- }
- Yallist.prototype.reduceReverse = function (fn, initial) {
- var acc
- var walker = this.tail
- if (arguments.length > 1) {
- acc = initial
- } else if (this.tail) {
- walker = this.tail.prev
- acc = this.tail.value
- } else {
- throw new TypeError('Reduce of empty list with no initial value')
- }
- for (var i = this.length - 1; walker !== null; i--) {
- acc = fn(acc, walker.value, i)
- walker = walker.prev
- }
- return acc
- }
- Yallist.prototype.toArray = function () {
- var arr = new Array(this.length)
- for (var i = 0, walker = this.head; walker !== null; i++) {
- arr[i] = walker.value
- walker = walker.next
- }
- return arr
- }
- Yallist.prototype.toArrayReverse = function () {
- var arr = new Array(this.length)
- for (var i = 0, walker = this.tail; walker !== null; i++) {
- arr[i] = walker.value
- walker = walker.prev
- }
- return arr
- }
- Yallist.prototype.slice = function (from, to) {
- to = to || this.length
- if (to < 0) {
- to += this.length
- }
- from = from || 0
- if (from < 0) {
- from += this.length
- }
- var ret = new Yallist()
- if (to < from || to < 0) {
- return ret
- }
- if (from < 0) {
- from = 0
- }
- if (to > this.length) {
- to = this.length
- }
- for (var i = 0, walker = this.head; walker !== null && i < from; i++) {
- walker = walker.next
- }
- for (; walker !== null && i < to; i++, walker = walker.next) {
- ret.push(walker.value)
- }
- return ret
- }
- Yallist.prototype.sliceReverse = function (from, to) {
- to = to || this.length
- if (to < 0) {
- to += this.length
- }
- from = from || 0
- if (from < 0) {
- from += this.length
- }
- var ret = new Yallist()
- if (to < from || to < 0) {
- return ret
- }
- if (from < 0) {
- from = 0
- }
- if (to > this.length) {
- to = this.length
- }
- for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {
- walker = walker.prev
- }
- for (; walker !== null && i > from; i--, walker = walker.prev) {
- ret.push(walker.value)
- }
- return ret
- }
- Yallist.prototype.splice = function (start, deleteCount /*, ...nodes */) {
- if (start > this.length) {
- start = this.length - 1
- }
- if (start < 0) {
- start = this.length + start;
- }
- for (var i = 0, walker = this.head; walker !== null && i < start; i++) {
- walker = walker.next
- }
- var ret = []
- for (var i = 0; walker && i < deleteCount; i++) {
- ret.push(walker.value)
- walker = this.removeNode(walker)
- }
- if (walker === null) {
- walker = this.tail
- }
- if (walker !== this.head && walker !== this.tail) {
- walker = walker.prev
- }
- for (var i = 2; i < arguments.length; i++) {
- walker = insert(this, walker, arguments[i])
- }
- return ret;
- }
- Yallist.prototype.reverse = function () {
- var head = this.head
- var tail = this.tail
- for (var walker = head; walker !== null; walker = walker.prev) {
- var p = walker.prev
- walker.prev = walker.next
- walker.next = p
- }
- this.head = tail
- this.tail = head
- return this
- }
- function insert (self, node, value) {
- var inserted = node === self.head ?
- new Node(value, null, node, self) :
- new Node(value, node, node.next, self)
- if (inserted.next === null) {
- self.tail = inserted
- }
- if (inserted.prev === null) {
- self.head = inserted
- }
- self.length++
- return inserted
- }
- function push (self, item) {
- self.tail = new Node(item, self.tail, null, self)
- if (!self.head) {
- self.head = self.tail
- }
- self.length++
- }
- function unshift (self, item) {
- self.head = new Node(item, null, self.head, self)
- if (!self.tail) {
- self.tail = self.head
- }
- self.length++
- }
- function Node (value, prev, next, list) {
- if (!(this instanceof Node)) {
- return new Node(value, prev, next, list)
- }
- this.list = list
- this.value = value
- if (prev) {
- prev.next = this
- this.prev = prev
- } else {
- this.prev = null
- }
- if (next) {
- next.prev = this
- this.next = next
- } else {
- this.next = null
- }
- }
- try {
- // add if support for Symbol.iterator is present
- __webpack_require__(49602)(Yallist)
- } catch (er) {}
- /***/ }),
- /***/ 4195:
- /***/ ((module) => {
- "use strict";
- module.exports = JSON.parse('{"name":"snyk-policy","description":"Snyk\'s policy parser and matching logic","main":"lib/index.js","scripts":{"lint":"run-p --max-parallel=${JOBS:-6} --aggregate-output lint:*","lint:eslint":"eslint -c .eslintrc lib","lint:commits":"commitlint --from=HEAD~20","format":"prettier --write \'{lib,test}/**/*.?s\'","check-tests":"! grep \'test.only\' test/**/*.test.js -n","env":"node -e \'console.log(process.env, process.versions)\'","tap":"tap test/**/*.test.js -R spec --timeout=60","test":"npm run check-tests && npm run tap"},"keywords":["snyk"],"author":"Remy Sharp","license":"Apache-2.0","devDependencies":{"@commitlint/cli":"^12.1.4","eslint":"^5.0.0","eslint-config-prettier":"^5.0.0","npm-run-all":"^4.1.5","prettier":"^2.0.5","proxyquire":"^2.1.0","sinon":"^4.0.0","tap":"^12.0.1","tap-only":"0.0.5"},"dependencies":{"debug":"^4.1.1","email-validator":"^2.0.4","js-yaml":"^3.13.1","lodash.clonedeep":"^4.5.0","promise-fs":"^2.1.1","semver":"^7.3.4","snyk-module":"^3.0.0","snyk-resolve":"^1.1.0","snyk-try-require":"^2.0.2"},"repository":{"type":"git","url":"https://github.com/snyk/policy.git"},"version":"1.25.0"}');
- /***/ })
- };
- ;
- //# sourceMappingURL=535.index.js.map
|