| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461124621246312464124651246612467124681246912470124711247212473124741247512476124771247812479124801248112482124831248412485124861248712488124891249012491124921249312494124951249612497124981249912500125011250212503125041250512506125071250812509125101251112512125131251412515125161251712518125191252012521125221252312524125251252612527125281252912530125311253212533125341253512536125371253812539125401254112542125431254412545125461254712548125491255012551125521255312554125551255612557125581255912560125611256212563125641256512566125671256812569125701257112572125731257412575125761257712578125791258012581125821258312584125851258612587125881258912590125911259212593125941259512596125971259812599126001260112602126031260412605126061260712608126091261012611126121261312614126151261612617126181261912620126211262212623126241262512626126271262812629126301263112632126331263412635126361263712638126391264012641126421264312644126451264612647126481264912650126511265212653126541265512656126571265812659126601266112662126631266412665126661266712668126691267012671126721267312674126751267612677126781267912680126811268212683126841268512686126871268812689126901269112692126931269412695126961269712698126991270012701127021270312704127051270612707127081270912710127111271212713127141271512716127171271812719127201272112722127231272412725127261272712728127291273012731127321273312734127351273612737127381273912740127411274212743127441274512746127471274812749127501275112752127531275412755127561275712758127591276012761127621276312764127651276612767127681276912770127711277212773127741277512776127771277812779127801278112782127831278412785127861278712788127891279012791127921279312794127951279612797127981279912800128011280212803128041280512806128071280812809128101281112812128131281412815128161281712818128191282012821128221282312824128251282612827128281282912830128311283212833128341283512836128371283812839128401284112842128431284412845128461284712848128491285012851128521285312854128551285612857128581285912860128611286212863128641286512866128671286812869128701287112872128731287412875128761287712878128791288012881128821288312884128851288612887128881288912890128911289212893128941289512896128971289812899129001290112902129031290412905129061290712908129091291012911129121291312914129151291612917129181291912920129211292212923129241292512926129271292812929129301293112932129331293412935129361293712938129391294012941129421294312944129451294612947129481294912950129511295212953129541295512956129571295812959129601296112962129631296412965129661296712968129691297012971129721297312974129751297612977129781297912980129811298212983129841298512986129871298812989129901299112992129931299412995129961299712998129991300013001130021300313004130051300613007130081300913010130111301213013130141301513016130171301813019130201302113022130231302413025130261302713028130291303013031130321303313034130351303613037130381303913040130411304213043130441304513046130471304813049130501305113052130531305413055130561305713058130591306013061130621306313064130651306613067130681306913070130711307213073130741307513076130771307813079130801308113082130831308413085130861308713088130891309013091130921309313094130951309613097130981309913100131011310213103131041310513106131071310813109131101311113112131131311413115131161311713118131191312013121131221312313124131251312613127131281312913130131311313213133131341313513136131371313813139131401314113142131431314413145131461314713148131491315013151131521315313154131551315613157131581315913160131611316213163131641316513166131671316813169131701317113172131731317413175131761317713178131791318013181131821318313184131851318613187131881318913190131911319213193131941319513196131971319813199132001320113202132031320413205132061320713208132091321013211132121321313214132151321613217132181321913220132211322213223132241322513226132271322813229132301323113232132331323413235132361323713238132391324013241132421324313244132451324613247132481324913250132511325213253132541325513256132571325813259132601326113262132631326413265132661326713268132691327013271132721327313274132751327613277132781327913280132811328213283132841328513286132871328813289132901329113292132931329413295132961329713298132991330013301133021330313304133051330613307133081330913310133111331213313133141331513316133171331813319133201332113322133231332413325133261332713328133291333013331133321333313334133351333613337133381333913340133411334213343133441334513346133471334813349133501335113352133531335413355133561335713358133591336013361133621336313364133651336613367133681336913370133711337213373133741337513376133771337813379133801338113382133831338413385133861338713388133891339013391133921339313394133951339613397133981339913400134011340213403134041340513406134071340813409134101341113412134131341413415134161341713418134191342013421134221342313424134251342613427134281342913430134311343213433134341343513436134371343813439134401344113442134431344413445134461344713448134491345013451134521345313454134551345613457134581345913460134611346213463134641346513466134671346813469134701347113472134731347413475134761347713478134791348013481134821348313484134851348613487134881348913490134911349213493134941349513496134971349813499135001350113502135031350413505135061350713508135091351013511135121351313514135151351613517135181351913520135211352213523135241352513526135271352813529135301353113532135331353413535135361353713538135391354013541135421354313544135451354613547135481354913550135511355213553135541355513556135571355813559135601356113562135631356413565135661356713568135691357013571135721357313574135751357613577135781357913580135811358213583135841358513586135871358813589135901359113592135931359413595135961359713598135991360013601136021360313604136051360613607136081360913610136111361213613136141361513616136171361813619136201362113622136231362413625136261362713628136291363013631136321363313634136351363613637136381363913640136411364213643136441364513646136471364813649136501365113652136531365413655136561365713658136591366013661136621366313664136651366613667136681366913670136711367213673136741367513676136771367813679136801368113682136831368413685136861368713688136891369013691136921369313694136951369613697136981369913700137011370213703137041370513706137071370813709137101371113712137131371413715137161371713718137191372013721137221372313724137251372613727137281372913730137311373213733137341373513736137371373813739137401374113742137431374413745137461374713748137491375013751137521375313754137551375613757137581375913760137611376213763137641376513766137671376813769137701377113772137731377413775137761377713778137791378013781137821378313784137851378613787137881378913790137911379213793137941379513796137971379813799138001380113802138031380413805138061380713808138091381013811138121381313814138151381613817138181381913820138211382213823138241382513826138271382813829138301383113832138331383413835138361383713838138391384013841138421384313844138451384613847138481384913850138511385213853138541385513856138571385813859138601386113862138631386413865138661386713868138691387013871138721387313874138751387613877138781387913880138811388213883138841388513886138871388813889138901389113892138931389413895138961389713898138991390013901139021390313904139051390613907139081390913910139111391213913139141391513916139171391813919139201392113922139231392413925139261392713928139291393013931139321393313934139351393613937139381393913940139411394213943139441394513946139471394813949139501395113952139531395413955139561395713958139591396013961139621396313964139651396613967139681396913970139711397213973139741397513976139771397813979139801398113982139831398413985139861398713988139891399013991139921399313994139951399613997139981399914000140011400214003140041400514006140071400814009140101401114012140131401414015140161401714018140191402014021140221402314024140251402614027140281402914030140311403214033140341403514036140371403814039140401404114042140431404414045140461404714048140491405014051140521405314054140551405614057140581405914060140611406214063140641406514066140671406814069140701407114072140731407414075140761407714078140791408014081140821408314084140851408614087140881408914090140911409214093140941409514096140971409814099141001410114102141031410414105141061410714108141091411014111141121411314114141151411614117141181411914120141211412214123141241412514126141271412814129141301413114132141331413414135141361413714138141391414014141141421414314144141451414614147141481414914150141511415214153141541415514156141571415814159141601416114162141631416414165141661416714168141691417014171141721417314174141751417614177141781417914180141811418214183141841418514186141871418814189141901419114192141931419414195141961419714198141991420014201142021420314204142051420614207142081420914210142111421214213142141421514216142171421814219142201422114222142231422414225142261422714228142291423014231142321423314234142351423614237142381423914240142411424214243142441424514246142471424814249142501425114252142531425414255142561425714258142591426014261142621426314264142651426614267142681426914270142711427214273142741427514276142771427814279142801428114282142831428414285142861428714288142891429014291142921429314294142951429614297142981429914300143011430214303143041430514306143071430814309143101431114312143131431414315143161431714318143191432014321143221432314324143251432614327143281432914330143311433214333143341433514336143371433814339143401434114342143431434414345143461434714348143491435014351143521435314354143551435614357143581435914360143611436214363143641436514366143671436814369143701437114372143731437414375143761437714378143791438014381143821438314384143851438614387143881438914390143911439214393143941439514396143971439814399144001440114402144031440414405144061440714408144091441014411144121441314414144151441614417144181441914420144211442214423144241442514426144271442814429144301443114432144331443414435144361443714438144391444014441144421444314444144451444614447144481444914450144511445214453144541445514456144571445814459144601446114462144631446414465144661446714468144691447014471144721447314474144751447614477144781447914480144811448214483144841448514486144871448814489144901449114492144931449414495144961449714498144991450014501145021450314504145051450614507145081450914510145111451214513145141451514516145171451814519145201452114522145231452414525145261452714528145291453014531145321453314534145351453614537145381453914540145411454214543145441454514546145471454814549145501455114552145531455414555145561455714558145591456014561145621456314564145651456614567145681456914570145711457214573145741457514576145771457814579145801458114582145831458414585145861458714588145891459014591145921459314594145951459614597145981459914600146011460214603146041460514606146071460814609146101461114612146131461414615146161461714618146191462014621146221462314624146251462614627146281462914630146311463214633146341463514636146371463814639146401464114642146431464414645146461464714648146491465014651146521465314654146551465614657146581465914660146611466214663146641466514666146671466814669146701467114672146731467414675146761467714678146791468014681146821468314684146851468614687146881468914690146911469214693146941469514696146971469814699147001470114702147031470414705147061470714708147091471014711147121471314714147151471614717147181471914720147211472214723147241472514726147271472814729147301473114732147331473414735147361473714738147391474014741147421474314744147451474614747147481474914750147511475214753147541475514756147571475814759147601476114762147631476414765147661476714768147691477014771147721477314774147751477614777147781477914780147811478214783147841478514786147871478814789147901479114792147931479414795147961479714798147991480014801148021480314804148051480614807148081480914810148111481214813148141481514816148171481814819148201482114822148231482414825148261482714828148291483014831148321483314834148351483614837148381483914840148411484214843148441484514846148471484814849148501485114852148531485414855148561485714858148591486014861148621486314864148651486614867148681486914870148711487214873148741487514876148771487814879148801488114882148831488414885148861488714888148891489014891148921489314894148951489614897148981489914900149011490214903149041490514906149071490814909149101491114912149131491414915149161491714918149191492014921149221492314924149251492614927149281492914930149311493214933149341493514936149371493814939149401494114942149431494414945149461494714948149491495014951149521495314954149551495614957149581495914960149611496214963149641496514966149671496814969149701497114972149731497414975149761497714978149791498014981149821498314984149851498614987149881498914990149911499214993149941499514996149971499814999150001500115002150031500415005150061500715008150091501015011150121501315014150151501615017150181501915020150211502215023150241502515026150271502815029150301503115032150331503415035150361503715038150391504015041150421504315044150451504615047150481504915050150511505215053150541505515056150571505815059150601506115062150631506415065150661506715068150691507015071150721507315074150751507615077150781507915080150811508215083150841508515086150871508815089150901509115092150931509415095150961509715098150991510015101151021510315104151051510615107151081510915110151111511215113151141511515116151171511815119151201512115122151231512415125151261512715128151291513015131151321513315134151351513615137151381513915140151411514215143151441514515146151471514815149151501515115152151531515415155151561515715158151591516015161151621516315164151651516615167151681516915170151711517215173151741517515176151771517815179151801518115182151831518415185151861518715188151891519015191151921519315194151951519615197151981519915200152011520215203152041520515206152071520815209152101521115212152131521415215152161521715218152191522015221152221522315224152251522615227152281522915230152311523215233152341523515236152371523815239152401524115242152431524415245152461524715248152491525015251152521525315254152551525615257152581525915260152611526215263152641526515266152671526815269152701527115272152731527415275152761527715278152791528015281152821528315284152851528615287152881528915290152911529215293152941529515296152971529815299153001530115302153031530415305153061530715308153091531015311153121531315314153151531615317153181531915320153211532215323153241532515326153271532815329153301533115332153331533415335153361533715338153391534015341153421534315344153451534615347153481534915350153511535215353153541535515356153571535815359153601536115362153631536415365153661536715368153691537015371153721537315374153751537615377153781537915380153811538215383153841538515386153871538815389153901539115392153931539415395153961539715398153991540015401154021540315404154051540615407154081540915410154111541215413154141541515416154171541815419154201542115422154231542415425154261542715428154291543015431154321543315434154351543615437154381543915440154411544215443154441544515446154471544815449154501545115452154531545415455154561545715458154591546015461154621546315464154651546615467154681546915470154711547215473154741547515476154771547815479154801548115482154831548415485154861548715488154891549015491154921549315494154951549615497154981549915500155011550215503155041550515506155071550815509155101551115512155131551415515155161551715518155191552015521155221552315524155251552615527155281552915530155311553215533155341553515536155371553815539155401554115542155431554415545155461554715548155491555015551155521555315554155551555615557155581555915560155611556215563155641556515566155671556815569155701557115572155731557415575155761557715578155791558015581155821558315584155851558615587155881558915590155911559215593155941559515596155971559815599156001560115602156031560415605156061560715608156091561015611156121561315614156151561615617156181561915620156211562215623156241562515626156271562815629156301563115632156331563415635156361563715638156391564015641156421564315644156451564615647156481564915650156511565215653156541565515656156571565815659156601566115662156631566415665156661566715668156691567015671156721567315674156751567615677156781567915680156811568215683156841568515686156871568815689156901569115692156931569415695156961569715698156991570015701157021570315704157051570615707157081570915710157111571215713157141571515716157171571815719157201572115722157231572415725157261572715728157291573015731157321573315734157351573615737157381573915740157411574215743157441574515746157471574815749157501575115752157531575415755157561575715758157591576015761157621576315764157651576615767157681576915770157711577215773157741577515776157771577815779157801578115782157831578415785157861578715788157891579015791157921579315794157951579615797157981579915800158011580215803158041580515806158071580815809158101581115812158131581415815158161581715818158191582015821158221582315824158251582615827158281582915830158311583215833158341583515836158371583815839158401584115842158431584415845158461584715848158491585015851158521585315854158551585615857158581585915860158611586215863158641586515866158671586815869158701587115872158731587415875158761587715878158791588015881158821588315884158851588615887158881588915890158911589215893158941589515896158971589815899159001590115902159031590415905159061590715908159091591015911159121591315914159151591615917159181591915920159211592215923159241592515926159271592815929159301593115932159331593415935159361593715938159391594015941159421594315944159451594615947159481594915950159511595215953159541595515956159571595815959159601596115962159631596415965159661596715968159691597015971159721597315974159751597615977159781597915980159811598215983159841598515986159871598815989159901599115992159931599415995159961599715998159991600016001160021600316004160051600616007160081600916010160111601216013160141601516016160171601816019160201602116022160231602416025160261602716028160291603016031160321603316034160351603616037160381603916040160411604216043160441604516046160471604816049160501605116052160531605416055160561605716058160591606016061160621606316064160651606616067160681606916070160711607216073160741607516076160771607816079160801608116082160831608416085160861608716088160891609016091160921609316094160951609616097160981609916100161011610216103161041610516106161071610816109161101611116112161131611416115161161611716118161191612016121161221612316124161251612616127161281612916130161311613216133161341613516136161371613816139161401614116142161431614416145161461614716148161491615016151161521615316154161551615616157161581615916160161611616216163161641616516166161671616816169161701617116172161731617416175161761617716178161791618016181161821618316184161851618616187161881618916190161911619216193161941619516196161971619816199162001620116202162031620416205162061620716208162091621016211162121621316214162151621616217162181621916220162211622216223162241622516226162271622816229162301623116232162331623416235162361623716238162391624016241162421624316244162451624616247162481624916250162511625216253162541625516256162571625816259162601626116262162631626416265162661626716268162691627016271162721627316274162751627616277162781627916280162811628216283162841628516286162871628816289162901629116292162931629416295162961629716298162991630016301163021630316304163051630616307163081630916310163111631216313163141631516316163171631816319163201632116322163231632416325163261632716328163291633016331163321633316334163351633616337163381633916340163411634216343163441634516346163471634816349163501635116352163531635416355163561635716358163591636016361163621636316364163651636616367163681636916370163711637216373163741637516376163771637816379163801638116382163831638416385163861638716388163891639016391163921639316394163951639616397163981639916400164011640216403164041640516406164071640816409164101641116412164131641416415164161641716418164191642016421164221642316424164251642616427164281642916430164311643216433164341643516436164371643816439164401644116442164431644416445164461644716448164491645016451164521645316454164551645616457164581645916460164611646216463164641646516466164671646816469164701647116472164731647416475164761647716478164791648016481164821648316484164851648616487164881648916490164911649216493164941649516496164971649816499165001650116502165031650416505165061650716508165091651016511165121651316514165151651616517165181651916520165211652216523165241652516526165271652816529165301653116532165331653416535165361653716538165391654016541165421654316544165451654616547165481654916550165511655216553165541655516556165571655816559165601656116562165631656416565165661656716568165691657016571165721657316574165751657616577165781657916580165811658216583165841658516586165871658816589165901659116592165931659416595165961659716598165991660016601166021660316604166051660616607166081660916610166111661216613166141661516616166171661816619166201662116622166231662416625166261662716628166291663016631166321663316634166351663616637166381663916640166411664216643166441664516646166471664816649166501665116652166531665416655166561665716658166591666016661166621666316664166651666616667166681666916670166711667216673166741667516676166771667816679166801668116682166831668416685166861668716688166891669016691166921669316694166951669616697166981669916700167011670216703167041670516706167071670816709167101671116712167131671416715167161671716718167191672016721167221672316724167251672616727167281672916730167311673216733167341673516736167371673816739167401674116742167431674416745167461674716748167491675016751167521675316754167551675616757167581675916760167611676216763167641676516766167671676816769167701677116772167731677416775167761677716778167791678016781167821678316784167851678616787167881678916790167911679216793167941679516796167971679816799168001680116802168031680416805168061680716808168091681016811168121681316814168151681616817168181681916820168211682216823168241682516826168271682816829168301683116832168331683416835168361683716838168391684016841168421684316844168451684616847168481684916850168511685216853168541685516856168571685816859168601686116862168631686416865168661686716868168691687016871168721687316874168751687616877168781687916880168811688216883168841688516886168871688816889168901689116892168931689416895168961689716898168991690016901169021690316904169051690616907169081690916910169111691216913169141691516916169171691816919169201692116922169231692416925169261692716928169291693016931169321693316934169351693616937169381693916940169411694216943169441694516946169471694816949169501695116952169531695416955169561695716958169591696016961169621696316964169651696616967169681696916970169711697216973169741697516976169771697816979169801698116982169831698416985169861698716988169891699016991169921699316994169951699616997169981699917000170011700217003170041700517006170071700817009170101701117012170131701417015170161701717018170191702017021170221702317024170251702617027170281702917030170311703217033170341703517036170371703817039170401704117042170431704417045170461704717048170491705017051170521705317054170551705617057170581705917060170611706217063170641706517066170671706817069170701707117072170731707417075170761707717078170791708017081170821708317084170851708617087170881708917090170911709217093170941709517096170971709817099171001710117102171031710417105171061710717108171091711017111171121711317114171151711617117171181711917120171211712217123171241712517126171271712817129171301713117132171331713417135171361713717138171391714017141171421714317144171451714617147171481714917150171511715217153171541715517156171571715817159171601716117162171631716417165171661716717168171691717017171171721717317174171751717617177171781717917180171811718217183171841718517186171871718817189171901719117192171931719417195171961719717198171991720017201172021720317204172051720617207172081720917210172111721217213172141721517216172171721817219172201722117222172231722417225172261722717228172291723017231172321723317234172351723617237172381723917240172411724217243172441724517246172471724817249172501725117252172531725417255172561725717258172591726017261172621726317264172651726617267172681726917270172711727217273172741727517276172771727817279172801728117282172831728417285172861728717288172891729017291172921729317294172951729617297172981729917300173011730217303173041730517306173071730817309173101731117312173131731417315173161731717318173191732017321173221732317324173251732617327173281732917330173311733217333173341733517336173371733817339173401734117342173431734417345173461734717348173491735017351173521735317354173551735617357173581735917360173611736217363173641736517366173671736817369173701737117372173731737417375173761737717378173791738017381173821738317384173851738617387173881738917390173911739217393173941739517396173971739817399174001740117402174031740417405174061740717408174091741017411174121741317414174151741617417174181741917420174211742217423174241742517426174271742817429174301743117432174331743417435174361743717438174391744017441174421744317444174451744617447174481744917450174511745217453174541745517456174571745817459174601746117462174631746417465174661746717468174691747017471174721747317474174751747617477174781747917480174811748217483174841748517486174871748817489174901749117492174931749417495174961749717498174991750017501175021750317504175051750617507175081750917510175111751217513175141751517516175171751817519175201752117522175231752417525175261752717528175291753017531175321753317534175351753617537175381753917540175411754217543175441754517546175471754817549175501755117552175531755417555175561755717558175591756017561175621756317564175651756617567175681756917570175711757217573175741757517576175771757817579175801758117582175831758417585175861758717588175891759017591175921759317594175951759617597175981759917600176011760217603176041760517606176071760817609176101761117612176131761417615176161761717618176191762017621176221762317624176251762617627176281762917630176311763217633176341763517636176371763817639176401764117642176431764417645176461764717648176491765017651176521765317654176551765617657176581765917660176611766217663176641766517666176671766817669176701767117672176731767417675176761767717678176791768017681176821768317684176851768617687176881768917690176911769217693176941769517696176971769817699177001770117702177031770417705177061770717708177091771017711177121771317714177151771617717177181771917720177211772217723177241772517726177271772817729177301773117732177331773417735177361773717738177391774017741177421774317744177451774617747177481774917750177511775217753177541775517756177571775817759177601776117762177631776417765177661776717768177691777017771177721777317774177751777617777177781777917780177811778217783177841778517786177871778817789177901779117792177931779417795177961779717798177991780017801178021780317804178051780617807178081780917810178111781217813178141781517816178171781817819178201782117822178231782417825178261782717828178291783017831178321783317834178351783617837178381783917840178411784217843178441784517846178471784817849178501785117852178531785417855178561785717858178591786017861178621786317864178651786617867178681786917870178711787217873178741787517876178771787817879178801788117882178831788417885178861788717888178891789017891178921789317894178951789617897178981789917900179011790217903179041790517906179071790817909179101791117912179131791417915179161791717918179191792017921179221792317924179251792617927179281792917930179311793217933179341793517936179371793817939179401794117942179431794417945179461794717948179491795017951179521795317954179551795617957179581795917960179611796217963179641796517966179671796817969179701797117972179731797417975179761797717978179791798017981179821798317984179851798617987179881798917990179911799217993179941799517996179971799817999180001800118002180031800418005180061800718008180091801018011180121801318014180151801618017180181801918020180211802218023180241802518026180271802818029180301803118032180331803418035180361803718038180391804018041180421804318044180451804618047180481804918050180511805218053180541805518056180571805818059180601806118062180631806418065180661806718068180691807018071180721807318074180751807618077180781807918080180811808218083180841808518086180871808818089180901809118092180931809418095180961809718098180991810018101181021810318104181051810618107181081810918110181111811218113181141811518116181171811818119181201812118122181231812418125181261812718128181291813018131181321813318134181351813618137181381813918140181411814218143181441814518146181471814818149181501815118152181531815418155181561815718158181591816018161181621816318164181651816618167181681816918170181711817218173181741817518176181771817818179181801818118182181831818418185181861818718188181891819018191181921819318194181951819618197181981819918200182011820218203182041820518206182071820818209182101821118212182131821418215182161821718218182191822018221182221822318224182251822618227182281822918230182311823218233182341823518236182371823818239182401824118242182431824418245182461824718248182491825018251182521825318254182551825618257182581825918260182611826218263182641826518266182671826818269182701827118272182731827418275182761827718278182791828018281182821828318284182851828618287182881828918290182911829218293182941829518296182971829818299183001830118302183031830418305183061830718308183091831018311183121831318314183151831618317183181831918320183211832218323183241832518326183271832818329183301833118332183331833418335183361833718338183391834018341183421834318344183451834618347183481834918350183511835218353183541835518356183571835818359183601836118362183631836418365183661836718368183691837018371183721837318374183751837618377183781837918380183811838218383183841838518386183871838818389183901839118392183931839418395183961839718398183991840018401184021840318404184051840618407184081840918410184111841218413184141841518416184171841818419184201842118422184231842418425184261842718428184291843018431184321843318434184351843618437184381843918440184411844218443184441844518446184471844818449184501845118452184531845418455184561845718458184591846018461184621846318464184651846618467184681846918470184711847218473184741847518476184771847818479184801848118482184831848418485184861848718488184891849018491184921849318494184951849618497184981849918500185011850218503185041850518506185071850818509185101851118512185131851418515185161851718518185191852018521185221852318524185251852618527185281852918530185311853218533185341853518536185371853818539185401854118542185431854418545185461854718548185491855018551185521855318554185551855618557185581855918560185611856218563185641856518566185671856818569185701857118572185731857418575185761857718578185791858018581185821858318584185851858618587185881858918590185911859218593185941859518596185971859818599186001860118602186031860418605186061860718608186091861018611186121861318614186151861618617186181861918620186211862218623186241862518626186271862818629186301863118632186331863418635186361863718638186391864018641186421864318644186451864618647186481864918650186511865218653186541865518656186571865818659186601866118662186631866418665186661866718668186691867018671186721867318674186751867618677186781867918680186811868218683186841868518686186871868818689186901869118692186931869418695186961869718698186991870018701187021870318704187051870618707187081870918710187111871218713187141871518716187171871818719187201872118722187231872418725187261872718728187291873018731187321873318734187351873618737187381873918740187411874218743187441874518746187471874818749187501875118752187531875418755187561875718758187591876018761187621876318764187651876618767187681876918770187711877218773187741877518776187771877818779187801878118782187831878418785187861878718788187891879018791187921879318794187951879618797187981879918800188011880218803188041880518806188071880818809188101881118812188131881418815188161881718818188191882018821188221882318824188251882618827188281882918830188311883218833188341883518836188371883818839188401884118842188431884418845188461884718848188491885018851188521885318854188551885618857188581885918860188611886218863188641886518866188671886818869188701887118872188731887418875188761887718878188791888018881188821888318884188851888618887188881888918890188911889218893188941889518896188971889818899189001890118902189031890418905189061890718908189091891018911189121891318914189151891618917189181891918920189211892218923189241892518926189271892818929189301893118932189331893418935189361893718938189391894018941189421894318944189451894618947189481894918950189511895218953189541895518956189571895818959189601896118962189631896418965189661896718968189691897018971189721897318974189751897618977189781897918980189811898218983189841898518986189871898818989189901899118992189931899418995189961899718998189991900019001190021900319004190051900619007190081900919010190111901219013190141901519016190171901819019190201902119022190231902419025190261902719028190291903019031190321903319034190351903619037190381903919040190411904219043190441904519046190471904819049190501905119052190531905419055190561905719058190591906019061190621906319064190651906619067190681906919070190711907219073190741907519076190771907819079190801908119082190831908419085190861908719088190891909019091190921909319094190951909619097190981909919100191011910219103191041910519106191071910819109191101911119112191131911419115191161911719118191191912019121191221912319124191251912619127191281912919130191311913219133191341913519136191371913819139191401914119142191431914419145191461914719148191491915019151191521915319154191551915619157191581915919160191611916219163191641916519166191671916819169191701917119172191731917419175191761917719178191791918019181191821918319184191851918619187191881918919190191911919219193191941919519196191971919819199192001920119202192031920419205192061920719208192091921019211192121921319214192151921619217192181921919220192211922219223192241922519226192271922819229192301923119232192331923419235192361923719238192391924019241192421924319244192451924619247192481924919250192511925219253192541925519256192571925819259192601926119262192631926419265192661926719268192691927019271192721927319274192751927619277192781927919280192811928219283192841928519286192871928819289192901929119292192931929419295192961929719298192991930019301193021930319304193051930619307193081930919310193111931219313193141931519316193171931819319193201932119322193231932419325193261932719328193291933019331193321933319334193351933619337193381933919340193411934219343193441934519346193471934819349193501935119352193531935419355193561935719358193591936019361193621936319364193651936619367193681936919370193711937219373193741937519376193771937819379193801938119382193831938419385193861938719388193891939019391193921939319394193951939619397193981939919400194011940219403194041940519406194071940819409194101941119412194131941419415194161941719418194191942019421194221942319424194251942619427194281942919430194311943219433194341943519436194371943819439194401944119442194431944419445194461944719448194491945019451194521945319454194551945619457194581945919460194611946219463194641946519466194671946819469194701947119472194731947419475194761947719478194791948019481194821948319484194851948619487194881948919490194911949219493194941949519496194971949819499195001950119502195031950419505195061950719508195091951019511195121951319514195151951619517195181951919520195211952219523195241952519526195271952819529195301953119532195331953419535195361953719538195391954019541195421954319544195451954619547195481954919550195511955219553195541955519556195571955819559195601956119562195631956419565195661956719568195691957019571195721957319574195751957619577195781957919580195811958219583195841958519586195871958819589195901959119592195931959419595195961959719598195991960019601196021960319604196051960619607196081960919610196111961219613196141961519616196171961819619196201962119622196231962419625196261962719628196291963019631196321963319634196351963619637196381963919640196411964219643196441964519646196471964819649196501965119652196531965419655196561965719658196591966019661196621966319664196651966619667196681966919670196711967219673196741967519676196771967819679196801968119682196831968419685196861968719688196891969019691196921969319694196951969619697196981969919700197011970219703197041970519706197071970819709197101971119712197131971419715197161971719718197191972019721197221972319724197251972619727197281972919730197311973219733197341973519736197371973819739197401974119742197431974419745197461974719748197491975019751197521975319754197551975619757197581975919760197611976219763197641976519766197671976819769197701977119772197731977419775197761977719778197791978019781197821978319784197851978619787197881978919790197911979219793197941979519796197971979819799198001980119802198031980419805198061980719808198091981019811198121981319814198151981619817198181981919820198211982219823198241982519826198271982819829198301983119832198331983419835198361983719838198391984019841198421984319844198451984619847198481984919850198511985219853198541985519856198571985819859198601986119862198631986419865198661986719868198691987019871198721987319874198751987619877198781987919880198811988219883198841988519886198871988819889198901989119892198931989419895198961989719898198991990019901199021990319904199051990619907199081990919910199111991219913199141991519916199171991819919199201992119922199231992419925199261992719928199291993019931199321993319934199351993619937199381993919940199411994219943199441994519946199471994819949199501995119952199531995419955199561995719958199591996019961199621996319964199651996619967199681996919970199711997219973199741997519976199771997819979199801998119982199831998419985199861998719988199891999019991199921999319994199951999619997199981999920000200012000220003200042000520006200072000820009200102001120012200132001420015200162001720018200192002020021200222002320024200252002620027200282002920030200312003220033200342003520036200372003820039200402004120042200432004420045200462004720048200492005020051200522005320054200552005620057200582005920060200612006220063200642006520066200672006820069200702007120072200732007420075200762007720078200792008020081200822008320084200852008620087200882008920090200912009220093200942009520096200972009820099201002010120102201032010420105201062010720108201092011020111201122011320114201152011620117201182011920120201212012220123201242012520126201272012820129201302013120132201332013420135201362013720138201392014020141201422014320144201452014620147201482014920150201512015220153201542015520156201572015820159201602016120162201632016420165201662016720168201692017020171201722017320174201752017620177201782017920180201812018220183201842018520186201872018820189201902019120192201932019420195201962019720198201992020020201202022020320204202052020620207202082020920210202112021220213202142021520216202172021820219202202022120222202232022420225202262022720228202292023020231202322023320234202352023620237202382023920240202412024220243202442024520246202472024820249202502025120252202532025420255202562025720258202592026020261202622026320264202652026620267202682026920270202712027220273202742027520276202772027820279202802028120282202832028420285202862028720288202892029020291202922029320294202952029620297202982029920300203012030220303203042030520306203072030820309203102031120312203132031420315203162031720318203192032020321203222032320324203252032620327203282032920330203312033220333203342033520336203372033820339203402034120342203432034420345203462034720348203492035020351203522035320354203552035620357203582035920360203612036220363203642036520366203672036820369203702037120372203732037420375203762037720378203792038020381203822038320384203852038620387203882038920390203912039220393203942039520396203972039820399204002040120402204032040420405204062040720408204092041020411204122041320414204152041620417204182041920420204212042220423204242042520426204272042820429204302043120432204332043420435204362043720438204392044020441204422044320444204452044620447204482044920450204512045220453204542045520456204572045820459204602046120462204632046420465204662046720468204692047020471204722047320474204752047620477204782047920480204812048220483204842048520486204872048820489204902049120492204932049420495204962049720498204992050020501205022050320504205052050620507205082050920510205112051220513205142051520516205172051820519205202052120522205232052420525205262052720528205292053020531205322053320534205352053620537205382053920540205412054220543205442054520546205472054820549205502055120552205532055420555205562055720558205592056020561205622056320564205652056620567205682056920570205712057220573205742057520576205772057820579205802058120582205832058420585205862058720588205892059020591205922059320594205952059620597205982059920600206012060220603206042060520606206072060820609206102061120612206132061420615206162061720618206192062020621206222062320624206252062620627206282062920630206312063220633206342063520636206372063820639206402064120642206432064420645206462064720648206492065020651206522065320654206552065620657206582065920660206612066220663206642066520666206672066820669206702067120672206732067420675206762067720678206792068020681206822068320684206852068620687206882068920690206912069220693206942069520696206972069820699207002070120702207032070420705207062070720708207092071020711207122071320714207152071620717207182071920720207212072220723207242072520726207272072820729207302073120732207332073420735207362073720738207392074020741207422074320744207452074620747207482074920750207512075220753207542075520756207572075820759207602076120762207632076420765207662076720768207692077020771207722077320774207752077620777207782077920780207812078220783207842078520786207872078820789207902079120792207932079420795207962079720798207992080020801208022080320804208052080620807208082080920810208112081220813208142081520816208172081820819208202082120822208232082420825208262082720828208292083020831208322083320834208352083620837208382083920840208412084220843208442084520846208472084820849208502085120852208532085420855208562085720858208592086020861208622086320864208652086620867208682086920870208712087220873208742087520876208772087820879208802088120882208832088420885208862088720888208892089020891208922089320894208952089620897208982089920900209012090220903209042090520906209072090820909209102091120912209132091420915209162091720918209192092020921209222092320924209252092620927209282092920930209312093220933209342093520936209372093820939209402094120942209432094420945209462094720948209492095020951209522095320954209552095620957209582095920960209612096220963209642096520966209672096820969209702097120972209732097420975209762097720978209792098020981209822098320984209852098620987209882098920990209912099220993209942099520996209972099820999210002100121002210032100421005210062100721008210092101021011210122101321014210152101621017210182101921020210212102221023210242102521026210272102821029210302103121032210332103421035210362103721038210392104021041210422104321044210452104621047210482104921050210512105221053210542105521056210572105821059210602106121062210632106421065210662106721068210692107021071210722107321074210752107621077210782107921080210812108221083210842108521086210872108821089210902109121092210932109421095210962109721098210992110021101211022110321104211052110621107211082110921110211112111221113211142111521116211172111821119211202112121122211232112421125211262112721128211292113021131211322113321134211352113621137211382113921140211412114221143211442114521146211472114821149211502115121152211532115421155211562115721158211592116021161211622116321164211652116621167211682116921170211712117221173211742117521176211772117821179211802118121182211832118421185211862118721188211892119021191211922119321194211952119621197211982119921200212012120221203212042120521206212072120821209212102121121212212132121421215212162121721218212192122021221212222122321224212252122621227212282122921230212312123221233212342123521236212372123821239212402124121242212432124421245212462124721248212492125021251212522125321254212552125621257212582125921260212612126221263212642126521266212672126821269212702127121272212732127421275212762127721278212792128021281212822128321284212852128621287212882128921290212912129221293212942129521296212972129821299213002130121302213032130421305213062130721308213092131021311213122131321314213152131621317213182131921320213212132221323213242132521326213272132821329213302133121332213332133421335213362133721338213392134021341213422134321344213452134621347213482134921350213512135221353213542135521356213572135821359213602136121362213632136421365213662136721368213692137021371213722137321374213752137621377213782137921380213812138221383213842138521386213872138821389213902139121392213932139421395213962139721398213992140021401214022140321404214052140621407214082140921410214112141221413214142141521416214172141821419214202142121422214232142421425214262142721428214292143021431214322143321434214352143621437214382143921440214412144221443214442144521446214472144821449214502145121452214532145421455214562145721458214592146021461214622146321464214652146621467214682146921470214712147221473214742147521476214772147821479214802148121482214832148421485214862148721488214892149021491214922149321494214952149621497214982149921500215012150221503215042150521506215072150821509215102151121512215132151421515215162151721518215192152021521215222152321524215252152621527215282152921530215312153221533215342153521536215372153821539215402154121542215432154421545215462154721548215492155021551215522155321554215552155621557215582155921560215612156221563215642156521566215672156821569215702157121572215732157421575215762157721578215792158021581215822158321584215852158621587215882158921590215912159221593215942159521596215972159821599216002160121602216032160421605216062160721608216092161021611216122161321614216152161621617216182161921620216212162221623216242162521626216272162821629216302163121632216332163421635216362163721638216392164021641216422164321644216452164621647216482164921650216512165221653216542165521656216572165821659216602166121662216632166421665216662166721668216692167021671216722167321674216752167621677216782167921680216812168221683216842168521686216872168821689216902169121692216932169421695216962169721698216992170021701217022170321704217052170621707217082170921710217112171221713217142171521716217172171821719217202172121722217232172421725217262172721728217292173021731217322173321734217352173621737217382173921740217412174221743217442174521746217472174821749217502175121752217532175421755217562175721758217592176021761217622176321764217652176621767217682176921770217712177221773217742177521776217772177821779217802178121782217832178421785217862178721788217892179021791217922179321794217952179621797217982179921800218012180221803218042180521806218072180821809218102181121812218132181421815218162181721818218192182021821218222182321824218252182621827218282182921830218312183221833218342183521836218372183821839218402184121842218432184421845218462184721848218492185021851218522185321854218552185621857218582185921860218612186221863218642186521866218672186821869218702187121872218732187421875218762187721878218792188021881218822188321884218852188621887218882188921890218912189221893218942189521896218972189821899219002190121902219032190421905219062190721908219092191021911219122191321914219152191621917219182191921920219212192221923219242192521926219272192821929219302193121932219332193421935219362193721938219392194021941219422194321944219452194621947219482194921950219512195221953219542195521956219572195821959219602196121962219632196421965219662196721968219692197021971219722197321974219752197621977219782197921980219812198221983219842198521986219872198821989219902199121992219932199421995219962199721998219992200022001220022200322004220052200622007220082200922010220112201222013220142201522016220172201822019220202202122022220232202422025220262202722028220292203022031220322203322034220352203622037220382203922040220412204222043220442204522046220472204822049220502205122052220532205422055220562205722058220592206022061220622206322064220652206622067220682206922070220712207222073220742207522076220772207822079220802208122082220832208422085220862208722088220892209022091220922209322094220952209622097220982209922100221012210222103221042210522106221072210822109221102211122112221132211422115221162211722118221192212022121221222212322124221252212622127221282212922130221312213222133221342213522136221372213822139221402214122142221432214422145221462214722148221492215022151221522215322154221552215622157221582215922160221612216222163221642216522166221672216822169221702217122172221732217422175221762217722178221792218022181221822218322184221852218622187221882218922190221912219222193221942219522196221972219822199222002220122202222032220422205222062220722208222092221022211222122221322214222152221622217222182221922220222212222222223222242222522226222272222822229222302223122232222332223422235222362223722238222392224022241222422224322244222452224622247222482224922250222512225222253222542225522256222572225822259222602226122262222632226422265222662226722268222692227022271222722227322274222752227622277222782227922280222812228222283222842228522286222872228822289222902229122292222932229422295222962229722298222992230022301223022230322304223052230622307223082230922310223112231222313223142231522316223172231822319223202232122322223232232422325223262232722328223292233022331223322233322334223352233622337223382233922340223412234222343223442234522346223472234822349223502235122352223532235422355223562235722358223592236022361223622236322364223652236622367223682236922370223712237222373223742237522376223772237822379223802238122382223832238422385223862238722388223892239022391223922239322394223952239622397223982239922400224012240222403224042240522406224072240822409224102241122412224132241422415224162241722418224192242022421224222242322424224252242622427224282242922430224312243222433224342243522436224372243822439224402244122442224432244422445224462244722448224492245022451224522245322454224552245622457224582245922460224612246222463224642246522466224672246822469224702247122472224732247422475224762247722478224792248022481224822248322484224852248622487224882248922490224912249222493224942249522496224972249822499225002250122502225032250422505225062250722508225092251022511225122251322514225152251622517225182251922520225212252222523225242252522526225272252822529225302253122532225332253422535225362253722538225392254022541225422254322544225452254622547225482254922550225512255222553225542255522556225572255822559225602256122562225632256422565225662256722568225692257022571225722257322574225752257622577225782257922580225812258222583225842258522586225872258822589225902259122592225932259422595225962259722598225992260022601226022260322604226052260622607226082260922610226112261222613226142261522616226172261822619226202262122622226232262422625226262262722628226292263022631226322263322634226352263622637226382263922640226412264222643226442264522646226472264822649226502265122652226532265422655226562265722658226592266022661226622266322664226652266622667226682266922670226712267222673226742267522676226772267822679226802268122682226832268422685226862268722688226892269022691226922269322694226952269622697226982269922700227012270222703227042270522706227072270822709227102271122712227132271422715227162271722718227192272022721227222272322724227252272622727227282272922730227312273222733227342273522736227372273822739227402274122742227432274422745227462274722748227492275022751227522275322754227552275622757227582275922760227612276222763227642276522766227672276822769227702277122772227732277422775227762277722778227792278022781227822278322784227852278622787227882278922790227912279222793227942279522796227972279822799228002280122802228032280422805228062280722808228092281022811228122281322814228152281622817228182281922820228212282222823228242282522826228272282822829228302283122832228332283422835228362283722838228392284022841228422284322844228452284622847228482284922850228512285222853228542285522856228572285822859228602286122862228632286422865228662286722868228692287022871228722287322874228752287622877228782287922880228812288222883228842288522886228872288822889228902289122892228932289422895228962289722898228992290022901229022290322904229052290622907229082290922910229112291222913229142291522916229172291822919229202292122922229232292422925229262292722928229292293022931229322293322934229352293622937229382293922940229412294222943229442294522946229472294822949229502295122952229532295422955229562295722958229592296022961229622296322964229652296622967229682296922970229712297222973229742297522976229772297822979229802298122982229832298422985229862298722988229892299022991229922299322994229952299622997229982299923000230012300223003230042300523006230072300823009230102301123012230132301423015230162301723018230192302023021230222302323024230252302623027230282302923030230312303223033230342303523036230372303823039230402304123042230432304423045230462304723048230492305023051230522305323054230552305623057230582305923060230612306223063230642306523066230672306823069230702307123072230732307423075230762307723078230792308023081230822308323084230852308623087230882308923090230912309223093230942309523096230972309823099231002310123102231032310423105231062310723108231092311023111231122311323114231152311623117231182311923120231212312223123231242312523126231272312823129231302313123132231332313423135231362313723138231392314023141231422314323144231452314623147231482314923150231512315223153231542315523156231572315823159231602316123162231632316423165231662316723168231692317023171231722317323174231752317623177231782317923180231812318223183231842318523186231872318823189231902319123192231932319423195231962319723198231992320023201232022320323204232052320623207232082320923210232112321223213232142321523216232172321823219232202322123222232232322423225232262322723228232292323023231232322323323234232352323623237232382323923240232412324223243232442324523246232472324823249232502325123252232532325423255232562325723258232592326023261232622326323264232652326623267232682326923270232712327223273232742327523276232772327823279232802328123282232832328423285232862328723288232892329023291232922329323294232952329623297232982329923300233012330223303233042330523306233072330823309233102331123312233132331423315233162331723318233192332023321233222332323324233252332623327233282332923330233312333223333233342333523336233372333823339233402334123342233432334423345233462334723348233492335023351233522335323354233552335623357233582335923360233612336223363233642336523366233672336823369233702337123372233732337423375233762337723378233792338023381233822338323384233852338623387233882338923390233912339223393233942339523396233972339823399234002340123402234032340423405234062340723408234092341023411234122341323414234152341623417234182341923420234212342223423234242342523426234272342823429234302343123432234332343423435234362343723438234392344023441234422344323444234452344623447234482344923450234512345223453234542345523456234572345823459234602346123462234632346423465234662346723468234692347023471234722347323474234752347623477234782347923480234812348223483234842348523486234872348823489234902349123492234932349423495234962349723498234992350023501235022350323504235052350623507235082350923510235112351223513235142351523516235172351823519235202352123522235232352423525235262352723528235292353023531235322353323534235352353623537235382353923540235412354223543235442354523546235472354823549235502355123552235532355423555235562355723558235592356023561235622356323564235652356623567235682356923570235712357223573235742357523576235772357823579235802358123582235832358423585235862358723588235892359023591235922359323594235952359623597235982359923600236012360223603236042360523606236072360823609236102361123612236132361423615236162361723618236192362023621236222362323624236252362623627236282362923630236312363223633236342363523636236372363823639236402364123642236432364423645236462364723648236492365023651236522365323654236552365623657236582365923660236612366223663236642366523666236672366823669236702367123672236732367423675236762367723678236792368023681236822368323684236852368623687236882368923690236912369223693236942369523696236972369823699237002370123702237032370423705237062370723708237092371023711237122371323714237152371623717237182371923720237212372223723237242372523726237272372823729237302373123732237332373423735237362373723738237392374023741237422374323744237452374623747237482374923750237512375223753237542375523756237572375823759237602376123762237632376423765237662376723768237692377023771237722377323774237752377623777237782377923780237812378223783237842378523786237872378823789237902379123792237932379423795237962379723798237992380023801238022380323804238052380623807238082380923810238112381223813238142381523816238172381823819238202382123822238232382423825238262382723828238292383023831238322383323834238352383623837238382383923840238412384223843238442384523846238472384823849238502385123852238532385423855238562385723858238592386023861238622386323864238652386623867238682386923870238712387223873238742387523876238772387823879238802388123882238832388423885238862388723888238892389023891238922389323894238952389623897238982389923900239012390223903239042390523906239072390823909239102391123912239132391423915239162391723918239192392023921239222392323924239252392623927239282392923930239312393223933239342393523936239372393823939239402394123942239432394423945239462394723948239492395023951239522395323954239552395623957239582395923960239612396223963239642396523966239672396823969239702397123972239732397423975239762397723978239792398023981239822398323984239852398623987239882398923990239912399223993239942399523996239972399823999240002400124002240032400424005240062400724008240092401024011240122401324014240152401624017240182401924020240212402224023240242402524026240272402824029240302403124032240332403424035240362403724038240392404024041240422404324044240452404624047240482404924050240512405224053240542405524056240572405824059240602406124062240632406424065240662406724068240692407024071240722407324074240752407624077240782407924080240812408224083240842408524086240872408824089240902409124092240932409424095240962409724098240992410024101241022410324104241052410624107241082410924110241112411224113241142411524116241172411824119241202412124122241232412424125241262412724128241292413024131241322413324134241352413624137241382413924140241412414224143241442414524146241472414824149241502415124152241532415424155241562415724158241592416024161241622416324164241652416624167241682416924170241712417224173241742417524176241772417824179241802418124182241832418424185241862418724188241892419024191241922419324194241952419624197241982419924200242012420224203242042420524206242072420824209242102421124212242132421424215242162421724218242192422024221242222422324224242252422624227242282422924230242312423224233242342423524236242372423824239242402424124242242432424424245242462424724248242492425024251242522425324254242552425624257242582425924260242612426224263242642426524266242672426824269242702427124272242732427424275242762427724278242792428024281242822428324284242852428624287242882428924290242912429224293242942429524296242972429824299243002430124302243032430424305243062430724308243092431024311243122431324314243152431624317243182431924320243212432224323243242432524326243272432824329243302433124332243332433424335243362433724338243392434024341243422434324344243452434624347243482434924350243512435224353243542435524356243572435824359243602436124362243632436424365243662436724368243692437024371243722437324374243752437624377243782437924380243812438224383243842438524386243872438824389243902439124392243932439424395243962439724398243992440024401244022440324404244052440624407244082440924410244112441224413244142441524416244172441824419244202442124422244232442424425244262442724428244292443024431244322443324434244352443624437244382443924440244412444224443244442444524446244472444824449244502445124452244532445424455244562445724458244592446024461244622446324464244652446624467244682446924470244712447224473244742447524476244772447824479244802448124482244832448424485244862448724488244892449024491244922449324494244952449624497244982449924500245012450224503245042450524506245072450824509245102451124512245132451424515245162451724518245192452024521245222452324524245252452624527245282452924530245312453224533245342453524536245372453824539245402454124542245432454424545245462454724548245492455024551245522455324554245552455624557245582455924560245612456224563245642456524566245672456824569245702457124572245732457424575245762457724578245792458024581245822458324584245852458624587245882458924590245912459224593245942459524596245972459824599246002460124602246032460424605246062460724608246092461024611246122461324614246152461624617246182461924620246212462224623246242462524626246272462824629246302463124632246332463424635246362463724638246392464024641246422464324644246452464624647246482464924650246512465224653246542465524656246572465824659246602466124662246632466424665246662466724668246692467024671246722467324674246752467624677246782467924680246812468224683246842468524686246872468824689246902469124692246932469424695246962469724698246992470024701247022470324704247052470624707247082470924710247112471224713247142471524716247172471824719247202472124722247232472424725247262472724728247292473024731247322473324734247352473624737247382473924740247412474224743247442474524746247472474824749247502475124752247532475424755247562475724758247592476024761247622476324764247652476624767247682476924770247712477224773247742477524776247772477824779247802478124782247832478424785247862478724788247892479024791247922479324794247952479624797247982479924800248012480224803248042480524806248072480824809248102481124812248132481424815248162481724818248192482024821248222482324824248252482624827248282482924830248312483224833248342483524836248372483824839248402484124842248432484424845248462484724848248492485024851248522485324854248552485624857248582485924860248612486224863248642486524866248672486824869248702487124872248732487424875248762487724878248792488024881248822488324884248852488624887248882488924890248912489224893248942489524896248972489824899249002490124902249032490424905249062490724908249092491024911249122491324914249152491624917249182491924920249212492224923249242492524926249272492824929249302493124932249332493424935249362493724938249392494024941249422494324944249452494624947249482494924950249512495224953249542495524956249572495824959249602496124962249632496424965249662496724968249692497024971249722497324974249752497624977249782497924980249812498224983249842498524986249872498824989249902499124992249932499424995249962499724998249992500025001250022500325004250052500625007250082500925010250112501225013250142501525016250172501825019250202502125022250232502425025250262502725028250292503025031250322503325034250352503625037250382503925040250412504225043250442504525046250472504825049250502505125052250532505425055250562505725058250592506025061250622506325064250652506625067250682506925070250712507225073250742507525076250772507825079250802508125082250832508425085250862508725088250892509025091250922509325094250952509625097250982509925100251012510225103251042510525106251072510825109251102511125112251132511425115251162511725118251192512025121251222512325124251252512625127251282512925130251312513225133251342513525136251372513825139251402514125142251432514425145251462514725148251492515025151251522515325154251552515625157251582515925160251612516225163251642516525166251672516825169251702517125172251732517425175251762517725178251792518025181251822518325184251852518625187251882518925190251912519225193251942519525196251972519825199252002520125202252032520425205252062520725208252092521025211252122521325214252152521625217252182521925220252212522225223252242522525226252272522825229252302523125232252332523425235252362523725238252392524025241252422524325244252452524625247252482524925250252512525225253252542525525256252572525825259252602526125262252632526425265252662526725268252692527025271252722527325274252752527625277252782527925280252812528225283252842528525286252872528825289252902529125292252932529425295252962529725298252992530025301253022530325304253052530625307253082530925310253112531225313253142531525316253172531825319253202532125322253232532425325253262532725328253292533025331253322533325334253352533625337253382533925340253412534225343253442534525346253472534825349253502535125352253532535425355253562535725358253592536025361253622536325364253652536625367253682536925370253712537225373253742537525376253772537825379253802538125382253832538425385253862538725388253892539025391253922539325394253952539625397253982539925400254012540225403254042540525406254072540825409254102541125412254132541425415254162541725418254192542025421254222542325424254252542625427254282542925430254312543225433254342543525436254372543825439254402544125442254432544425445254462544725448254492545025451254522545325454254552545625457254582545925460254612546225463254642546525466254672546825469254702547125472254732547425475254762547725478254792548025481254822548325484254852548625487254882548925490254912549225493254942549525496254972549825499255002550125502255032550425505255062550725508255092551025511255122551325514255152551625517255182551925520255212552225523255242552525526255272552825529255302553125532255332553425535255362553725538255392554025541255422554325544255452554625547255482554925550255512555225553255542555525556255572555825559255602556125562255632556425565255662556725568255692557025571255722557325574255752557625577255782557925580255812558225583255842558525586255872558825589255902559125592255932559425595255962559725598255992560025601256022560325604256052560625607256082560925610256112561225613256142561525616256172561825619256202562125622256232562425625256262562725628256292563025631256322563325634256352563625637256382563925640256412564225643256442564525646256472564825649256502565125652256532565425655256562565725658256592566025661256622566325664256652566625667256682566925670256712567225673256742567525676256772567825679256802568125682256832568425685256862568725688256892569025691256922569325694256952569625697256982569925700257012570225703257042570525706257072570825709257102571125712257132571425715257162571725718257192572025721257222572325724257252572625727257282572925730257312573225733257342573525736257372573825739257402574125742257432574425745257462574725748257492575025751257522575325754257552575625757257582575925760257612576225763257642576525766257672576825769257702577125772257732577425775257762577725778257792578025781257822578325784257852578625787257882578925790257912579225793257942579525796257972579825799258002580125802258032580425805258062580725808258092581025811258122581325814258152581625817258182581925820258212582225823258242582525826258272582825829258302583125832258332583425835258362583725838258392584025841258422584325844258452584625847258482584925850258512585225853258542585525856258572585825859258602586125862258632586425865258662586725868258692587025871258722587325874258752587625877258782587925880258812588225883258842588525886258872588825889258902589125892258932589425895258962589725898258992590025901259022590325904259052590625907259082590925910259112591225913259142591525916259172591825919259202592125922259232592425925259262592725928259292593025931259322593325934259352593625937259382593925940259412594225943259442594525946259472594825949259502595125952259532595425955259562595725958259592596025961259622596325964259652596625967259682596925970259712597225973259742597525976259772597825979259802598125982259832598425985259862598725988259892599025991259922599325994259952599625997259982599926000260012600226003260042600526006260072600826009260102601126012260132601426015260162601726018260192602026021260222602326024260252602626027260282602926030260312603226033260342603526036260372603826039260402604126042260432604426045260462604726048260492605026051260522605326054260552605626057260582605926060260612606226063260642606526066260672606826069260702607126072260732607426075260762607726078260792608026081260822608326084260852608626087260882608926090260912609226093260942609526096260972609826099261002610126102261032610426105261062610726108261092611026111261122611326114261152611626117261182611926120261212612226123261242612526126261272612826129261302613126132261332613426135261362613726138261392614026141261422614326144261452614626147261482614926150261512615226153261542615526156261572615826159261602616126162261632616426165261662616726168261692617026171261722617326174261752617626177261782617926180261812618226183261842618526186261872618826189261902619126192261932619426195261962619726198261992620026201262022620326204262052620626207262082620926210262112621226213262142621526216262172621826219262202622126222262232622426225262262622726228262292623026231262322623326234262352623626237262382623926240262412624226243262442624526246262472624826249262502625126252262532625426255262562625726258262592626026261262622626326264262652626626267262682626926270262712627226273262742627526276262772627826279262802628126282262832628426285262862628726288262892629026291262922629326294262952629626297262982629926300263012630226303263042630526306263072630826309263102631126312263132631426315263162631726318263192632026321263222632326324263252632626327263282632926330263312633226333263342633526336263372633826339263402634126342263432634426345263462634726348263492635026351263522635326354263552635626357263582635926360263612636226363263642636526366263672636826369263702637126372263732637426375263762637726378263792638026381263822638326384263852638626387263882638926390263912639226393263942639526396263972639826399264002640126402264032640426405264062640726408264092641026411264122641326414264152641626417264182641926420264212642226423264242642526426264272642826429264302643126432264332643426435264362643726438264392644026441264422644326444264452644626447264482644926450264512645226453264542645526456264572645826459264602646126462264632646426465264662646726468264692647026471264722647326474264752647626477264782647926480264812648226483264842648526486264872648826489264902649126492264932649426495264962649726498264992650026501265022650326504265052650626507265082650926510265112651226513265142651526516265172651826519265202652126522265232652426525265262652726528265292653026531265322653326534265352653626537265382653926540265412654226543265442654526546265472654826549265502655126552265532655426555265562655726558265592656026561265622656326564265652656626567265682656926570265712657226573265742657526576265772657826579265802658126582265832658426585265862658726588265892659026591265922659326594265952659626597265982659926600266012660226603266042660526606266072660826609266102661126612266132661426615266162661726618266192662026621266222662326624266252662626627266282662926630266312663226633266342663526636266372663826639266402664126642266432664426645266462664726648266492665026651266522665326654266552665626657266582665926660266612666226663266642666526666266672666826669266702667126672266732667426675266762667726678266792668026681266822668326684266852668626687266882668926690266912669226693266942669526696266972669826699267002670126702267032670426705267062670726708267092671026711267122671326714267152671626717267182671926720267212672226723267242672526726267272672826729267302673126732267332673426735267362673726738267392674026741267422674326744267452674626747267482674926750267512675226753267542675526756267572675826759267602676126762267632676426765267662676726768267692677026771267722677326774267752677626777267782677926780267812678226783267842678526786267872678826789267902679126792267932679426795267962679726798267992680026801268022680326804268052680626807268082680926810268112681226813268142681526816268172681826819268202682126822268232682426825268262682726828268292683026831268322683326834268352683626837268382683926840268412684226843268442684526846268472684826849268502685126852268532685426855268562685726858268592686026861268622686326864268652686626867268682686926870268712687226873268742687526876268772687826879268802688126882268832688426885268862688726888268892689026891268922689326894268952689626897268982689926900269012690226903269042690526906269072690826909269102691126912269132691426915269162691726918269192692026921269222692326924269252692626927269282692926930269312693226933269342693526936269372693826939269402694126942269432694426945269462694726948269492695026951269522695326954269552695626957269582695926960269612696226963269642696526966269672696826969269702697126972269732697426975269762697726978269792698026981269822698326984269852698626987269882698926990269912699226993269942699526996269972699826999270002700127002270032700427005270062700727008270092701027011270122701327014270152701627017270182701927020270212702227023270242702527026270272702827029270302703127032270332703427035270362703727038270392704027041270422704327044270452704627047270482704927050270512705227053270542705527056270572705827059270602706127062270632706427065270662706727068270692707027071270722707327074270752707627077270782707927080270812708227083270842708527086270872708827089270902709127092270932709427095270962709727098270992710027101271022710327104271052710627107271082710927110271112711227113271142711527116271172711827119271202712127122271232712427125271262712727128271292713027131271322713327134271352713627137271382713927140271412714227143271442714527146271472714827149271502715127152271532715427155271562715727158271592716027161271622716327164271652716627167271682716927170271712717227173271742717527176271772717827179271802718127182271832718427185271862718727188271892719027191271922719327194271952719627197271982719927200272012720227203272042720527206272072720827209272102721127212272132721427215272162721727218272192722027221272222722327224272252722627227272282722927230272312723227233272342723527236272372723827239272402724127242272432724427245272462724727248272492725027251272522725327254272552725627257272582725927260272612726227263272642726527266272672726827269272702727127272272732727427275272762727727278272792728027281272822728327284272852728627287272882728927290272912729227293272942729527296272972729827299273002730127302273032730427305273062730727308273092731027311273122731327314273152731627317273182731927320273212732227323273242732527326273272732827329273302733127332273332733427335273362733727338273392734027341273422734327344273452734627347273482734927350273512735227353273542735527356273572735827359273602736127362273632736427365273662736727368273692737027371273722737327374273752737627377273782737927380273812738227383273842738527386273872738827389273902739127392273932739427395273962739727398273992740027401274022740327404274052740627407274082740927410274112741227413274142741527416274172741827419274202742127422274232742427425274262742727428274292743027431274322743327434274352743627437274382743927440274412744227443274442744527446274472744827449274502745127452274532745427455274562745727458274592746027461274622746327464274652746627467274682746927470274712747227473274742747527476274772747827479274802748127482274832748427485274862748727488274892749027491274922749327494274952749627497274982749927500275012750227503275042750527506275072750827509275102751127512275132751427515275162751727518275192752027521275222752327524275252752627527275282752927530275312753227533275342753527536275372753827539275402754127542275432754427545275462754727548275492755027551275522755327554275552755627557275582755927560275612756227563275642756527566275672756827569275702757127572275732757427575275762757727578275792758027581275822758327584275852758627587275882758927590275912759227593275942759527596275972759827599276002760127602276032760427605276062760727608276092761027611276122761327614276152761627617276182761927620276212762227623276242762527626276272762827629276302763127632276332763427635276362763727638276392764027641276422764327644276452764627647276482764927650276512765227653276542765527656276572765827659276602766127662276632766427665276662766727668276692767027671276722767327674276752767627677276782767927680276812768227683276842768527686276872768827689276902769127692276932769427695276962769727698276992770027701277022770327704277052770627707277082770927710277112771227713277142771527716277172771827719277202772127722277232772427725277262772727728277292773027731277322773327734277352773627737277382773927740277412774227743277442774527746277472774827749277502775127752277532775427755277562775727758277592776027761277622776327764277652776627767277682776927770277712777227773277742777527776277772777827779277802778127782277832778427785277862778727788277892779027791277922779327794277952779627797277982779927800278012780227803278042780527806278072780827809278102781127812278132781427815278162781727818278192782027821278222782327824278252782627827278282782927830278312783227833278342783527836278372783827839278402784127842278432784427845278462784727848278492785027851278522785327854278552785627857278582785927860278612786227863278642786527866278672786827869278702787127872278732787427875278762787727878278792788027881278822788327884278852788627887278882788927890278912789227893278942789527896278972789827899279002790127902279032790427905279062790727908279092791027911279122791327914279152791627917279182791927920279212792227923279242792527926279272792827929279302793127932279332793427935279362793727938279392794027941279422794327944279452794627947279482794927950279512795227953279542795527956279572795827959279602796127962279632796427965279662796727968279692797027971279722797327974279752797627977279782797927980279812798227983279842798527986279872798827989279902799127992279932799427995279962799727998279992800028001280022800328004280052800628007280082800928010280112801228013280142801528016280172801828019280202802128022280232802428025280262802728028280292803028031280322803328034280352803628037280382803928040280412804228043280442804528046280472804828049280502805128052280532805428055280562805728058280592806028061280622806328064280652806628067280682806928070280712807228073280742807528076280772807828079280802808128082280832808428085280862808728088280892809028091280922809328094280952809628097280982809928100281012810228103281042810528106281072810828109281102811128112281132811428115281162811728118281192812028121281222812328124281252812628127281282812928130281312813228133281342813528136281372813828139281402814128142281432814428145281462814728148281492815028151281522815328154281552815628157281582815928160281612816228163281642816528166281672816828169281702817128172281732817428175281762817728178281792818028181281822818328184281852818628187281882818928190281912819228193281942819528196281972819828199282002820128202282032820428205282062820728208282092821028211282122821328214282152821628217282182821928220282212822228223282242822528226282272822828229282302823128232282332823428235282362823728238282392824028241282422824328244282452824628247282482824928250282512825228253282542825528256282572825828259282602826128262282632826428265282662826728268282692827028271282722827328274282752827628277282782827928280282812828228283282842828528286282872828828289282902829128292282932829428295282962829728298282992830028301283022830328304283052830628307283082830928310283112831228313283142831528316283172831828319283202832128322283232832428325283262832728328283292833028331283322833328334283352833628337283382833928340283412834228343283442834528346283472834828349283502835128352283532835428355283562835728358283592836028361283622836328364283652836628367283682836928370283712837228373283742837528376283772837828379283802838128382283832838428385283862838728388283892839028391283922839328394283952839628397283982839928400284012840228403284042840528406284072840828409284102841128412284132841428415284162841728418284192842028421284222842328424284252842628427284282842928430284312843228433284342843528436284372843828439284402844128442284432844428445284462844728448284492845028451284522845328454284552845628457284582845928460284612846228463284642846528466284672846828469284702847128472284732847428475284762847728478284792848028481284822848328484284852848628487284882848928490284912849228493284942849528496284972849828499285002850128502285032850428505285062850728508285092851028511285122851328514285152851628517285182851928520285212852228523285242852528526285272852828529285302853128532285332853428535285362853728538285392854028541285422854328544285452854628547285482854928550285512855228553285542855528556285572855828559285602856128562285632856428565285662856728568285692857028571285722857328574285752857628577285782857928580285812858228583285842858528586285872858828589285902859128592285932859428595285962859728598285992860028601286022860328604286052860628607286082860928610286112861228613286142861528616286172861828619286202862128622286232862428625286262862728628286292863028631286322863328634286352863628637286382863928640286412864228643286442864528646286472864828649286502865128652286532865428655286562865728658286592866028661286622866328664286652866628667286682866928670286712867228673286742867528676286772867828679286802868128682286832868428685286862868728688286892869028691286922869328694286952869628697286982869928700287012870228703287042870528706287072870828709287102871128712287132871428715287162871728718287192872028721287222872328724287252872628727287282872928730287312873228733287342873528736287372873828739287402874128742287432874428745287462874728748287492875028751287522875328754287552875628757287582875928760287612876228763287642876528766287672876828769287702877128772287732877428775287762877728778287792878028781287822878328784287852878628787287882878928790287912879228793287942879528796287972879828799288002880128802288032880428805288062880728808288092881028811288122881328814288152881628817288182881928820288212882228823288242882528826288272882828829288302883128832288332883428835288362883728838288392884028841288422884328844288452884628847288482884928850288512885228853288542885528856288572885828859288602886128862288632886428865288662886728868288692887028871288722887328874288752887628877288782887928880288812888228883288842888528886288872888828889288902889128892288932889428895288962889728898288992890028901289022890328904289052890628907289082890928910289112891228913289142891528916289172891828919289202892128922289232892428925289262892728928289292893028931289322893328934289352893628937289382893928940289412894228943289442894528946289472894828949289502895128952289532895428955289562895728958289592896028961289622896328964289652896628967289682896928970289712897228973289742897528976289772897828979289802898128982289832898428985289862898728988289892899028991289922899328994289952899628997289982899929000290012900229003290042900529006290072900829009290102901129012290132901429015290162901729018290192902029021290222902329024290252902629027290282902929030290312903229033290342903529036290372903829039290402904129042290432904429045290462904729048290492905029051290522905329054290552905629057290582905929060290612906229063290642906529066290672906829069290702907129072290732907429075290762907729078290792908029081290822908329084290852908629087290882908929090290912909229093290942909529096290972909829099291002910129102291032910429105291062910729108291092911029111291122911329114291152911629117291182911929120291212912229123291242912529126291272912829129291302913129132291332913429135291362913729138291392914029141291422914329144291452914629147291482914929150291512915229153291542915529156291572915829159291602916129162291632916429165291662916729168291692917029171291722917329174291752917629177291782917929180291812918229183291842918529186291872918829189291902919129192291932919429195291962919729198291992920029201292022920329204292052920629207292082920929210292112921229213292142921529216292172921829219292202922129222292232922429225292262922729228292292923029231292322923329234292352923629237292382923929240292412924229243292442924529246292472924829249292502925129252292532925429255292562925729258292592926029261292622926329264292652926629267292682926929270292712927229273292742927529276292772927829279292802928129282292832928429285292862928729288292892929029291292922929329294292952929629297292982929929300293012930229303293042930529306293072930829309293102931129312293132931429315293162931729318293192932029321293222932329324293252932629327293282932929330293312933229333293342933529336293372933829339293402934129342293432934429345293462934729348293492935029351293522935329354293552935629357293582935929360293612936229363293642936529366293672936829369293702937129372293732937429375293762937729378293792938029381293822938329384293852938629387293882938929390293912939229393293942939529396293972939829399294002940129402294032940429405294062940729408294092941029411294122941329414294152941629417294182941929420294212942229423294242942529426294272942829429294302943129432294332943429435294362943729438294392944029441294422944329444294452944629447294482944929450294512945229453294542945529456294572945829459294602946129462294632946429465294662946729468294692947029471294722947329474294752947629477294782947929480294812948229483294842948529486294872948829489294902949129492294932949429495294962949729498294992950029501295022950329504295052950629507295082950929510295112951229513295142951529516295172951829519295202952129522295232952429525295262952729528295292953029531295322953329534295352953629537295382953929540295412954229543295442954529546295472954829549295502955129552295532955429555295562955729558295592956029561295622956329564295652956629567295682956929570295712957229573295742957529576295772957829579295802958129582295832958429585295862958729588295892959029591295922959329594295952959629597295982959929600296012960229603296042960529606296072960829609296102961129612296132961429615296162961729618296192962029621296222962329624296252962629627296282962929630296312963229633296342963529636296372963829639296402964129642296432964429645296462964729648296492965029651296522965329654296552965629657296582965929660296612966229663296642966529666296672966829669296702967129672296732967429675296762967729678296792968029681296822968329684296852968629687296882968929690296912969229693296942969529696296972969829699297002970129702297032970429705297062970729708297092971029711297122971329714297152971629717297182971929720297212972229723297242972529726297272972829729297302973129732297332973429735297362973729738297392974029741297422974329744297452974629747297482974929750297512975229753297542975529756297572975829759297602976129762297632976429765297662976729768297692977029771297722977329774297752977629777297782977929780297812978229783297842978529786297872978829789297902979129792297932979429795297962979729798297992980029801298022980329804298052980629807298082980929810298112981229813298142981529816298172981829819298202982129822298232982429825298262982729828298292983029831298322983329834298352983629837298382983929840298412984229843298442984529846298472984829849298502985129852298532985429855298562985729858298592986029861298622986329864298652986629867298682986929870298712987229873298742987529876298772987829879298802988129882298832988429885298862988729888298892989029891298922989329894298952989629897298982989929900299012990229903299042990529906299072990829909299102991129912299132991429915299162991729918299192992029921299222992329924299252992629927299282992929930299312993229933299342993529936299372993829939299402994129942299432994429945299462994729948299492995029951299522995329954299552995629957299582995929960299612996229963299642996529966299672996829969299702997129972299732997429975299762997729978299792998029981299822998329984299852998629987299882998929990299912999229993299942999529996299972999829999300003000130002300033000430005300063000730008300093001030011300123001330014300153001630017300183001930020300213002230023300243002530026300273002830029300303003130032300333003430035300363003730038300393004030041300423004330044300453004630047300483004930050300513005230053300543005530056300573005830059300603006130062300633006430065300663006730068300693007030071300723007330074300753007630077300783007930080300813008230083300843008530086300873008830089300903009130092300933009430095300963009730098300993010030101301023010330104301053010630107301083010930110301113011230113301143011530116301173011830119301203012130122301233012430125301263012730128301293013030131301323013330134301353013630137301383013930140301413014230143301443014530146301473014830149301503015130152301533015430155301563015730158301593016030161301623016330164301653016630167301683016930170301713017230173301743017530176301773017830179301803018130182301833018430185301863018730188301893019030191301923019330194301953019630197301983019930200302013020230203302043020530206302073020830209302103021130212302133021430215302163021730218302193022030221302223022330224302253022630227302283022930230302313023230233302343023530236302373023830239302403024130242302433024430245302463024730248302493025030251302523025330254302553025630257302583025930260302613026230263302643026530266302673026830269302703027130272302733027430275302763027730278302793028030281302823028330284302853028630287302883028930290302913029230293302943029530296302973029830299303003030130302303033030430305303063030730308303093031030311303123031330314303153031630317303183031930320303213032230323303243032530326303273032830329303303033130332303333033430335303363033730338303393034030341303423034330344303453034630347303483034930350303513035230353303543035530356303573035830359303603036130362303633036430365303663036730368303693037030371303723037330374303753037630377303783037930380303813038230383303843038530386303873038830389303903039130392303933039430395303963039730398303993040030401304023040330404304053040630407304083040930410304113041230413304143041530416304173041830419304203042130422304233042430425304263042730428304293043030431304323043330434304353043630437304383043930440304413044230443304443044530446304473044830449304503045130452304533045430455304563045730458304593046030461304623046330464304653046630467304683046930470304713047230473304743047530476304773047830479304803048130482304833048430485304863048730488304893049030491304923049330494304953049630497304983049930500305013050230503305043050530506305073050830509305103051130512305133051430515305163051730518305193052030521305223052330524305253052630527305283052930530305313053230533305343053530536305373053830539305403054130542305433054430545305463054730548305493055030551305523055330554305553055630557305583055930560305613056230563305643056530566305673056830569305703057130572305733057430575305763057730578305793058030581305823058330584305853058630587305883058930590305913059230593305943059530596305973059830599306003060130602306033060430605306063060730608306093061030611306123061330614306153061630617306183061930620306213062230623306243062530626306273062830629306303063130632306333063430635306363063730638306393064030641306423064330644306453064630647306483064930650306513065230653306543065530656306573065830659306603066130662306633066430665306663066730668306693067030671306723067330674306753067630677306783067930680306813068230683306843068530686306873068830689306903069130692306933069430695306963069730698306993070030701307023070330704307053070630707307083070930710307113071230713307143071530716307173071830719307203072130722307233072430725307263072730728307293073030731307323073330734307353073630737307383073930740307413074230743307443074530746307473074830749307503075130752307533075430755307563075730758307593076030761307623076330764307653076630767307683076930770307713077230773307743077530776307773077830779307803078130782307833078430785307863078730788307893079030791307923079330794307953079630797307983079930800308013080230803308043080530806308073080830809308103081130812308133081430815308163081730818308193082030821308223082330824308253082630827308283082930830308313083230833308343083530836308373083830839308403084130842308433084430845308463084730848308493085030851308523085330854308553085630857308583085930860308613086230863308643086530866308673086830869308703087130872308733087430875308763087730878308793088030881308823088330884308853088630887308883088930890308913089230893308943089530896308973089830899309003090130902309033090430905309063090730908309093091030911309123091330914309153091630917309183091930920309213092230923309243092530926309273092830929309303093130932309333093430935309363093730938309393094030941309423094330944309453094630947309483094930950309513095230953309543095530956309573095830959309603096130962309633096430965309663096730968309693097030971309723097330974309753097630977309783097930980309813098230983309843098530986309873098830989309903099130992309933099430995309963099730998309993100031001310023100331004310053100631007310083100931010310113101231013310143101531016310173101831019310203102131022310233102431025310263102731028310293103031031310323103331034310353103631037310383103931040310413104231043310443104531046310473104831049310503105131052310533105431055310563105731058310593106031061310623106331064310653106631067310683106931070310713107231073310743107531076310773107831079310803108131082310833108431085310863108731088310893109031091310923109331094310953109631097310983109931100311013110231103311043110531106311073110831109311103111131112311133111431115311163111731118311193112031121311223112331124311253112631127311283112931130311313113231133311343113531136311373113831139311403114131142311433114431145311463114731148311493115031151311523115331154311553115631157311583115931160311613116231163311643116531166311673116831169311703117131172311733117431175311763117731178311793118031181311823118331184311853118631187311883118931190311913119231193311943119531196311973119831199312003120131202312033120431205312063120731208312093121031211312123121331214312153121631217312183121931220312213122231223312243122531226312273122831229312303123131232312333123431235312363123731238312393124031241312423124331244312453124631247312483124931250312513125231253312543125531256312573125831259312603126131262312633126431265312663126731268312693127031271312723127331274312753127631277312783127931280312813128231283312843128531286312873128831289312903129131292312933129431295312963129731298312993130031301313023130331304313053130631307313083130931310313113131231313313143131531316313173131831319313203132131322313233132431325313263132731328313293133031331313323133331334313353133631337313383133931340313413134231343313443134531346313473134831349313503135131352313533135431355313563135731358313593136031361313623136331364313653136631367313683136931370313713137231373313743137531376313773137831379313803138131382313833138431385313863138731388313893139031391313923139331394313953139631397313983139931400314013140231403314043140531406314073140831409314103141131412314133141431415314163141731418314193142031421314223142331424314253142631427314283142931430314313143231433314343143531436314373143831439314403144131442314433144431445314463144731448314493145031451314523145331454314553145631457314583145931460314613146231463314643146531466314673146831469314703147131472314733147431475314763147731478314793148031481314823148331484314853148631487314883148931490314913149231493314943149531496314973149831499315003150131502315033150431505315063150731508315093151031511315123151331514315153151631517315183151931520315213152231523315243152531526315273152831529315303153131532315333153431535315363153731538315393154031541315423154331544315453154631547315483154931550315513155231553315543155531556315573155831559315603156131562315633156431565315663156731568315693157031571315723157331574315753157631577315783157931580315813158231583315843158531586315873158831589315903159131592315933159431595315963159731598315993160031601316023160331604316053160631607316083160931610316113161231613316143161531616316173161831619316203162131622316233162431625316263162731628316293163031631316323163331634316353163631637 |
- /*! *****************************************************************************
- Copyright (c) Microsoft Corporation. All rights reserved.
- Licensed under the Apache License, Version 2.0 (the "License"); you may not use
- this file except in compliance with the License. You may obtain a copy of the
- License at http://www.apache.org/licenses/LICENSE-2.0
-
- THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
- WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
- MERCHANTABLITY OR NON-INFRINGEMENT.
-
- See the Apache Version 2.0 License for specific language governing permissions
- and limitations under the License.
- ***************************************************************************** */
- var ts;
- (function (ts) {
- var OperationCanceledException = (function () {
- function OperationCanceledException() {
- }
- return OperationCanceledException;
- })();
- ts.OperationCanceledException = OperationCanceledException;
- (function (ExitStatus) {
- ExitStatus[ExitStatus["Success"] = 0] = "Success";
- ExitStatus[ExitStatus["DiagnosticsPresent_OutputsSkipped"] = 1] = "DiagnosticsPresent_OutputsSkipped";
- ExitStatus[ExitStatus["DiagnosticsPresent_OutputsGenerated"] = 2] = "DiagnosticsPresent_OutputsGenerated";
- })(ts.ExitStatus || (ts.ExitStatus = {}));
- var ExitStatus = ts.ExitStatus;
- (function (TypeReferenceSerializationKind) {
- TypeReferenceSerializationKind[TypeReferenceSerializationKind["Unknown"] = 0] = "Unknown";
- TypeReferenceSerializationKind[TypeReferenceSerializationKind["TypeWithConstructSignatureAndValue"] = 1] = "TypeWithConstructSignatureAndValue";
- TypeReferenceSerializationKind[TypeReferenceSerializationKind["VoidType"] = 2] = "VoidType";
- TypeReferenceSerializationKind[TypeReferenceSerializationKind["NumberLikeType"] = 3] = "NumberLikeType";
- TypeReferenceSerializationKind[TypeReferenceSerializationKind["StringLikeType"] = 4] = "StringLikeType";
- TypeReferenceSerializationKind[TypeReferenceSerializationKind["BooleanType"] = 5] = "BooleanType";
- TypeReferenceSerializationKind[TypeReferenceSerializationKind["ArrayLikeType"] = 6] = "ArrayLikeType";
- TypeReferenceSerializationKind[TypeReferenceSerializationKind["ESSymbolType"] = 7] = "ESSymbolType";
- TypeReferenceSerializationKind[TypeReferenceSerializationKind["TypeWithCallSignature"] = 8] = "TypeWithCallSignature";
- TypeReferenceSerializationKind[TypeReferenceSerializationKind["ObjectType"] = 9] = "ObjectType";
- })(ts.TypeReferenceSerializationKind || (ts.TypeReferenceSerializationKind = {}));
- var TypeReferenceSerializationKind = ts.TypeReferenceSerializationKind;
- (function (DiagnosticCategory) {
- DiagnosticCategory[DiagnosticCategory["Warning"] = 0] = "Warning";
- DiagnosticCategory[DiagnosticCategory["Error"] = 1] = "Error";
- DiagnosticCategory[DiagnosticCategory["Message"] = 2] = "Message";
- })(ts.DiagnosticCategory || (ts.DiagnosticCategory = {}));
- var DiagnosticCategory = ts.DiagnosticCategory;
- })(ts || (ts = {}));
- var ts;
- (function (ts) {
- function createFileMap(getCanonicalFileName) {
- var files = {};
- return {
- get: get,
- set: set,
- contains: contains,
- remove: remove,
- clear: clear,
- forEachValue: forEachValueInMap
- };
- function set(fileName, value) {
- files[normalizeKey(fileName)] = value;
- }
- function get(fileName) {
- return files[normalizeKey(fileName)];
- }
- function contains(fileName) {
- return hasProperty(files, normalizeKey(fileName));
- }
- function remove(fileName) {
- var key = normalizeKey(fileName);
- delete files[key];
- }
- function forEachValueInMap(f) {
- forEachValue(files, f);
- }
- function normalizeKey(key) {
- return getCanonicalFileName(normalizeSlashes(key));
- }
- function clear() {
- files = {};
- }
- }
- ts.createFileMap = createFileMap;
- function forEach(array, callback) {
- if (array) {
- for (var i = 0, len = array.length; i < len; i++) {
- var result = callback(array[i], i);
- if (result) {
- return result;
- }
- }
- }
- return undefined;
- }
- ts.forEach = forEach;
- function contains(array, value) {
- if (array) {
- for (var _i = 0; _i < array.length; _i++) {
- var v = array[_i];
- if (v === value) {
- return true;
- }
- }
- }
- return false;
- }
- ts.contains = contains;
- function indexOf(array, value) {
- if (array) {
- for (var i = 0, len = array.length; i < len; i++) {
- if (array[i] === value) {
- return i;
- }
- }
- }
- return -1;
- }
- ts.indexOf = indexOf;
- function countWhere(array, predicate) {
- var count = 0;
- if (array) {
- for (var _i = 0; _i < array.length; _i++) {
- var v = array[_i];
- if (predicate(v)) {
- count++;
- }
- }
- }
- return count;
- }
- ts.countWhere = countWhere;
- function filter(array, f) {
- var result;
- if (array) {
- result = [];
- for (var _i = 0; _i < array.length; _i++) {
- var item = array[_i];
- if (f(item)) {
- result.push(item);
- }
- }
- }
- return result;
- }
- ts.filter = filter;
- function map(array, f) {
- var result;
- if (array) {
- result = [];
- for (var _i = 0; _i < array.length; _i++) {
- var v = array[_i];
- result.push(f(v));
- }
- }
- return result;
- }
- ts.map = map;
- function concatenate(array1, array2) {
- if (!array2 || !array2.length)
- return array1;
- if (!array1 || !array1.length)
- return array2;
- return array1.concat(array2);
- }
- ts.concatenate = concatenate;
- function deduplicate(array) {
- var result;
- if (array) {
- result = [];
- for (var _i = 0; _i < array.length; _i++) {
- var item = array[_i];
- if (!contains(result, item)) {
- result.push(item);
- }
- }
- }
- return result;
- }
- ts.deduplicate = deduplicate;
- function sum(array, prop) {
- var result = 0;
- for (var _i = 0; _i < array.length; _i++) {
- var v = array[_i];
- result += v[prop];
- }
- return result;
- }
- ts.sum = sum;
- function addRange(to, from) {
- if (to && from) {
- for (var _i = 0; _i < from.length; _i++) {
- var v = from[_i];
- to.push(v);
- }
- }
- }
- ts.addRange = addRange;
- function rangeEquals(array1, array2, pos, end) {
- while (pos < end) {
- if (array1[pos] !== array2[pos]) {
- return false;
- }
- pos++;
- }
- return true;
- }
- ts.rangeEquals = rangeEquals;
- function lastOrUndefined(array) {
- if (array.length === 0) {
- return undefined;
- }
- return array[array.length - 1];
- }
- ts.lastOrUndefined = lastOrUndefined;
- function binarySearch(array, value) {
- var low = 0;
- var high = array.length - 1;
- while (low <= high) {
- var middle = low + ((high - low) >> 1);
- var midValue = array[middle];
- if (midValue === value) {
- return middle;
- }
- else if (midValue > value) {
- high = middle - 1;
- }
- else {
- low = middle + 1;
- }
- }
- return ~low;
- }
- ts.binarySearch = binarySearch;
- function reduceLeft(array, f, initial) {
- if (array) {
- var count = array.length;
- if (count > 0) {
- var pos = 0;
- var result = arguments.length <= 2 ? array[pos++] : initial;
- while (pos < count) {
- result = f(result, array[pos++]);
- }
- return result;
- }
- }
- return initial;
- }
- ts.reduceLeft = reduceLeft;
- function reduceRight(array, f, initial) {
- if (array) {
- var pos = array.length - 1;
- if (pos >= 0) {
- var result = arguments.length <= 2 ? array[pos--] : initial;
- while (pos >= 0) {
- result = f(result, array[pos--]);
- }
- return result;
- }
- }
- return initial;
- }
- ts.reduceRight = reduceRight;
- var hasOwnProperty = Object.prototype.hasOwnProperty;
- function hasProperty(map, key) {
- return hasOwnProperty.call(map, key);
- }
- ts.hasProperty = hasProperty;
- function getProperty(map, key) {
- return hasOwnProperty.call(map, key) ? map[key] : undefined;
- }
- ts.getProperty = getProperty;
- function isEmpty(map) {
- for (var id in map) {
- if (hasProperty(map, id)) {
- return false;
- }
- }
- return true;
- }
- ts.isEmpty = isEmpty;
- function clone(object) {
- var result = {};
- for (var id in object) {
- result[id] = object[id];
- }
- return result;
- }
- ts.clone = clone;
- function extend(first, second) {
- var result = {};
- for (var id in first) {
- result[id] = first[id];
- }
- for (var id in second) {
- if (!hasProperty(result, id)) {
- result[id] = second[id];
- }
- }
- return result;
- }
- ts.extend = extend;
- function forEachValue(map, callback) {
- var result;
- for (var id in map) {
- if (result = callback(map[id]))
- break;
- }
- return result;
- }
- ts.forEachValue = forEachValue;
- function forEachKey(map, callback) {
- var result;
- for (var id in map) {
- if (result = callback(id))
- break;
- }
- return result;
- }
- ts.forEachKey = forEachKey;
- function lookUp(map, key) {
- return hasProperty(map, key) ? map[key] : undefined;
- }
- ts.lookUp = lookUp;
- function copyMap(source, target) {
- for (var p in source) {
- target[p] = source[p];
- }
- }
- ts.copyMap = copyMap;
- function arrayToMap(array, makeKey) {
- var result = {};
- forEach(array, function (value) {
- result[makeKey(value)] = value;
- });
- return result;
- }
- ts.arrayToMap = arrayToMap;
- function memoize(callback) {
- var value;
- return function () {
- if (callback) {
- value = callback();
- callback = undefined;
- }
- return value;
- };
- }
- ts.memoize = memoize;
- function formatStringFromArgs(text, args, baseIndex) {
- baseIndex = baseIndex || 0;
- return text.replace(/{(\d+)}/g, function (match, index) { return args[+index + baseIndex]; });
- }
- ts.localizedDiagnosticMessages = undefined;
- function getLocaleSpecificMessage(message) {
- return ts.localizedDiagnosticMessages && ts.localizedDiagnosticMessages[message]
- ? ts.localizedDiagnosticMessages[message]
- : message;
- }
- ts.getLocaleSpecificMessage = getLocaleSpecificMessage;
- function createFileDiagnostic(file, start, length, message) {
- var end = start + length;
- Debug.assert(start >= 0, "start must be non-negative, is " + start);
- Debug.assert(length >= 0, "length must be non-negative, is " + length);
- if (file) {
- Debug.assert(start <= file.text.length, "start must be within the bounds of the file. " + start + " > " + file.text.length);
- Debug.assert(end <= file.text.length, "end must be the bounds of the file. " + end + " > " + file.text.length);
- }
- var text = getLocaleSpecificMessage(message.key);
- if (arguments.length > 4) {
- text = formatStringFromArgs(text, arguments, 4);
- }
- return {
- file: file,
- start: start,
- length: length,
- messageText: text,
- category: message.category,
- code: message.code
- };
- }
- ts.createFileDiagnostic = createFileDiagnostic;
- function createCompilerDiagnostic(message) {
- var text = getLocaleSpecificMessage(message.key);
- if (arguments.length > 1) {
- text = formatStringFromArgs(text, arguments, 1);
- }
- return {
- file: undefined,
- start: undefined,
- length: undefined,
- messageText: text,
- category: message.category,
- code: message.code
- };
- }
- ts.createCompilerDiagnostic = createCompilerDiagnostic;
- function chainDiagnosticMessages(details, message) {
- var text = getLocaleSpecificMessage(message.key);
- if (arguments.length > 2) {
- text = formatStringFromArgs(text, arguments, 2);
- }
- return {
- messageText: text,
- category: message.category,
- code: message.code,
- next: details
- };
- }
- ts.chainDiagnosticMessages = chainDiagnosticMessages;
- function concatenateDiagnosticMessageChains(headChain, tailChain) {
- var lastChain = headChain;
- while (lastChain.next) {
- lastChain = lastChain.next;
- }
- lastChain.next = tailChain;
- return headChain;
- }
- ts.concatenateDiagnosticMessageChains = concatenateDiagnosticMessageChains;
- function compareValues(a, b) {
- if (a === b)
- return 0;
- if (a === undefined)
- return -1;
- if (b === undefined)
- return 1;
- return a < b ? -1 : 1;
- }
- ts.compareValues = compareValues;
- function getDiagnosticFileName(diagnostic) {
- return diagnostic.file ? diagnostic.file.fileName : undefined;
- }
- function compareDiagnostics(d1, d2) {
- return compareValues(getDiagnosticFileName(d1), getDiagnosticFileName(d2)) ||
- compareValues(d1.start, d2.start) ||
- compareValues(d1.length, d2.length) ||
- compareValues(d1.code, d2.code) ||
- compareMessageText(d1.messageText, d2.messageText) ||
- 0;
- }
- ts.compareDiagnostics = compareDiagnostics;
- function compareMessageText(text1, text2) {
- while (text1 && text2) {
- var string1 = typeof text1 === "string" ? text1 : text1.messageText;
- var string2 = typeof text2 === "string" ? text2 : text2.messageText;
- var res = compareValues(string1, string2);
- if (res) {
- return res;
- }
- text1 = typeof text1 === "string" ? undefined : text1.next;
- text2 = typeof text2 === "string" ? undefined : text2.next;
- }
- if (!text1 && !text2) {
- return 0;
- }
- return text1 ? 1 : -1;
- }
- function sortAndDeduplicateDiagnostics(diagnostics) {
- return deduplicateSortedDiagnostics(diagnostics.sort(compareDiagnostics));
- }
- ts.sortAndDeduplicateDiagnostics = sortAndDeduplicateDiagnostics;
- function deduplicateSortedDiagnostics(diagnostics) {
- if (diagnostics.length < 2) {
- return diagnostics;
- }
- var newDiagnostics = [diagnostics[0]];
- var previousDiagnostic = diagnostics[0];
- for (var i = 1; i < diagnostics.length; i++) {
- var currentDiagnostic = diagnostics[i];
- var isDupe = compareDiagnostics(currentDiagnostic, previousDiagnostic) === 0;
- if (!isDupe) {
- newDiagnostics.push(currentDiagnostic);
- previousDiagnostic = currentDiagnostic;
- }
- }
- return newDiagnostics;
- }
- ts.deduplicateSortedDiagnostics = deduplicateSortedDiagnostics;
- function normalizeSlashes(path) {
- return path.replace(/\\/g, "/");
- }
- ts.normalizeSlashes = normalizeSlashes;
- function getRootLength(path) {
- if (path.charCodeAt(0) === 47) {
- if (path.charCodeAt(1) !== 47)
- return 1;
- var p1 = path.indexOf("/", 2);
- if (p1 < 0)
- return 2;
- var p2 = path.indexOf("/", p1 + 1);
- if (p2 < 0)
- return p1 + 1;
- return p2 + 1;
- }
- if (path.charCodeAt(1) === 58) {
- if (path.charCodeAt(2) === 47)
- return 3;
- return 2;
- }
- if (path.lastIndexOf("file:///", 0) === 0) {
- return "file:///".length;
- }
- var idx = path.indexOf("://");
- if (idx !== -1) {
- return idx + "://".length;
- }
- return 0;
- }
- ts.getRootLength = getRootLength;
- ts.directorySeparator = "/";
- function getNormalizedParts(normalizedSlashedPath, rootLength) {
- var parts = normalizedSlashedPath.substr(rootLength).split(ts.directorySeparator);
- var normalized = [];
- for (var _i = 0; _i < parts.length; _i++) {
- var part = parts[_i];
- if (part !== ".") {
- if (part === ".." && normalized.length > 0 && lastOrUndefined(normalized) !== "..") {
- normalized.pop();
- }
- else {
- if (part) {
- normalized.push(part);
- }
- }
- }
- }
- return normalized;
- }
- function normalizePath(path) {
- path = normalizeSlashes(path);
- var rootLength = getRootLength(path);
- var normalized = getNormalizedParts(path, rootLength);
- return path.substr(0, rootLength) + normalized.join(ts.directorySeparator);
- }
- ts.normalizePath = normalizePath;
- function getDirectoryPath(path) {
- return path.substr(0, Math.max(getRootLength(path), path.lastIndexOf(ts.directorySeparator)));
- }
- ts.getDirectoryPath = getDirectoryPath;
- function isUrl(path) {
- return path && !isRootedDiskPath(path) && path.indexOf("://") !== -1;
- }
- ts.isUrl = isUrl;
- function isRootedDiskPath(path) {
- return getRootLength(path) !== 0;
- }
- ts.isRootedDiskPath = isRootedDiskPath;
- function normalizedPathComponents(path, rootLength) {
- var normalizedParts = getNormalizedParts(path, rootLength);
- return [path.substr(0, rootLength)].concat(normalizedParts);
- }
- function getNormalizedPathComponents(path, currentDirectory) {
- path = normalizeSlashes(path);
- var rootLength = getRootLength(path);
- if (rootLength === 0) {
- path = combinePaths(normalizeSlashes(currentDirectory), path);
- rootLength = getRootLength(path);
- }
- return normalizedPathComponents(path, rootLength);
- }
- ts.getNormalizedPathComponents = getNormalizedPathComponents;
- function getNormalizedAbsolutePath(fileName, currentDirectory) {
- return getNormalizedPathFromPathComponents(getNormalizedPathComponents(fileName, currentDirectory));
- }
- ts.getNormalizedAbsolutePath = getNormalizedAbsolutePath;
- function getNormalizedPathFromPathComponents(pathComponents) {
- if (pathComponents && pathComponents.length) {
- return pathComponents[0] + pathComponents.slice(1).join(ts.directorySeparator);
- }
- }
- ts.getNormalizedPathFromPathComponents = getNormalizedPathFromPathComponents;
- function getNormalizedPathComponentsOfUrl(url) {
- var urlLength = url.length;
- var rootLength = url.indexOf("://") + "://".length;
- while (rootLength < urlLength) {
- if (url.charCodeAt(rootLength) === 47) {
- rootLength++;
- }
- else {
- break;
- }
- }
- if (rootLength === urlLength) {
- return [url];
- }
- var indexOfNextSlash = url.indexOf(ts.directorySeparator, rootLength);
- if (indexOfNextSlash !== -1) {
- rootLength = indexOfNextSlash + 1;
- return normalizedPathComponents(url, rootLength);
- }
- else {
- return [url + ts.directorySeparator];
- }
- }
- function getNormalizedPathOrUrlComponents(pathOrUrl, currentDirectory) {
- if (isUrl(pathOrUrl)) {
- return getNormalizedPathComponentsOfUrl(pathOrUrl);
- }
- else {
- return getNormalizedPathComponents(pathOrUrl, currentDirectory);
- }
- }
- function getRelativePathToDirectoryOrUrl(directoryPathOrUrl, relativeOrAbsolutePath, currentDirectory, getCanonicalFileName, isAbsolutePathAnUrl) {
- var pathComponents = getNormalizedPathOrUrlComponents(relativeOrAbsolutePath, currentDirectory);
- var directoryComponents = getNormalizedPathOrUrlComponents(directoryPathOrUrl, currentDirectory);
- if (directoryComponents.length > 1 && lastOrUndefined(directoryComponents) === "") {
- directoryComponents.length--;
- }
- for (var joinStartIndex = 0; joinStartIndex < pathComponents.length && joinStartIndex < directoryComponents.length; joinStartIndex++) {
- if (getCanonicalFileName(directoryComponents[joinStartIndex]) !== getCanonicalFileName(pathComponents[joinStartIndex])) {
- break;
- }
- }
- if (joinStartIndex) {
- var relativePath = "";
- var relativePathComponents = pathComponents.slice(joinStartIndex, pathComponents.length);
- for (; joinStartIndex < directoryComponents.length; joinStartIndex++) {
- if (directoryComponents[joinStartIndex] !== "") {
- relativePath = relativePath + ".." + ts.directorySeparator;
- }
- }
- return relativePath + relativePathComponents.join(ts.directorySeparator);
- }
- var absolutePath = getNormalizedPathFromPathComponents(pathComponents);
- if (isAbsolutePathAnUrl && isRootedDiskPath(absolutePath)) {
- absolutePath = "file:///" + absolutePath;
- }
- return absolutePath;
- }
- ts.getRelativePathToDirectoryOrUrl = getRelativePathToDirectoryOrUrl;
- function getBaseFileName(path) {
- if (!path) {
- return undefined;
- }
- var i = path.lastIndexOf(ts.directorySeparator);
- return i < 0 ? path : path.substring(i + 1);
- }
- ts.getBaseFileName = getBaseFileName;
- function combinePaths(path1, path2) {
- if (!(path1 && path1.length))
- return path2;
- if (!(path2 && path2.length))
- return path1;
- if (getRootLength(path2) !== 0)
- return path2;
- if (path1.charAt(path1.length - 1) === ts.directorySeparator)
- return path1 + path2;
- return path1 + ts.directorySeparator + path2;
- }
- ts.combinePaths = combinePaths;
- function fileExtensionIs(path, extension) {
- var pathLen = path.length;
- var extLen = extension.length;
- return pathLen > extLen && path.substr(pathLen - extLen, extLen) === extension;
- }
- ts.fileExtensionIs = fileExtensionIs;
- ts.supportedExtensions = [".ts", ".tsx", ".d.ts"];
- ts.moduleFileExtensions = ts.supportedExtensions;
- function isSupportedSourceFileName(fileName) {
- if (!fileName) {
- return false;
- }
- for (var _i = 0; _i < ts.supportedExtensions.length; _i++) {
- var extension = ts.supportedExtensions[_i];
- if (fileExtensionIs(fileName, extension)) {
- return true;
- }
- }
- return false;
- }
- ts.isSupportedSourceFileName = isSupportedSourceFileName;
- var extensionsToRemove = [".d.ts", ".ts", ".js", ".tsx", ".jsx"];
- function removeFileExtension(path) {
- for (var _i = 0; _i < extensionsToRemove.length; _i++) {
- var ext = extensionsToRemove[_i];
- if (fileExtensionIs(path, ext)) {
- return path.substr(0, path.length - ext.length);
- }
- }
- return path;
- }
- ts.removeFileExtension = removeFileExtension;
- var backslashOrDoubleQuote = /[\"\\]/g;
- var escapedCharsRegExp = /[\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g;
- var escapedCharsMap = {
- "\0": "\\0",
- "\t": "\\t",
- "\v": "\\v",
- "\f": "\\f",
- "\b": "\\b",
- "\r": "\\r",
- "\n": "\\n",
- "\\": "\\\\",
- "\"": "\\\"",
- "\u2028": "\\u2028",
- "\u2029": "\\u2029",
- "\u0085": "\\u0085"
- };
- function Symbol(flags, name) {
- this.flags = flags;
- this.name = name;
- this.declarations = undefined;
- }
- function Type(checker, flags) {
- this.flags = flags;
- }
- function Signature(checker) {
- }
- ts.objectAllocator = {
- getNodeConstructor: function (kind) {
- function Node() {
- }
- Node.prototype = {
- kind: kind,
- pos: -1,
- end: -1,
- flags: 0,
- parent: undefined
- };
- return Node;
- },
- getSymbolConstructor: function () { return Symbol; },
- getTypeConstructor: function () { return Type; },
- getSignatureConstructor: function () { return Signature; }
- };
- var Debug;
- (function (Debug) {
- var currentAssertionLevel = 0;
- function shouldAssert(level) {
- return currentAssertionLevel >= level;
- }
- Debug.shouldAssert = shouldAssert;
- function assert(expression, message, verboseDebugInfo) {
- if (!expression) {
- var verboseDebugString = "";
- if (verboseDebugInfo) {
- verboseDebugString = "\r\nVerbose Debug Information: " + verboseDebugInfo();
- }
- throw new Error("Debug Failure. False expression: " + (message || "") + verboseDebugString);
- }
- }
- Debug.assert = assert;
- function fail(message) {
- Debug.assert(false, message);
- }
- Debug.fail = fail;
- })(Debug = ts.Debug || (ts.Debug = {}));
- function copyListRemovingItem(item, list) {
- var copiedList = [];
- for (var i = 0, len = list.length; i < len; i++) {
- if (list[i] !== item) {
- copiedList.push(list[i]);
- }
- }
- return copiedList;
- }
- ts.copyListRemovingItem = copyListRemovingItem;
- })(ts || (ts = {}));
- var ts;
- (function (ts) {
- ts.sys = (function () {
- function getWScriptSystem() {
- var fso = new ActiveXObject("Scripting.FileSystemObject");
- var fileStream = new ActiveXObject("ADODB.Stream");
- fileStream.Type = 2;
- var binaryStream = new ActiveXObject("ADODB.Stream");
- binaryStream.Type = 1;
- var args = [];
- for (var i = 0; i < WScript.Arguments.length; i++) {
- args[i] = WScript.Arguments.Item(i);
- }
- function readFile(fileName, encoding) {
- if (!fso.FileExists(fileName)) {
- return undefined;
- }
- fileStream.Open();
- try {
- if (encoding) {
- fileStream.Charset = encoding;
- fileStream.LoadFromFile(fileName);
- }
- else {
- fileStream.Charset = "x-ansi";
- fileStream.LoadFromFile(fileName);
- var bom = fileStream.ReadText(2) || "";
- fileStream.Position = 0;
- fileStream.Charset = bom.length >= 2 && (bom.charCodeAt(0) === 0xFF && bom.charCodeAt(1) === 0xFE || bom.charCodeAt(0) === 0xFE && bom.charCodeAt(1) === 0xFF) ? "unicode" : "utf-8";
- }
- return fileStream.ReadText();
- }
- catch (e) {
- throw e;
- }
- finally {
- fileStream.Close();
- }
- }
- function writeFile(fileName, data, writeByteOrderMark) {
- fileStream.Open();
- binaryStream.Open();
- try {
- fileStream.Charset = "utf-8";
- fileStream.WriteText(data);
- if (writeByteOrderMark) {
- fileStream.Position = 0;
- }
- else {
- fileStream.Position = 3;
- }
- fileStream.CopyTo(binaryStream);
- binaryStream.SaveToFile(fileName, 2);
- }
- finally {
- binaryStream.Close();
- fileStream.Close();
- }
- }
- function getCanonicalPath(path) {
- return path.toLowerCase();
- }
- function getNames(collection) {
- var result = [];
- for (var e = new Enumerator(collection); !e.atEnd(); e.moveNext()) {
- result.push(e.item().Name);
- }
- return result.sort();
- }
- function readDirectory(path, extension, exclude) {
- var result = [];
- exclude = ts.map(exclude, function (s) { return getCanonicalPath(ts.combinePaths(path, s)); });
- visitDirectory(path);
- return result;
- function visitDirectory(path) {
- var folder = fso.GetFolder(path || ".");
- var files = getNames(folder.files);
- for (var _i = 0; _i < files.length; _i++) {
- var current = files[_i];
- var name_1 = ts.combinePaths(path, current);
- if ((!extension || ts.fileExtensionIs(name_1, extension)) && !ts.contains(exclude, getCanonicalPath(name_1))) {
- result.push(name_1);
- }
- }
- var subfolders = getNames(folder.subfolders);
- for (var _a = 0; _a < subfolders.length; _a++) {
- var current = subfolders[_a];
- var name_2 = ts.combinePaths(path, current);
- if (!ts.contains(exclude, getCanonicalPath(name_2))) {
- visitDirectory(name_2);
- }
- }
- }
- }
- return {
- args: args,
- newLine: "\r\n",
- useCaseSensitiveFileNames: false,
- write: function (s) {
- WScript.StdOut.Write(s);
- },
- readFile: readFile,
- writeFile: writeFile,
- resolvePath: function (path) {
- return fso.GetAbsolutePathName(path);
- },
- fileExists: function (path) {
- return fso.FileExists(path);
- },
- directoryExists: function (path) {
- return fso.FolderExists(path);
- },
- createDirectory: function (directoryName) {
- if (!this.directoryExists(directoryName)) {
- fso.CreateFolder(directoryName);
- }
- },
- getExecutingFilePath: function () {
- return WScript.ScriptFullName;
- },
- getCurrentDirectory: function () {
- return new ActiveXObject("WScript.Shell").CurrentDirectory;
- },
- readDirectory: readDirectory,
- exit: function (exitCode) {
- try {
- WScript.Quit(exitCode);
- }
- catch (e) {
- }
- }
- };
- }
- function getNodeSystem() {
- var _fs = require("fs");
- var _path = require("path");
- var _os = require("os");
- function createWatchedFileSet(interval, chunkSize) {
- if (interval === void 0) { interval = 2500; }
- if (chunkSize === void 0) { chunkSize = 30; }
- var watchedFiles = [];
- var nextFileToCheck = 0;
- var watchTimer;
- function getModifiedTime(fileName) {
- return _fs.statSync(fileName).mtime;
- }
- function poll(checkedIndex) {
- var watchedFile = watchedFiles[checkedIndex];
- if (!watchedFile) {
- return;
- }
- _fs.stat(watchedFile.fileName, function (err, stats) {
- if (err) {
- watchedFile.callback(watchedFile.fileName);
- }
- else if (watchedFile.mtime.getTime() !== stats.mtime.getTime()) {
- watchedFile.mtime = getModifiedTime(watchedFile.fileName);
- watchedFile.callback(watchedFile.fileName, watchedFile.mtime.getTime() === 0);
- }
- });
- }
- function startWatchTimer() {
- watchTimer = setInterval(function () {
- var count = 0;
- var nextToCheck = nextFileToCheck;
- var firstCheck = -1;
- while ((count < chunkSize) && (nextToCheck !== firstCheck)) {
- poll(nextToCheck);
- if (firstCheck < 0) {
- firstCheck = nextToCheck;
- }
- nextToCheck++;
- if (nextToCheck === watchedFiles.length) {
- nextToCheck = 0;
- }
- count++;
- }
- nextFileToCheck = nextToCheck;
- }, interval);
- }
- function addFile(fileName, callback) {
- var file = {
- fileName: fileName,
- callback: callback,
- mtime: getModifiedTime(fileName)
- };
- watchedFiles.push(file);
- if (watchedFiles.length === 1) {
- startWatchTimer();
- }
- return file;
- }
- function removeFile(file) {
- watchedFiles = ts.copyListRemovingItem(file, watchedFiles);
- }
- return {
- getModifiedTime: getModifiedTime,
- poll: poll,
- startWatchTimer: startWatchTimer,
- addFile: addFile,
- removeFile: removeFile
- };
- }
- var watchedFileSet = createWatchedFileSet();
- function isNode4OrLater() {
- return parseInt(process.version.charAt(1)) >= 4;
- }
- var platform = _os.platform();
- var useCaseSensitiveFileNames = platform !== "win32" && platform !== "win64" && platform !== "darwin";
- function readFile(fileName, encoding) {
- if (!_fs.existsSync(fileName)) {
- return undefined;
- }
- var buffer = _fs.readFileSync(fileName);
- var len = buffer.length;
- if (len >= 2 && buffer[0] === 0xFE && buffer[1] === 0xFF) {
- len &= ~1;
- for (var i = 0; i < len; i += 2) {
- var temp = buffer[i];
- buffer[i] = buffer[i + 1];
- buffer[i + 1] = temp;
- }
- return buffer.toString("utf16le", 2);
- }
- if (len >= 2 && buffer[0] === 0xFF && buffer[1] === 0xFE) {
- return buffer.toString("utf16le", 2);
- }
- if (len >= 3 && buffer[0] === 0xEF && buffer[1] === 0xBB && buffer[2] === 0xBF) {
- return buffer.toString("utf8", 3);
- }
- return buffer.toString("utf8");
- }
- function writeFile(fileName, data, writeByteOrderMark) {
- if (writeByteOrderMark) {
- data = "\uFEFF" + data;
- }
- _fs.writeFileSync(fileName, data, "utf8");
- }
- function getCanonicalPath(path) {
- return useCaseSensitiveFileNames ? path.toLowerCase() : path;
- }
- function readDirectory(path, extension, exclude) {
- var result = [];
- exclude = ts.map(exclude, function (s) { return getCanonicalPath(ts.combinePaths(path, s)); });
- visitDirectory(path);
- return result;
- function visitDirectory(path) {
- var files = _fs.readdirSync(path || ".").sort();
- var directories = [];
- for (var _i = 0; _i < files.length; _i++) {
- var current = files[_i];
- var name_3 = ts.combinePaths(path, current);
- if (!ts.contains(exclude, getCanonicalPath(name_3))) {
- var stat = _fs.statSync(name_3);
- if (stat.isFile()) {
- if (!extension || ts.fileExtensionIs(name_3, extension)) {
- result.push(name_3);
- }
- }
- else if (stat.isDirectory()) {
- directories.push(name_3);
- }
- }
- }
- for (var _a = 0; _a < directories.length; _a++) {
- var current = directories[_a];
- visitDirectory(current);
- }
- }
- }
- return {
- args: process.argv.slice(2),
- newLine: _os.EOL,
- useCaseSensitiveFileNames: useCaseSensitiveFileNames,
- write: function (s) {
- var buffer = new Buffer(s, "utf8");
- var offset = 0;
- var toWrite = buffer.length;
- var written = 0;
- while ((written = _fs.writeSync(1, buffer, offset, toWrite)) < toWrite) {
- offset += written;
- toWrite -= written;
- }
- },
- readFile: readFile,
- writeFile: writeFile,
- watchFile: function (fileName, callback) {
- if (isNode4OrLater()) {
- return _fs.watch(fileName, function (eventName, relativeFileName) { return callback(fileName); });
- }
- var watchedFile = watchedFileSet.addFile(fileName, callback);
- return {
- close: function () { return watchedFileSet.removeFile(watchedFile); }
- };
- },
- watchDirectory: function (path, callback, recursive) {
- return _fs.watch(path, { persisten: true, recursive: !!recursive }, function (eventName, relativeFileName) {
- if (eventName === "rename") {
- callback(!relativeFileName ? relativeFileName : ts.normalizePath(ts.combinePaths(path, relativeFileName)));
- }
- ;
- });
- },
- resolvePath: function (path) {
- return _path.resolve(path);
- },
- fileExists: function (path) {
- return _fs.existsSync(path);
- },
- directoryExists: function (path) {
- return _fs.existsSync(path) && _fs.statSync(path).isDirectory();
- },
- createDirectory: function (directoryName) {
- if (!this.directoryExists(directoryName)) {
- _fs.mkdirSync(directoryName);
- }
- },
- getExecutingFilePath: function () {
- return __filename;
- },
- getCurrentDirectory: function () {
- return process.cwd();
- },
- readDirectory: readDirectory,
- getMemoryUsage: function () {
- if (global.gc) {
- global.gc();
- }
- return process.memoryUsage().heapUsed;
- },
- exit: function (exitCode) {
- process.exit(exitCode);
- }
- };
- }
- if (typeof WScript !== "undefined" && typeof ActiveXObject === "function") {
- return getWScriptSystem();
- }
- else if (typeof process !== "undefined" && process.nextTick && !process.browser && typeof require !== "undefined") {
- return getNodeSystem();
- }
- else {
- return undefined;
- }
- })();
- })(ts || (ts = {}));
- var ts;
- (function (ts) {
- ts.Diagnostics = {
- Unterminated_string_literal: { code: 1002, category: ts.DiagnosticCategory.Error, key: "Unterminated string literal." },
- Identifier_expected: { code: 1003, category: ts.DiagnosticCategory.Error, key: "Identifier expected." },
- _0_expected: { code: 1005, category: ts.DiagnosticCategory.Error, key: "'{0}' expected." },
- A_file_cannot_have_a_reference_to_itself: { code: 1006, category: ts.DiagnosticCategory.Error, key: "A file cannot have a reference to itself." },
- Trailing_comma_not_allowed: { code: 1009, category: ts.DiagnosticCategory.Error, key: "Trailing comma not allowed." },
- Asterisk_Slash_expected: { code: 1010, category: ts.DiagnosticCategory.Error, key: "'*/' expected." },
- Unexpected_token: { code: 1012, category: ts.DiagnosticCategory.Error, key: "Unexpected token." },
- A_rest_parameter_must_be_last_in_a_parameter_list: { code: 1014, category: ts.DiagnosticCategory.Error, key: "A rest parameter must be last in a parameter list." },
- Parameter_cannot_have_question_mark_and_initializer: { code: 1015, category: ts.DiagnosticCategory.Error, key: "Parameter cannot have question mark and initializer." },
- A_required_parameter_cannot_follow_an_optional_parameter: { code: 1016, category: ts.DiagnosticCategory.Error, key: "A required parameter cannot follow an optional parameter." },
- An_index_signature_cannot_have_a_rest_parameter: { code: 1017, category: ts.DiagnosticCategory.Error, key: "An index signature cannot have a rest parameter." },
- An_index_signature_parameter_cannot_have_an_accessibility_modifier: { code: 1018, category: ts.DiagnosticCategory.Error, key: "An index signature parameter cannot have an accessibility modifier." },
- An_index_signature_parameter_cannot_have_a_question_mark: { code: 1019, category: ts.DiagnosticCategory.Error, key: "An index signature parameter cannot have a question mark." },
- An_index_signature_parameter_cannot_have_an_initializer: { code: 1020, category: ts.DiagnosticCategory.Error, key: "An index signature parameter cannot have an initializer." },
- An_index_signature_must_have_a_type_annotation: { code: 1021, category: ts.DiagnosticCategory.Error, key: "An index signature must have a type annotation." },
- An_index_signature_parameter_must_have_a_type_annotation: { code: 1022, category: ts.DiagnosticCategory.Error, key: "An index signature parameter must have a type annotation." },
- An_index_signature_parameter_type_must_be_string_or_number: { code: 1023, category: ts.DiagnosticCategory.Error, key: "An index signature parameter type must be 'string' or 'number'." },
- Accessibility_modifier_already_seen: { code: 1028, category: ts.DiagnosticCategory.Error, key: "Accessibility modifier already seen." },
- _0_modifier_must_precede_1_modifier: { code: 1029, category: ts.DiagnosticCategory.Error, key: "'{0}' modifier must precede '{1}' modifier." },
- _0_modifier_already_seen: { code: 1030, category: ts.DiagnosticCategory.Error, key: "'{0}' modifier already seen." },
- _0_modifier_cannot_appear_on_a_class_element: { code: 1031, category: ts.DiagnosticCategory.Error, key: "'{0}' modifier cannot appear on a class element." },
- super_must_be_followed_by_an_argument_list_or_member_access: { code: 1034, category: ts.DiagnosticCategory.Error, key: "'super' must be followed by an argument list or member access." },
- Only_ambient_modules_can_use_quoted_names: { code: 1035, category: ts.DiagnosticCategory.Error, key: "Only ambient modules can use quoted names." },
- Statements_are_not_allowed_in_ambient_contexts: { code: 1036, category: ts.DiagnosticCategory.Error, key: "Statements are not allowed in ambient contexts." },
- A_declare_modifier_cannot_be_used_in_an_already_ambient_context: { code: 1038, category: ts.DiagnosticCategory.Error, key: "A 'declare' modifier cannot be used in an already ambient context." },
- Initializers_are_not_allowed_in_ambient_contexts: { code: 1039, category: ts.DiagnosticCategory.Error, key: "Initializers are not allowed in ambient contexts." },
- _0_modifier_cannot_be_used_in_an_ambient_context: { code: 1040, category: ts.DiagnosticCategory.Error, key: "'{0}' modifier cannot be used in an ambient context." },
- _0_modifier_cannot_be_used_with_a_class_declaration: { code: 1041, category: ts.DiagnosticCategory.Error, key: "'{0}' modifier cannot be used with a class declaration." },
- _0_modifier_cannot_be_used_here: { code: 1042, category: ts.DiagnosticCategory.Error, key: "'{0}' modifier cannot be used here." },
- _0_modifier_cannot_appear_on_a_data_property: { code: 1043, category: ts.DiagnosticCategory.Error, key: "'{0}' modifier cannot appear on a data property." },
- _0_modifier_cannot_appear_on_a_module_element: { code: 1044, category: ts.DiagnosticCategory.Error, key: "'{0}' modifier cannot appear on a module element." },
- A_0_modifier_cannot_be_used_with_an_interface_declaration: { code: 1045, category: ts.DiagnosticCategory.Error, key: "A '{0}' modifier cannot be used with an interface declaration." },
- A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file: { code: 1046, category: ts.DiagnosticCategory.Error, key: "A 'declare' modifier is required for a top level declaration in a .d.ts file." },
- A_rest_parameter_cannot_be_optional: { code: 1047, category: ts.DiagnosticCategory.Error, key: "A rest parameter cannot be optional." },
- A_rest_parameter_cannot_have_an_initializer: { code: 1048, category: ts.DiagnosticCategory.Error, key: "A rest parameter cannot have an initializer." },
- A_set_accessor_must_have_exactly_one_parameter: { code: 1049, category: ts.DiagnosticCategory.Error, key: "A 'set' accessor must have exactly one parameter." },
- A_set_accessor_cannot_have_an_optional_parameter: { code: 1051, category: ts.DiagnosticCategory.Error, key: "A 'set' accessor cannot have an optional parameter." },
- A_set_accessor_parameter_cannot_have_an_initializer: { code: 1052, category: ts.DiagnosticCategory.Error, key: "A 'set' accessor parameter cannot have an initializer." },
- A_set_accessor_cannot_have_rest_parameter: { code: 1053, category: ts.DiagnosticCategory.Error, key: "A 'set' accessor cannot have rest parameter." },
- A_get_accessor_cannot_have_parameters: { code: 1054, category: ts.DiagnosticCategory.Error, key: "A 'get' accessor cannot have parameters." },
- Type_0_is_not_a_valid_async_function_return_type: { code: 1055, category: ts.DiagnosticCategory.Error, key: "Type '{0}' is not a valid async function return type." },
- Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: { code: 1056, category: ts.DiagnosticCategory.Error, key: "Accessors are only available when targeting ECMAScript 5 and higher." },
- An_async_function_or_method_must_have_a_valid_awaitable_return_type: { code: 1057, category: ts.DiagnosticCategory.Error, key: "An async function or method must have a valid awaitable return type." },
- Operand_for_await_does_not_have_a_valid_callable_then_member: { code: 1058, category: ts.DiagnosticCategory.Error, key: "Operand for 'await' does not have a valid callable 'then' member." },
- Return_expression_in_async_function_does_not_have_a_valid_callable_then_member: { code: 1059, category: ts.DiagnosticCategory.Error, key: "Return expression in async function does not have a valid callable 'then' member." },
- Expression_body_for_async_arrow_function_does_not_have_a_valid_callable_then_member: { code: 1060, category: ts.DiagnosticCategory.Error, key: "Expression body for async arrow function does not have a valid callable 'then' member." },
- Enum_member_must_have_initializer: { code: 1061, category: ts.DiagnosticCategory.Error, key: "Enum member must have initializer." },
- _0_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method: { code: 1062, category: ts.DiagnosticCategory.Error, key: "{0} is referenced directly or indirectly in the fulfillment callback of its own 'then' method." },
- An_export_assignment_cannot_be_used_in_a_namespace: { code: 1063, category: ts.DiagnosticCategory.Error, key: "An export assignment cannot be used in a namespace." },
- In_ambient_enum_declarations_member_initializer_must_be_constant_expression: { code: 1066, category: ts.DiagnosticCategory.Error, key: "In ambient enum declarations member initializer must be constant expression." },
- Unexpected_token_A_constructor_method_accessor_or_property_was_expected: { code: 1068, category: ts.DiagnosticCategory.Error, key: "Unexpected token. A constructor, method, accessor, or property was expected." },
- A_0_modifier_cannot_be_used_with_an_import_declaration: { code: 1079, category: ts.DiagnosticCategory.Error, key: "A '{0}' modifier cannot be used with an import declaration." },
- Invalid_reference_directive_syntax: { code: 1084, category: ts.DiagnosticCategory.Error, key: "Invalid 'reference' directive syntax." },
- Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher: { code: 1085, category: ts.DiagnosticCategory.Error, key: "Octal literals are not available when targeting ECMAScript 5 and higher." },
- An_accessor_cannot_be_declared_in_an_ambient_context: { code: 1086, category: ts.DiagnosticCategory.Error, key: "An accessor cannot be declared in an ambient context." },
- _0_modifier_cannot_appear_on_a_constructor_declaration: { code: 1089, category: ts.DiagnosticCategory.Error, key: "'{0}' modifier cannot appear on a constructor declaration." },
- _0_modifier_cannot_appear_on_a_parameter: { code: 1090, category: ts.DiagnosticCategory.Error, key: "'{0}' modifier cannot appear on a parameter." },
- Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: { code: 1091, category: ts.DiagnosticCategory.Error, key: "Only a single variable declaration is allowed in a 'for...in' statement." },
- Type_parameters_cannot_appear_on_a_constructor_declaration: { code: 1092, category: ts.DiagnosticCategory.Error, key: "Type parameters cannot appear on a constructor declaration." },
- Type_annotation_cannot_appear_on_a_constructor_declaration: { code: 1093, category: ts.DiagnosticCategory.Error, key: "Type annotation cannot appear on a constructor declaration." },
- An_accessor_cannot_have_type_parameters: { code: 1094, category: ts.DiagnosticCategory.Error, key: "An accessor cannot have type parameters." },
- A_set_accessor_cannot_have_a_return_type_annotation: { code: 1095, category: ts.DiagnosticCategory.Error, key: "A 'set' accessor cannot have a return type annotation." },
- An_index_signature_must_have_exactly_one_parameter: { code: 1096, category: ts.DiagnosticCategory.Error, key: "An index signature must have exactly one parameter." },
- _0_list_cannot_be_empty: { code: 1097, category: ts.DiagnosticCategory.Error, key: "'{0}' list cannot be empty." },
- Type_parameter_list_cannot_be_empty: { code: 1098, category: ts.DiagnosticCategory.Error, key: "Type parameter list cannot be empty." },
- Type_argument_list_cannot_be_empty: { code: 1099, category: ts.DiagnosticCategory.Error, key: "Type argument list cannot be empty." },
- Invalid_use_of_0_in_strict_mode: { code: 1100, category: ts.DiagnosticCategory.Error, key: "Invalid use of '{0}' in strict mode." },
- with_statements_are_not_allowed_in_strict_mode: { code: 1101, category: ts.DiagnosticCategory.Error, key: "'with' statements are not allowed in strict mode." },
- delete_cannot_be_called_on_an_identifier_in_strict_mode: { code: 1102, category: ts.DiagnosticCategory.Error, key: "'delete' cannot be called on an identifier in strict mode." },
- A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: { code: 1104, category: ts.DiagnosticCategory.Error, key: "A 'continue' statement can only be used within an enclosing iteration statement." },
- A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: { code: 1105, category: ts.DiagnosticCategory.Error, key: "A 'break' statement can only be used within an enclosing iteration or switch statement." },
- Jump_target_cannot_cross_function_boundary: { code: 1107, category: ts.DiagnosticCategory.Error, key: "Jump target cannot cross function boundary." },
- A_return_statement_can_only_be_used_within_a_function_body: { code: 1108, category: ts.DiagnosticCategory.Error, key: "A 'return' statement can only be used within a function body." },
- Expression_expected: { code: 1109, category: ts.DiagnosticCategory.Error, key: "Expression expected." },
- Type_expected: { code: 1110, category: ts.DiagnosticCategory.Error, key: "Type expected." },
- A_class_member_cannot_be_declared_optional: { code: 1112, category: ts.DiagnosticCategory.Error, key: "A class member cannot be declared optional." },
- A_default_clause_cannot_appear_more_than_once_in_a_switch_statement: { code: 1113, category: ts.DiagnosticCategory.Error, key: "A 'default' clause cannot appear more than once in a 'switch' statement." },
- Duplicate_label_0: { code: 1114, category: ts.DiagnosticCategory.Error, key: "Duplicate label '{0}'" },
- A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement: { code: 1115, category: ts.DiagnosticCategory.Error, key: "A 'continue' statement can only jump to a label of an enclosing iteration statement." },
- A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement: { code: 1116, category: ts.DiagnosticCategory.Error, key: "A 'break' statement can only jump to a label of an enclosing statement." },
- An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode: { code: 1117, category: ts.DiagnosticCategory.Error, key: "An object literal cannot have multiple properties with the same name in strict mode." },
- An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name: { code: 1118, category: ts.DiagnosticCategory.Error, key: "An object literal cannot have multiple get/set accessors with the same name." },
- An_object_literal_cannot_have_property_and_accessor_with_the_same_name: { code: 1119, category: ts.DiagnosticCategory.Error, key: "An object literal cannot have property and accessor with the same name." },
- An_export_assignment_cannot_have_modifiers: { code: 1120, category: ts.DiagnosticCategory.Error, key: "An export assignment cannot have modifiers." },
- Octal_literals_are_not_allowed_in_strict_mode: { code: 1121, category: ts.DiagnosticCategory.Error, key: "Octal literals are not allowed in strict mode." },
- A_tuple_type_element_list_cannot_be_empty: { code: 1122, category: ts.DiagnosticCategory.Error, key: "A tuple type element list cannot be empty." },
- Variable_declaration_list_cannot_be_empty: { code: 1123, category: ts.DiagnosticCategory.Error, key: "Variable declaration list cannot be empty." },
- Digit_expected: { code: 1124, category: ts.DiagnosticCategory.Error, key: "Digit expected." },
- Hexadecimal_digit_expected: { code: 1125, category: ts.DiagnosticCategory.Error, key: "Hexadecimal digit expected." },
- Unexpected_end_of_text: { code: 1126, category: ts.DiagnosticCategory.Error, key: "Unexpected end of text." },
- Invalid_character: { code: 1127, category: ts.DiagnosticCategory.Error, key: "Invalid character." },
- Declaration_or_statement_expected: { code: 1128, category: ts.DiagnosticCategory.Error, key: "Declaration or statement expected." },
- Statement_expected: { code: 1129, category: ts.DiagnosticCategory.Error, key: "Statement expected." },
- case_or_default_expected: { code: 1130, category: ts.DiagnosticCategory.Error, key: "'case' or 'default' expected." },
- Property_or_signature_expected: { code: 1131, category: ts.DiagnosticCategory.Error, key: "Property or signature expected." },
- Enum_member_expected: { code: 1132, category: ts.DiagnosticCategory.Error, key: "Enum member expected." },
- Variable_declaration_expected: { code: 1134, category: ts.DiagnosticCategory.Error, key: "Variable declaration expected." },
- Argument_expression_expected: { code: 1135, category: ts.DiagnosticCategory.Error, key: "Argument expression expected." },
- Property_assignment_expected: { code: 1136, category: ts.DiagnosticCategory.Error, key: "Property assignment expected." },
- Expression_or_comma_expected: { code: 1137, category: ts.DiagnosticCategory.Error, key: "Expression or comma expected." },
- Parameter_declaration_expected: { code: 1138, category: ts.DiagnosticCategory.Error, key: "Parameter declaration expected." },
- Type_parameter_declaration_expected: { code: 1139, category: ts.DiagnosticCategory.Error, key: "Type parameter declaration expected." },
- Type_argument_expected: { code: 1140, category: ts.DiagnosticCategory.Error, key: "Type argument expected." },
- String_literal_expected: { code: 1141, category: ts.DiagnosticCategory.Error, key: "String literal expected." },
- Line_break_not_permitted_here: { code: 1142, category: ts.DiagnosticCategory.Error, key: "Line break not permitted here." },
- or_expected: { code: 1144, category: ts.DiagnosticCategory.Error, key: "'{' or ';' expected." },
- Modifiers_not_permitted_on_index_signature_members: { code: 1145, category: ts.DiagnosticCategory.Error, key: "Modifiers not permitted on index signature members." },
- Declaration_expected: { code: 1146, category: ts.DiagnosticCategory.Error, key: "Declaration expected." },
- Import_declarations_in_a_namespace_cannot_reference_a_module: { code: 1147, category: ts.DiagnosticCategory.Error, key: "Import declarations in a namespace cannot reference a module." },
- Cannot_compile_modules_unless_the_module_flag_is_provided: { code: 1148, category: ts.DiagnosticCategory.Error, key: "Cannot compile modules unless the '--module' flag is provided." },
- File_name_0_differs_from_already_included_file_name_1_only_in_casing: { code: 1149, category: ts.DiagnosticCategory.Error, key: "File name '{0}' differs from already included file name '{1}' only in casing" },
- new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: { code: 1150, category: ts.DiagnosticCategory.Error, key: "'new T[]' cannot be used to create an array. Use 'new Array<T>()' instead." },
- const_declarations_must_be_initialized: { code: 1155, category: ts.DiagnosticCategory.Error, key: "'const' declarations must be initialized" },
- const_declarations_can_only_be_declared_inside_a_block: { code: 1156, category: ts.DiagnosticCategory.Error, key: "'const' declarations can only be declared inside a block." },
- let_declarations_can_only_be_declared_inside_a_block: { code: 1157, category: ts.DiagnosticCategory.Error, key: "'let' declarations can only be declared inside a block." },
- Unterminated_template_literal: { code: 1160, category: ts.DiagnosticCategory.Error, key: "Unterminated template literal." },
- Unterminated_regular_expression_literal: { code: 1161, category: ts.DiagnosticCategory.Error, key: "Unterminated regular expression literal." },
- An_object_member_cannot_be_declared_optional: { code: 1162, category: ts.DiagnosticCategory.Error, key: "An object member cannot be declared optional." },
- A_yield_expression_is_only_allowed_in_a_generator_body: { code: 1163, category: ts.DiagnosticCategory.Error, key: "A 'yield' expression is only allowed in a generator body." },
- Computed_property_names_are_not_allowed_in_enums: { code: 1164, category: ts.DiagnosticCategory.Error, key: "Computed property names are not allowed in enums." },
- A_computed_property_name_in_an_ambient_context_must_directly_refer_to_a_built_in_symbol: { code: 1165, category: ts.DiagnosticCategory.Error, key: "A computed property name in an ambient context must directly refer to a built-in symbol." },
- A_computed_property_name_in_a_class_property_declaration_must_directly_refer_to_a_built_in_symbol: { code: 1166, category: ts.DiagnosticCategory.Error, key: "A computed property name in a class property declaration must directly refer to a built-in symbol." },
- A_computed_property_name_in_a_method_overload_must_directly_refer_to_a_built_in_symbol: { code: 1168, category: ts.DiagnosticCategory.Error, key: "A computed property name in a method overload must directly refer to a built-in symbol." },
- A_computed_property_name_in_an_interface_must_directly_refer_to_a_built_in_symbol: { code: 1169, category: ts.DiagnosticCategory.Error, key: "A computed property name in an interface must directly refer to a built-in symbol." },
- A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol: { code: 1170, category: ts.DiagnosticCategory.Error, key: "A computed property name in a type literal must directly refer to a built-in symbol." },
- A_comma_expression_is_not_allowed_in_a_computed_property_name: { code: 1171, category: ts.DiagnosticCategory.Error, key: "A comma expression is not allowed in a computed property name." },
- extends_clause_already_seen: { code: 1172, category: ts.DiagnosticCategory.Error, key: "'extends' clause already seen." },
- extends_clause_must_precede_implements_clause: { code: 1173, category: ts.DiagnosticCategory.Error, key: "'extends' clause must precede 'implements' clause." },
- Classes_can_only_extend_a_single_class: { code: 1174, category: ts.DiagnosticCategory.Error, key: "Classes can only extend a single class." },
- implements_clause_already_seen: { code: 1175, category: ts.DiagnosticCategory.Error, key: "'implements' clause already seen." },
- Interface_declaration_cannot_have_implements_clause: { code: 1176, category: ts.DiagnosticCategory.Error, key: "Interface declaration cannot have 'implements' clause." },
- Binary_digit_expected: { code: 1177, category: ts.DiagnosticCategory.Error, key: "Binary digit expected." },
- Octal_digit_expected: { code: 1178, category: ts.DiagnosticCategory.Error, key: "Octal digit expected." },
- Unexpected_token_expected: { code: 1179, category: ts.DiagnosticCategory.Error, key: "Unexpected token. '{' expected." },
- Property_destructuring_pattern_expected: { code: 1180, category: ts.DiagnosticCategory.Error, key: "Property destructuring pattern expected." },
- Array_element_destructuring_pattern_expected: { code: 1181, category: ts.DiagnosticCategory.Error, key: "Array element destructuring pattern expected." },
- A_destructuring_declaration_must_have_an_initializer: { code: 1182, category: ts.DiagnosticCategory.Error, key: "A destructuring declaration must have an initializer." },
- An_implementation_cannot_be_declared_in_ambient_contexts: { code: 1183, category: ts.DiagnosticCategory.Error, key: "An implementation cannot be declared in ambient contexts." },
- Modifiers_cannot_appear_here: { code: 1184, category: ts.DiagnosticCategory.Error, key: "Modifiers cannot appear here." },
- Merge_conflict_marker_encountered: { code: 1185, category: ts.DiagnosticCategory.Error, key: "Merge conflict marker encountered." },
- A_rest_element_cannot_have_an_initializer: { code: 1186, category: ts.DiagnosticCategory.Error, key: "A rest element cannot have an initializer." },
- A_parameter_property_may_not_be_a_binding_pattern: { code: 1187, category: ts.DiagnosticCategory.Error, key: "A parameter property may not be a binding pattern." },
- Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement: { code: 1188, category: ts.DiagnosticCategory.Error, key: "Only a single variable declaration is allowed in a 'for...of' statement." },
- The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer: { code: 1189, category: ts.DiagnosticCategory.Error, key: "The variable declaration of a 'for...in' statement cannot have an initializer." },
- The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer: { code: 1190, category: ts.DiagnosticCategory.Error, key: "The variable declaration of a 'for...of' statement cannot have an initializer." },
- An_import_declaration_cannot_have_modifiers: { code: 1191, category: ts.DiagnosticCategory.Error, key: "An import declaration cannot have modifiers." },
- Module_0_has_no_default_export: { code: 1192, category: ts.DiagnosticCategory.Error, key: "Module '{0}' has no default export." },
- An_export_declaration_cannot_have_modifiers: { code: 1193, category: ts.DiagnosticCategory.Error, key: "An export declaration cannot have modifiers." },
- Export_declarations_are_not_permitted_in_a_namespace: { code: 1194, category: ts.DiagnosticCategory.Error, key: "Export declarations are not permitted in a namespace." },
- Catch_clause_variable_name_must_be_an_identifier: { code: 1195, category: ts.DiagnosticCategory.Error, key: "Catch clause variable name must be an identifier." },
- Catch_clause_variable_cannot_have_a_type_annotation: { code: 1196, category: ts.DiagnosticCategory.Error, key: "Catch clause variable cannot have a type annotation." },
- Catch_clause_variable_cannot_have_an_initializer: { code: 1197, category: ts.DiagnosticCategory.Error, key: "Catch clause variable cannot have an initializer." },
- An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive: { code: 1198, category: ts.DiagnosticCategory.Error, key: "An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive." },
- Unterminated_Unicode_escape_sequence: { code: 1199, category: ts.DiagnosticCategory.Error, key: "Unterminated Unicode escape sequence." },
- Line_terminator_not_permitted_before_arrow: { code: 1200, category: ts.DiagnosticCategory.Error, key: "Line terminator not permitted before arrow." },
- Import_assignment_cannot_be_used_when_targeting_ECMAScript_6_modules_Consider_using_import_Asterisk_as_ns_from_mod_import_a_from_mod_import_d_from_mod_or_another_module_format_instead: { code: 1202, category: ts.DiagnosticCategory.Error, key: "Import assignment cannot be used when targeting ECMAScript 6 modules. Consider using 'import * as ns from \"mod\"', 'import {a} from \"mod\"', 'import d from \"mod\"', or another module format instead." },
- Export_assignment_cannot_be_used_when_targeting_ECMAScript_6_modules_Consider_using_export_default_or_another_module_format_instead: { code: 1203, category: ts.DiagnosticCategory.Error, key: "Export assignment cannot be used when targeting ECMAScript 6 modules. Consider using 'export default' or another module format instead." },
- Cannot_compile_modules_into_es6_when_targeting_ES5_or_lower: { code: 1204, category: ts.DiagnosticCategory.Error, key: "Cannot compile modules into 'es6' when targeting 'ES5' or lower." },
- Decorators_are_not_valid_here: { code: 1206, category: ts.DiagnosticCategory.Error, key: "Decorators are not valid here." },
- Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name: { code: 1207, category: ts.DiagnosticCategory.Error, key: "Decorators cannot be applied to multiple get/set accessors of the same name." },
- Cannot_compile_namespaces_when_the_isolatedModules_flag_is_provided: { code: 1208, category: ts.DiagnosticCategory.Error, key: "Cannot compile namespaces when the '--isolatedModules' flag is provided." },
- Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided: { code: 1209, category: ts.DiagnosticCategory.Error, key: "Ambient const enums are not allowed when the '--isolatedModules' flag is provided." },
- Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode: { code: 1210, category: ts.DiagnosticCategory.Error, key: "Invalid use of '{0}'. Class definitions are automatically in strict mode." },
- A_class_declaration_without_the_default_modifier_must_have_a_name: { code: 1211, category: ts.DiagnosticCategory.Error, key: "A class declaration without the 'default' modifier must have a name" },
- Identifier_expected_0_is_a_reserved_word_in_strict_mode: { code: 1212, category: ts.DiagnosticCategory.Error, key: "Identifier expected. '{0}' is a reserved word in strict mode" },
- Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode: { code: 1213, category: ts.DiagnosticCategory.Error, key: "Identifier expected. '{0}' is a reserved word in strict mode. Class definitions are automatically in strict mode." },
- Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode: { code: 1214, category: ts.DiagnosticCategory.Error, key: "Identifier expected. '{0}' is a reserved word in strict mode. Modules are automatically in strict mode." },
- Invalid_use_of_0_Modules_are_automatically_in_strict_mode: { code: 1215, category: ts.DiagnosticCategory.Error, key: "Invalid use of '{0}'. Modules are automatically in strict mode." },
- Export_assignment_is_not_supported_when_module_flag_is_system: { code: 1218, category: ts.DiagnosticCategory.Error, key: "Export assignment is not supported when '--module' flag is 'system'." },
- Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Specify_experimentalDecorators_to_remove_this_warning: { code: 1219, category: ts.DiagnosticCategory.Error, key: "Experimental support for decorators is a feature that is subject to change in a future release. Specify '--experimentalDecorators' to remove this warning." },
- Generators_are_only_available_when_targeting_ECMAScript_6_or_higher: { code: 1220, category: ts.DiagnosticCategory.Error, key: "Generators are only available when targeting ECMAScript 6 or higher." },
- Generators_are_not_allowed_in_an_ambient_context: { code: 1221, category: ts.DiagnosticCategory.Error, key: "Generators are not allowed in an ambient context." },
- An_overload_signature_cannot_be_declared_as_a_generator: { code: 1222, category: ts.DiagnosticCategory.Error, key: "An overload signature cannot be declared as a generator." },
- _0_tag_already_specified: { code: 1223, category: ts.DiagnosticCategory.Error, key: "'{0}' tag already specified." },
- Signature_0_must_have_a_type_predicate: { code: 1224, category: ts.DiagnosticCategory.Error, key: "Signature '{0}' must have a type predicate." },
- Cannot_find_parameter_0: { code: 1225, category: ts.DiagnosticCategory.Error, key: "Cannot find parameter '{0}'." },
- Type_predicate_0_is_not_assignable_to_1: { code: 1226, category: ts.DiagnosticCategory.Error, key: "Type predicate '{0}' is not assignable to '{1}'." },
- Parameter_0_is_not_in_the_same_position_as_parameter_1: { code: 1227, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' is not in the same position as parameter '{1}'." },
- A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods: { code: 1228, category: ts.DiagnosticCategory.Error, key: "A type predicate is only allowed in return type position for functions and methods." },
- A_type_predicate_cannot_reference_a_rest_parameter: { code: 1229, category: ts.DiagnosticCategory.Error, key: "A type predicate cannot reference a rest parameter." },
- A_type_predicate_cannot_reference_element_0_in_a_binding_pattern: { code: 1230, category: ts.DiagnosticCategory.Error, key: "A type predicate cannot reference element '{0}' in a binding pattern." },
- An_export_assignment_can_only_be_used_in_a_module: { code: 1231, category: ts.DiagnosticCategory.Error, key: "An export assignment can only be used in a module." },
- An_import_declaration_can_only_be_used_in_a_namespace_or_module: { code: 1232, category: ts.DiagnosticCategory.Error, key: "An import declaration can only be used in a namespace or module." },
- An_export_declaration_can_only_be_used_in_a_module: { code: 1233, category: ts.DiagnosticCategory.Error, key: "An export declaration can only be used in a module." },
- An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file: { code: 1234, category: ts.DiagnosticCategory.Error, key: "An ambient module declaration is only allowed at the top level in a file." },
- A_namespace_declaration_is_only_allowed_in_a_namespace_or_module: { code: 1235, category: ts.DiagnosticCategory.Error, key: "A namespace declaration is only allowed in a namespace or module." },
- The_return_type_of_a_property_decorator_function_must_be_either_void_or_any: { code: 1236, category: ts.DiagnosticCategory.Error, key: "The return type of a property decorator function must be either 'void' or 'any'." },
- The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any: { code: 1237, category: ts.DiagnosticCategory.Error, key: "The return type of a parameter decorator function must be either 'void' or 'any'." },
- Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression: { code: 1238, category: ts.DiagnosticCategory.Error, key: "Unable to resolve signature of class decorator when called as an expression." },
- Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression: { code: 1239, category: ts.DiagnosticCategory.Error, key: "Unable to resolve signature of parameter decorator when called as an expression." },
- Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression: { code: 1240, category: ts.DiagnosticCategory.Error, key: "Unable to resolve signature of property decorator when called as an expression." },
- Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression: { code: 1241, category: ts.DiagnosticCategory.Error, key: "Unable to resolve signature of method decorator when called as an expression." },
- abstract_modifier_can_only_appear_on_a_class_or_method_declaration: { code: 1242, category: ts.DiagnosticCategory.Error, key: "'abstract' modifier can only appear on a class or method declaration." },
- _0_modifier_cannot_be_used_with_1_modifier: { code: 1243, category: ts.DiagnosticCategory.Error, key: "'{0}' modifier cannot be used with '{1}' modifier." },
- Abstract_methods_can_only_appear_within_an_abstract_class: { code: 1244, category: ts.DiagnosticCategory.Error, key: "Abstract methods can only appear within an abstract class." },
- Method_0_cannot_have_an_implementation_because_it_is_marked_abstract: { code: 1245, category: ts.DiagnosticCategory.Error, key: "Method '{0}' cannot have an implementation because it is marked abstract." },
- with_statements_are_not_allowed_in_an_async_function_block: { code: 1300, category: ts.DiagnosticCategory.Error, key: "'with' statements are not allowed in an async function block." },
- await_expression_is_only_allowed_within_an_async_function: { code: 1308, category: ts.DiagnosticCategory.Error, key: "'await' expression is only allowed within an async function." },
- Async_functions_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1311, category: ts.DiagnosticCategory.Error, key: "Async functions are only available when targeting ECMAScript 6 and higher." },
- can_only_be_used_in_an_object_literal_property_inside_a_destructuring_assignment: { code: 1312, category: ts.DiagnosticCategory.Error, key: "'=' can only be used in an object literal property inside a destructuring assignment." },
- Duplicate_identifier_0: { code: 2300, category: ts.DiagnosticCategory.Error, key: "Duplicate identifier '{0}'." },
- Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { code: 2301, category: ts.DiagnosticCategory.Error, key: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor." },
- Static_members_cannot_reference_class_type_parameters: { code: 2302, category: ts.DiagnosticCategory.Error, key: "Static members cannot reference class type parameters." },
- Circular_definition_of_import_alias_0: { code: 2303, category: ts.DiagnosticCategory.Error, key: "Circular definition of import alias '{0}'." },
- Cannot_find_name_0: { code: 2304, category: ts.DiagnosticCategory.Error, key: "Cannot find name '{0}'." },
- Module_0_has_no_exported_member_1: { code: 2305, category: ts.DiagnosticCategory.Error, key: "Module '{0}' has no exported member '{1}'." },
- File_0_is_not_a_module: { code: 2306, category: ts.DiagnosticCategory.Error, key: "File '{0}' is not a module." },
- Cannot_find_module_0: { code: 2307, category: ts.DiagnosticCategory.Error, key: "Cannot find module '{0}'." },
- An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements: { code: 2309, category: ts.DiagnosticCategory.Error, key: "An export assignment cannot be used in a module with other exported elements." },
- Type_0_recursively_references_itself_as_a_base_type: { code: 2310, category: ts.DiagnosticCategory.Error, key: "Type '{0}' recursively references itself as a base type." },
- A_class_may_only_extend_another_class: { code: 2311, category: ts.DiagnosticCategory.Error, key: "A class may only extend another class." },
- An_interface_may_only_extend_a_class_or_another_interface: { code: 2312, category: ts.DiagnosticCategory.Error, key: "An interface may only extend a class or another interface." },
- Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list: { code: 2313, category: ts.DiagnosticCategory.Error, key: "Constraint of a type parameter cannot reference any type parameter from the same type parameter list." },
- Generic_type_0_requires_1_type_argument_s: { code: 2314, category: ts.DiagnosticCategory.Error, key: "Generic type '{0}' requires {1} type argument(s)." },
- Type_0_is_not_generic: { code: 2315, category: ts.DiagnosticCategory.Error, key: "Type '{0}' is not generic." },
- Global_type_0_must_be_a_class_or_interface_type: { code: 2316, category: ts.DiagnosticCategory.Error, key: "Global type '{0}' must be a class or interface type." },
- Global_type_0_must_have_1_type_parameter_s: { code: 2317, category: ts.DiagnosticCategory.Error, key: "Global type '{0}' must have {1} type parameter(s)." },
- Cannot_find_global_type_0: { code: 2318, category: ts.DiagnosticCategory.Error, key: "Cannot find global type '{0}'." },
- Named_property_0_of_types_1_and_2_are_not_identical: { code: 2319, category: ts.DiagnosticCategory.Error, key: "Named property '{0}' of types '{1}' and '{2}' are not identical." },
- Interface_0_cannot_simultaneously_extend_types_1_and_2: { code: 2320, category: ts.DiagnosticCategory.Error, key: "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}'." },
- Excessive_stack_depth_comparing_types_0_and_1: { code: 2321, category: ts.DiagnosticCategory.Error, key: "Excessive stack depth comparing types '{0}' and '{1}'." },
- Type_0_is_not_assignable_to_type_1: { code: 2322, category: ts.DiagnosticCategory.Error, key: "Type '{0}' is not assignable to type '{1}'." },
- Property_0_is_missing_in_type_1: { code: 2324, category: ts.DiagnosticCategory.Error, key: "Property '{0}' is missing in type '{1}'." },
- Property_0_is_private_in_type_1_but_not_in_type_2: { code: 2325, category: ts.DiagnosticCategory.Error, key: "Property '{0}' is private in type '{1}' but not in type '{2}'." },
- Types_of_property_0_are_incompatible: { code: 2326, category: ts.DiagnosticCategory.Error, key: "Types of property '{0}' are incompatible." },
- Property_0_is_optional_in_type_1_but_required_in_type_2: { code: 2327, category: ts.DiagnosticCategory.Error, key: "Property '{0}' is optional in type '{1}' but required in type '{2}'." },
- Types_of_parameters_0_and_1_are_incompatible: { code: 2328, category: ts.DiagnosticCategory.Error, key: "Types of parameters '{0}' and '{1}' are incompatible." },
- Index_signature_is_missing_in_type_0: { code: 2329, category: ts.DiagnosticCategory.Error, key: "Index signature is missing in type '{0}'." },
- Index_signatures_are_incompatible: { code: 2330, category: ts.DiagnosticCategory.Error, key: "Index signatures are incompatible." },
- this_cannot_be_referenced_in_a_module_or_namespace_body: { code: 2331, category: ts.DiagnosticCategory.Error, key: "'this' cannot be referenced in a module or namespace body." },
- this_cannot_be_referenced_in_current_location: { code: 2332, category: ts.DiagnosticCategory.Error, key: "'this' cannot be referenced in current location." },
- this_cannot_be_referenced_in_constructor_arguments: { code: 2333, category: ts.DiagnosticCategory.Error, key: "'this' cannot be referenced in constructor arguments." },
- this_cannot_be_referenced_in_a_static_property_initializer: { code: 2334, category: ts.DiagnosticCategory.Error, key: "'this' cannot be referenced in a static property initializer." },
- super_can_only_be_referenced_in_a_derived_class: { code: 2335, category: ts.DiagnosticCategory.Error, key: "'super' can only be referenced in a derived class." },
- super_cannot_be_referenced_in_constructor_arguments: { code: 2336, category: ts.DiagnosticCategory.Error, key: "'super' cannot be referenced in constructor arguments." },
- Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: { code: 2337, category: ts.DiagnosticCategory.Error, key: "Super calls are not permitted outside constructors or in nested functions inside constructors." },
- super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: { code: 2338, category: ts.DiagnosticCategory.Error, key: "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class." },
- Property_0_does_not_exist_on_type_1: { code: 2339, category: ts.DiagnosticCategory.Error, key: "Property '{0}' does not exist on type '{1}'." },
- Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword: { code: 2340, category: ts.DiagnosticCategory.Error, key: "Only public and protected methods of the base class are accessible via the 'super' keyword." },
- Property_0_is_private_and_only_accessible_within_class_1: { code: 2341, category: ts.DiagnosticCategory.Error, key: "Property '{0}' is private and only accessible within class '{1}'." },
- An_index_expression_argument_must_be_of_type_string_number_symbol_or_any: { code: 2342, category: ts.DiagnosticCategory.Error, key: "An index expression argument must be of type 'string', 'number', 'symbol', or 'any'." },
- Type_0_does_not_satisfy_the_constraint_1: { code: 2344, category: ts.DiagnosticCategory.Error, key: "Type '{0}' does not satisfy the constraint '{1}'." },
- Argument_of_type_0_is_not_assignable_to_parameter_of_type_1: { code: 2345, category: ts.DiagnosticCategory.Error, key: "Argument of type '{0}' is not assignable to parameter of type '{1}'." },
- Supplied_parameters_do_not_match_any_signature_of_call_target: { code: 2346, category: ts.DiagnosticCategory.Error, key: "Supplied parameters do not match any signature of call target." },
- Untyped_function_calls_may_not_accept_type_arguments: { code: 2347, category: ts.DiagnosticCategory.Error, key: "Untyped function calls may not accept type arguments." },
- Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: { code: 2348, category: ts.DiagnosticCategory.Error, key: "Value of type '{0}' is not callable. Did you mean to include 'new'?" },
- Cannot_invoke_an_expression_whose_type_lacks_a_call_signature: { code: 2349, category: ts.DiagnosticCategory.Error, key: "Cannot invoke an expression whose type lacks a call signature." },
- Only_a_void_function_can_be_called_with_the_new_keyword: { code: 2350, category: ts.DiagnosticCategory.Error, key: "Only a void function can be called with the 'new' keyword." },
- Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature: { code: 2351, category: ts.DiagnosticCategory.Error, key: "Cannot use 'new' with an expression whose type lacks a call or construct signature." },
- Neither_type_0_nor_type_1_is_assignable_to_the_other: { code: 2352, category: ts.DiagnosticCategory.Error, key: "Neither type '{0}' nor type '{1}' is assignable to the other." },
- Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1: { code: 2353, category: ts.DiagnosticCategory.Error, key: "Object literal may only specify known properties, and '{0}' does not exist in type '{1}'." },
- No_best_common_type_exists_among_return_expressions: { code: 2354, category: ts.DiagnosticCategory.Error, key: "No best common type exists among return expressions." },
- A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2355, category: ts.DiagnosticCategory.Error, key: "A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement." },
- An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type: { code: 2356, category: ts.DiagnosticCategory.Error, key: "An arithmetic operand must be of type 'any', 'number' or an enum type." },
- The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer: { code: 2357, category: ts.DiagnosticCategory.Error, key: "The operand of an increment or decrement operator must be a variable, property or indexer." },
- The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2358, category: ts.DiagnosticCategory.Error, key: "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter." },
- The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: { code: 2359, category: ts.DiagnosticCategory.Error, key: "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type." },
- The_left_hand_side_of_an_in_expression_must_be_of_type_any_string_number_or_symbol: { code: 2360, category: ts.DiagnosticCategory.Error, key: "The left-hand side of an 'in' expression must be of type 'any', 'string', 'number', or 'symbol'." },
- The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2361, category: ts.DiagnosticCategory.Error, key: "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter" },
- The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2362, category: ts.DiagnosticCategory.Error, key: "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." },
- The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2363, category: ts.DiagnosticCategory.Error, key: "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." },
- Invalid_left_hand_side_of_assignment_expression: { code: 2364, category: ts.DiagnosticCategory.Error, key: "Invalid left-hand side of assignment expression." },
- Operator_0_cannot_be_applied_to_types_1_and_2: { code: 2365, category: ts.DiagnosticCategory.Error, key: "Operator '{0}' cannot be applied to types '{1}' and '{2}'." },
- Type_parameter_name_cannot_be_0: { code: 2368, category: ts.DiagnosticCategory.Error, key: "Type parameter name cannot be '{0}'" },
- A_parameter_property_is_only_allowed_in_a_constructor_implementation: { code: 2369, category: ts.DiagnosticCategory.Error, key: "A parameter property is only allowed in a constructor implementation." },
- A_rest_parameter_must_be_of_an_array_type: { code: 2370, category: ts.DiagnosticCategory.Error, key: "A rest parameter must be of an array type." },
- A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: { code: 2371, category: ts.DiagnosticCategory.Error, key: "A parameter initializer is only allowed in a function or constructor implementation." },
- Parameter_0_cannot_be_referenced_in_its_initializer: { code: 2372, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' cannot be referenced in its initializer." },
- Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: { code: 2373, category: ts.DiagnosticCategory.Error, key: "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it." },
- Duplicate_string_index_signature: { code: 2374, category: ts.DiagnosticCategory.Error, key: "Duplicate string index signature." },
- Duplicate_number_index_signature: { code: 2375, category: ts.DiagnosticCategory.Error, key: "Duplicate number index signature." },
- A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: { code: 2376, category: ts.DiagnosticCategory.Error, key: "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties." },
- Constructors_for_derived_classes_must_contain_a_super_call: { code: 2377, category: ts.DiagnosticCategory.Error, key: "Constructors for derived classes must contain a 'super' call." },
- A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2378, category: ts.DiagnosticCategory.Error, key: "A 'get' accessor must return a value or consist of a single 'throw' statement." },
- Getter_and_setter_accessors_do_not_agree_in_visibility: { code: 2379, category: ts.DiagnosticCategory.Error, key: "Getter and setter accessors do not agree in visibility." },
- get_and_set_accessor_must_have_the_same_type: { code: 2380, category: ts.DiagnosticCategory.Error, key: "'get' and 'set' accessor must have the same type." },
- A_signature_with_an_implementation_cannot_use_a_string_literal_type: { code: 2381, category: ts.DiagnosticCategory.Error, key: "A signature with an implementation cannot use a string literal type." },
- Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: { code: 2382, category: ts.DiagnosticCategory.Error, key: "Specialized overload signature is not assignable to any non-specialized signature." },
- Overload_signatures_must_all_be_exported_or_not_exported: { code: 2383, category: ts.DiagnosticCategory.Error, key: "Overload signatures must all be exported or not exported." },
- Overload_signatures_must_all_be_ambient_or_non_ambient: { code: 2384, category: ts.DiagnosticCategory.Error, key: "Overload signatures must all be ambient or non-ambient." },
- Overload_signatures_must_all_be_public_private_or_protected: { code: 2385, category: ts.DiagnosticCategory.Error, key: "Overload signatures must all be public, private or protected." },
- Overload_signatures_must_all_be_optional_or_required: { code: 2386, category: ts.DiagnosticCategory.Error, key: "Overload signatures must all be optional or required." },
- Function_overload_must_be_static: { code: 2387, category: ts.DiagnosticCategory.Error, key: "Function overload must be static." },
- Function_overload_must_not_be_static: { code: 2388, category: ts.DiagnosticCategory.Error, key: "Function overload must not be static." },
- Function_implementation_name_must_be_0: { code: 2389, category: ts.DiagnosticCategory.Error, key: "Function implementation name must be '{0}'." },
- Constructor_implementation_is_missing: { code: 2390, category: ts.DiagnosticCategory.Error, key: "Constructor implementation is missing." },
- Function_implementation_is_missing_or_not_immediately_following_the_declaration: { code: 2391, category: ts.DiagnosticCategory.Error, key: "Function implementation is missing or not immediately following the declaration." },
- Multiple_constructor_implementations_are_not_allowed: { code: 2392, category: ts.DiagnosticCategory.Error, key: "Multiple constructor implementations are not allowed." },
- Duplicate_function_implementation: { code: 2393, category: ts.DiagnosticCategory.Error, key: "Duplicate function implementation." },
- Overload_signature_is_not_compatible_with_function_implementation: { code: 2394, category: ts.DiagnosticCategory.Error, key: "Overload signature is not compatible with function implementation." },
- Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local: { code: 2395, category: ts.DiagnosticCategory.Error, key: "Individual declarations in merged declaration '{0}' must be all exported or all local." },
- Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: { code: 2396, category: ts.DiagnosticCategory.Error, key: "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters." },
- Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: { code: 2399, category: ts.DiagnosticCategory.Error, key: "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference." },
- Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: { code: 2400, category: ts.DiagnosticCategory.Error, key: "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference." },
- Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: { code: 2401, category: ts.DiagnosticCategory.Error, key: "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference." },
- Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: { code: 2402, category: ts.DiagnosticCategory.Error, key: "Expression resolves to '_super' that compiler uses to capture base class reference." },
- Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: { code: 2403, category: ts.DiagnosticCategory.Error, key: "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'." },
- The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation: { code: 2404, category: ts.DiagnosticCategory.Error, key: "The left-hand side of a 'for...in' statement cannot use a type annotation." },
- The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any: { code: 2405, category: ts.DiagnosticCategory.Error, key: "The left-hand side of a 'for...in' statement must be of type 'string' or 'any'." },
- Invalid_left_hand_side_in_for_in_statement: { code: 2406, category: ts.DiagnosticCategory.Error, key: "Invalid left-hand side in 'for...in' statement." },
- The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2407, category: ts.DiagnosticCategory.Error, key: "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter." },
- Setters_cannot_return_a_value: { code: 2408, category: ts.DiagnosticCategory.Error, key: "Setters cannot return a value." },
- Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: { code: 2409, category: ts.DiagnosticCategory.Error, key: "Return type of constructor signature must be assignable to the instance type of the class" },
- All_symbols_within_a_with_block_will_be_resolved_to_any: { code: 2410, category: ts.DiagnosticCategory.Error, key: "All symbols within a 'with' block will be resolved to 'any'." },
- Property_0_of_type_1_is_not_assignable_to_string_index_type_2: { code: 2411, category: ts.DiagnosticCategory.Error, key: "Property '{0}' of type '{1}' is not assignable to string index type '{2}'." },
- Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: { code: 2412, category: ts.DiagnosticCategory.Error, key: "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'." },
- Numeric_index_type_0_is_not_assignable_to_string_index_type_1: { code: 2413, category: ts.DiagnosticCategory.Error, key: "Numeric index type '{0}' is not assignable to string index type '{1}'." },
- Class_name_cannot_be_0: { code: 2414, category: ts.DiagnosticCategory.Error, key: "Class name cannot be '{0}'" },
- Class_0_incorrectly_extends_base_class_1: { code: 2415, category: ts.DiagnosticCategory.Error, key: "Class '{0}' incorrectly extends base class '{1}'." },
- Class_static_side_0_incorrectly_extends_base_class_static_side_1: { code: 2417, category: ts.DiagnosticCategory.Error, key: "Class static side '{0}' incorrectly extends base class static side '{1}'." },
- Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0: { code: 2419, category: ts.DiagnosticCategory.Error, key: "Type name '{0}' in extends clause does not reference constructor function for '{0}'." },
- Class_0_incorrectly_implements_interface_1: { code: 2420, category: ts.DiagnosticCategory.Error, key: "Class '{0}' incorrectly implements interface '{1}'." },
- A_class_may_only_implement_another_class_or_interface: { code: 2422, category: ts.DiagnosticCategory.Error, key: "A class may only implement another class or interface." },
- Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: { code: 2423, category: ts.DiagnosticCategory.Error, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor." },
- Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: { code: 2424, category: ts.DiagnosticCategory.Error, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property." },
- Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 2425, category: ts.DiagnosticCategory.Error, key: "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function." },
- Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 2426, category: ts.DiagnosticCategory.Error, key: "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function." },
- Interface_name_cannot_be_0: { code: 2427, category: ts.DiagnosticCategory.Error, key: "Interface name cannot be '{0}'" },
- All_declarations_of_an_interface_must_have_identical_type_parameters: { code: 2428, category: ts.DiagnosticCategory.Error, key: "All declarations of an interface must have identical type parameters." },
- Interface_0_incorrectly_extends_interface_1: { code: 2430, category: ts.DiagnosticCategory.Error, key: "Interface '{0}' incorrectly extends interface '{1}'." },
- Enum_name_cannot_be_0: { code: 2431, category: ts.DiagnosticCategory.Error, key: "Enum name cannot be '{0}'" },
- In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element: { code: 2432, category: ts.DiagnosticCategory.Error, key: "In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element." },
- A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged: { code: 2433, category: ts.DiagnosticCategory.Error, key: "A namespace declaration cannot be in a different file from a class or function with which it is merged" },
- A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged: { code: 2434, category: ts.DiagnosticCategory.Error, key: "A namespace declaration cannot be located prior to a class or function with which it is merged" },
- Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces: { code: 2435, category: ts.DiagnosticCategory.Error, key: "Ambient modules cannot be nested in other modules or namespaces." },
- Ambient_module_declaration_cannot_specify_relative_module_name: { code: 2436, category: ts.DiagnosticCategory.Error, key: "Ambient module declaration cannot specify relative module name." },
- Module_0_is_hidden_by_a_local_declaration_with_the_same_name: { code: 2437, category: ts.DiagnosticCategory.Error, key: "Module '{0}' is hidden by a local declaration with the same name" },
- Import_name_cannot_be_0: { code: 2438, category: ts.DiagnosticCategory.Error, key: "Import name cannot be '{0}'" },
- Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relative_module_name: { code: 2439, category: ts.DiagnosticCategory.Error, key: "Import or export declaration in an ambient module declaration cannot reference module through relative module name." },
- Import_declaration_conflicts_with_local_declaration_of_0: { code: 2440, category: ts.DiagnosticCategory.Error, key: "Import declaration conflicts with local declaration of '{0}'" },
- Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module: { code: 2441, category: ts.DiagnosticCategory.Error, key: "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of a module." },
- Types_have_separate_declarations_of_a_private_property_0: { code: 2442, category: ts.DiagnosticCategory.Error, key: "Types have separate declarations of a private property '{0}'." },
- Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2: { code: 2443, category: ts.DiagnosticCategory.Error, key: "Property '{0}' is protected but type '{1}' is not a class derived from '{2}'." },
- Property_0_is_protected_in_type_1_but_public_in_type_2: { code: 2444, category: ts.DiagnosticCategory.Error, key: "Property '{0}' is protected in type '{1}' but public in type '{2}'." },
- Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses: { code: 2445, category: ts.DiagnosticCategory.Error, key: "Property '{0}' is protected and only accessible within class '{1}' and its subclasses." },
- Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1: { code: 2446, category: ts.DiagnosticCategory.Error, key: "Property '{0}' is protected and only accessible through an instance of class '{1}'." },
- The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead: { code: 2447, category: ts.DiagnosticCategory.Error, key: "The '{0}' operator is not allowed for boolean types. Consider using '{1}' instead." },
- Block_scoped_variable_0_used_before_its_declaration: { code: 2448, category: ts.DiagnosticCategory.Error, key: "Block-scoped variable '{0}' used before its declaration." },
- The_operand_of_an_increment_or_decrement_operator_cannot_be_a_constant: { code: 2449, category: ts.DiagnosticCategory.Error, key: "The operand of an increment or decrement operator cannot be a constant." },
- Left_hand_side_of_assignment_expression_cannot_be_a_constant: { code: 2450, category: ts.DiagnosticCategory.Error, key: "Left-hand side of assignment expression cannot be a constant." },
- Cannot_redeclare_block_scoped_variable_0: { code: 2451, category: ts.DiagnosticCategory.Error, key: "Cannot redeclare block-scoped variable '{0}'." },
- An_enum_member_cannot_have_a_numeric_name: { code: 2452, category: ts.DiagnosticCategory.Error, key: "An enum member cannot have a numeric name." },
- The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_type_arguments_explicitly: { code: 2453, category: ts.DiagnosticCategory.Error, key: "The type argument for type parameter '{0}' cannot be inferred from the usage. Consider specifying the type arguments explicitly." },
- Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0: { code: 2455, category: ts.DiagnosticCategory.Error, key: "Type argument candidate '{1}' is not a valid type argument because it is not a supertype of candidate '{0}'." },
- Type_alias_0_circularly_references_itself: { code: 2456, category: ts.DiagnosticCategory.Error, key: "Type alias '{0}' circularly references itself." },
- Type_alias_name_cannot_be_0: { code: 2457, category: ts.DiagnosticCategory.Error, key: "Type alias name cannot be '{0}'" },
- An_AMD_module_cannot_have_multiple_name_assignments: { code: 2458, category: ts.DiagnosticCategory.Error, key: "An AMD module cannot have multiple name assignments." },
- Type_0_has_no_property_1_and_no_string_index_signature: { code: 2459, category: ts.DiagnosticCategory.Error, key: "Type '{0}' has no property '{1}' and no string index signature." },
- Type_0_has_no_property_1: { code: 2460, category: ts.DiagnosticCategory.Error, key: "Type '{0}' has no property '{1}'." },
- Type_0_is_not_an_array_type: { code: 2461, category: ts.DiagnosticCategory.Error, key: "Type '{0}' is not an array type." },
- A_rest_element_must_be_last_in_an_array_destructuring_pattern: { code: 2462, category: ts.DiagnosticCategory.Error, key: "A rest element must be last in an array destructuring pattern" },
- A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature: { code: 2463, category: ts.DiagnosticCategory.Error, key: "A binding pattern parameter cannot be optional in an implementation signature." },
- A_computed_property_name_must_be_of_type_string_number_symbol_or_any: { code: 2464, category: ts.DiagnosticCategory.Error, key: "A computed property name must be of type 'string', 'number', 'symbol', or 'any'." },
- this_cannot_be_referenced_in_a_computed_property_name: { code: 2465, category: ts.DiagnosticCategory.Error, key: "'this' cannot be referenced in a computed property name." },
- super_cannot_be_referenced_in_a_computed_property_name: { code: 2466, category: ts.DiagnosticCategory.Error, key: "'super' cannot be referenced in a computed property name." },
- A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type: { code: 2467, category: ts.DiagnosticCategory.Error, key: "A computed property name cannot reference a type parameter from its containing type." },
- Cannot_find_global_value_0: { code: 2468, category: ts.DiagnosticCategory.Error, key: "Cannot find global value '{0}'." },
- The_0_operator_cannot_be_applied_to_type_symbol: { code: 2469, category: ts.DiagnosticCategory.Error, key: "The '{0}' operator cannot be applied to type 'symbol'." },
- Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object: { code: 2470, category: ts.DiagnosticCategory.Error, key: "'Symbol' reference does not refer to the global Symbol constructor object." },
- A_computed_property_name_of_the_form_0_must_be_of_type_symbol: { code: 2471, category: ts.DiagnosticCategory.Error, key: "A computed property name of the form '{0}' must be of type 'symbol'." },
- Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher: { code: 2472, category: ts.DiagnosticCategory.Error, key: "Spread operator in 'new' expressions is only available when targeting ECMAScript 5 and higher." },
- Enum_declarations_must_all_be_const_or_non_const: { code: 2473, category: ts.DiagnosticCategory.Error, key: "Enum declarations must all be const or non-const." },
- In_const_enum_declarations_member_initializer_must_be_constant_expression: { code: 2474, category: ts.DiagnosticCategory.Error, key: "In 'const' enum declarations member initializer must be constant expression." },
- const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment: { code: 2475, category: ts.DiagnosticCategory.Error, key: "'const' enums can only be used in property or index access expressions or the right hand side of an import declaration or export assignment." },
- A_const_enum_member_can_only_be_accessed_using_a_string_literal: { code: 2476, category: ts.DiagnosticCategory.Error, key: "A const enum member can only be accessed using a string literal." },
- const_enum_member_initializer_was_evaluated_to_a_non_finite_value: { code: 2477, category: ts.DiagnosticCategory.Error, key: "'const' enum member initializer was evaluated to a non-finite value." },
- const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN: { code: 2478, category: ts.DiagnosticCategory.Error, key: "'const' enum member initializer was evaluated to disallowed value 'NaN'." },
- Property_0_does_not_exist_on_const_enum_1: { code: 2479, category: ts.DiagnosticCategory.Error, key: "Property '{0}' does not exist on 'const' enum '{1}'." },
- let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations: { code: 2480, category: ts.DiagnosticCategory.Error, key: "'let' is not allowed to be used as a name in 'let' or 'const' declarations." },
- Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1: { code: 2481, category: ts.DiagnosticCategory.Error, key: "Cannot initialize outer scoped variable '{0}' in the same scope as block scoped declaration '{1}'." },
- The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation: { code: 2483, category: ts.DiagnosticCategory.Error, key: "The left-hand side of a 'for...of' statement cannot use a type annotation." },
- Export_declaration_conflicts_with_exported_declaration_of_0: { code: 2484, category: ts.DiagnosticCategory.Error, key: "Export declaration conflicts with exported declaration of '{0}'" },
- The_left_hand_side_of_a_for_of_statement_cannot_be_a_previously_defined_constant: { code: 2485, category: ts.DiagnosticCategory.Error, key: "The left-hand side of a 'for...of' statement cannot be a previously defined constant." },
- The_left_hand_side_of_a_for_in_statement_cannot_be_a_previously_defined_constant: { code: 2486, category: ts.DiagnosticCategory.Error, key: "The left-hand side of a 'for...in' statement cannot be a previously defined constant." },
- Invalid_left_hand_side_in_for_of_statement: { code: 2487, category: ts.DiagnosticCategory.Error, key: "Invalid left-hand side in 'for...of' statement." },
- Type_must_have_a_Symbol_iterator_method_that_returns_an_iterator: { code: 2488, category: ts.DiagnosticCategory.Error, key: "Type must have a '[Symbol.iterator]()' method that returns an iterator." },
- An_iterator_must_have_a_next_method: { code: 2489, category: ts.DiagnosticCategory.Error, key: "An iterator must have a 'next()' method." },
- The_type_returned_by_the_next_method_of_an_iterator_must_have_a_value_property: { code: 2490, category: ts.DiagnosticCategory.Error, key: "The type returned by the 'next()' method of an iterator must have a 'value' property." },
- The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern: { code: 2491, category: ts.DiagnosticCategory.Error, key: "The left-hand side of a 'for...in' statement cannot be a destructuring pattern." },
- Cannot_redeclare_identifier_0_in_catch_clause: { code: 2492, category: ts.DiagnosticCategory.Error, key: "Cannot redeclare identifier '{0}' in catch clause" },
- Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2: { code: 2493, category: ts.DiagnosticCategory.Error, key: "Tuple type '{0}' with length '{1}' cannot be assigned to tuple with length '{2}'." },
- Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher: { code: 2494, category: ts.DiagnosticCategory.Error, key: "Using a string in a 'for...of' statement is only supported in ECMAScript 5 and higher." },
- Type_0_is_not_an_array_type_or_a_string_type: { code: 2495, category: ts.DiagnosticCategory.Error, key: "Type '{0}' is not an array type or a string type." },
- The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_standard_function_expression: { code: 2496, category: ts.DiagnosticCategory.Error, key: "The 'arguments' object cannot be referenced in an arrow function in ES3 and ES5. Consider using a standard function expression." },
- Module_0_resolves_to_a_non_module_entity_and_cannot_be_imported_using_this_construct: { code: 2497, category: ts.DiagnosticCategory.Error, key: "Module '{0}' resolves to a non-module entity and cannot be imported using this construct." },
- Module_0_uses_export_and_cannot_be_used_with_export_Asterisk: { code: 2498, category: ts.DiagnosticCategory.Error, key: "Module '{0}' uses 'export =' and cannot be used with 'export *'." },
- An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments: { code: 2499, category: ts.DiagnosticCategory.Error, key: "An interface can only extend an identifier/qualified-name with optional type arguments." },
- A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments: { code: 2500, category: ts.DiagnosticCategory.Error, key: "A class can only implement an identifier/qualified-name with optional type arguments." },
- A_rest_element_cannot_contain_a_binding_pattern: { code: 2501, category: ts.DiagnosticCategory.Error, key: "A rest element cannot contain a binding pattern." },
- _0_is_referenced_directly_or_indirectly_in_its_own_type_annotation: { code: 2502, category: ts.DiagnosticCategory.Error, key: "'{0}' is referenced directly or indirectly in its own type annotation." },
- Cannot_find_namespace_0: { code: 2503, category: ts.DiagnosticCategory.Error, key: "Cannot find namespace '{0}'." },
- No_best_common_type_exists_among_yield_expressions: { code: 2504, category: ts.DiagnosticCategory.Error, key: "No best common type exists among yield expressions." },
- A_generator_cannot_have_a_void_type_annotation: { code: 2505, category: ts.DiagnosticCategory.Error, key: "A generator cannot have a 'void' type annotation." },
- _0_is_referenced_directly_or_indirectly_in_its_own_base_expression: { code: 2506, category: ts.DiagnosticCategory.Error, key: "'{0}' is referenced directly or indirectly in its own base expression." },
- Type_0_is_not_a_constructor_function_type: { code: 2507, category: ts.DiagnosticCategory.Error, key: "Type '{0}' is not a constructor function type." },
- No_base_constructor_has_the_specified_number_of_type_arguments: { code: 2508, category: ts.DiagnosticCategory.Error, key: "No base constructor has the specified number of type arguments." },
- Base_constructor_return_type_0_is_not_a_class_or_interface_type: { code: 2509, category: ts.DiagnosticCategory.Error, key: "Base constructor return type '{0}' is not a class or interface type." },
- Base_constructors_must_all_have_the_same_return_type: { code: 2510, category: ts.DiagnosticCategory.Error, key: "Base constructors must all have the same return type." },
- Cannot_create_an_instance_of_the_abstract_class_0: { code: 2511, category: ts.DiagnosticCategory.Error, key: "Cannot create an instance of the abstract class '{0}'." },
- Overload_signatures_must_all_be_abstract_or_not_abstract: { code: 2512, category: ts.DiagnosticCategory.Error, key: "Overload signatures must all be abstract or not abstract." },
- Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression: { code: 2513, category: ts.DiagnosticCategory.Error, key: "Abstract method '{0}' in class '{1}' cannot be accessed via super expression." },
- Classes_containing_abstract_methods_must_be_marked_abstract: { code: 2514, category: ts.DiagnosticCategory.Error, key: "Classes containing abstract methods must be marked abstract." },
- Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2: { code: 2515, category: ts.DiagnosticCategory.Error, key: "Non-abstract class '{0}' does not implement inherited abstract member '{1}' from class '{2}'." },
- All_declarations_of_an_abstract_method_must_be_consecutive: { code: 2516, category: ts.DiagnosticCategory.Error, key: "All declarations of an abstract method must be consecutive." },
- Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type: { code: 2517, category: ts.DiagnosticCategory.Error, key: "Cannot assign an abstract constructor type to a non-abstract constructor type." },
- Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions: { code: 2520, category: ts.DiagnosticCategory.Error, key: "Duplicate identifier '{0}'. Compiler uses declaration '{1}' to support async functions." },
- Expression_resolves_to_variable_declaration_0_that_compiler_uses_to_support_async_functions: { code: 2521, category: ts.DiagnosticCategory.Error, key: "Expression resolves to variable declaration '{0}' that compiler uses to support async functions." },
- The_arguments_object_cannot_be_referenced_in_an_async_arrow_function_Consider_using_a_standard_async_function_expression: { code: 2522, category: ts.DiagnosticCategory.Error, key: "The 'arguments' object cannot be referenced in an async arrow function. Consider using a standard async function expression." },
- yield_expressions_cannot_be_used_in_a_parameter_initializer: { code: 2523, category: ts.DiagnosticCategory.Error, key: "'yield' expressions cannot be used in a parameter initializer." },
- await_expressions_cannot_be_used_in_a_parameter_initializer: { code: 2524, category: ts.DiagnosticCategory.Error, key: "'await' expressions cannot be used in a parameter initializer." },
- Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value: { code: 2525, category: ts.DiagnosticCategory.Error, key: "Initializer provides no value for this binding element and the binding element has no default value." },
- A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface: { code: 2526, category: ts.DiagnosticCategory.Error, key: "A 'this' type is available only in a non-static member of a class or interface." },
- The_inferred_type_of_0_references_an_inaccessible_this_type_A_type_annotation_is_necessary: { code: 2527, category: ts.DiagnosticCategory.Error, key: "The inferred type of '{0}' references an inaccessible 'this' type. A type annotation is necessary." },
- A_module_cannot_have_multiple_default_exports: { code: 2528, category: ts.DiagnosticCategory.Error, key: "A module cannot have multiple default exports." },
- JSX_element_attributes_type_0_must_be_an_object_type: { code: 2600, category: ts.DiagnosticCategory.Error, key: "JSX element attributes type '{0}' must be an object type." },
- The_return_type_of_a_JSX_element_constructor_must_return_an_object_type: { code: 2601, category: ts.DiagnosticCategory.Error, key: "The return type of a JSX element constructor must return an object type." },
- JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist: { code: 2602, category: ts.DiagnosticCategory.Error, key: "JSX element implicitly has type 'any' because the global type 'JSX.Element' does not exist." },
- Property_0_in_type_1_is_not_assignable_to_type_2: { code: 2603, category: ts.DiagnosticCategory.Error, key: "Property '{0}' in type '{1}' is not assignable to type '{2}'" },
- JSX_element_type_0_does_not_have_any_construct_or_call_signatures: { code: 2604, category: ts.DiagnosticCategory.Error, key: "JSX element type '{0}' does not have any construct or call signatures." },
- JSX_element_type_0_is_not_a_constructor_function_for_JSX_elements: { code: 2605, category: ts.DiagnosticCategory.Error, key: "JSX element type '{0}' is not a constructor function for JSX elements." },
- Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property: { code: 2606, category: ts.DiagnosticCategory.Error, key: "Property '{0}' of JSX spread attribute is not assignable to target property." },
- JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property: { code: 2607, category: ts.DiagnosticCategory.Error, key: "JSX element class does not support attributes because it does not have a '{0}' property" },
- The_global_type_JSX_0_may_not_have_more_than_one_property: { code: 2608, category: ts.DiagnosticCategory.Error, key: "The global type 'JSX.{0}' may not have more than one property" },
- Cannot_emit_namespaced_JSX_elements_in_React: { code: 2650, category: ts.DiagnosticCategory.Error, key: "Cannot emit namespaced JSX elements in React" },
- A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums: { code: 2651, category: ts.DiagnosticCategory.Error, key: "A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums." },
- Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_default_0_declaration_instead: { code: 2652, category: ts.DiagnosticCategory.Error, key: "Merged declaration '{0}' cannot include a default export declaration. Consider adding a separate 'export default {0}' declaration instead." },
- Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1: { code: 2653, category: ts.DiagnosticCategory.Error, key: "Non-abstract class expression does not implement inherited abstract member '{0}' from class '{1}'." },
- Exported_external_package_typings_file_cannot_contain_tripleslash_references_Please_contact_the_package_author_to_update_the_package_definition: { code: 2654, category: ts.DiagnosticCategory.Error, key: "Exported external package typings file cannot contain tripleslash references. Please contact the package author to update the package definition." },
- Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_the_package_definition: { code: 2656, category: ts.DiagnosticCategory.Error, key: "Exported external package typings file '{0}' is not a module. Please contact the package author to update the package definition." },
- Import_declaration_0_is_using_private_name_1: { code: 4000, category: ts.DiagnosticCategory.Error, key: "Import declaration '{0}' is using private name '{1}'." },
- Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 4002, category: ts.DiagnosticCategory.Error, key: "Type parameter '{0}' of exported class has or is using private name '{1}'." },
- Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: { code: 4004, category: ts.DiagnosticCategory.Error, key: "Type parameter '{0}' of exported interface has or is using private name '{1}'." },
- Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4006, category: ts.DiagnosticCategory.Error, key: "Type parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'." },
- Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4008, category: ts.DiagnosticCategory.Error, key: "Type parameter '{0}' of call signature from exported interface has or is using private name '{1}'." },
- Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { code: 4010, category: ts.DiagnosticCategory.Error, key: "Type parameter '{0}' of public static method from exported class has or is using private name '{1}'." },
- Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { code: 4012, category: ts.DiagnosticCategory.Error, key: "Type parameter '{0}' of public method from exported class has or is using private name '{1}'." },
- Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { code: 4014, category: ts.DiagnosticCategory.Error, key: "Type parameter '{0}' of method from exported interface has or is using private name '{1}'." },
- Type_parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 4016, category: ts.DiagnosticCategory.Error, key: "Type parameter '{0}' of exported function has or is using private name '{1}'." },
- Implements_clause_of_exported_class_0_has_or_is_using_private_name_1: { code: 4019, category: ts.DiagnosticCategory.Error, key: "Implements clause of exported class '{0}' has or is using private name '{1}'." },
- Extends_clause_of_exported_class_0_has_or_is_using_private_name_1: { code: 4020, category: ts.DiagnosticCategory.Error, key: "Extends clause of exported class '{0}' has or is using private name '{1}'." },
- Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1: { code: 4022, category: ts.DiagnosticCategory.Error, key: "Extends clause of exported interface '{0}' has or is using private name '{1}'." },
- Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4023, category: ts.DiagnosticCategory.Error, key: "Exported variable '{0}' has or is using name '{1}' from external module {2} but cannot be named." },
- Exported_variable_0_has_or_is_using_name_1_from_private_module_2: { code: 4024, category: ts.DiagnosticCategory.Error, key: "Exported variable '{0}' has or is using name '{1}' from private module '{2}'." },
- Exported_variable_0_has_or_is_using_private_name_1: { code: 4025, category: ts.DiagnosticCategory.Error, key: "Exported variable '{0}' has or is using private name '{1}'." },
- Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4026, category: ts.DiagnosticCategory.Error, key: "Public static property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named." },
- Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4027, category: ts.DiagnosticCategory.Error, key: "Public static property '{0}' of exported class has or is using name '{1}' from private module '{2}'." },
- Public_static_property_0_of_exported_class_has_or_is_using_private_name_1: { code: 4028, category: ts.DiagnosticCategory.Error, key: "Public static property '{0}' of exported class has or is using private name '{1}'." },
- Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4029, category: ts.DiagnosticCategory.Error, key: "Public property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named." },
- Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4030, category: ts.DiagnosticCategory.Error, key: "Public property '{0}' of exported class has or is using name '{1}' from private module '{2}'." },
- Public_property_0_of_exported_class_has_or_is_using_private_name_1: { code: 4031, category: ts.DiagnosticCategory.Error, key: "Public property '{0}' of exported class has or is using private name '{1}'." },
- Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4032, category: ts.DiagnosticCategory.Error, key: "Property '{0}' of exported interface has or is using name '{1}' from private module '{2}'." },
- Property_0_of_exported_interface_has_or_is_using_private_name_1: { code: 4033, category: ts.DiagnosticCategory.Error, key: "Property '{0}' of exported interface has or is using private name '{1}'." },
- Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4034, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of public static property setter from exported class has or is using name '{1}' from private module '{2}'." },
- Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1: { code: 4035, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of public static property setter from exported class has or is using private name '{1}'." },
- Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4036, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of public property setter from exported class has or is using name '{1}' from private module '{2}'." },
- Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1: { code: 4037, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of public property setter from exported class has or is using private name '{1}'." },
- Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4038, category: ts.DiagnosticCategory.Error, key: "Return type of public static property getter from exported class has or is using name '{0}' from external module {1} but cannot be named." },
- Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4039, category: ts.DiagnosticCategory.Error, key: "Return type of public static property getter from exported class has or is using name '{0}' from private module '{1}'." },
- Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0: { code: 4040, category: ts.DiagnosticCategory.Error, key: "Return type of public static property getter from exported class has or is using private name '{0}'." },
- Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4041, category: ts.DiagnosticCategory.Error, key: "Return type of public property getter from exported class has or is using name '{0}' from external module {1} but cannot be named." },
- Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4042, category: ts.DiagnosticCategory.Error, key: "Return type of public property getter from exported class has or is using name '{0}' from private module '{1}'." },
- Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0: { code: 4043, category: ts.DiagnosticCategory.Error, key: "Return type of public property getter from exported class has or is using private name '{0}'." },
- Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4044, category: ts.DiagnosticCategory.Error, key: "Return type of constructor signature from exported interface has or is using name '{0}' from private module '{1}'." },
- Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4045, category: ts.DiagnosticCategory.Error, key: "Return type of constructor signature from exported interface has or is using private name '{0}'." },
- Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4046, category: ts.DiagnosticCategory.Error, key: "Return type of call signature from exported interface has or is using name '{0}' from private module '{1}'." },
- Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4047, category: ts.DiagnosticCategory.Error, key: "Return type of call signature from exported interface has or is using private name '{0}'." },
- Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4048, category: ts.DiagnosticCategory.Error, key: "Return type of index signature from exported interface has or is using name '{0}' from private module '{1}'." },
- Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4049, category: ts.DiagnosticCategory.Error, key: "Return type of index signature from exported interface has or is using private name '{0}'." },
- Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4050, category: ts.DiagnosticCategory.Error, key: "Return type of public static method from exported class has or is using name '{0}' from external module {1} but cannot be named." },
- Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4051, category: ts.DiagnosticCategory.Error, key: "Return type of public static method from exported class has or is using name '{0}' from private module '{1}'." },
- Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0: { code: 4052, category: ts.DiagnosticCategory.Error, key: "Return type of public static method from exported class has or is using private name '{0}'." },
- Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4053, category: ts.DiagnosticCategory.Error, key: "Return type of public method from exported class has or is using name '{0}' from external module {1} but cannot be named." },
- Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4054, category: ts.DiagnosticCategory.Error, key: "Return type of public method from exported class has or is using name '{0}' from private module '{1}'." },
- Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0: { code: 4055, category: ts.DiagnosticCategory.Error, key: "Return type of public method from exported class has or is using private name '{0}'." },
- Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4056, category: ts.DiagnosticCategory.Error, key: "Return type of method from exported interface has or is using name '{0}' from private module '{1}'." },
- Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0: { code: 4057, category: ts.DiagnosticCategory.Error, key: "Return type of method from exported interface has or is using private name '{0}'." },
- Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4058, category: ts.DiagnosticCategory.Error, key: "Return type of exported function has or is using name '{0}' from external module {1} but cannot be named." },
- Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1: { code: 4059, category: ts.DiagnosticCategory.Error, key: "Return type of exported function has or is using name '{0}' from private module '{1}'." },
- Return_type_of_exported_function_has_or_is_using_private_name_0: { code: 4060, category: ts.DiagnosticCategory.Error, key: "Return type of exported function has or is using private name '{0}'." },
- Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4061, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of constructor from exported class has or is using name '{1}' from external module {2} but cannot be named." },
- Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4062, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of constructor from exported class has or is using name '{1}' from private module '{2}'." },
- Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1: { code: 4063, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of constructor from exported class has or is using private name '{1}'." },
- Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4064, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'." },
- Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4065, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'." },
- Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4066, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'." },
- Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4067, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of call signature from exported interface has or is using private name '{1}'." },
- Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4068, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of public static method from exported class has or is using name '{1}' from external module {2} but cannot be named." },
- Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4069, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'." },
- Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { code: 4070, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of public static method from exported class has or is using private name '{1}'." },
- Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4071, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of public method from exported class has or is using name '{1}' from external module {2} but cannot be named." },
- Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4072, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'." },
- Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { code: 4073, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of public method from exported class has or is using private name '{1}'." },
- Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4074, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'." },
- Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { code: 4075, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of method from exported interface has or is using private name '{1}'." },
- Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4076, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of exported function has or is using name '{1}' from external module {2} but cannot be named." },
- Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: { code: 4077, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'." },
- Parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 4078, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of exported function has or is using private name '{1}'." },
- Exported_type_alias_0_has_or_is_using_private_name_1: { code: 4081, category: ts.DiagnosticCategory.Error, key: "Exported type alias '{0}' has or is using private name '{1}'." },
- Default_export_of_the_module_has_or_is_using_private_name_0: { code: 4082, category: ts.DiagnosticCategory.Error, key: "Default export of the module has or is using private name '{0}'." },
- Loop_contains_block_scoped_variable_0_referenced_by_a_function_in_the_loop_This_is_only_supported_in_ECMAScript_6_or_higher: { code: 4091, category: ts.DiagnosticCategory.Error, key: "Loop contains block-scoped variable '{0}' referenced by a function in the loop. This is only supported in ECMAScript 6 or higher." },
- The_current_host_does_not_support_the_0_option: { code: 5001, category: ts.DiagnosticCategory.Error, key: "The current host does not support the '{0}' option." },
- Cannot_find_the_common_subdirectory_path_for_the_input_files: { code: 5009, category: ts.DiagnosticCategory.Error, key: "Cannot find the common subdirectory path for the input files." },
- Cannot_read_file_0_Colon_1: { code: 5012, category: ts.DiagnosticCategory.Error, key: "Cannot read file '{0}': {1}" },
- Unsupported_file_encoding: { code: 5013, category: ts.DiagnosticCategory.Error, key: "Unsupported file encoding." },
- Failed_to_parse_file_0_Colon_1: { code: 5014, category: ts.DiagnosticCategory.Error, key: "Failed to parse file '{0}': {1}." },
- Unknown_compiler_option_0: { code: 5023, category: ts.DiagnosticCategory.Error, key: "Unknown compiler option '{0}'." },
- Compiler_option_0_requires_a_value_of_type_1: { code: 5024, category: ts.DiagnosticCategory.Error, key: "Compiler option '{0}' requires a value of type {1}." },
- Could_not_write_file_0_Colon_1: { code: 5033, category: ts.DiagnosticCategory.Error, key: "Could not write file '{0}': {1}" },
- Option_project_cannot_be_mixed_with_source_files_on_a_command_line: { code: 5042, category: ts.DiagnosticCategory.Error, key: "Option 'project' cannot be mixed with source files on a command line." },
- Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES6_or_higher: { code: 5047, category: ts.DiagnosticCategory.Error, key: "Option 'isolatedModules' can only be used when either option'--module' is provided or option 'target' is 'ES6' or higher." },
- Option_inlineSources_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided: { code: 5051, category: ts.DiagnosticCategory.Error, key: "Option 'inlineSources' can only be used when either option '--inlineSourceMap' or option '--sourceMap' is provided." },
- Option_0_cannot_be_specified_without_specifying_option_1: { code: 5052, category: ts.DiagnosticCategory.Error, key: "Option '{0}' cannot be specified without specifying option '{1}'." },
- Option_0_cannot_be_specified_with_option_1: { code: 5053, category: ts.DiagnosticCategory.Error, key: "Option '{0}' cannot be specified with option '{1}'." },
- A_tsconfig_json_file_is_already_defined_at_Colon_0: { code: 5054, category: ts.DiagnosticCategory.Error, key: "A 'tsconfig.json' file is already defined at: '{0}'." },
- Concatenate_and_emit_output_to_single_file: { code: 6001, category: ts.DiagnosticCategory.Message, key: "Concatenate and emit output to single file." },
- Generates_corresponding_d_ts_file: { code: 6002, category: ts.DiagnosticCategory.Message, key: "Generates corresponding '.d.ts' file." },
- Specifies_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: { code: 6003, category: ts.DiagnosticCategory.Message, key: "Specifies the location where debugger should locate map files instead of generated locations." },
- Specifies_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: { code: 6004, category: ts.DiagnosticCategory.Message, key: "Specifies the location where debugger should locate TypeScript files instead of source locations." },
- Watch_input_files: { code: 6005, category: ts.DiagnosticCategory.Message, key: "Watch input files." },
- Redirect_output_structure_to_the_directory: { code: 6006, category: ts.DiagnosticCategory.Message, key: "Redirect output structure to the directory." },
- Do_not_erase_const_enum_declarations_in_generated_code: { code: 6007, category: ts.DiagnosticCategory.Message, key: "Do not erase const enum declarations in generated code." },
- Do_not_emit_outputs_if_any_errors_were_reported: { code: 6008, category: ts.DiagnosticCategory.Message, key: "Do not emit outputs if any errors were reported." },
- Do_not_emit_comments_to_output: { code: 6009, category: ts.DiagnosticCategory.Message, key: "Do not emit comments to output." },
- Do_not_emit_outputs: { code: 6010, category: ts.DiagnosticCategory.Message, key: "Do not emit outputs." },
- Specify_ECMAScript_target_version_Colon_ES3_default_ES5_or_ES6_experimental: { code: 6015, category: ts.DiagnosticCategory.Message, key: "Specify ECMAScript target version: 'ES3' (default), 'ES5', or 'ES6' (experimental)" },
- Specify_module_code_generation_Colon_commonjs_amd_system_umd_or_es6: { code: 6016, category: ts.DiagnosticCategory.Message, key: "Specify module code generation: 'commonjs', 'amd', 'system', 'umd' or 'es6'" },
- Print_this_message: { code: 6017, category: ts.DiagnosticCategory.Message, key: "Print this message." },
- Print_the_compiler_s_version: { code: 6019, category: ts.DiagnosticCategory.Message, key: "Print the compiler's version." },
- Compile_the_project_in_the_given_directory: { code: 6020, category: ts.DiagnosticCategory.Message, key: "Compile the project in the given directory." },
- Syntax_Colon_0: { code: 6023, category: ts.DiagnosticCategory.Message, key: "Syntax: {0}" },
- options: { code: 6024, category: ts.DiagnosticCategory.Message, key: "options" },
- file: { code: 6025, category: ts.DiagnosticCategory.Message, key: "file" },
- Examples_Colon_0: { code: 6026, category: ts.DiagnosticCategory.Message, key: "Examples: {0}" },
- Options_Colon: { code: 6027, category: ts.DiagnosticCategory.Message, key: "Options:" },
- Version_0: { code: 6029, category: ts.DiagnosticCategory.Message, key: "Version {0}" },
- Insert_command_line_options_and_files_from_a_file: { code: 6030, category: ts.DiagnosticCategory.Message, key: "Insert command line options and files from a file." },
- File_change_detected_Starting_incremental_compilation: { code: 6032, category: ts.DiagnosticCategory.Message, key: "File change detected. Starting incremental compilation..." },
- KIND: { code: 6034, category: ts.DiagnosticCategory.Message, key: "KIND" },
- FILE: { code: 6035, category: ts.DiagnosticCategory.Message, key: "FILE" },
- VERSION: { code: 6036, category: ts.DiagnosticCategory.Message, key: "VERSION" },
- LOCATION: { code: 6037, category: ts.DiagnosticCategory.Message, key: "LOCATION" },
- DIRECTORY: { code: 6038, category: ts.DiagnosticCategory.Message, key: "DIRECTORY" },
- Compilation_complete_Watching_for_file_changes: { code: 6042, category: ts.DiagnosticCategory.Message, key: "Compilation complete. Watching for file changes." },
- Generates_corresponding_map_file: { code: 6043, category: ts.DiagnosticCategory.Message, key: "Generates corresponding '.map' file." },
- Compiler_option_0_expects_an_argument: { code: 6044, category: ts.DiagnosticCategory.Error, key: "Compiler option '{0}' expects an argument." },
- Unterminated_quoted_string_in_response_file_0: { code: 6045, category: ts.DiagnosticCategory.Error, key: "Unterminated quoted string in response file '{0}'." },
- Argument_for_module_option_must_be_commonjs_amd_system_umd_or_es6: { code: 6046, category: ts.DiagnosticCategory.Error, key: "Argument for '--module' option must be 'commonjs', 'amd', 'system', 'umd', or 'es6'." },
- Argument_for_target_option_must_be_ES3_ES5_or_ES6: { code: 6047, category: ts.DiagnosticCategory.Error, key: "Argument for '--target' option must be 'ES3', 'ES5', or 'ES6'." },
- Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: { code: 6048, category: ts.DiagnosticCategory.Error, key: "Locale must be of the form <language> or <language>-<territory>. For example '{0}' or '{1}'." },
- Unsupported_locale_0: { code: 6049, category: ts.DiagnosticCategory.Error, key: "Unsupported locale '{0}'." },
- Unable_to_open_file_0: { code: 6050, category: ts.DiagnosticCategory.Error, key: "Unable to open file '{0}'." },
- Corrupted_locale_file_0: { code: 6051, category: ts.DiagnosticCategory.Error, key: "Corrupted locale file {0}." },
- Raise_error_on_expressions_and_declarations_with_an_implied_any_type: { code: 6052, category: ts.DiagnosticCategory.Message, key: "Raise error on expressions and declarations with an implied 'any' type." },
- File_0_not_found: { code: 6053, category: ts.DiagnosticCategory.Error, key: "File '{0}' not found." },
- File_0_has_unsupported_extension_The_only_supported_extensions_are_1: { code: 6054, category: ts.DiagnosticCategory.Error, key: "File '{0}' has unsupported extension. The only supported extensions are {1}." },
- Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures: { code: 6055, category: ts.DiagnosticCategory.Message, key: "Suppress noImplicitAny errors for indexing objects lacking index signatures." },
- Do_not_emit_declarations_for_code_that_has_an_internal_annotation: { code: 6056, category: ts.DiagnosticCategory.Message, key: "Do not emit declarations for code that has an '@internal' annotation." },
- Specifies_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir: { code: 6058, category: ts.DiagnosticCategory.Message, key: "Specifies the root directory of input files. Use to control the output directory structure with --outDir." },
- File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files: { code: 6059, category: ts.DiagnosticCategory.Error, key: "File '{0}' is not under 'rootDir' '{1}'. 'rootDir' is expected to contain all source files." },
- Specifies_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix: { code: 6060, category: ts.DiagnosticCategory.Message, key: "Specifies the end of line sequence to be used when emitting files: 'CRLF' (dos) or 'LF' (unix)." },
- NEWLINE: { code: 6061, category: ts.DiagnosticCategory.Message, key: "NEWLINE" },
- Argument_for_newLine_option_must_be_CRLF_or_LF: { code: 6062, category: ts.DiagnosticCategory.Error, key: "Argument for '--newLine' option must be 'CRLF' or 'LF'." },
- Argument_for_moduleResolution_option_must_be_node_or_classic: { code: 6063, category: ts.DiagnosticCategory.Error, key: "Argument for '--moduleResolution' option must be 'node' or 'classic'." },
- Specify_JSX_code_generation_Colon_preserve_or_react: { code: 6080, category: ts.DiagnosticCategory.Message, key: "Specify JSX code generation: 'preserve' or 'react'" },
- Argument_for_jsx_must_be_preserve_or_react: { code: 6081, category: ts.DiagnosticCategory.Message, key: "Argument for '--jsx' must be 'preserve' or 'react'." },
- Enables_experimental_support_for_ES7_decorators: { code: 6065, category: ts.DiagnosticCategory.Message, key: "Enables experimental support for ES7 decorators." },
- Enables_experimental_support_for_emitting_type_metadata_for_decorators: { code: 6066, category: ts.DiagnosticCategory.Message, key: "Enables experimental support for emitting type metadata for decorators." },
- Enables_experimental_support_for_ES7_async_functions: { code: 6068, category: ts.DiagnosticCategory.Message, key: "Enables experimental support for ES7 async functions." },
- Specifies_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6: { code: 6069, category: ts.DiagnosticCategory.Message, key: "Specifies module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6)." },
- Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file: { code: 6070, category: ts.DiagnosticCategory.Message, key: "Initializes a TypeScript project and creates a tsconfig.json file." },
- Successfully_created_a_tsconfig_json_file: { code: 6071, category: ts.DiagnosticCategory.Message, key: "Successfully created a tsconfig.json file." },
- Suppress_excess_property_checks_for_object_literals: { code: 6072, category: ts.DiagnosticCategory.Message, key: "Suppress excess property checks for object literals." },
- Variable_0_implicitly_has_an_1_type: { code: 7005, category: ts.DiagnosticCategory.Error, key: "Variable '{0}' implicitly has an '{1}' type." },
- Parameter_0_implicitly_has_an_1_type: { code: 7006, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' implicitly has an '{1}' type." },
- Member_0_implicitly_has_an_1_type: { code: 7008, category: ts.DiagnosticCategory.Error, key: "Member '{0}' implicitly has an '{1}' type." },
- new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type: { code: 7009, category: ts.DiagnosticCategory.Error, key: "'new' expression, whose target lacks a construct signature, implicitly has an 'any' type." },
- _0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type: { code: 7010, category: ts.DiagnosticCategory.Error, key: "'{0}', which lacks return-type annotation, implicitly has an '{1}' return type." },
- Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type: { code: 7011, category: ts.DiagnosticCategory.Error, key: "Function expression, which lacks return-type annotation, implicitly has an '{0}' return type." },
- Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { code: 7013, category: ts.DiagnosticCategory.Error, key: "Construct signature, which lacks return-type annotation, implicitly has an 'any' return type." },
- Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_type_annotation: { code: 7016, category: ts.DiagnosticCategory.Error, key: "Property '{0}' implicitly has type 'any', because its 'set' accessor lacks a type annotation." },
- Index_signature_of_object_type_implicitly_has_an_any_type: { code: 7017, category: ts.DiagnosticCategory.Error, key: "Index signature of object type implicitly has an 'any' type." },
- Object_literal_s_property_0_implicitly_has_an_1_type: { code: 7018, category: ts.DiagnosticCategory.Error, key: "Object literal's property '{0}' implicitly has an '{1}' type." },
- Rest_parameter_0_implicitly_has_an_any_type: { code: 7019, category: ts.DiagnosticCategory.Error, key: "Rest parameter '{0}' implicitly has an 'any[]' type." },
- Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { code: 7020, category: ts.DiagnosticCategory.Error, key: "Call signature, which lacks return-type annotation, implicitly has an 'any' return type." },
- _0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer: { code: 7022, category: ts.DiagnosticCategory.Error, key: "'{0}' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer." },
- _0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions: { code: 7023, category: ts.DiagnosticCategory.Error, key: "'{0}' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions." },
- Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions: { code: 7024, category: ts.DiagnosticCategory.Error, key: "Function implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions." },
- Generator_implicitly_has_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_type: { code: 7025, category: ts.DiagnosticCategory.Error, key: "Generator implicitly has type '{0}' because it does not yield any values. Consider supplying a return type." },
- JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists: { code: 7026, category: ts.DiagnosticCategory.Error, key: "JSX element implicitly has type 'any' because no interface 'JSX.{0}' exists" },
- You_cannot_rename_this_element: { code: 8000, category: ts.DiagnosticCategory.Error, key: "You cannot rename this element." },
- You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library: { code: 8001, category: ts.DiagnosticCategory.Error, key: "You cannot rename elements that are defined in the standard TypeScript library." },
- import_can_only_be_used_in_a_ts_file: { code: 8002, category: ts.DiagnosticCategory.Error, key: "'import ... =' can only be used in a .ts file." },
- export_can_only_be_used_in_a_ts_file: { code: 8003, category: ts.DiagnosticCategory.Error, key: "'export=' can only be used in a .ts file." },
- type_parameter_declarations_can_only_be_used_in_a_ts_file: { code: 8004, category: ts.DiagnosticCategory.Error, key: "'type parameter declarations' can only be used in a .ts file." },
- implements_clauses_can_only_be_used_in_a_ts_file: { code: 8005, category: ts.DiagnosticCategory.Error, key: "'implements clauses' can only be used in a .ts file." },
- interface_declarations_can_only_be_used_in_a_ts_file: { code: 8006, category: ts.DiagnosticCategory.Error, key: "'interface declarations' can only be used in a .ts file." },
- module_declarations_can_only_be_used_in_a_ts_file: { code: 8007, category: ts.DiagnosticCategory.Error, key: "'module declarations' can only be used in a .ts file." },
- type_aliases_can_only_be_used_in_a_ts_file: { code: 8008, category: ts.DiagnosticCategory.Error, key: "'type aliases' can only be used in a .ts file." },
- _0_can_only_be_used_in_a_ts_file: { code: 8009, category: ts.DiagnosticCategory.Error, key: "'{0}' can only be used in a .ts file." },
- types_can_only_be_used_in_a_ts_file: { code: 8010, category: ts.DiagnosticCategory.Error, key: "'types' can only be used in a .ts file." },
- type_arguments_can_only_be_used_in_a_ts_file: { code: 8011, category: ts.DiagnosticCategory.Error, key: "'type arguments' can only be used in a .ts file." },
- parameter_modifiers_can_only_be_used_in_a_ts_file: { code: 8012, category: ts.DiagnosticCategory.Error, key: "'parameter modifiers' can only be used in a .ts file." },
- property_declarations_can_only_be_used_in_a_ts_file: { code: 8014, category: ts.DiagnosticCategory.Error, key: "'property declarations' can only be used in a .ts file." },
- enum_declarations_can_only_be_used_in_a_ts_file: { code: 8015, category: ts.DiagnosticCategory.Error, key: "'enum declarations' can only be used in a .ts file." },
- type_assertion_expressions_can_only_be_used_in_a_ts_file: { code: 8016, category: ts.DiagnosticCategory.Error, key: "'type assertion expressions' can only be used in a .ts file." },
- decorators_can_only_be_used_in_a_ts_file: { code: 8017, category: ts.DiagnosticCategory.Error, key: "'decorators' can only be used in a .ts file." },
- Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_class_extends_clauses: { code: 9002, category: ts.DiagnosticCategory.Error, key: "Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clauses." },
- class_expressions_are_not_currently_supported: { code: 9003, category: ts.DiagnosticCategory.Error, key: "'class' expressions are not currently supported." },
- JSX_attributes_must_only_be_assigned_a_non_empty_expression: { code: 17000, category: ts.DiagnosticCategory.Error, key: "JSX attributes must only be assigned a non-empty 'expression'." },
- JSX_elements_cannot_have_multiple_attributes_with_the_same_name: { code: 17001, category: ts.DiagnosticCategory.Error, key: "JSX elements cannot have multiple attributes with the same name." },
- Expected_corresponding_JSX_closing_tag_for_0: { code: 17002, category: ts.DiagnosticCategory.Error, key: "Expected corresponding JSX closing tag for '{0}'." },
- JSX_attribute_expected: { code: 17003, category: ts.DiagnosticCategory.Error, key: "JSX attribute expected." },
- Cannot_use_JSX_unless_the_jsx_flag_is_provided: { code: 17004, category: ts.DiagnosticCategory.Error, key: "Cannot use JSX unless the '--jsx' flag is provided." },
- A_constructor_cannot_contain_a_super_call_when_its_class_extends_null: { code: 17005, category: ts.DiagnosticCategory.Error, key: "A constructor cannot contain a 'super' call when its class extends 'null'" },
- An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses: { code: 17006, category: ts.DiagnosticCategory.Error, key: "An unary expression with the '{0}' operator is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses." },
- A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses: { code: 17007, category: ts.DiagnosticCategory.Error, key: "A type assertion expression is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses." }
- };
- })(ts || (ts = {}));
- var ts;
- (function (ts) {
- function tokenIsIdentifierOrKeyword(token) {
- return token >= 69;
- }
- ts.tokenIsIdentifierOrKeyword = tokenIsIdentifierOrKeyword;
- var textToToken = {
- "abstract": 115,
- "any": 117,
- "as": 116,
- "boolean": 120,
- "break": 70,
- "case": 71,
- "catch": 72,
- "class": 73,
- "continue": 75,
- "const": 74,
- "constructor": 121,
- "debugger": 76,
- "declare": 122,
- "default": 77,
- "delete": 78,
- "do": 79,
- "else": 80,
- "enum": 81,
- "export": 82,
- "extends": 83,
- "false": 84,
- "finally": 85,
- "for": 86,
- "from": 133,
- "function": 87,
- "get": 123,
- "if": 88,
- "implements": 106,
- "import": 89,
- "in": 90,
- "instanceof": 91,
- "interface": 107,
- "is": 124,
- "let": 108,
- "module": 125,
- "namespace": 126,
- "new": 92,
- "null": 93,
- "number": 128,
- "package": 109,
- "private": 110,
- "protected": 111,
- "public": 112,
- "require": 127,
- "return": 94,
- "set": 129,
- "static": 113,
- "string": 130,
- "super": 95,
- "switch": 96,
- "symbol": 131,
- "this": 97,
- "throw": 98,
- "true": 99,
- "try": 100,
- "type": 132,
- "typeof": 101,
- "var": 102,
- "void": 103,
- "while": 104,
- "with": 105,
- "yield": 114,
- "async": 118,
- "await": 119,
- "of": 134,
- "{": 15,
- "}": 16,
- "(": 17,
- ")": 18,
- "[": 19,
- "]": 20,
- ".": 21,
- "...": 22,
- ";": 23,
- ",": 24,
- "<": 25,
- ">": 27,
- "<=": 28,
- ">=": 29,
- "==": 30,
- "!=": 31,
- "===": 32,
- "!==": 33,
- "=>": 34,
- "+": 35,
- "-": 36,
- "**": 38,
- "*": 37,
- "/": 39,
- "%": 40,
- "++": 41,
- "--": 42,
- "<<": 43,
- "</": 26,
- ">>": 44,
- ">>>": 45,
- "&": 46,
- "|": 47,
- "^": 48,
- "!": 49,
- "~": 50,
- "&&": 51,
- "||": 52,
- "?": 53,
- ":": 54,
- "=": 56,
- "+=": 57,
- "-=": 58,
- "*=": 59,
- "**=": 60,
- "/=": 61,
- "%=": 62,
- "<<=": 63,
- ">>=": 64,
- ">>>=": 65,
- "&=": 66,
- "|=": 67,
- "^=": 68,
- "@": 55
- };
- var unicodeES3IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
- var unicodeES3IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
- var unicodeES5IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
- var unicodeES5IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
- function lookupInUnicodeMap(code, map) {
- if (code < map[0]) {
- return false;
- }
- var lo = 0;
- var hi = map.length;
- var mid;
- while (lo + 1 < hi) {
- mid = lo + (hi - lo) / 2;
- mid -= mid % 2;
- if (map[mid] <= code && code <= map[mid + 1]) {
- return true;
- }
- if (code < map[mid]) {
- hi = mid;
- }
- else {
- lo = mid + 2;
- }
- }
- return false;
- }
- function isUnicodeIdentifierStart(code, languageVersion) {
- return languageVersion >= 1 ?
- lookupInUnicodeMap(code, unicodeES5IdentifierStart) :
- lookupInUnicodeMap(code, unicodeES3IdentifierStart);
- }
- ts.isUnicodeIdentifierStart = isUnicodeIdentifierStart;
- function isUnicodeIdentifierPart(code, languageVersion) {
- return languageVersion >= 1 ?
- lookupInUnicodeMap(code, unicodeES5IdentifierPart) :
- lookupInUnicodeMap(code, unicodeES3IdentifierPart);
- }
- function makeReverseMap(source) {
- var result = [];
- for (var name_4 in source) {
- if (source.hasOwnProperty(name_4)) {
- result[source[name_4]] = name_4;
- }
- }
- return result;
- }
- var tokenStrings = makeReverseMap(textToToken);
- function tokenToString(t) {
- return tokenStrings[t];
- }
- ts.tokenToString = tokenToString;
- function stringToToken(s) {
- return textToToken[s];
- }
- ts.stringToToken = stringToToken;
- function computeLineStarts(text) {
- var result = new Array();
- var pos = 0;
- var lineStart = 0;
- while (pos < text.length) {
- var ch = text.charCodeAt(pos++);
- switch (ch) {
- case 13:
- if (text.charCodeAt(pos) === 10) {
- pos++;
- }
- case 10:
- result.push(lineStart);
- lineStart = pos;
- break;
- default:
- if (ch > 127 && isLineBreak(ch)) {
- result.push(lineStart);
- lineStart = pos;
- }
- break;
- }
- }
- result.push(lineStart);
- return result;
- }
- ts.computeLineStarts = computeLineStarts;
- function getPositionOfLineAndCharacter(sourceFile, line, character) {
- return computePositionOfLineAndCharacter(getLineStarts(sourceFile), line, character);
- }
- ts.getPositionOfLineAndCharacter = getPositionOfLineAndCharacter;
- function computePositionOfLineAndCharacter(lineStarts, line, character) {
- ts.Debug.assert(line >= 0 && line < lineStarts.length);
- return lineStarts[line] + character;
- }
- ts.computePositionOfLineAndCharacter = computePositionOfLineAndCharacter;
- function getLineStarts(sourceFile) {
- return sourceFile.lineMap || (sourceFile.lineMap = computeLineStarts(sourceFile.text));
- }
- ts.getLineStarts = getLineStarts;
- function computeLineAndCharacterOfPosition(lineStarts, position) {
- var lineNumber = ts.binarySearch(lineStarts, position);
- if (lineNumber < 0) {
- lineNumber = ~lineNumber - 1;
- ts.Debug.assert(lineNumber !== -1, "position cannot precede the beginning of the file");
- }
- return {
- line: lineNumber,
- character: position - lineStarts[lineNumber]
- };
- }
- ts.computeLineAndCharacterOfPosition = computeLineAndCharacterOfPosition;
- function getLineAndCharacterOfPosition(sourceFile, position) {
- return computeLineAndCharacterOfPosition(getLineStarts(sourceFile), position);
- }
- ts.getLineAndCharacterOfPosition = getLineAndCharacterOfPosition;
- var hasOwnProperty = Object.prototype.hasOwnProperty;
- function isWhiteSpace(ch) {
- return ch === 32 ||
- ch === 9 ||
- ch === 11 ||
- ch === 12 ||
- ch === 160 ||
- ch === 133 ||
- ch === 5760 ||
- ch >= 8192 && ch <= 8203 ||
- ch === 8239 ||
- ch === 8287 ||
- ch === 12288 ||
- ch === 65279;
- }
- ts.isWhiteSpace = isWhiteSpace;
- function isLineBreak(ch) {
- return ch === 10 ||
- ch === 13 ||
- ch === 8232 ||
- ch === 8233;
- }
- ts.isLineBreak = isLineBreak;
- function isDigit(ch) {
- return ch >= 48 && ch <= 57;
- }
- function isOctalDigit(ch) {
- return ch >= 48 && ch <= 55;
- }
- ts.isOctalDigit = isOctalDigit;
- function couldStartTrivia(text, pos) {
- var ch = text.charCodeAt(pos);
- switch (ch) {
- case 13:
- case 10:
- case 9:
- case 11:
- case 12:
- case 32:
- case 47:
- case 60:
- case 61:
- case 62:
- return true;
- case 35:
- return pos === 0;
- default:
- return ch > 127;
- }
- }
- ts.couldStartTrivia = couldStartTrivia;
- function skipTrivia(text, pos, stopAfterLineBreak) {
- while (true) {
- var ch = text.charCodeAt(pos);
- switch (ch) {
- case 13:
- if (text.charCodeAt(pos + 1) === 10) {
- pos++;
- }
- case 10:
- pos++;
- if (stopAfterLineBreak) {
- return pos;
- }
- continue;
- case 9:
- case 11:
- case 12:
- case 32:
- pos++;
- continue;
- case 47:
- if (text.charCodeAt(pos + 1) === 47) {
- pos += 2;
- while (pos < text.length) {
- if (isLineBreak(text.charCodeAt(pos))) {
- break;
- }
- pos++;
- }
- continue;
- }
- if (text.charCodeAt(pos + 1) === 42) {
- pos += 2;
- while (pos < text.length) {
- if (text.charCodeAt(pos) === 42 && text.charCodeAt(pos + 1) === 47) {
- pos += 2;
- break;
- }
- pos++;
- }
- continue;
- }
- break;
- case 60:
- case 61:
- case 62:
- if (isConflictMarkerTrivia(text, pos)) {
- pos = scanConflictMarkerTrivia(text, pos);
- continue;
- }
- break;
- case 35:
- if (pos === 0 && isShebangTrivia(text, pos)) {
- pos = scanShebangTrivia(text, pos);
- continue;
- }
- break;
- default:
- if (ch > 127 && (isWhiteSpace(ch) || isLineBreak(ch))) {
- pos++;
- continue;
- }
- break;
- }
- return pos;
- }
- }
- ts.skipTrivia = skipTrivia;
- var mergeConflictMarkerLength = "<<<<<<<".length;
- function isConflictMarkerTrivia(text, pos) {
- ts.Debug.assert(pos >= 0);
- if (pos === 0 || isLineBreak(text.charCodeAt(pos - 1))) {
- var ch = text.charCodeAt(pos);
- if ((pos + mergeConflictMarkerLength) < text.length) {
- for (var i = 0, n = mergeConflictMarkerLength; i < n; i++) {
- if (text.charCodeAt(pos + i) !== ch) {
- return false;
- }
- }
- return ch === 61 ||
- text.charCodeAt(pos + mergeConflictMarkerLength) === 32;
- }
- }
- return false;
- }
- function scanConflictMarkerTrivia(text, pos, error) {
- if (error) {
- error(ts.Diagnostics.Merge_conflict_marker_encountered, mergeConflictMarkerLength);
- }
- var ch = text.charCodeAt(pos);
- var len = text.length;
- if (ch === 60 || ch === 62) {
- while (pos < len && !isLineBreak(text.charCodeAt(pos))) {
- pos++;
- }
- }
- else {
- ts.Debug.assert(ch === 61);
- while (pos < len) {
- var ch_1 = text.charCodeAt(pos);
- if (ch_1 === 62 && isConflictMarkerTrivia(text, pos)) {
- break;
- }
- pos++;
- }
- }
- return pos;
- }
- var shebangTriviaRegex = /^#!.*/;
- function isShebangTrivia(text, pos) {
- ts.Debug.assert(pos === 0);
- return shebangTriviaRegex.test(text);
- }
- function scanShebangTrivia(text, pos) {
- var shebang = shebangTriviaRegex.exec(text)[0];
- pos = pos + shebang.length;
- return pos;
- }
- function getCommentRanges(text, pos, trailing) {
- var result;
- var collecting = trailing || pos === 0;
- while (true) {
- var ch = text.charCodeAt(pos);
- switch (ch) {
- case 13:
- if (text.charCodeAt(pos + 1) === 10) {
- pos++;
- }
- case 10:
- pos++;
- if (trailing) {
- return result;
- }
- collecting = true;
- if (result && result.length) {
- ts.lastOrUndefined(result).hasTrailingNewLine = true;
- }
- continue;
- case 9:
- case 11:
- case 12:
- case 32:
- pos++;
- continue;
- case 47:
- var nextChar = text.charCodeAt(pos + 1);
- var hasTrailingNewLine = false;
- if (nextChar === 47 || nextChar === 42) {
- var kind = nextChar === 47 ? 2 : 3;
- var startPos = pos;
- pos += 2;
- if (nextChar === 47) {
- while (pos < text.length) {
- if (isLineBreak(text.charCodeAt(pos))) {
- hasTrailingNewLine = true;
- break;
- }
- pos++;
- }
- }
- else {
- while (pos < text.length) {
- if (text.charCodeAt(pos) === 42 && text.charCodeAt(pos + 1) === 47) {
- pos += 2;
- break;
- }
- pos++;
- }
- }
- if (collecting) {
- if (!result) {
- result = [];
- }
- result.push({ pos: startPos, end: pos, hasTrailingNewLine: hasTrailingNewLine, kind: kind });
- }
- continue;
- }
- break;
- default:
- if (ch > 127 && (isWhiteSpace(ch) || isLineBreak(ch))) {
- if (result && result.length && isLineBreak(ch)) {
- ts.lastOrUndefined(result).hasTrailingNewLine = true;
- }
- pos++;
- continue;
- }
- break;
- }
- return result;
- }
- }
- function getLeadingCommentRanges(text, pos) {
- return getCommentRanges(text, pos, false);
- }
- ts.getLeadingCommentRanges = getLeadingCommentRanges;
- function getTrailingCommentRanges(text, pos) {
- return getCommentRanges(text, pos, true);
- }
- ts.getTrailingCommentRanges = getTrailingCommentRanges;
- function getShebang(text) {
- return shebangTriviaRegex.test(text)
- ? shebangTriviaRegex.exec(text)[0]
- : undefined;
- }
- ts.getShebang = getShebang;
- function isIdentifierStart(ch, languageVersion) {
- return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 ||
- ch === 36 || ch === 95 ||
- ch > 127 && isUnicodeIdentifierStart(ch, languageVersion);
- }
- ts.isIdentifierStart = isIdentifierStart;
- function isIdentifierPart(ch, languageVersion) {
- return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 ||
- ch >= 48 && ch <= 57 || ch === 36 || ch === 95 ||
- ch > 127 && isUnicodeIdentifierPart(ch, languageVersion);
- }
- ts.isIdentifierPart = isIdentifierPart;
- function createScanner(languageVersion, skipTrivia, languageVariant, text, onError, start, length) {
- if (languageVariant === void 0) { languageVariant = 0; }
- var pos;
- var end;
- var startPos;
- var tokenPos;
- var token;
- var tokenValue;
- var precedingLineBreak;
- var hasExtendedUnicodeEscape;
- var tokenIsUnterminated;
- setText(text, start, length);
- return {
- getStartPos: function () { return startPos; },
- getTextPos: function () { return pos; },
- getToken: function () { return token; },
- getTokenPos: function () { return tokenPos; },
- getTokenText: function () { return text.substring(tokenPos, pos); },
- getTokenValue: function () { return tokenValue; },
- hasExtendedUnicodeEscape: function () { return hasExtendedUnicodeEscape; },
- hasPrecedingLineBreak: function () { return precedingLineBreak; },
- isIdentifier: function () { return token === 69 || token > 105; },
- isReservedWord: function () { return token >= 70 && token <= 105; },
- isUnterminated: function () { return tokenIsUnterminated; },
- reScanGreaterToken: reScanGreaterToken,
- reScanSlashToken: reScanSlashToken,
- reScanTemplateToken: reScanTemplateToken,
- scanJsxIdentifier: scanJsxIdentifier,
- reScanJsxToken: reScanJsxToken,
- scanJsxToken: scanJsxToken,
- scan: scan,
- setText: setText,
- setScriptTarget: setScriptTarget,
- setLanguageVariant: setLanguageVariant,
- setOnError: setOnError,
- setTextPos: setTextPos,
- tryScan: tryScan,
- lookAhead: lookAhead
- };
- function error(message, length) {
- if (onError) {
- onError(message, length || 0);
- }
- }
- function scanNumber() {
- var start = pos;
- while (isDigit(text.charCodeAt(pos)))
- pos++;
- if (text.charCodeAt(pos) === 46) {
- pos++;
- while (isDigit(text.charCodeAt(pos)))
- pos++;
- }
- var end = pos;
- if (text.charCodeAt(pos) === 69 || text.charCodeAt(pos) === 101) {
- pos++;
- if (text.charCodeAt(pos) === 43 || text.charCodeAt(pos) === 45)
- pos++;
- if (isDigit(text.charCodeAt(pos))) {
- pos++;
- while (isDigit(text.charCodeAt(pos)))
- pos++;
- end = pos;
- }
- else {
- error(ts.Diagnostics.Digit_expected);
- }
- }
- return +(text.substring(start, end));
- }
- function scanOctalDigits() {
- var start = pos;
- while (isOctalDigit(text.charCodeAt(pos))) {
- pos++;
- }
- return +(text.substring(start, pos));
- }
- function scanExactNumberOfHexDigits(count) {
- return scanHexDigits(count, false);
- }
- function scanMinimumNumberOfHexDigits(count) {
- return scanHexDigits(count, true);
- }
- function scanHexDigits(minCount, scanAsManyAsPossible) {
- var digits = 0;
- var value = 0;
- while (digits < minCount || scanAsManyAsPossible) {
- var ch = text.charCodeAt(pos);
- if (ch >= 48 && ch <= 57) {
- value = value * 16 + ch - 48;
- }
- else if (ch >= 65 && ch <= 70) {
- value = value * 16 + ch - 65 + 10;
- }
- else if (ch >= 97 && ch <= 102) {
- value = value * 16 + ch - 97 + 10;
- }
- else {
- break;
- }
- pos++;
- digits++;
- }
- if (digits < minCount) {
- value = -1;
- }
- return value;
- }
- function scanString() {
- var quote = text.charCodeAt(pos++);
- var result = "";
- var start = pos;
- while (true) {
- if (pos >= end) {
- result += text.substring(start, pos);
- tokenIsUnterminated = true;
- error(ts.Diagnostics.Unterminated_string_literal);
- break;
- }
- var ch = text.charCodeAt(pos);
- if (ch === quote) {
- result += text.substring(start, pos);
- pos++;
- break;
- }
- if (ch === 92) {
- result += text.substring(start, pos);
- result += scanEscapeSequence();
- start = pos;
- continue;
- }
- if (isLineBreak(ch)) {
- result += text.substring(start, pos);
- tokenIsUnterminated = true;
- error(ts.Diagnostics.Unterminated_string_literal);
- break;
- }
- pos++;
- }
- return result;
- }
- function scanTemplateAndSetTokenValue() {
- var startedWithBacktick = text.charCodeAt(pos) === 96;
- pos++;
- var start = pos;
- var contents = "";
- var resultingToken;
- while (true) {
- if (pos >= end) {
- contents += text.substring(start, pos);
- tokenIsUnterminated = true;
- error(ts.Diagnostics.Unterminated_template_literal);
- resultingToken = startedWithBacktick ? 11 : 14;
- break;
- }
- var currChar = text.charCodeAt(pos);
- if (currChar === 96) {
- contents += text.substring(start, pos);
- pos++;
- resultingToken = startedWithBacktick ? 11 : 14;
- break;
- }
- if (currChar === 36 && pos + 1 < end && text.charCodeAt(pos + 1) === 123) {
- contents += text.substring(start, pos);
- pos += 2;
- resultingToken = startedWithBacktick ? 12 : 13;
- break;
- }
- if (currChar === 92) {
- contents += text.substring(start, pos);
- contents += scanEscapeSequence();
- start = pos;
- continue;
- }
- if (currChar === 13) {
- contents += text.substring(start, pos);
- pos++;
- if (pos < end && text.charCodeAt(pos) === 10) {
- pos++;
- }
- contents += "\n";
- start = pos;
- continue;
- }
- pos++;
- }
- ts.Debug.assert(resultingToken !== undefined);
- tokenValue = contents;
- return resultingToken;
- }
- function scanEscapeSequence() {
- pos++;
- if (pos >= end) {
- error(ts.Diagnostics.Unexpected_end_of_text);
- return "";
- }
- var ch = text.charCodeAt(pos++);
- switch (ch) {
- case 48:
- return "\0";
- case 98:
- return "\b";
- case 116:
- return "\t";
- case 110:
- return "\n";
- case 118:
- return "\v";
- case 102:
- return "\f";
- case 114:
- return "\r";
- case 39:
- return "\'";
- case 34:
- return "\"";
- case 117:
- if (pos < end && text.charCodeAt(pos) === 123) {
- hasExtendedUnicodeEscape = true;
- pos++;
- return scanExtendedUnicodeEscape();
- }
- return scanHexadecimalEscape(4);
- case 120:
- return scanHexadecimalEscape(2);
- case 13:
- if (pos < end && text.charCodeAt(pos) === 10) {
- pos++;
- }
- case 10:
- case 8232:
- case 8233:
- return "";
- default:
- return String.fromCharCode(ch);
- }
- }
- function scanHexadecimalEscape(numDigits) {
- var escapedValue = scanExactNumberOfHexDigits(numDigits);
- if (escapedValue >= 0) {
- return String.fromCharCode(escapedValue);
- }
- else {
- error(ts.Diagnostics.Hexadecimal_digit_expected);
- return "";
- }
- }
- function scanExtendedUnicodeEscape() {
- var escapedValue = scanMinimumNumberOfHexDigits(1);
- var isInvalidExtendedEscape = false;
- if (escapedValue < 0) {
- error(ts.Diagnostics.Hexadecimal_digit_expected);
- isInvalidExtendedEscape = true;
- }
- else if (escapedValue > 0x10FFFF) {
- error(ts.Diagnostics.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive);
- isInvalidExtendedEscape = true;
- }
- if (pos >= end) {
- error(ts.Diagnostics.Unexpected_end_of_text);
- isInvalidExtendedEscape = true;
- }
- else if (text.charCodeAt(pos) === 125) {
- pos++;
- }
- else {
- error(ts.Diagnostics.Unterminated_Unicode_escape_sequence);
- isInvalidExtendedEscape = true;
- }
- if (isInvalidExtendedEscape) {
- return "";
- }
- return utf16EncodeAsString(escapedValue);
- }
- function utf16EncodeAsString(codePoint) {
- ts.Debug.assert(0x0 <= codePoint && codePoint <= 0x10FFFF);
- if (codePoint <= 65535) {
- return String.fromCharCode(codePoint);
- }
- var codeUnit1 = Math.floor((codePoint - 65536) / 1024) + 0xD800;
- var codeUnit2 = ((codePoint - 65536) % 1024) + 0xDC00;
- return String.fromCharCode(codeUnit1, codeUnit2);
- }
- function peekUnicodeEscape() {
- if (pos + 5 < end && text.charCodeAt(pos + 1) === 117) {
- var start_1 = pos;
- pos += 2;
- var value = scanExactNumberOfHexDigits(4);
- pos = start_1;
- return value;
- }
- return -1;
- }
- function scanIdentifierParts() {
- var result = "";
- var start = pos;
- while (pos < end) {
- var ch = text.charCodeAt(pos);
- if (isIdentifierPart(ch, languageVersion)) {
- pos++;
- }
- else if (ch === 92) {
- ch = peekUnicodeEscape();
- if (!(ch >= 0 && isIdentifierPart(ch, languageVersion))) {
- break;
- }
- result += text.substring(start, pos);
- result += String.fromCharCode(ch);
- pos += 6;
- start = pos;
- }
- else {
- break;
- }
- }
- result += text.substring(start, pos);
- return result;
- }
- function getIdentifierToken() {
- var len = tokenValue.length;
- if (len >= 2 && len <= 11) {
- var ch = tokenValue.charCodeAt(0);
- if (ch >= 97 && ch <= 122 && hasOwnProperty.call(textToToken, tokenValue)) {
- return token = textToToken[tokenValue];
- }
- }
- return token = 69;
- }
- function scanBinaryOrOctalDigits(base) {
- ts.Debug.assert(base !== 2 || base !== 8, "Expected either base 2 or base 8");
- var value = 0;
- var numberOfDigits = 0;
- while (true) {
- var ch = text.charCodeAt(pos);
- var valueOfCh = ch - 48;
- if (!isDigit(ch) || valueOfCh >= base) {
- break;
- }
- value = value * base + valueOfCh;
- pos++;
- numberOfDigits++;
- }
- if (numberOfDigits === 0) {
- return -1;
- }
- return value;
- }
- function scan() {
- startPos = pos;
- hasExtendedUnicodeEscape = false;
- precedingLineBreak = false;
- tokenIsUnterminated = false;
- while (true) {
- tokenPos = pos;
- if (pos >= end) {
- return token = 1;
- }
- var ch = text.charCodeAt(pos);
- if (ch === 35 && pos === 0 && isShebangTrivia(text, pos)) {
- pos = scanShebangTrivia(text, pos);
- if (skipTrivia) {
- continue;
- }
- else {
- return token = 6;
- }
- }
- switch (ch) {
- case 10:
- case 13:
- precedingLineBreak = true;
- if (skipTrivia) {
- pos++;
- continue;
- }
- else {
- if (ch === 13 && pos + 1 < end && text.charCodeAt(pos + 1) === 10) {
- pos += 2;
- }
- else {
- pos++;
- }
- return token = 4;
- }
- case 9:
- case 11:
- case 12:
- case 32:
- if (skipTrivia) {
- pos++;
- continue;
- }
- else {
- while (pos < end && isWhiteSpace(text.charCodeAt(pos))) {
- pos++;
- }
- return token = 5;
- }
- case 33:
- if (text.charCodeAt(pos + 1) === 61) {
- if (text.charCodeAt(pos + 2) === 61) {
- return pos += 3, token = 33;
- }
- return pos += 2, token = 31;
- }
- return pos++, token = 49;
- case 34:
- case 39:
- tokenValue = scanString();
- return token = 9;
- case 96:
- return token = scanTemplateAndSetTokenValue();
- case 37:
- if (text.charCodeAt(pos + 1) === 61) {
- return pos += 2, token = 62;
- }
- return pos++, token = 40;
- case 38:
- if (text.charCodeAt(pos + 1) === 38) {
- return pos += 2, token = 51;
- }
- if (text.charCodeAt(pos + 1) === 61) {
- return pos += 2, token = 66;
- }
- return pos++, token = 46;
- case 40:
- return pos++, token = 17;
- case 41:
- return pos++, token = 18;
- case 42:
- if (text.charCodeAt(pos + 1) === 61) {
- return pos += 2, token = 59;
- }
- if (text.charCodeAt(pos + 1) === 42) {
- if (text.charCodeAt(pos + 2) === 61) {
- return pos += 3, token = 60;
- }
- return pos += 2, token = 38;
- }
- return pos++, token = 37;
- case 43:
- if (text.charCodeAt(pos + 1) === 43) {
- return pos += 2, token = 41;
- }
- if (text.charCodeAt(pos + 1) === 61) {
- return pos += 2, token = 57;
- }
- return pos++, token = 35;
- case 44:
- return pos++, token = 24;
- case 45:
- if (text.charCodeAt(pos + 1) === 45) {
- return pos += 2, token = 42;
- }
- if (text.charCodeAt(pos + 1) === 61) {
- return pos += 2, token = 58;
- }
- return pos++, token = 36;
- case 46:
- if (isDigit(text.charCodeAt(pos + 1))) {
- tokenValue = "" + scanNumber();
- return token = 8;
- }
- if (text.charCodeAt(pos + 1) === 46 && text.charCodeAt(pos + 2) === 46) {
- return pos += 3, token = 22;
- }
- return pos++, token = 21;
- case 47:
- if (text.charCodeAt(pos + 1) === 47) {
- pos += 2;
- while (pos < end) {
- if (isLineBreak(text.charCodeAt(pos))) {
- break;
- }
- pos++;
- }
- if (skipTrivia) {
- continue;
- }
- else {
- return token = 2;
- }
- }
- if (text.charCodeAt(pos + 1) === 42) {
- pos += 2;
- var commentClosed = false;
- while (pos < end) {
- var ch_2 = text.charCodeAt(pos);
- if (ch_2 === 42 && text.charCodeAt(pos + 1) === 47) {
- pos += 2;
- commentClosed = true;
- break;
- }
- if (isLineBreak(ch_2)) {
- precedingLineBreak = true;
- }
- pos++;
- }
- if (!commentClosed) {
- error(ts.Diagnostics.Asterisk_Slash_expected);
- }
- if (skipTrivia) {
- continue;
- }
- else {
- tokenIsUnterminated = !commentClosed;
- return token = 3;
- }
- }
- if (text.charCodeAt(pos + 1) === 61) {
- return pos += 2, token = 61;
- }
- return pos++, token = 39;
- case 48:
- if (pos + 2 < end && (text.charCodeAt(pos + 1) === 88 || text.charCodeAt(pos + 1) === 120)) {
- pos += 2;
- var value = scanMinimumNumberOfHexDigits(1);
- if (value < 0) {
- error(ts.Diagnostics.Hexadecimal_digit_expected);
- value = 0;
- }
- tokenValue = "" + value;
- return token = 8;
- }
- else if (pos + 2 < end && (text.charCodeAt(pos + 1) === 66 || text.charCodeAt(pos + 1) === 98)) {
- pos += 2;
- var value = scanBinaryOrOctalDigits(2);
- if (value < 0) {
- error(ts.Diagnostics.Binary_digit_expected);
- value = 0;
- }
- tokenValue = "" + value;
- return token = 8;
- }
- else if (pos + 2 < end && (text.charCodeAt(pos + 1) === 79 || text.charCodeAt(pos + 1) === 111)) {
- pos += 2;
- var value = scanBinaryOrOctalDigits(8);
- if (value < 0) {
- error(ts.Diagnostics.Octal_digit_expected);
- value = 0;
- }
- tokenValue = "" + value;
- return token = 8;
- }
- if (pos + 1 < end && isOctalDigit(text.charCodeAt(pos + 1))) {
- tokenValue = "" + scanOctalDigits();
- return token = 8;
- }
- case 49:
- case 50:
- case 51:
- case 52:
- case 53:
- case 54:
- case 55:
- case 56:
- case 57:
- tokenValue = "" + scanNumber();
- return token = 8;
- case 58:
- return pos++, token = 54;
- case 59:
- return pos++, token = 23;
- case 60:
- if (isConflictMarkerTrivia(text, pos)) {
- pos = scanConflictMarkerTrivia(text, pos, error);
- if (skipTrivia) {
- continue;
- }
- else {
- return token = 7;
- }
- }
- if (text.charCodeAt(pos + 1) === 60) {
- if (text.charCodeAt(pos + 2) === 61) {
- return pos += 3, token = 63;
- }
- return pos += 2, token = 43;
- }
- if (text.charCodeAt(pos + 1) === 61) {
- return pos += 2, token = 28;
- }
- if (languageVariant === 1 &&
- text.charCodeAt(pos + 1) === 47 &&
- text.charCodeAt(pos + 2) !== 42) {
- return pos += 2, token = 26;
- }
- return pos++, token = 25;
- case 61:
- if (isConflictMarkerTrivia(text, pos)) {
- pos = scanConflictMarkerTrivia(text, pos, error);
- if (skipTrivia) {
- continue;
- }
- else {
- return token = 7;
- }
- }
- if (text.charCodeAt(pos + 1) === 61) {
- if (text.charCodeAt(pos + 2) === 61) {
- return pos += 3, token = 32;
- }
- return pos += 2, token = 30;
- }
- if (text.charCodeAt(pos + 1) === 62) {
- return pos += 2, token = 34;
- }
- return pos++, token = 56;
- case 62:
- if (isConflictMarkerTrivia(text, pos)) {
- pos = scanConflictMarkerTrivia(text, pos, error);
- if (skipTrivia) {
- continue;
- }
- else {
- return token = 7;
- }
- }
- return pos++, token = 27;
- case 63:
- return pos++, token = 53;
- case 91:
- return pos++, token = 19;
- case 93:
- return pos++, token = 20;
- case 94:
- if (text.charCodeAt(pos + 1) === 61) {
- return pos += 2, token = 68;
- }
- return pos++, token = 48;
- case 123:
- return pos++, token = 15;
- case 124:
- if (text.charCodeAt(pos + 1) === 124) {
- return pos += 2, token = 52;
- }
- if (text.charCodeAt(pos + 1) === 61) {
- return pos += 2, token = 67;
- }
- return pos++, token = 47;
- case 125:
- return pos++, token = 16;
- case 126:
- return pos++, token = 50;
- case 64:
- return pos++, token = 55;
- case 92:
- var cookedChar = peekUnicodeEscape();
- if (cookedChar >= 0 && isIdentifierStart(cookedChar, languageVersion)) {
- pos += 6;
- tokenValue = String.fromCharCode(cookedChar) + scanIdentifierParts();
- return token = getIdentifierToken();
- }
- error(ts.Diagnostics.Invalid_character);
- return pos++, token = 0;
- default:
- if (isIdentifierStart(ch, languageVersion)) {
- pos++;
- while (pos < end && isIdentifierPart(ch = text.charCodeAt(pos), languageVersion))
- pos++;
- tokenValue = text.substring(tokenPos, pos);
- if (ch === 92) {
- tokenValue += scanIdentifierParts();
- }
- return token = getIdentifierToken();
- }
- else if (isWhiteSpace(ch)) {
- pos++;
- continue;
- }
- else if (isLineBreak(ch)) {
- precedingLineBreak = true;
- pos++;
- continue;
- }
- error(ts.Diagnostics.Invalid_character);
- return pos++, token = 0;
- }
- }
- }
- function reScanGreaterToken() {
- if (token === 27) {
- if (text.charCodeAt(pos) === 62) {
- if (text.charCodeAt(pos + 1) === 62) {
- if (text.charCodeAt(pos + 2) === 61) {
- return pos += 3, token = 65;
- }
- return pos += 2, token = 45;
- }
- if (text.charCodeAt(pos + 1) === 61) {
- return pos += 2, token = 64;
- }
- return pos++, token = 44;
- }
- if (text.charCodeAt(pos) === 61) {
- return pos++, token = 29;
- }
- }
- return token;
- }
- function reScanSlashToken() {
- if (token === 39 || token === 61) {
- var p = tokenPos + 1;
- var inEscape = false;
- var inCharacterClass = false;
- while (true) {
- if (p >= end) {
- tokenIsUnterminated = true;
- error(ts.Diagnostics.Unterminated_regular_expression_literal);
- break;
- }
- var ch = text.charCodeAt(p);
- if (isLineBreak(ch)) {
- tokenIsUnterminated = true;
- error(ts.Diagnostics.Unterminated_regular_expression_literal);
- break;
- }
- if (inEscape) {
- inEscape = false;
- }
- else if (ch === 47 && !inCharacterClass) {
- p++;
- break;
- }
- else if (ch === 91) {
- inCharacterClass = true;
- }
- else if (ch === 92) {
- inEscape = true;
- }
- else if (ch === 93) {
- inCharacterClass = false;
- }
- p++;
- }
- while (p < end && isIdentifierPart(text.charCodeAt(p), languageVersion)) {
- p++;
- }
- pos = p;
- tokenValue = text.substring(tokenPos, pos);
- token = 10;
- }
- return token;
- }
- function reScanTemplateToken() {
- ts.Debug.assert(token === 16, "'reScanTemplateToken' should only be called on a '}'");
- pos = tokenPos;
- return token = scanTemplateAndSetTokenValue();
- }
- function reScanJsxToken() {
- pos = tokenPos = startPos;
- return token = scanJsxToken();
- }
- function scanJsxToken() {
- startPos = tokenPos = pos;
- if (pos >= end) {
- return token = 1;
- }
- var char = text.charCodeAt(pos);
- if (char === 60) {
- if (text.charCodeAt(pos + 1) === 47) {
- pos += 2;
- return token = 26;
- }
- pos++;
- return token = 25;
- }
- if (char === 123) {
- pos++;
- return token = 15;
- }
- while (pos < end) {
- pos++;
- char = text.charCodeAt(pos);
- if ((char === 123) || (char === 60)) {
- break;
- }
- }
- return token = 236;
- }
- function scanJsxIdentifier() {
- if (tokenIsIdentifierOrKeyword(token)) {
- var firstCharPosition = pos;
- while (pos < end) {
- var ch = text.charCodeAt(pos);
- if (ch === 45 || ((firstCharPosition === pos) ? isIdentifierStart(ch, languageVersion) : isIdentifierPart(ch, languageVersion))) {
- pos++;
- }
- else {
- break;
- }
- }
- tokenValue += text.substr(firstCharPosition, pos - firstCharPosition);
- }
- return token;
- }
- function speculationHelper(callback, isLookahead) {
- var savePos = pos;
- var saveStartPos = startPos;
- var saveTokenPos = tokenPos;
- var saveToken = token;
- var saveTokenValue = tokenValue;
- var savePrecedingLineBreak = precedingLineBreak;
- var result = callback();
- if (!result || isLookahead) {
- pos = savePos;
- startPos = saveStartPos;
- tokenPos = saveTokenPos;
- token = saveToken;
- tokenValue = saveTokenValue;
- precedingLineBreak = savePrecedingLineBreak;
- }
- return result;
- }
- function lookAhead(callback) {
- return speculationHelper(callback, true);
- }
- function tryScan(callback) {
- return speculationHelper(callback, false);
- }
- function setText(newText, start, length) {
- text = newText || "";
- end = length === undefined ? text.length : start + length;
- setTextPos(start || 0);
- }
- function setOnError(errorCallback) {
- onError = errorCallback;
- }
- function setScriptTarget(scriptTarget) {
- languageVersion = scriptTarget;
- }
- function setLanguageVariant(variant) {
- languageVariant = variant;
- }
- function setTextPos(textPos) {
- ts.Debug.assert(textPos >= 0);
- pos = textPos;
- startPos = textPos;
- tokenPos = textPos;
- token = 0;
- precedingLineBreak = false;
- tokenValue = undefined;
- hasExtendedUnicodeEscape = false;
- tokenIsUnterminated = false;
- }
- }
- ts.createScanner = createScanner;
- })(ts || (ts = {}));
- var ts;
- (function (ts) {
- ts.bindTime = 0;
- function getModuleInstanceState(node) {
- if (node.kind === 215 || node.kind === 216) {
- return 0;
- }
- else if (ts.isConstEnumDeclaration(node)) {
- return 2;
- }
- else if ((node.kind === 222 || node.kind === 221) && !(node.flags & 1)) {
- return 0;
- }
- else if (node.kind === 219) {
- var state = 0;
- ts.forEachChild(node, function (n) {
- switch (getModuleInstanceState(n)) {
- case 0:
- return false;
- case 2:
- state = 2;
- return false;
- case 1:
- state = 1;
- return true;
- }
- });
- return state;
- }
- else if (node.kind === 218) {
- return getModuleInstanceState(node.body);
- }
- else {
- return 1;
- }
- }
- ts.getModuleInstanceState = getModuleInstanceState;
- function bindSourceFile(file) {
- var start = new Date().getTime();
- bindSourceFileWorker(file);
- ts.bindTime += new Date().getTime() - start;
- }
- ts.bindSourceFile = bindSourceFile;
- function bindSourceFileWorker(file) {
- var parent;
- var container;
- var blockScopeContainer;
- var lastContainer;
- var seenThisKeyword;
- var inStrictMode = !!file.externalModuleIndicator;
- var symbolCount = 0;
- var Symbol = ts.objectAllocator.getSymbolConstructor();
- var classifiableNames = {};
- if (!file.locals) {
- bind(file);
- file.symbolCount = symbolCount;
- file.classifiableNames = classifiableNames;
- }
- return;
- function createSymbol(flags, name) {
- symbolCount++;
- return new Symbol(flags, name);
- }
- function addDeclarationToSymbol(symbol, node, symbolFlags) {
- symbol.flags |= symbolFlags;
- node.symbol = symbol;
- if (!symbol.declarations) {
- symbol.declarations = [];
- }
- symbol.declarations.push(node);
- if (symbolFlags & 1952 && !symbol.exports) {
- symbol.exports = {};
- }
- if (symbolFlags & 6240 && !symbol.members) {
- symbol.members = {};
- }
- if (symbolFlags & 107455 && !symbol.valueDeclaration) {
- symbol.valueDeclaration = node;
- }
- }
- function getDeclarationName(node) {
- if (node.name) {
- if (node.kind === 218 && node.name.kind === 9) {
- return "\"" + node.name.text + "\"";
- }
- if (node.name.kind === 136) {
- var nameExpression = node.name.expression;
- ts.Debug.assert(ts.isWellKnownSymbolSyntactically(nameExpression));
- return ts.getPropertyNameForKnownSymbolName(nameExpression.name.text);
- }
- return node.name.text;
- }
- switch (node.kind) {
- case 144:
- return "__constructor";
- case 152:
- case 147:
- return "__call";
- case 153:
- case 148:
- return "__new";
- case 149:
- return "__index";
- case 228:
- return "__export";
- case 227:
- return node.isExportEquals ? "export=" : "default";
- case 213:
- case 214:
- return node.flags & 1024 ? "default" : undefined;
- }
- }
- function getDisplayName(node) {
- return node.name ? ts.declarationNameToString(node.name) : getDeclarationName(node);
- }
- function declareSymbol(symbolTable, parent, node, includes, excludes) {
- ts.Debug.assert(!ts.hasDynamicName(node));
- var isDefaultExport = node.flags & 1024;
- var name = isDefaultExport && parent ? "default" : getDeclarationName(node);
- var symbol;
- if (name !== undefined) {
- symbol = ts.hasProperty(symbolTable, name)
- ? symbolTable[name]
- : (symbolTable[name] = createSymbol(0, name));
- if (name && (includes & 788448)) {
- classifiableNames[name] = name;
- }
- if (symbol.flags & excludes) {
- if (node.name) {
- node.name.parent = node;
- }
- var message = symbol.flags & 2
- ? ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0
- : ts.Diagnostics.Duplicate_identifier_0;
- ts.forEach(symbol.declarations, function (declaration) {
- if (declaration.flags & 1024) {
- message = ts.Diagnostics.A_module_cannot_have_multiple_default_exports;
- }
- });
- ts.forEach(symbol.declarations, function (declaration) {
- file.bindDiagnostics.push(ts.createDiagnosticForNode(declaration.name || declaration, message, getDisplayName(declaration)));
- });
- file.bindDiagnostics.push(ts.createDiagnosticForNode(node.name || node, message, getDisplayName(node)));
- symbol = createSymbol(0, name);
- }
- }
- else {
- symbol = createSymbol(0, "__missing");
- }
- addDeclarationToSymbol(symbol, node, includes);
- symbol.parent = parent;
- return symbol;
- }
- function declareModuleMember(node, symbolFlags, symbolExcludes) {
- var hasExportModifier = ts.getCombinedNodeFlags(node) & 1;
- if (symbolFlags & 8388608) {
- if (node.kind === 230 || (node.kind === 221 && hasExportModifier)) {
- return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
- }
- else {
- return declareSymbol(container.locals, undefined, node, symbolFlags, symbolExcludes);
- }
- }
- else {
- if (hasExportModifier || container.flags & 262144) {
- var exportKind = (symbolFlags & 107455 ? 1048576 : 0) |
- (symbolFlags & 793056 ? 2097152 : 0) |
- (symbolFlags & 1536 ? 4194304 : 0);
- var local = declareSymbol(container.locals, undefined, node, exportKind, symbolExcludes);
- local.exportSymbol = declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
- node.localSymbol = local;
- return local;
- }
- else {
- return declareSymbol(container.locals, undefined, node, symbolFlags, symbolExcludes);
- }
- }
- }
- function bindChildren(node) {
- var saveParent = parent;
- var saveContainer = container;
- var savedBlockScopeContainer = blockScopeContainer;
- parent = node;
- var containerFlags = getContainerFlags(node);
- if (containerFlags & 1) {
- container = blockScopeContainer = node;
- if (containerFlags & 4) {
- container.locals = {};
- }
- addToContainerChain(container);
- }
- else if (containerFlags & 2) {
- blockScopeContainer = node;
- blockScopeContainer.locals = undefined;
- }
- if (node.kind === 215) {
- seenThisKeyword = false;
- ts.forEachChild(node, bind);
- node.flags = seenThisKeyword ? node.flags | 524288 : node.flags & ~524288;
- }
- else {
- ts.forEachChild(node, bind);
- }
- container = saveContainer;
- parent = saveParent;
- blockScopeContainer = savedBlockScopeContainer;
- }
- function getContainerFlags(node) {
- switch (node.kind) {
- case 186:
- case 214:
- case 215:
- case 217:
- case 155:
- case 165:
- return 1;
- case 147:
- case 148:
- case 149:
- case 143:
- case 142:
- case 213:
- case 144:
- case 145:
- case 146:
- case 152:
- case 153:
- case 173:
- case 174:
- case 218:
- case 248:
- case 216:
- return 5;
- case 244:
- case 199:
- case 200:
- case 201:
- case 220:
- return 2;
- case 192:
- return ts.isFunctionLike(node.parent) ? 0 : 2;
- }
- return 0;
- }
- function addToContainerChain(next) {
- if (lastContainer) {
- lastContainer.nextContainer = next;
- }
- lastContainer = next;
- }
- function declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes) {
- declareSymbolAndAddToSymbolTableWorker(node, symbolFlags, symbolExcludes);
- }
- function declareSymbolAndAddToSymbolTableWorker(node, symbolFlags, symbolExcludes) {
- switch (container.kind) {
- case 218:
- return declareModuleMember(node, symbolFlags, symbolExcludes);
- case 248:
- return declareSourceFileMember(node, symbolFlags, symbolExcludes);
- case 186:
- case 214:
- return declareClassMember(node, symbolFlags, symbolExcludes);
- case 217:
- return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
- case 155:
- case 165:
- case 215:
- return declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes);
- case 152:
- case 153:
- case 147:
- case 148:
- case 149:
- case 143:
- case 142:
- case 144:
- case 145:
- case 146:
- case 213:
- case 173:
- case 174:
- case 216:
- return declareSymbol(container.locals, undefined, node, symbolFlags, symbolExcludes);
- }
- }
- function declareClassMember(node, symbolFlags, symbolExcludes) {
- return node.flags & 128
- ? declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes)
- : declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes);
- }
- function declareSourceFileMember(node, symbolFlags, symbolExcludes) {
- return ts.isExternalModule(file)
- ? declareModuleMember(node, symbolFlags, symbolExcludes)
- : declareSymbol(file.locals, undefined, node, symbolFlags, symbolExcludes);
- }
- function isAmbientContext(node) {
- while (node) {
- if (node.flags & 2) {
- return true;
- }
- node = node.parent;
- }
- return false;
- }
- function hasExportDeclarations(node) {
- var body = node.kind === 248 ? node : node.body;
- if (body.kind === 248 || body.kind === 219) {
- for (var _i = 0, _a = body.statements; _i < _a.length; _i++) {
- var stat = _a[_i];
- if (stat.kind === 228 || stat.kind === 227) {
- return true;
- }
- }
- }
- return false;
- }
- function setExportContextFlag(node) {
- if (isAmbientContext(node) && !hasExportDeclarations(node)) {
- node.flags |= 262144;
- }
- else {
- node.flags &= ~262144;
- }
- }
- function bindModuleDeclaration(node) {
- setExportContextFlag(node);
- if (node.name.kind === 9) {
- declareSymbolAndAddToSymbolTable(node, 512, 106639);
- }
- else {
- var state = getModuleInstanceState(node);
- if (state === 0) {
- declareSymbolAndAddToSymbolTable(node, 1024, 0);
- }
- else {
- declareSymbolAndAddToSymbolTable(node, 512, 106639);
- if (node.symbol.flags & (16 | 32 | 256)) {
- node.symbol.constEnumOnlyModule = false;
- }
- else {
- var currentModuleIsConstEnumOnly = state === 2;
- if (node.symbol.constEnumOnlyModule === undefined) {
- node.symbol.constEnumOnlyModule = currentModuleIsConstEnumOnly;
- }
- else {
- node.symbol.constEnumOnlyModule = node.symbol.constEnumOnlyModule && currentModuleIsConstEnumOnly;
- }
- }
- }
- }
- }
- function bindFunctionOrConstructorType(node) {
- var symbol = createSymbol(131072, getDeclarationName(node));
- addDeclarationToSymbol(symbol, node, 131072);
- var typeLiteralSymbol = createSymbol(2048, "__type");
- addDeclarationToSymbol(typeLiteralSymbol, node, 2048);
- typeLiteralSymbol.members = (_a = {}, _a[symbol.name] = symbol, _a);
- var _a;
- }
- function bindObjectLiteralExpression(node) {
- if (inStrictMode) {
- var seen = {};
- for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
- var prop = _a[_i];
- if (prop.name.kind !== 69) {
- continue;
- }
- var identifier = prop.name;
- var currentKind = prop.kind === 245 || prop.kind === 246 || prop.kind === 143
- ? 1
- : 2;
- var existingKind = seen[identifier.text];
- if (!existingKind) {
- seen[identifier.text] = currentKind;
- continue;
- }
- if (currentKind === 1 && existingKind === 1) {
- var span = ts.getErrorSpanForNode(file, identifier);
- file.bindDiagnostics.push(ts.createFileDiagnostic(file, span.start, span.length, ts.Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode));
- }
- }
- }
- return bindAnonymousDeclaration(node, 4096, "__object");
- }
- function bindAnonymousDeclaration(node, symbolFlags, name) {
- var symbol = createSymbol(symbolFlags, name);
- addDeclarationToSymbol(symbol, node, symbolFlags);
- }
- function bindBlockScopedDeclaration(node, symbolFlags, symbolExcludes) {
- switch (blockScopeContainer.kind) {
- case 218:
- declareModuleMember(node, symbolFlags, symbolExcludes);
- break;
- case 248:
- if (ts.isExternalModule(container)) {
- declareModuleMember(node, symbolFlags, symbolExcludes);
- break;
- }
- default:
- if (!blockScopeContainer.locals) {
- blockScopeContainer.locals = {};
- addToContainerChain(blockScopeContainer);
- }
- declareSymbol(blockScopeContainer.locals, undefined, node, symbolFlags, symbolExcludes);
- }
- }
- function bindBlockScopedVariableDeclaration(node) {
- bindBlockScopedDeclaration(node, 2, 107455);
- }
- function checkStrictModeIdentifier(node) {
- if (inStrictMode &&
- node.originalKeywordKind >= 106 &&
- node.originalKeywordKind <= 114 &&
- !ts.isIdentifierName(node)) {
- if (!file.parseDiagnostics.length) {
- file.bindDiagnostics.push(ts.createDiagnosticForNode(node, getStrictModeIdentifierMessage(node), ts.declarationNameToString(node)));
- }
- }
- }
- function getStrictModeIdentifierMessage(node) {
- if (ts.getContainingClass(node)) {
- return ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode;
- }
- if (file.externalModuleIndicator) {
- return ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode;
- }
- return ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode;
- }
- function checkStrictModeBinaryExpression(node) {
- if (inStrictMode && ts.isLeftHandSideExpression(node.left) && ts.isAssignmentOperator(node.operatorToken.kind)) {
- checkStrictModeEvalOrArguments(node, node.left);
- }
- }
- function checkStrictModeCatchClause(node) {
- if (inStrictMode && node.variableDeclaration) {
- checkStrictModeEvalOrArguments(node, node.variableDeclaration.name);
- }
- }
- function checkStrictModeDeleteExpression(node) {
- if (inStrictMode && node.expression.kind === 69) {
- var span = ts.getErrorSpanForNode(file, node.expression);
- file.bindDiagnostics.push(ts.createFileDiagnostic(file, span.start, span.length, ts.Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode));
- }
- }
- function isEvalOrArgumentsIdentifier(node) {
- return node.kind === 69 &&
- (node.text === "eval" || node.text === "arguments");
- }
- function checkStrictModeEvalOrArguments(contextNode, name) {
- if (name && name.kind === 69) {
- var identifier = name;
- if (isEvalOrArgumentsIdentifier(identifier)) {
- var span = ts.getErrorSpanForNode(file, name);
- file.bindDiagnostics.push(ts.createFileDiagnostic(file, span.start, span.length, getStrictModeEvalOrArgumentsMessage(contextNode), identifier.text));
- }
- }
- }
- function getStrictModeEvalOrArgumentsMessage(node) {
- if (ts.getContainingClass(node)) {
- return ts.Diagnostics.Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode;
- }
- if (file.externalModuleIndicator) {
- return ts.Diagnostics.Invalid_use_of_0_Modules_are_automatically_in_strict_mode;
- }
- return ts.Diagnostics.Invalid_use_of_0_in_strict_mode;
- }
- function checkStrictModeFunctionName(node) {
- if (inStrictMode) {
- checkStrictModeEvalOrArguments(node, node.name);
- }
- }
- function checkStrictModeNumericLiteral(node) {
- if (inStrictMode && node.flags & 65536) {
- file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Octal_literals_are_not_allowed_in_strict_mode));
- }
- }
- function checkStrictModePostfixUnaryExpression(node) {
- if (inStrictMode) {
- checkStrictModeEvalOrArguments(node, node.operand);
- }
- }
- function checkStrictModePrefixUnaryExpression(node) {
- if (inStrictMode) {
- if (node.operator === 41 || node.operator === 42) {
- checkStrictModeEvalOrArguments(node, node.operand);
- }
- }
- }
- function checkStrictModeWithStatement(node) {
- if (inStrictMode) {
- grammarErrorOnFirstToken(node, ts.Diagnostics.with_statements_are_not_allowed_in_strict_mode);
- }
- }
- function grammarErrorOnFirstToken(node, message, arg0, arg1, arg2) {
- var span = ts.getSpanOfTokenAtPosition(file, node.pos);
- file.bindDiagnostics.push(ts.createFileDiagnostic(file, span.start, span.length, message, arg0, arg1, arg2));
- }
- function getDestructuringParameterName(node) {
- return "__" + ts.indexOf(node.parent.parameters, node);
- }
- function bind(node) {
- node.parent = parent;
- var savedInStrictMode = inStrictMode;
- if (!savedInStrictMode) {
- updateStrictMode(node);
- }
- bindWorker(node);
- bindChildren(node);
- inStrictMode = savedInStrictMode;
- }
- function updateStrictMode(node) {
- switch (node.kind) {
- case 248:
- case 219:
- updateStrictModeStatementList(node.statements);
- return;
- case 192:
- if (ts.isFunctionLike(node.parent)) {
- updateStrictModeStatementList(node.statements);
- }
- return;
- case 214:
- case 186:
- inStrictMode = true;
- return;
- }
- }
- function updateStrictModeStatementList(statements) {
- for (var _i = 0; _i < statements.length; _i++) {
- var statement = statements[_i];
- if (!ts.isPrologueDirective(statement)) {
- return;
- }
- if (isUseStrictPrologueDirective(statement)) {
- inStrictMode = true;
- return;
- }
- }
- }
- function isUseStrictPrologueDirective(node) {
- var nodeText = ts.getTextOfNodeFromSourceText(file.text, node.expression);
- return nodeText === "\"use strict\"" || nodeText === "'use strict'";
- }
- function bindWorker(node) {
- switch (node.kind) {
- case 69:
- return checkStrictModeIdentifier(node);
- case 181:
- return checkStrictModeBinaryExpression(node);
- case 244:
- return checkStrictModeCatchClause(node);
- case 175:
- return checkStrictModeDeleteExpression(node);
- case 8:
- return checkStrictModeNumericLiteral(node);
- case 180:
- return checkStrictModePostfixUnaryExpression(node);
- case 179:
- return checkStrictModePrefixUnaryExpression(node);
- case 205:
- return checkStrictModeWithStatement(node);
- case 97:
- seenThisKeyword = true;
- return;
- case 137:
- return declareSymbolAndAddToSymbolTable(node, 262144, 530912);
- case 138:
- return bindParameter(node);
- case 211:
- case 163:
- return bindVariableDeclarationOrBindingElement(node);
- case 141:
- case 140:
- return bindPropertyOrMethodOrAccessor(node, 4 | (node.questionToken ? 536870912 : 0), 107455);
- case 245:
- case 246:
- return bindPropertyOrMethodOrAccessor(node, 4, 107455);
- case 247:
- return bindPropertyOrMethodOrAccessor(node, 8, 107455);
- case 147:
- case 148:
- case 149:
- return declareSymbolAndAddToSymbolTable(node, 131072, 0);
- case 143:
- case 142:
- return bindPropertyOrMethodOrAccessor(node, 8192 | (node.questionToken ? 536870912 : 0), ts.isObjectLiteralMethod(node) ? 107455 : 99263);
- case 213:
- checkStrictModeFunctionName(node);
- return declareSymbolAndAddToSymbolTable(node, 16, 106927);
- case 144:
- return declareSymbolAndAddToSymbolTable(node, 16384, 0);
- case 145:
- return bindPropertyOrMethodOrAccessor(node, 32768, 41919);
- case 146:
- return bindPropertyOrMethodOrAccessor(node, 65536, 74687);
- case 152:
- case 153:
- return bindFunctionOrConstructorType(node);
- case 155:
- return bindAnonymousDeclaration(node, 2048, "__type");
- case 165:
- return bindObjectLiteralExpression(node);
- case 173:
- case 174:
- checkStrictModeFunctionName(node);
- var bindingName = node.name ? node.name.text : "__function";
- return bindAnonymousDeclaration(node, 16, bindingName);
- case 186:
- case 214:
- return bindClassLikeDeclaration(node);
- case 215:
- return bindBlockScopedDeclaration(node, 64, 792960);
- case 216:
- return bindBlockScopedDeclaration(node, 524288, 793056);
- case 217:
- return bindEnumDeclaration(node);
- case 218:
- return bindModuleDeclaration(node);
- case 221:
- case 224:
- case 226:
- case 230:
- return declareSymbolAndAddToSymbolTable(node, 8388608, 8388608);
- case 223:
- return bindImportClause(node);
- case 228:
- return bindExportDeclaration(node);
- case 227:
- return bindExportAssignment(node);
- case 248:
- return bindSourceFileIfExternalModule();
- }
- }
- function bindSourceFileIfExternalModule() {
- setExportContextFlag(file);
- if (ts.isExternalModule(file)) {
- bindAnonymousDeclaration(file, 512, "\"" + ts.removeFileExtension(file.fileName) + "\"");
- }
- }
- function bindExportAssignment(node) {
- if (!container.symbol || !container.symbol.exports) {
- bindAnonymousDeclaration(node, 8388608, getDeclarationName(node));
- }
- else if (node.expression.kind === 69) {
- declareSymbol(container.symbol.exports, container.symbol, node, 8388608, 107455 | 8388608);
- }
- else {
- declareSymbol(container.symbol.exports, container.symbol, node, 4, 107455 | 8388608);
- }
- }
- function bindExportDeclaration(node) {
- if (!container.symbol || !container.symbol.exports) {
- bindAnonymousDeclaration(node, 1073741824, getDeclarationName(node));
- }
- else if (!node.exportClause) {
- declareSymbol(container.symbol.exports, container.symbol, node, 1073741824, 0);
- }
- }
- function bindImportClause(node) {
- if (node.name) {
- declareSymbolAndAddToSymbolTable(node, 8388608, 8388608);
- }
- }
- function bindClassLikeDeclaration(node) {
- if (node.kind === 214) {
- bindBlockScopedDeclaration(node, 32, 899519);
- }
- else {
- var bindingName = node.name ? node.name.text : "__class";
- bindAnonymousDeclaration(node, 32, bindingName);
- if (node.name) {
- classifiableNames[node.name.text] = node.name.text;
- }
- }
- var symbol = node.symbol;
- var prototypeSymbol = createSymbol(4 | 134217728, "prototype");
- if (ts.hasProperty(symbol.exports, prototypeSymbol.name)) {
- if (node.name) {
- node.name.parent = node;
- }
- file.bindDiagnostics.push(ts.createDiagnosticForNode(symbol.exports[prototypeSymbol.name].declarations[0], ts.Diagnostics.Duplicate_identifier_0, prototypeSymbol.name));
- }
- symbol.exports[prototypeSymbol.name] = prototypeSymbol;
- prototypeSymbol.parent = symbol;
- }
- function bindEnumDeclaration(node) {
- return ts.isConst(node)
- ? bindBlockScopedDeclaration(node, 128, 899967)
- : bindBlockScopedDeclaration(node, 256, 899327);
- }
- function bindVariableDeclarationOrBindingElement(node) {
- if (inStrictMode) {
- checkStrictModeEvalOrArguments(node, node.name);
- }
- if (!ts.isBindingPattern(node.name)) {
- if (ts.isBlockOrCatchScoped(node)) {
- bindBlockScopedVariableDeclaration(node);
- }
- else if (ts.isParameterDeclaration(node)) {
- declareSymbolAndAddToSymbolTable(node, 1, 107455);
- }
- else {
- declareSymbolAndAddToSymbolTable(node, 1, 107454);
- }
- }
- }
- function bindParameter(node) {
- if (inStrictMode) {
- checkStrictModeEvalOrArguments(node, node.name);
- }
- if (ts.isBindingPattern(node.name)) {
- bindAnonymousDeclaration(node, 1, getDestructuringParameterName(node));
- }
- else {
- declareSymbolAndAddToSymbolTable(node, 1, 107455);
- }
- if (node.flags & 112 &&
- node.parent.kind === 144 &&
- ts.isClassLike(node.parent.parent)) {
- var classDeclaration = node.parent.parent;
- declareSymbol(classDeclaration.symbol.members, classDeclaration.symbol, node, 4, 107455);
- }
- }
- function bindPropertyOrMethodOrAccessor(node, symbolFlags, symbolExcludes) {
- return ts.hasDynamicName(node)
- ? bindAnonymousDeclaration(node, symbolFlags, "__computed")
- : declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes);
- }
- }
- })(ts || (ts = {}));
- var ts;
- (function (ts) {
- function getDeclarationOfKind(symbol, kind) {
- var declarations = symbol.declarations;
- if (declarations) {
- for (var _i = 0; _i < declarations.length; _i++) {
- var declaration = declarations[_i];
- if (declaration.kind === kind) {
- return declaration;
- }
- }
- }
- return undefined;
- }
- ts.getDeclarationOfKind = getDeclarationOfKind;
- var stringWriters = [];
- function getSingleLineStringWriter() {
- if (stringWriters.length === 0) {
- var str = "";
- var writeText = function (text) { return str += text; };
- return {
- string: function () { return str; },
- writeKeyword: writeText,
- writeOperator: writeText,
- writePunctuation: writeText,
- writeSpace: writeText,
- writeStringLiteral: writeText,
- writeParameter: writeText,
- writeSymbol: writeText,
- writeLine: function () { return str += " "; },
- increaseIndent: function () { },
- decreaseIndent: function () { },
- clear: function () { return str = ""; },
- trackSymbol: function () { },
- reportInaccessibleThisError: function () { }
- };
- }
- return stringWriters.pop();
- }
- ts.getSingleLineStringWriter = getSingleLineStringWriter;
- function releaseStringWriter(writer) {
- writer.clear();
- stringWriters.push(writer);
- }
- ts.releaseStringWriter = releaseStringWriter;
- function getFullWidth(node) {
- return node.end - node.pos;
- }
- ts.getFullWidth = getFullWidth;
- function arrayIsEqualTo(arr1, arr2, comparer) {
- if (!arr1 || !arr2) {
- return arr1 === arr2;
- }
- if (arr1.length !== arr2.length) {
- return false;
- }
- for (var i = 0; i < arr1.length; ++i) {
- var equals = comparer ? comparer(arr1[i], arr2[i]) : arr1[i] === arr2[i];
- if (!equals) {
- return false;
- }
- }
- return true;
- }
- ts.arrayIsEqualTo = arrayIsEqualTo;
- function hasResolvedModule(sourceFile, moduleNameText) {
- return sourceFile.resolvedModules && ts.hasProperty(sourceFile.resolvedModules, moduleNameText);
- }
- ts.hasResolvedModule = hasResolvedModule;
- function getResolvedModule(sourceFile, moduleNameText) {
- return hasResolvedModule(sourceFile, moduleNameText) ? sourceFile.resolvedModules[moduleNameText] : undefined;
- }
- ts.getResolvedModule = getResolvedModule;
- function setResolvedModule(sourceFile, moduleNameText, resolvedModule) {
- if (!sourceFile.resolvedModules) {
- sourceFile.resolvedModules = {};
- }
- sourceFile.resolvedModules[moduleNameText] = resolvedModule;
- }
- ts.setResolvedModule = setResolvedModule;
- function containsParseError(node) {
- aggregateChildData(node);
- return (node.parserContextFlags & 64) !== 0;
- }
- ts.containsParseError = containsParseError;
- function aggregateChildData(node) {
- if (!(node.parserContextFlags & 128)) {
- var thisNodeOrAnySubNodesHasError = ((node.parserContextFlags & 16) !== 0) ||
- ts.forEachChild(node, containsParseError);
- if (thisNodeOrAnySubNodesHasError) {
- node.parserContextFlags |= 64;
- }
- node.parserContextFlags |= 128;
- }
- }
- function getSourceFileOfNode(node) {
- while (node && node.kind !== 248) {
- node = node.parent;
- }
- return node;
- }
- ts.getSourceFileOfNode = getSourceFileOfNode;
- function getStartPositionOfLine(line, sourceFile) {
- ts.Debug.assert(line >= 0);
- return ts.getLineStarts(sourceFile)[line];
- }
- ts.getStartPositionOfLine = getStartPositionOfLine;
- function nodePosToString(node) {
- var file = getSourceFileOfNode(node);
- var loc = ts.getLineAndCharacterOfPosition(file, node.pos);
- return file.fileName + "(" + (loc.line + 1) + "," + (loc.character + 1) + ")";
- }
- ts.nodePosToString = nodePosToString;
- function getStartPosOfNode(node) {
- return node.pos;
- }
- ts.getStartPosOfNode = getStartPosOfNode;
- function nodeIsMissing(node) {
- if (!node) {
- return true;
- }
- return node.pos === node.end && node.pos >= 0 && node.kind !== 1;
- }
- ts.nodeIsMissing = nodeIsMissing;
- function nodeIsPresent(node) {
- return !nodeIsMissing(node);
- }
- ts.nodeIsPresent = nodeIsPresent;
- function getTokenPosOfNode(node, sourceFile) {
- if (nodeIsMissing(node)) {
- return node.pos;
- }
- return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.pos);
- }
- ts.getTokenPosOfNode = getTokenPosOfNode;
- function getNonDecoratorTokenPosOfNode(node, sourceFile) {
- if (nodeIsMissing(node) || !node.decorators) {
- return getTokenPosOfNode(node, sourceFile);
- }
- return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.decorators.end);
- }
- ts.getNonDecoratorTokenPosOfNode = getNonDecoratorTokenPosOfNode;
- function getSourceTextOfNodeFromSourceFile(sourceFile, node, includeTrivia) {
- if (includeTrivia === void 0) { includeTrivia = false; }
- if (nodeIsMissing(node)) {
- return "";
- }
- var text = sourceFile.text;
- return text.substring(includeTrivia ? node.pos : ts.skipTrivia(text, node.pos), node.end);
- }
- ts.getSourceTextOfNodeFromSourceFile = getSourceTextOfNodeFromSourceFile;
- function getTextOfNodeFromSourceText(sourceText, node) {
- if (nodeIsMissing(node)) {
- return "";
- }
- return sourceText.substring(ts.skipTrivia(sourceText, node.pos), node.end);
- }
- ts.getTextOfNodeFromSourceText = getTextOfNodeFromSourceText;
- function getTextOfNode(node, includeTrivia) {
- if (includeTrivia === void 0) { includeTrivia = false; }
- return getSourceTextOfNodeFromSourceFile(getSourceFileOfNode(node), node, includeTrivia);
- }
- ts.getTextOfNode = getTextOfNode;
- function escapeIdentifier(identifier) {
- return identifier.length >= 2 && identifier.charCodeAt(0) === 95 && identifier.charCodeAt(1) === 95 ? "_" + identifier : identifier;
- }
- ts.escapeIdentifier = escapeIdentifier;
- function unescapeIdentifier(identifier) {
- return identifier.length >= 3 && identifier.charCodeAt(0) === 95 && identifier.charCodeAt(1) === 95 && identifier.charCodeAt(2) === 95 ? identifier.substr(1) : identifier;
- }
- ts.unescapeIdentifier = unescapeIdentifier;
- function makeIdentifierFromModuleName(moduleName) {
- return ts.getBaseFileName(moduleName).replace(/^(\d)/, "_$1").replace(/\W/g, "_");
- }
- ts.makeIdentifierFromModuleName = makeIdentifierFromModuleName;
- function isBlockOrCatchScoped(declaration) {
- return (getCombinedNodeFlags(declaration) & 49152) !== 0 ||
- isCatchClauseVariableDeclaration(declaration);
- }
- ts.isBlockOrCatchScoped = isBlockOrCatchScoped;
- function getEnclosingBlockScopeContainer(node) {
- var current = node.parent;
- while (current) {
- if (isFunctionLike(current)) {
- return current;
- }
- switch (current.kind) {
- case 248:
- case 220:
- case 244:
- case 218:
- case 199:
- case 200:
- case 201:
- return current;
- case 192:
- if (!isFunctionLike(current.parent)) {
- return current;
- }
- }
- current = current.parent;
- }
- }
- ts.getEnclosingBlockScopeContainer = getEnclosingBlockScopeContainer;
- function isCatchClauseVariableDeclaration(declaration) {
- return declaration &&
- declaration.kind === 211 &&
- declaration.parent &&
- declaration.parent.kind === 244;
- }
- ts.isCatchClauseVariableDeclaration = isCatchClauseVariableDeclaration;
- function declarationNameToString(name) {
- return getFullWidth(name) === 0 ? "(Missing)" : getTextOfNode(name);
- }
- ts.declarationNameToString = declarationNameToString;
- function createDiagnosticForNode(node, message, arg0, arg1, arg2) {
- var sourceFile = getSourceFileOfNode(node);
- var span = getErrorSpanForNode(sourceFile, node);
- return ts.createFileDiagnostic(sourceFile, span.start, span.length, message, arg0, arg1, arg2);
- }
- ts.createDiagnosticForNode = createDiagnosticForNode;
- function createDiagnosticForNodeFromMessageChain(node, messageChain) {
- var sourceFile = getSourceFileOfNode(node);
- var span = getErrorSpanForNode(sourceFile, node);
- return {
- file: sourceFile,
- start: span.start,
- length: span.length,
- code: messageChain.code,
- category: messageChain.category,
- messageText: messageChain.next ? messageChain : messageChain.messageText
- };
- }
- ts.createDiagnosticForNodeFromMessageChain = createDiagnosticForNodeFromMessageChain;
- function getSpanOfTokenAtPosition(sourceFile, pos) {
- var scanner = ts.createScanner(sourceFile.languageVersion, true, sourceFile.languageVariant, sourceFile.text, undefined, pos);
- scanner.scan();
- var start = scanner.getTokenPos();
- return ts.createTextSpanFromBounds(start, scanner.getTextPos());
- }
- ts.getSpanOfTokenAtPosition = getSpanOfTokenAtPosition;
- function getErrorSpanForNode(sourceFile, node) {
- var errorNode = node;
- switch (node.kind) {
- case 248:
- var pos_1 = ts.skipTrivia(sourceFile.text, 0, false);
- if (pos_1 === sourceFile.text.length) {
- return ts.createTextSpan(0, 0);
- }
- return getSpanOfTokenAtPosition(sourceFile, pos_1);
- case 211:
- case 163:
- case 214:
- case 186:
- case 215:
- case 218:
- case 217:
- case 247:
- case 213:
- case 173:
- errorNode = node.name;
- break;
- }
- if (errorNode === undefined) {
- return getSpanOfTokenAtPosition(sourceFile, node.pos);
- }
- var pos = nodeIsMissing(errorNode)
- ? errorNode.pos
- : ts.skipTrivia(sourceFile.text, errorNode.pos);
- return ts.createTextSpanFromBounds(pos, errorNode.end);
- }
- ts.getErrorSpanForNode = getErrorSpanForNode;
- function isExternalModule(file) {
- return file.externalModuleIndicator !== undefined;
- }
- ts.isExternalModule = isExternalModule;
- function isDeclarationFile(file) {
- return (file.flags & 8192) !== 0;
- }
- ts.isDeclarationFile = isDeclarationFile;
- function isConstEnumDeclaration(node) {
- return node.kind === 217 && isConst(node);
- }
- ts.isConstEnumDeclaration = isConstEnumDeclaration;
- function walkUpBindingElementsAndPatterns(node) {
- while (node && (node.kind === 163 || isBindingPattern(node))) {
- node = node.parent;
- }
- return node;
- }
- function getCombinedNodeFlags(node) {
- node = walkUpBindingElementsAndPatterns(node);
- var flags = node.flags;
- if (node.kind === 211) {
- node = node.parent;
- }
- if (node && node.kind === 212) {
- flags |= node.flags;
- node = node.parent;
- }
- if (node && node.kind === 193) {
- flags |= node.flags;
- }
- return flags;
- }
- ts.getCombinedNodeFlags = getCombinedNodeFlags;
- function isConst(node) {
- return !!(getCombinedNodeFlags(node) & 32768);
- }
- ts.isConst = isConst;
- function isLet(node) {
- return !!(getCombinedNodeFlags(node) & 16384);
- }
- ts.isLet = isLet;
- function isPrologueDirective(node) {
- return node.kind === 195 && node.expression.kind === 9;
- }
- ts.isPrologueDirective = isPrologueDirective;
- function getLeadingCommentRangesOfNode(node, sourceFileOfNode) {
- return ts.getLeadingCommentRanges(sourceFileOfNode.text, node.pos);
- }
- ts.getLeadingCommentRangesOfNode = getLeadingCommentRangesOfNode;
- function getJsDocComments(node, sourceFileOfNode) {
- var commentRanges = (node.kind === 138 || node.kind === 137) ?
- ts.concatenate(ts.getTrailingCommentRanges(sourceFileOfNode.text, node.pos), ts.getLeadingCommentRanges(sourceFileOfNode.text, node.pos)) :
- getLeadingCommentRangesOfNode(node, sourceFileOfNode);
- return ts.filter(commentRanges, isJsDocComment);
- function isJsDocComment(comment) {
- return sourceFileOfNode.text.charCodeAt(comment.pos + 1) === 42 &&
- sourceFileOfNode.text.charCodeAt(comment.pos + 2) === 42 &&
- sourceFileOfNode.text.charCodeAt(comment.pos + 3) !== 47;
- }
- }
- ts.getJsDocComments = getJsDocComments;
- ts.fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*<reference\s+path\s*=\s*)('|")(.+?)\2.*?\/>/;
- ts.fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*<amd-dependency\s+path\s*=\s*)('|")(.+?)\2.*?\/>/;
- function isTypeNode(node) {
- if (151 <= node.kind && node.kind <= 160) {
- return true;
- }
- switch (node.kind) {
- case 117:
- case 128:
- case 130:
- case 120:
- case 131:
- return true;
- case 103:
- return node.parent.kind !== 177;
- case 9:
- return node.parent.kind === 138;
- case 188:
- return !isExpressionWithTypeArgumentsInClassExtendsClause(node);
- case 69:
- if (node.parent.kind === 135 && node.parent.right === node) {
- node = node.parent;
- }
- else if (node.parent.kind === 166 && node.parent.name === node) {
- node = node.parent;
- }
- ts.Debug.assert(node.kind === 69 || node.kind === 135 || node.kind === 166, "'node' was expected to be a qualified name, identifier or property access in 'isTypeNode'.");
- case 135:
- case 166:
- case 97:
- var parent_1 = node.parent;
- if (parent_1.kind === 154) {
- return false;
- }
- if (151 <= parent_1.kind && parent_1.kind <= 160) {
- return true;
- }
- switch (parent_1.kind) {
- case 188:
- return !isExpressionWithTypeArgumentsInClassExtendsClause(parent_1);
- case 137:
- return node === parent_1.constraint;
- case 141:
- case 140:
- case 138:
- case 211:
- return node === parent_1.type;
- case 213:
- case 173:
- case 174:
- case 144:
- case 143:
- case 142:
- case 145:
- case 146:
- return node === parent_1.type;
- case 147:
- case 148:
- case 149:
- return node === parent_1.type;
- case 171:
- return node === parent_1.type;
- case 168:
- case 169:
- return parent_1.typeArguments && ts.indexOf(parent_1.typeArguments, node) >= 0;
- case 170:
- return false;
- }
- }
- return false;
- }
- ts.isTypeNode = isTypeNode;
- function forEachReturnStatement(body, visitor) {
- return traverse(body);
- function traverse(node) {
- switch (node.kind) {
- case 204:
- return visitor(node);
- case 220:
- case 192:
- case 196:
- case 197:
- case 198:
- case 199:
- case 200:
- case 201:
- case 205:
- case 206:
- case 241:
- case 242:
- case 207:
- case 209:
- case 244:
- return ts.forEachChild(node, traverse);
- }
- }
- }
- ts.forEachReturnStatement = forEachReturnStatement;
- function forEachYieldExpression(body, visitor) {
- return traverse(body);
- function traverse(node) {
- switch (node.kind) {
- case 184:
- visitor(node);
- var operand = node.expression;
- if (operand) {
- traverse(operand);
- }
- case 217:
- case 215:
- case 218:
- case 216:
- case 214:
- case 186:
- return;
- default:
- if (isFunctionLike(node)) {
- var name_5 = node.name;
- if (name_5 && name_5.kind === 136) {
- traverse(name_5.expression);
- return;
- }
- }
- else if (!isTypeNode(node)) {
- ts.forEachChild(node, traverse);
- }
- }
- }
- }
- ts.forEachYieldExpression = forEachYieldExpression;
- function isVariableLike(node) {
- if (node) {
- switch (node.kind) {
- case 163:
- case 247:
- case 138:
- case 245:
- case 141:
- case 140:
- case 246:
- case 211:
- return true;
- }
- }
- return false;
- }
- ts.isVariableLike = isVariableLike;
- function isAccessor(node) {
- return node && (node.kind === 145 || node.kind === 146);
- }
- ts.isAccessor = isAccessor;
- function isClassLike(node) {
- return node && (node.kind === 214 || node.kind === 186);
- }
- ts.isClassLike = isClassLike;
- function isFunctionLike(node) {
- if (node) {
- switch (node.kind) {
- case 144:
- case 173:
- case 213:
- case 174:
- case 143:
- case 142:
- case 145:
- case 146:
- case 147:
- case 148:
- case 149:
- case 152:
- case 153:
- return true;
- }
- }
- return false;
- }
- ts.isFunctionLike = isFunctionLike;
- function introducesArgumentsExoticObject(node) {
- switch (node.kind) {
- case 143:
- case 142:
- case 144:
- case 145:
- case 146:
- case 213:
- case 173:
- return true;
- }
- return false;
- }
- ts.introducesArgumentsExoticObject = introducesArgumentsExoticObject;
- function isFunctionBlock(node) {
- return node && node.kind === 192 && isFunctionLike(node.parent);
- }
- ts.isFunctionBlock = isFunctionBlock;
- function isObjectLiteralMethod(node) {
- return node && node.kind === 143 && node.parent.kind === 165;
- }
- ts.isObjectLiteralMethod = isObjectLiteralMethod;
- function getContainingFunction(node) {
- while (true) {
- node = node.parent;
- if (!node || isFunctionLike(node)) {
- return node;
- }
- }
- }
- ts.getContainingFunction = getContainingFunction;
- function getContainingClass(node) {
- while (true) {
- node = node.parent;
- if (!node || isClassLike(node)) {
- return node;
- }
- }
- }
- ts.getContainingClass = getContainingClass;
- function getThisContainer(node, includeArrowFunctions) {
- while (true) {
- node = node.parent;
- if (!node) {
- return undefined;
- }
- switch (node.kind) {
- case 136:
- if (isClassLike(node.parent.parent)) {
- return node;
- }
- node = node.parent;
- break;
- case 139:
- if (node.parent.kind === 138 && isClassElement(node.parent.parent)) {
- node = node.parent.parent;
- }
- else if (isClassElement(node.parent)) {
- node = node.parent;
- }
- break;
- case 174:
- if (!includeArrowFunctions) {
- continue;
- }
- case 213:
- case 173:
- case 218:
- case 141:
- case 140:
- case 143:
- case 142:
- case 144:
- case 145:
- case 146:
- case 147:
- case 148:
- case 149:
- case 217:
- case 248:
- return node;
- }
- }
- }
- ts.getThisContainer = getThisContainer;
- function getSuperContainer(node, includeFunctions) {
- while (true) {
- node = node.parent;
- if (!node)
- return node;
- switch (node.kind) {
- case 136:
- if (isClassLike(node.parent.parent)) {
- return node;
- }
- node = node.parent;
- break;
- case 139:
- if (node.parent.kind === 138 && isClassElement(node.parent.parent)) {
- node = node.parent.parent;
- }
- else if (isClassElement(node.parent)) {
- node = node.parent;
- }
- break;
- case 213:
- case 173:
- case 174:
- if (!includeFunctions) {
- continue;
- }
- case 141:
- case 140:
- case 143:
- case 142:
- case 144:
- case 145:
- case 146:
- return node;
- }
- }
- }
- ts.getSuperContainer = getSuperContainer;
- function getEntityNameFromTypeNode(node) {
- if (node) {
- switch (node.kind) {
- case 151:
- return node.typeName;
- case 188:
- return node.expression;
- case 69:
- case 135:
- return node;
- }
- }
- return undefined;
- }
- ts.getEntityNameFromTypeNode = getEntityNameFromTypeNode;
- function getInvokedExpression(node) {
- if (node.kind === 170) {
- return node.tag;
- }
- return node.expression;
- }
- ts.getInvokedExpression = getInvokedExpression;
- function nodeCanBeDecorated(node) {
- switch (node.kind) {
- case 214:
- return true;
- case 141:
- return node.parent.kind === 214;
- case 138:
- return node.parent.body && node.parent.parent.kind === 214;
- case 145:
- case 146:
- case 143:
- return node.body && node.parent.kind === 214;
- }
- return false;
- }
- ts.nodeCanBeDecorated = nodeCanBeDecorated;
- function nodeIsDecorated(node) {
- switch (node.kind) {
- case 214:
- if (node.decorators) {
- return true;
- }
- return false;
- case 141:
- case 138:
- if (node.decorators) {
- return true;
- }
- return false;
- case 145:
- if (node.body && node.decorators) {
- return true;
- }
- return false;
- case 143:
- case 146:
- if (node.body && node.decorators) {
- return true;
- }
- return false;
- }
- return false;
- }
- ts.nodeIsDecorated = nodeIsDecorated;
- function childIsDecorated(node) {
- switch (node.kind) {
- case 214:
- return ts.forEach(node.members, nodeOrChildIsDecorated);
- case 143:
- case 146:
- return ts.forEach(node.parameters, nodeIsDecorated);
- }
- return false;
- }
- ts.childIsDecorated = childIsDecorated;
- function nodeOrChildIsDecorated(node) {
- return nodeIsDecorated(node) || childIsDecorated(node);
- }
- ts.nodeOrChildIsDecorated = nodeOrChildIsDecorated;
- function isPropertyAccessExpression(node) {
- return node.kind === 166;
- }
- ts.isPropertyAccessExpression = isPropertyAccessExpression;
- function isElementAccessExpression(node) {
- return node.kind === 167;
- }
- ts.isElementAccessExpression = isElementAccessExpression;
- function isExpression(node) {
- switch (node.kind) {
- case 95:
- case 93:
- case 99:
- case 84:
- case 10:
- case 164:
- case 165:
- case 166:
- case 167:
- case 168:
- case 169:
- case 170:
- case 189:
- case 171:
- case 172:
- case 173:
- case 186:
- case 174:
- case 177:
- case 175:
- case 176:
- case 179:
- case 180:
- case 181:
- case 182:
- case 185:
- case 183:
- case 11:
- case 187:
- case 233:
- case 234:
- case 184:
- case 178:
- return true;
- case 135:
- while (node.parent.kind === 135) {
- node = node.parent;
- }
- return node.parent.kind === 154;
- case 69:
- if (node.parent.kind === 154) {
- return true;
- }
- case 8:
- case 9:
- case 97:
- var parent_2 = node.parent;
- switch (parent_2.kind) {
- case 211:
- case 138:
- case 141:
- case 140:
- case 247:
- case 245:
- case 163:
- return parent_2.initializer === node;
- case 195:
- case 196:
- case 197:
- case 198:
- case 204:
- case 205:
- case 206:
- case 241:
- case 208:
- case 206:
- return parent_2.expression === node;
- case 199:
- var forStatement = parent_2;
- return (forStatement.initializer === node && forStatement.initializer.kind !== 212) ||
- forStatement.condition === node ||
- forStatement.incrementor === node;
- case 200:
- case 201:
- var forInStatement = parent_2;
- return (forInStatement.initializer === node && forInStatement.initializer.kind !== 212) ||
- forInStatement.expression === node;
- case 171:
- case 189:
- return node === parent_2.expression;
- case 190:
- return node === parent_2.expression;
- case 136:
- return node === parent_2.expression;
- case 139:
- case 240:
- case 239:
- return true;
- case 188:
- return parent_2.expression === node && isExpressionWithTypeArgumentsInClassExtendsClause(parent_2);
- default:
- if (isExpression(parent_2)) {
- return true;
- }
- }
- }
- return false;
- }
- ts.isExpression = isExpression;
- function isExternalModuleNameRelative(moduleName) {
- return moduleName.substr(0, 2) === "./" || moduleName.substr(0, 3) === "../" || moduleName.substr(0, 2) === ".\\" || moduleName.substr(0, 3) === "..\\";
- }
- ts.isExternalModuleNameRelative = isExternalModuleNameRelative;
- function isInstantiatedModule(node, preserveConstEnums) {
- var moduleState = ts.getModuleInstanceState(node);
- return moduleState === 1 ||
- (preserveConstEnums && moduleState === 2);
- }
- ts.isInstantiatedModule = isInstantiatedModule;
- function isExternalModuleImportEqualsDeclaration(node) {
- return node.kind === 221 && node.moduleReference.kind === 232;
- }
- ts.isExternalModuleImportEqualsDeclaration = isExternalModuleImportEqualsDeclaration;
- function getExternalModuleImportEqualsDeclarationExpression(node) {
- ts.Debug.assert(isExternalModuleImportEqualsDeclaration(node));
- return node.moduleReference.expression;
- }
- ts.getExternalModuleImportEqualsDeclarationExpression = getExternalModuleImportEqualsDeclarationExpression;
- function isInternalModuleImportEqualsDeclaration(node) {
- return node.kind === 221 && node.moduleReference.kind !== 232;
- }
- ts.isInternalModuleImportEqualsDeclaration = isInternalModuleImportEqualsDeclaration;
- function getExternalModuleName(node) {
- if (node.kind === 222) {
- return node.moduleSpecifier;
- }
- if (node.kind === 221) {
- var reference = node.moduleReference;
- if (reference.kind === 232) {
- return reference.expression;
- }
- }
- if (node.kind === 228) {
- return node.moduleSpecifier;
- }
- }
- ts.getExternalModuleName = getExternalModuleName;
- function hasQuestionToken(node) {
- if (node) {
- switch (node.kind) {
- case 138:
- case 143:
- case 142:
- case 246:
- case 245:
- case 141:
- case 140:
- return node.questionToken !== undefined;
- }
- }
- return false;
- }
- ts.hasQuestionToken = hasQuestionToken;
- function isJSDocConstructSignature(node) {
- return node.kind === 261 &&
- node.parameters.length > 0 &&
- node.parameters[0].type.kind === 263;
- }
- ts.isJSDocConstructSignature = isJSDocConstructSignature;
- function getJSDocTag(node, kind) {
- if (node && node.jsDocComment) {
- for (var _i = 0, _a = node.jsDocComment.tags; _i < _a.length; _i++) {
- var tag = _a[_i];
- if (tag.kind === kind) {
- return tag;
- }
- }
- }
- }
- function getJSDocTypeTag(node) {
- return getJSDocTag(node, 269);
- }
- ts.getJSDocTypeTag = getJSDocTypeTag;
- function getJSDocReturnTag(node) {
- return getJSDocTag(node, 268);
- }
- ts.getJSDocReturnTag = getJSDocReturnTag;
- function getJSDocTemplateTag(node) {
- return getJSDocTag(node, 270);
- }
- ts.getJSDocTemplateTag = getJSDocTemplateTag;
- function getCorrespondingJSDocParameterTag(parameter) {
- if (parameter.name && parameter.name.kind === 69) {
- var parameterName = parameter.name.text;
- var docComment = parameter.parent.jsDocComment;
- if (docComment) {
- return ts.forEach(docComment.tags, function (t) {
- if (t.kind === 267) {
- var parameterTag = t;
- var name_6 = parameterTag.preParameterName || parameterTag.postParameterName;
- if (name_6.text === parameterName) {
- return t;
- }
- }
- });
- }
- }
- }
- ts.getCorrespondingJSDocParameterTag = getCorrespondingJSDocParameterTag;
- function hasRestParameter(s) {
- return isRestParameter(ts.lastOrUndefined(s.parameters));
- }
- ts.hasRestParameter = hasRestParameter;
- function isRestParameter(node) {
- if (node) {
- if (node.parserContextFlags & 32) {
- if (node.type && node.type.kind === 262) {
- return true;
- }
- var paramTag = getCorrespondingJSDocParameterTag(node);
- if (paramTag && paramTag.typeExpression) {
- return paramTag.typeExpression.type.kind === 262;
- }
- }
- return node.dotDotDotToken !== undefined;
- }
- return false;
- }
- ts.isRestParameter = isRestParameter;
- function isLiteralKind(kind) {
- return 8 <= kind && kind <= 11;
- }
- ts.isLiteralKind = isLiteralKind;
- function isTextualLiteralKind(kind) {
- return kind === 9 || kind === 11;
- }
- ts.isTextualLiteralKind = isTextualLiteralKind;
- function isTemplateLiteralKind(kind) {
- return 11 <= kind && kind <= 14;
- }
- ts.isTemplateLiteralKind = isTemplateLiteralKind;
- function isBindingPattern(node) {
- return !!node && (node.kind === 162 || node.kind === 161);
- }
- ts.isBindingPattern = isBindingPattern;
- function isNodeDescendentOf(node, ancestor) {
- while (node) {
- if (node === ancestor)
- return true;
- node = node.parent;
- }
- return false;
- }
- ts.isNodeDescendentOf = isNodeDescendentOf;
- function isInAmbientContext(node) {
- while (node) {
- if (node.flags & (2 | 8192)) {
- return true;
- }
- node = node.parent;
- }
- return false;
- }
- ts.isInAmbientContext = isInAmbientContext;
- function isDeclaration(node) {
- switch (node.kind) {
- case 174:
- case 163:
- case 214:
- case 186:
- case 144:
- case 217:
- case 247:
- case 230:
- case 213:
- case 173:
- case 145:
- case 223:
- case 221:
- case 226:
- case 215:
- case 143:
- case 142:
- case 218:
- case 224:
- case 138:
- case 245:
- case 141:
- case 140:
- case 146:
- case 246:
- case 216:
- case 137:
- case 211:
- return true;
- }
- return false;
- }
- ts.isDeclaration = isDeclaration;
- function isStatement(n) {
- switch (n.kind) {
- case 203:
- case 202:
- case 210:
- case 197:
- case 195:
- case 194:
- case 200:
- case 201:
- case 199:
- case 196:
- case 207:
- case 204:
- case 206:
- case 98:
- case 209:
- case 193:
- case 198:
- case 205:
- case 227:
- return true;
- default:
- return false;
- }
- }
- ts.isStatement = isStatement;
- function isClassElement(n) {
- switch (n.kind) {
- case 144:
- case 141:
- case 143:
- case 145:
- case 146:
- case 142:
- case 149:
- return true;
- default:
- return false;
- }
- }
- ts.isClassElement = isClassElement;
- function isDeclarationName(name) {
- if (name.kind !== 69 && name.kind !== 9 && name.kind !== 8) {
- return false;
- }
- var parent = name.parent;
- if (parent.kind === 226 || parent.kind === 230) {
- if (parent.propertyName) {
- return true;
- }
- }
- if (isDeclaration(parent)) {
- return parent.name === name;
- }
- return false;
- }
- ts.isDeclarationName = isDeclarationName;
- function isIdentifierName(node) {
- var parent = node.parent;
- switch (parent.kind) {
- case 141:
- case 140:
- case 143:
- case 142:
- case 145:
- case 146:
- case 247:
- case 245:
- case 166:
- return parent.name === node;
- case 135:
- if (parent.right === node) {
- while (parent.kind === 135) {
- parent = parent.parent;
- }
- return parent.kind === 154;
- }
- return false;
- case 163:
- case 226:
- return parent.propertyName === node;
- case 230:
- return true;
- }
- return false;
- }
- ts.isIdentifierName = isIdentifierName;
- function isAliasSymbolDeclaration(node) {
- return node.kind === 221 ||
- node.kind === 223 && !!node.name ||
- node.kind === 224 ||
- node.kind === 226 ||
- node.kind === 230 ||
- node.kind === 227 && node.expression.kind === 69;
- }
- ts.isAliasSymbolDeclaration = isAliasSymbolDeclaration;
- function getClassExtendsHeritageClauseElement(node) {
- var heritageClause = getHeritageClause(node.heritageClauses, 83);
- return heritageClause && heritageClause.types.length > 0 ? heritageClause.types[0] : undefined;
- }
- ts.getClassExtendsHeritageClauseElement = getClassExtendsHeritageClauseElement;
- function getClassImplementsHeritageClauseElements(node) {
- var heritageClause = getHeritageClause(node.heritageClauses, 106);
- return heritageClause ? heritageClause.types : undefined;
- }
- ts.getClassImplementsHeritageClauseElements = getClassImplementsHeritageClauseElements;
- function getInterfaceBaseTypeNodes(node) {
- var heritageClause = getHeritageClause(node.heritageClauses, 83);
- return heritageClause ? heritageClause.types : undefined;
- }
- ts.getInterfaceBaseTypeNodes = getInterfaceBaseTypeNodes;
- function getHeritageClause(clauses, kind) {
- if (clauses) {
- for (var _i = 0; _i < clauses.length; _i++) {
- var clause = clauses[_i];
- if (clause.token === kind) {
- return clause;
- }
- }
- }
- return undefined;
- }
- ts.getHeritageClause = getHeritageClause;
- function tryResolveScriptReference(host, sourceFile, reference) {
- if (!host.getCompilerOptions().noResolve) {
- var referenceFileName = ts.isRootedDiskPath(reference.fileName) ? reference.fileName : ts.combinePaths(ts.getDirectoryPath(sourceFile.fileName), reference.fileName);
- referenceFileName = ts.getNormalizedAbsolutePath(referenceFileName, host.getCurrentDirectory());
- return host.getSourceFile(referenceFileName);
- }
- }
- ts.tryResolveScriptReference = tryResolveScriptReference;
- function getAncestor(node, kind) {
- while (node) {
- if (node.kind === kind) {
- return node;
- }
- node = node.parent;
- }
- return undefined;
- }
- ts.getAncestor = getAncestor;
- function getFileReferenceFromReferencePath(comment, commentRange) {
- var simpleReferenceRegEx = /^\/\/\/\s*<reference\s+/gim;
- var isNoDefaultLibRegEx = /^(\/\/\/\s*<reference\s+no-default-lib\s*=\s*)('|")(.+?)\2\s*\/>/gim;
- if (simpleReferenceRegEx.exec(comment)) {
- if (isNoDefaultLibRegEx.exec(comment)) {
- return {
- isNoDefaultLib: true
- };
- }
- else {
- var matchResult = ts.fullTripleSlashReferencePathRegEx.exec(comment);
- if (matchResult) {
- var start = commentRange.pos;
- var end = commentRange.end;
- return {
- fileReference: {
- pos: start,
- end: end,
- fileName: matchResult[3]
- },
- isNoDefaultLib: false
- };
- }
- else {
- return {
- diagnosticMessage: ts.Diagnostics.Invalid_reference_directive_syntax,
- isNoDefaultLib: false
- };
- }
- }
- }
- return undefined;
- }
- ts.getFileReferenceFromReferencePath = getFileReferenceFromReferencePath;
- function isKeyword(token) {
- return 70 <= token && token <= 134;
- }
- ts.isKeyword = isKeyword;
- function isTrivia(token) {
- return 2 <= token && token <= 7;
- }
- ts.isTrivia = isTrivia;
- function isAsyncFunctionLike(node) {
- return isFunctionLike(node) && (node.flags & 512) !== 0 && !isAccessor(node);
- }
- ts.isAsyncFunctionLike = isAsyncFunctionLike;
- function hasDynamicName(declaration) {
- return declaration.name &&
- declaration.name.kind === 136 &&
- !isWellKnownSymbolSyntactically(declaration.name.expression);
- }
- ts.hasDynamicName = hasDynamicName;
- function isWellKnownSymbolSyntactically(node) {
- return isPropertyAccessExpression(node) && isESSymbolIdentifier(node.expression);
- }
- ts.isWellKnownSymbolSyntactically = isWellKnownSymbolSyntactically;
- function getPropertyNameForPropertyNameNode(name) {
- if (name.kind === 69 || name.kind === 9 || name.kind === 8) {
- return name.text;
- }
- if (name.kind === 136) {
- var nameExpression = name.expression;
- if (isWellKnownSymbolSyntactically(nameExpression)) {
- var rightHandSideName = nameExpression.name.text;
- return getPropertyNameForKnownSymbolName(rightHandSideName);
- }
- }
- return undefined;
- }
- ts.getPropertyNameForPropertyNameNode = getPropertyNameForPropertyNameNode;
- function getPropertyNameForKnownSymbolName(symbolName) {
- return "__@" + symbolName;
- }
- ts.getPropertyNameForKnownSymbolName = getPropertyNameForKnownSymbolName;
- function isESSymbolIdentifier(node) {
- return node.kind === 69 && node.text === "Symbol";
- }
- ts.isESSymbolIdentifier = isESSymbolIdentifier;
- function isModifier(token) {
- switch (token) {
- case 115:
- case 118:
- case 74:
- case 122:
- case 77:
- case 82:
- case 112:
- case 110:
- case 111:
- case 113:
- return true;
- }
- return false;
- }
- ts.isModifier = isModifier;
- function isParameterDeclaration(node) {
- var root = getRootDeclaration(node);
- return root.kind === 138;
- }
- ts.isParameterDeclaration = isParameterDeclaration;
- function getRootDeclaration(node) {
- while (node.kind === 163) {
- node = node.parent.parent;
- }
- return node;
- }
- ts.getRootDeclaration = getRootDeclaration;
- function nodeStartsNewLexicalEnvironment(n) {
- return isFunctionLike(n) || n.kind === 218 || n.kind === 248;
- }
- ts.nodeStartsNewLexicalEnvironment = nodeStartsNewLexicalEnvironment;
- function cloneEntityName(node) {
- if (node.kind === 69) {
- var clone_1 = createSynthesizedNode(69);
- clone_1.text = node.text;
- return clone_1;
- }
- else {
- var clone_2 = createSynthesizedNode(135);
- clone_2.left = cloneEntityName(node.left);
- clone_2.left.parent = clone_2;
- clone_2.right = cloneEntityName(node.right);
- clone_2.right.parent = clone_2;
- return clone_2;
- }
- }
- ts.cloneEntityName = cloneEntityName;
- function nodeIsSynthesized(node) {
- return node.pos === -1;
- }
- ts.nodeIsSynthesized = nodeIsSynthesized;
- function createSynthesizedNode(kind, startsOnNewLine) {
- var node = ts.createNode(kind);
- node.startsOnNewLine = startsOnNewLine;
- return node;
- }
- ts.createSynthesizedNode = createSynthesizedNode;
- function createSynthesizedNodeArray() {
- var array = [];
- array.pos = -1;
- array.end = -1;
- return array;
- }
- ts.createSynthesizedNodeArray = createSynthesizedNodeArray;
- function createDiagnosticCollection() {
- var nonFileDiagnostics = [];
- var fileDiagnostics = {};
- var diagnosticsModified = false;
- var modificationCount = 0;
- return {
- add: add,
- getGlobalDiagnostics: getGlobalDiagnostics,
- getDiagnostics: getDiagnostics,
- getModificationCount: getModificationCount,
- reattachFileDiagnostics: reattachFileDiagnostics
- };
- function getModificationCount() {
- return modificationCount;
- }
- function reattachFileDiagnostics(newFile) {
- if (!ts.hasProperty(fileDiagnostics, newFile.fileName)) {
- return;
- }
- for (var _i = 0, _a = fileDiagnostics[newFile.fileName]; _i < _a.length; _i++) {
- var diagnostic = _a[_i];
- diagnostic.file = newFile;
- }
- }
- function add(diagnostic) {
- var diagnostics;
- if (diagnostic.file) {
- diagnostics = fileDiagnostics[diagnostic.file.fileName];
- if (!diagnostics) {
- diagnostics = [];
- fileDiagnostics[diagnostic.file.fileName] = diagnostics;
- }
- }
- else {
- diagnostics = nonFileDiagnostics;
- }
- diagnostics.push(diagnostic);
- diagnosticsModified = true;
- modificationCount++;
- }
- function getGlobalDiagnostics() {
- sortAndDeduplicate();
- return nonFileDiagnostics;
- }
- function getDiagnostics(fileName) {
- sortAndDeduplicate();
- if (fileName) {
- return fileDiagnostics[fileName] || [];
- }
- var allDiagnostics = [];
- function pushDiagnostic(d) {
- allDiagnostics.push(d);
- }
- ts.forEach(nonFileDiagnostics, pushDiagnostic);
- for (var key in fileDiagnostics) {
- if (ts.hasProperty(fileDiagnostics, key)) {
- ts.forEach(fileDiagnostics[key], pushDiagnostic);
- }
- }
- return ts.sortAndDeduplicateDiagnostics(allDiagnostics);
- }
- function sortAndDeduplicate() {
- if (!diagnosticsModified) {
- return;
- }
- diagnosticsModified = false;
- nonFileDiagnostics = ts.sortAndDeduplicateDiagnostics(nonFileDiagnostics);
- for (var key in fileDiagnostics) {
- if (ts.hasProperty(fileDiagnostics, key)) {
- fileDiagnostics[key] = ts.sortAndDeduplicateDiagnostics(fileDiagnostics[key]);
- }
- }
- }
- }
- ts.createDiagnosticCollection = createDiagnosticCollection;
- var escapedCharsRegExp = /[\\\"\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g;
- var escapedCharsMap = {
- "\0": "\\0",
- "\t": "\\t",
- "\v": "\\v",
- "\f": "\\f",
- "\b": "\\b",
- "\r": "\\r",
- "\n": "\\n",
- "\\": "\\\\",
- "\"": "\\\"",
- "\u2028": "\\u2028",
- "\u2029": "\\u2029",
- "\u0085": "\\u0085"
- };
- function escapeString(s) {
- s = escapedCharsRegExp.test(s) ? s.replace(escapedCharsRegExp, getReplacement) : s;
- return s;
- function getReplacement(c) {
- return escapedCharsMap[c] || get16BitUnicodeEscapeSequence(c.charCodeAt(0));
- }
- }
- ts.escapeString = escapeString;
- function isIntrinsicJsxName(name) {
- var ch = name.substr(0, 1);
- return ch.toLowerCase() === ch;
- }
- ts.isIntrinsicJsxName = isIntrinsicJsxName;
- function get16BitUnicodeEscapeSequence(charCode) {
- var hexCharCode = charCode.toString(16).toUpperCase();
- var paddedHexCode = ("0000" + hexCharCode).slice(-4);
- return "\\u" + paddedHexCode;
- }
- var nonAsciiCharacters = /[^\u0000-\u007F]/g;
- function escapeNonAsciiCharacters(s) {
- return nonAsciiCharacters.test(s) ?
- s.replace(nonAsciiCharacters, function (c) { return get16BitUnicodeEscapeSequence(c.charCodeAt(0)); }) :
- s;
- }
- ts.escapeNonAsciiCharacters = escapeNonAsciiCharacters;
- var indentStrings = ["", " "];
- function getIndentString(level) {
- if (indentStrings[level] === undefined) {
- indentStrings[level] = getIndentString(level - 1) + indentStrings[1];
- }
- return indentStrings[level];
- }
- ts.getIndentString = getIndentString;
- function getIndentSize() {
- return indentStrings[1].length;
- }
- ts.getIndentSize = getIndentSize;
- function createTextWriter(newLine) {
- var output = "";
- var indent = 0;
- var lineStart = true;
- var lineCount = 0;
- var linePos = 0;
- function write(s) {
- if (s && s.length) {
- if (lineStart) {
- output += getIndentString(indent);
- lineStart = false;
- }
- output += s;
- }
- }
- function rawWrite(s) {
- if (s !== undefined) {
- if (lineStart) {
- lineStart = false;
- }
- output += s;
- }
- }
- function writeLiteral(s) {
- if (s && s.length) {
- write(s);
- var lineStartsOfS = ts.computeLineStarts(s);
- if (lineStartsOfS.length > 1) {
- lineCount = lineCount + lineStartsOfS.length - 1;
- linePos = output.length - s.length + ts.lastOrUndefined(lineStartsOfS);
- }
- }
- }
- function writeLine() {
- if (!lineStart) {
- output += newLine;
- lineCount++;
- linePos = output.length;
- lineStart = true;
- }
- }
- function writeTextOfNode(sourceFile, node) {
- write(getSourceTextOfNodeFromSourceFile(sourceFile, node));
- }
- return {
- write: write,
- rawWrite: rawWrite,
- writeTextOfNode: writeTextOfNode,
- writeLiteral: writeLiteral,
- writeLine: writeLine,
- increaseIndent: function () { return indent++; },
- decreaseIndent: function () { return indent--; },
- getIndent: function () { return indent; },
- getTextPos: function () { return output.length; },
- getLine: function () { return lineCount + 1; },
- getColumn: function () { return lineStart ? indent * getIndentSize() + 1 : output.length - linePos + 1; },
- getText: function () { return output; }
- };
- }
- ts.createTextWriter = createTextWriter;
- function getOwnEmitOutputFilePath(sourceFile, host, extension) {
- var compilerOptions = host.getCompilerOptions();
- var emitOutputFilePathWithoutExtension;
- if (compilerOptions.outDir) {
- emitOutputFilePathWithoutExtension = ts.removeFileExtension(getSourceFilePathInNewDir(sourceFile, host, compilerOptions.outDir));
- }
- else {
- emitOutputFilePathWithoutExtension = ts.removeFileExtension(sourceFile.fileName);
- }
- return emitOutputFilePathWithoutExtension + extension;
- }
- ts.getOwnEmitOutputFilePath = getOwnEmitOutputFilePath;
- function getSourceFilePathInNewDir(sourceFile, host, newDirPath) {
- var sourceFilePath = ts.getNormalizedAbsolutePath(sourceFile.fileName, host.getCurrentDirectory());
- sourceFilePath = sourceFilePath.replace(host.getCommonSourceDirectory(), "");
- return ts.combinePaths(newDirPath, sourceFilePath);
- }
- ts.getSourceFilePathInNewDir = getSourceFilePathInNewDir;
- function writeFile(host, diagnostics, fileName, data, writeByteOrderMark) {
- host.writeFile(fileName, data, writeByteOrderMark, function (hostErrorMessage) {
- diagnostics.push(ts.createCompilerDiagnostic(ts.Diagnostics.Could_not_write_file_0_Colon_1, fileName, hostErrorMessage));
- });
- }
- ts.writeFile = writeFile;
- function getLineOfLocalPosition(currentSourceFile, pos) {
- return ts.getLineAndCharacterOfPosition(currentSourceFile, pos).line;
- }
- ts.getLineOfLocalPosition = getLineOfLocalPosition;
- function getFirstConstructorWithBody(node) {
- return ts.forEach(node.members, function (member) {
- if (member.kind === 144 && nodeIsPresent(member.body)) {
- return member;
- }
- });
- }
- ts.getFirstConstructorWithBody = getFirstConstructorWithBody;
- function getSetAccessorTypeAnnotationNode(accessor) {
- return accessor && accessor.parameters.length > 0 && accessor.parameters[0].type;
- }
- ts.getSetAccessorTypeAnnotationNode = getSetAccessorTypeAnnotationNode;
- function shouldEmitToOwnFile(sourceFile, compilerOptions) {
- if (!isDeclarationFile(sourceFile)) {
- if ((isExternalModule(sourceFile) || !(compilerOptions.outFile || compilerOptions.out))) {
- return compilerOptions.isolatedModules || !ts.fileExtensionIs(sourceFile.fileName, ".js");
- }
- return false;
- }
- return false;
- }
- ts.shouldEmitToOwnFile = shouldEmitToOwnFile;
- function getAllAccessorDeclarations(declarations, accessor) {
- var firstAccessor;
- var secondAccessor;
- var getAccessor;
- var setAccessor;
- if (hasDynamicName(accessor)) {
- firstAccessor = accessor;
- if (accessor.kind === 145) {
- getAccessor = accessor;
- }
- else if (accessor.kind === 146) {
- setAccessor = accessor;
- }
- else {
- ts.Debug.fail("Accessor has wrong kind");
- }
- }
- else {
- ts.forEach(declarations, function (member) {
- if ((member.kind === 145 || member.kind === 146)
- && (member.flags & 128) === (accessor.flags & 128)) {
- var memberName = getPropertyNameForPropertyNameNode(member.name);
- var accessorName = getPropertyNameForPropertyNameNode(accessor.name);
- if (memberName === accessorName) {
- if (!firstAccessor) {
- firstAccessor = member;
- }
- else if (!secondAccessor) {
- secondAccessor = member;
- }
- if (member.kind === 145 && !getAccessor) {
- getAccessor = member;
- }
- if (member.kind === 146 && !setAccessor) {
- setAccessor = member;
- }
- }
- }
- });
- }
- return {
- firstAccessor: firstAccessor,
- secondAccessor: secondAccessor,
- getAccessor: getAccessor,
- setAccessor: setAccessor
- };
- }
- ts.getAllAccessorDeclarations = getAllAccessorDeclarations;
- function emitNewLineBeforeLeadingComments(currentSourceFile, writer, node, leadingComments) {
- if (leadingComments && leadingComments.length && node.pos !== leadingComments[0].pos &&
- getLineOfLocalPosition(currentSourceFile, node.pos) !== getLineOfLocalPosition(currentSourceFile, leadingComments[0].pos)) {
- writer.writeLine();
- }
- }
- ts.emitNewLineBeforeLeadingComments = emitNewLineBeforeLeadingComments;
- function emitComments(currentSourceFile, writer, comments, trailingSeparator, newLine, writeComment) {
- var emitLeadingSpace = !trailingSeparator;
- ts.forEach(comments, function (comment) {
- if (emitLeadingSpace) {
- writer.write(" ");
- emitLeadingSpace = false;
- }
- writeComment(currentSourceFile, writer, comment, newLine);
- if (comment.hasTrailingNewLine) {
- writer.writeLine();
- }
- else if (trailingSeparator) {
- writer.write(" ");
- }
- else {
- emitLeadingSpace = true;
- }
- });
- }
- ts.emitComments = emitComments;
- function writeCommentRange(currentSourceFile, writer, comment, newLine) {
- if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 42) {
- var firstCommentLineAndCharacter = ts.getLineAndCharacterOfPosition(currentSourceFile, comment.pos);
- var lineCount = ts.getLineStarts(currentSourceFile).length;
- var firstCommentLineIndent;
- for (var pos = comment.pos, currentLine = firstCommentLineAndCharacter.line; pos < comment.end; currentLine++) {
- var nextLineStart = (currentLine + 1) === lineCount
- ? currentSourceFile.text.length + 1
- : getStartPositionOfLine(currentLine + 1, currentSourceFile);
- if (pos !== comment.pos) {
- if (firstCommentLineIndent === undefined) {
- firstCommentLineIndent = calculateIndent(getStartPositionOfLine(firstCommentLineAndCharacter.line, currentSourceFile), comment.pos);
- }
- var currentWriterIndentSpacing = writer.getIndent() * getIndentSize();
- var spacesToEmit = currentWriterIndentSpacing - firstCommentLineIndent + calculateIndent(pos, nextLineStart);
- if (spacesToEmit > 0) {
- var numberOfSingleSpacesToEmit = spacesToEmit % getIndentSize();
- var indentSizeSpaceString = getIndentString((spacesToEmit - numberOfSingleSpacesToEmit) / getIndentSize());
- writer.rawWrite(indentSizeSpaceString);
- while (numberOfSingleSpacesToEmit) {
- writer.rawWrite(" ");
- numberOfSingleSpacesToEmit--;
- }
- }
- else {
- writer.rawWrite("");
- }
- }
- writeTrimmedCurrentLine(pos, nextLineStart);
- pos = nextLineStart;
- }
- }
- else {
- writer.write(currentSourceFile.text.substring(comment.pos, comment.end));
- }
- function writeTrimmedCurrentLine(pos, nextLineStart) {
- var end = Math.min(comment.end, nextLineStart - 1);
- var currentLineText = currentSourceFile.text.substring(pos, end).replace(/^\s+|\s+$/g, "");
- if (currentLineText) {
- writer.write(currentLineText);
- if (end !== comment.end) {
- writer.writeLine();
- }
- }
- else {
- writer.writeLiteral(newLine);
- }
- }
- function calculateIndent(pos, end) {
- var currentLineIndent = 0;
- for (; pos < end && ts.isWhiteSpace(currentSourceFile.text.charCodeAt(pos)); pos++) {
- if (currentSourceFile.text.charCodeAt(pos) === 9) {
- currentLineIndent += getIndentSize() - (currentLineIndent % getIndentSize());
- }
- else {
- currentLineIndent++;
- }
- }
- return currentLineIndent;
- }
- }
- ts.writeCommentRange = writeCommentRange;
- function modifierToFlag(token) {
- switch (token) {
- case 113: return 128;
- case 112: return 16;
- case 111: return 64;
- case 110: return 32;
- case 115: return 256;
- case 82: return 1;
- case 122: return 2;
- case 74: return 32768;
- case 77: return 1024;
- case 118: return 512;
- }
- return 0;
- }
- ts.modifierToFlag = modifierToFlag;
- function isLeftHandSideExpression(expr) {
- if (expr) {
- switch (expr.kind) {
- case 166:
- case 167:
- case 169:
- case 168:
- case 233:
- case 234:
- case 170:
- case 164:
- case 172:
- case 165:
- case 186:
- case 173:
- case 69:
- case 10:
- case 8:
- case 9:
- case 11:
- case 183:
- case 84:
- case 93:
- case 97:
- case 99:
- case 95:
- return true;
- }
- }
- return false;
- }
- ts.isLeftHandSideExpression = isLeftHandSideExpression;
- function isAssignmentOperator(token) {
- return token >= 56 && token <= 68;
- }
- ts.isAssignmentOperator = isAssignmentOperator;
- function isExpressionWithTypeArgumentsInClassExtendsClause(node) {
- return node.kind === 188 &&
- node.parent.token === 83 &&
- isClassLike(node.parent.parent);
- }
- ts.isExpressionWithTypeArgumentsInClassExtendsClause = isExpressionWithTypeArgumentsInClassExtendsClause;
- function isSupportedExpressionWithTypeArguments(node) {
- return isSupportedExpressionWithTypeArgumentsRest(node.expression);
- }
- ts.isSupportedExpressionWithTypeArguments = isSupportedExpressionWithTypeArguments;
- function isSupportedExpressionWithTypeArgumentsRest(node) {
- if (node.kind === 69) {
- return true;
- }
- else if (isPropertyAccessExpression(node)) {
- return isSupportedExpressionWithTypeArgumentsRest(node.expression);
- }
- else {
- return false;
- }
- }
- function isRightSideOfQualifiedNameOrPropertyAccess(node) {
- return (node.parent.kind === 135 && node.parent.right === node) ||
- (node.parent.kind === 166 && node.parent.name === node);
- }
- ts.isRightSideOfQualifiedNameOrPropertyAccess = isRightSideOfQualifiedNameOrPropertyAccess;
- function isEmptyObjectLiteralOrArrayLiteral(expression) {
- var kind = expression.kind;
- if (kind === 165) {
- return expression.properties.length === 0;
- }
- if (kind === 164) {
- return expression.elements.length === 0;
- }
- return false;
- }
- ts.isEmptyObjectLiteralOrArrayLiteral = isEmptyObjectLiteralOrArrayLiteral;
- function getLocalSymbolForExportDefault(symbol) {
- return symbol && symbol.valueDeclaration && (symbol.valueDeclaration.flags & 1024) ? symbol.valueDeclaration.localSymbol : undefined;
- }
- ts.getLocalSymbolForExportDefault = getLocalSymbolForExportDefault;
- function isJavaScript(fileName) {
- return ts.fileExtensionIs(fileName, ".js");
- }
- ts.isJavaScript = isJavaScript;
- function isTsx(fileName) {
- return ts.fileExtensionIs(fileName, ".tsx");
- }
- ts.isTsx = isTsx;
- function getExpandedCharCodes(input) {
- var output = [];
- var length = input.length;
- for (var i = 0; i < length; i++) {
- var charCode = input.charCodeAt(i);
- if (charCode < 0x80) {
- output.push(charCode);
- }
- else if (charCode < 0x800) {
- output.push((charCode >> 6) | 192);
- output.push((charCode & 63) | 128);
- }
- else if (charCode < 0x10000) {
- output.push((charCode >> 12) | 224);
- output.push(((charCode >> 6) & 63) | 128);
- output.push((charCode & 63) | 128);
- }
- else if (charCode < 0x20000) {
- output.push((charCode >> 18) | 240);
- output.push(((charCode >> 12) & 63) | 128);
- output.push(((charCode >> 6) & 63) | 128);
- output.push((charCode & 63) | 128);
- }
- else {
- ts.Debug.assert(false, "Unexpected code point");
- }
- }
- return output;
- }
- var base64Digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
- function convertToBase64(input) {
- var result = "";
- var charCodes = getExpandedCharCodes(input);
- var i = 0;
- var length = charCodes.length;
- var byte1, byte2, byte3, byte4;
- while (i < length) {
- byte1 = charCodes[i] >> 2;
- byte2 = (charCodes[i] & 3) << 4 | charCodes[i + 1] >> 4;
- byte3 = (charCodes[i + 1] & 15) << 2 | charCodes[i + 2] >> 6;
- byte4 = charCodes[i + 2] & 63;
- if (i + 1 >= length) {
- byte3 = byte4 = 64;
- }
- else if (i + 2 >= length) {
- byte4 = 64;
- }
- result += base64Digits.charAt(byte1) + base64Digits.charAt(byte2) + base64Digits.charAt(byte3) + base64Digits.charAt(byte4);
- i += 3;
- }
- return result;
- }
- ts.convertToBase64 = convertToBase64;
- var carriageReturnLineFeed = "\r\n";
- var lineFeed = "\n";
- function getNewLineCharacter(options) {
- if (options.newLine === 0) {
- return carriageReturnLineFeed;
- }
- else if (options.newLine === 1) {
- return lineFeed;
- }
- else if (ts.sys) {
- return ts.sys.newLine;
- }
- return carriageReturnLineFeed;
- }
- ts.getNewLineCharacter = getNewLineCharacter;
- })(ts || (ts = {}));
- var ts;
- (function (ts) {
- function getDefaultLibFileName(options) {
- return options.target === 2 ? "lib.es6.d.ts" : "lib.d.ts";
- }
- ts.getDefaultLibFileName = getDefaultLibFileName;
- function textSpanEnd(span) {
- return span.start + span.length;
- }
- ts.textSpanEnd = textSpanEnd;
- function textSpanIsEmpty(span) {
- return span.length === 0;
- }
- ts.textSpanIsEmpty = textSpanIsEmpty;
- function textSpanContainsPosition(span, position) {
- return position >= span.start && position < textSpanEnd(span);
- }
- ts.textSpanContainsPosition = textSpanContainsPosition;
- function textSpanContainsTextSpan(span, other) {
- return other.start >= span.start && textSpanEnd(other) <= textSpanEnd(span);
- }
- ts.textSpanContainsTextSpan = textSpanContainsTextSpan;
- function textSpanOverlapsWith(span, other) {
- var overlapStart = Math.max(span.start, other.start);
- var overlapEnd = Math.min(textSpanEnd(span), textSpanEnd(other));
- return overlapStart < overlapEnd;
- }
- ts.textSpanOverlapsWith = textSpanOverlapsWith;
- function textSpanOverlap(span1, span2) {
- var overlapStart = Math.max(span1.start, span2.start);
- var overlapEnd = Math.min(textSpanEnd(span1), textSpanEnd(span2));
- if (overlapStart < overlapEnd) {
- return createTextSpanFromBounds(overlapStart, overlapEnd);
- }
- return undefined;
- }
- ts.textSpanOverlap = textSpanOverlap;
- function textSpanIntersectsWithTextSpan(span, other) {
- return other.start <= textSpanEnd(span) && textSpanEnd(other) >= span.start;
- }
- ts.textSpanIntersectsWithTextSpan = textSpanIntersectsWithTextSpan;
- function textSpanIntersectsWith(span, start, length) {
- var end = start + length;
- return start <= textSpanEnd(span) && end >= span.start;
- }
- ts.textSpanIntersectsWith = textSpanIntersectsWith;
- function decodedTextSpanIntersectsWith(start1, length1, start2, length2) {
- var end1 = start1 + length1;
- var end2 = start2 + length2;
- return start2 <= end1 && end2 >= start1;
- }
- ts.decodedTextSpanIntersectsWith = decodedTextSpanIntersectsWith;
- function textSpanIntersectsWithPosition(span, position) {
- return position <= textSpanEnd(span) && position >= span.start;
- }
- ts.textSpanIntersectsWithPosition = textSpanIntersectsWithPosition;
- function textSpanIntersection(span1, span2) {
- var intersectStart = Math.max(span1.start, span2.start);
- var intersectEnd = Math.min(textSpanEnd(span1), textSpanEnd(span2));
- if (intersectStart <= intersectEnd) {
- return createTextSpanFromBounds(intersectStart, intersectEnd);
- }
- return undefined;
- }
- ts.textSpanIntersection = textSpanIntersection;
- function createTextSpan(start, length) {
- if (start < 0) {
- throw new Error("start < 0");
- }
- if (length < 0) {
- throw new Error("length < 0");
- }
- return { start: start, length: length };
- }
- ts.createTextSpan = createTextSpan;
- function createTextSpanFromBounds(start, end) {
- return createTextSpan(start, end - start);
- }
- ts.createTextSpanFromBounds = createTextSpanFromBounds;
- function textChangeRangeNewSpan(range) {
- return createTextSpan(range.span.start, range.newLength);
- }
- ts.textChangeRangeNewSpan = textChangeRangeNewSpan;
- function textChangeRangeIsUnchanged(range) {
- return textSpanIsEmpty(range.span) && range.newLength === 0;
- }
- ts.textChangeRangeIsUnchanged = textChangeRangeIsUnchanged;
- function createTextChangeRange(span, newLength) {
- if (newLength < 0) {
- throw new Error("newLength < 0");
- }
- return { span: span, newLength: newLength };
- }
- ts.createTextChangeRange = createTextChangeRange;
- ts.unchangedTextChangeRange = createTextChangeRange(createTextSpan(0, 0), 0);
- function collapseTextChangeRangesAcrossMultipleVersions(changes) {
- if (changes.length === 0) {
- return ts.unchangedTextChangeRange;
- }
- if (changes.length === 1) {
- return changes[0];
- }
- var change0 = changes[0];
- var oldStartN = change0.span.start;
- var oldEndN = textSpanEnd(change0.span);
- var newEndN = oldStartN + change0.newLength;
- for (var i = 1; i < changes.length; i++) {
- var nextChange = changes[i];
- var oldStart1 = oldStartN;
- var oldEnd1 = oldEndN;
- var newEnd1 = newEndN;
- var oldStart2 = nextChange.span.start;
- var oldEnd2 = textSpanEnd(nextChange.span);
- var newEnd2 = oldStart2 + nextChange.newLength;
- oldStartN = Math.min(oldStart1, oldStart2);
- oldEndN = Math.max(oldEnd1, oldEnd1 + (oldEnd2 - newEnd1));
- newEndN = Math.max(newEnd2, newEnd2 + (newEnd1 - oldEnd2));
- }
- return createTextChangeRange(createTextSpanFromBounds(oldStartN, oldEndN), newEndN - oldStartN);
- }
- ts.collapseTextChangeRangesAcrossMultipleVersions = collapseTextChangeRangesAcrossMultipleVersions;
- function getTypeParameterOwner(d) {
- if (d && d.kind === 137) {
- for (var current = d; current; current = current.parent) {
- if (ts.isFunctionLike(current) || ts.isClassLike(current) || current.kind === 215) {
- return current;
- }
- }
- }
- }
- ts.getTypeParameterOwner = getTypeParameterOwner;
- function arrayStructurallyIsEqualTo(array1, array2) {
- if (!array1 || !array2) {
- return false;
- }
- if (array1.length !== array2.length) {
- return false;
- }
- return ts.arrayIsEqualTo(array1.sort(), array2.sort());
- }
- ts.arrayStructurallyIsEqualTo = arrayStructurallyIsEqualTo;
- })(ts || (ts = {}));
- var ts;
- (function (ts) {
- var nodeConstructors = new Array(272);
- ts.parseTime = 0;
- function getNodeConstructor(kind) {
- return nodeConstructors[kind] || (nodeConstructors[kind] = ts.objectAllocator.getNodeConstructor(kind));
- }
- ts.getNodeConstructor = getNodeConstructor;
- function createNode(kind) {
- return new (getNodeConstructor(kind))();
- }
- ts.createNode = createNode;
- function visitNode(cbNode, node) {
- if (node) {
- return cbNode(node);
- }
- }
- function visitNodeArray(cbNodes, nodes) {
- if (nodes) {
- return cbNodes(nodes);
- }
- }
- function visitEachNode(cbNode, nodes) {
- if (nodes) {
- for (var _i = 0; _i < nodes.length; _i++) {
- var node = nodes[_i];
- var result = cbNode(node);
- if (result) {
- return result;
- }
- }
- }
- }
- function forEachChild(node, cbNode, cbNodeArray) {
- if (!node) {
- return;
- }
- var visitNodes = cbNodeArray ? visitNodeArray : visitEachNode;
- var cbNodes = cbNodeArray || cbNode;
- switch (node.kind) {
- case 135:
- return visitNode(cbNode, node.left) ||
- visitNode(cbNode, node.right);
- case 137:
- return visitNode(cbNode, node.name) ||
- visitNode(cbNode, node.constraint) ||
- visitNode(cbNode, node.expression);
- case 246:
- return visitNodes(cbNodes, node.decorators) ||
- visitNodes(cbNodes, node.modifiers) ||
- visitNode(cbNode, node.name) ||
- visitNode(cbNode, node.questionToken) ||
- visitNode(cbNode, node.equalsToken) ||
- visitNode(cbNode, node.objectAssignmentInitializer);
- case 138:
- case 141:
- case 140:
- case 245:
- case 211:
- case 163:
- return visitNodes(cbNodes, node.decorators) ||
- visitNodes(cbNodes, node.modifiers) ||
- visitNode(cbNode, node.propertyName) ||
- visitNode(cbNode, node.dotDotDotToken) ||
- visitNode(cbNode, node.name) ||
- visitNode(cbNode, node.questionToken) ||
- visitNode(cbNode, node.type) ||
- visitNode(cbNode, node.initializer);
- case 152:
- case 153:
- case 147:
- case 148:
- case 149:
- return visitNodes(cbNodes, node.decorators) ||
- visitNodes(cbNodes, node.modifiers) ||
- visitNodes(cbNodes, node.typeParameters) ||
- visitNodes(cbNodes, node.parameters) ||
- visitNode(cbNode, node.type);
- case 143:
- case 142:
- case 144:
- case 145:
- case 146:
- case 173:
- case 213:
- case 174:
- return visitNodes(cbNodes, node.decorators) ||
- visitNodes(cbNodes, node.modifiers) ||
- visitNode(cbNode, node.asteriskToken) ||
- visitNode(cbNode, node.name) ||
- visitNode(cbNode, node.questionToken) ||
- visitNodes(cbNodes, node.typeParameters) ||
- visitNodes(cbNodes, node.parameters) ||
- visitNode(cbNode, node.type) ||
- visitNode(cbNode, node.equalsGreaterThanToken) ||
- visitNode(cbNode, node.body);
- case 151:
- return visitNode(cbNode, node.typeName) ||
- visitNodes(cbNodes, node.typeArguments);
- case 150:
- return visitNode(cbNode, node.parameterName) ||
- visitNode(cbNode, node.type);
- case 154:
- return visitNode(cbNode, node.exprName);
- case 155:
- return visitNodes(cbNodes, node.members);
- case 156:
- return visitNode(cbNode, node.elementType);
- case 157:
- return visitNodes(cbNodes, node.elementTypes);
- case 158:
- case 159:
- return visitNodes(cbNodes, node.types);
- case 160:
- return visitNode(cbNode, node.type);
- case 161:
- case 162:
- return visitNodes(cbNodes, node.elements);
- case 164:
- return visitNodes(cbNodes, node.elements);
- case 165:
- return visitNodes(cbNodes, node.properties);
- case 166:
- return visitNode(cbNode, node.expression) ||
- visitNode(cbNode, node.dotToken) ||
- visitNode(cbNode, node.name);
- case 167:
- return visitNode(cbNode, node.expression) ||
- visitNode(cbNode, node.argumentExpression);
- case 168:
- case 169:
- return visitNode(cbNode, node.expression) ||
- visitNodes(cbNodes, node.typeArguments) ||
- visitNodes(cbNodes, node.arguments);
- case 170:
- return visitNode(cbNode, node.tag) ||
- visitNode(cbNode, node.template);
- case 171:
- return visitNode(cbNode, node.type) ||
- visitNode(cbNode, node.expression);
- case 172:
- return visitNode(cbNode, node.expression);
- case 175:
- return visitNode(cbNode, node.expression);
- case 176:
- return visitNode(cbNode, node.expression);
- case 177:
- return visitNode(cbNode, node.expression);
- case 179:
- return visitNode(cbNode, node.operand);
- case 184:
- return visitNode(cbNode, node.asteriskToken) ||
- visitNode(cbNode, node.expression);
- case 178:
- return visitNode(cbNode, node.expression);
- case 180:
- return visitNode(cbNode, node.operand);
- case 181:
- return visitNode(cbNode, node.left) ||
- visitNode(cbNode, node.operatorToken) ||
- visitNode(cbNode, node.right);
- case 189:
- return visitNode(cbNode, node.expression) ||
- visitNode(cbNode, node.type);
- case 182:
- return visitNode(cbNode, node.condition) ||
- visitNode(cbNode, node.questionToken) ||
- visitNode(cbNode, node.whenTrue) ||
- visitNode(cbNode, node.colonToken) ||
- visitNode(cbNode, node.whenFalse);
- case 185:
- return visitNode(cbNode, node.expression);
- case 192:
- case 219:
- return visitNodes(cbNodes, node.statements);
- case 248:
- return visitNodes(cbNodes, node.statements) ||
- visitNode(cbNode, node.endOfFileToken);
- case 193:
- return visitNodes(cbNodes, node.decorators) ||
- visitNodes(cbNodes, node.modifiers) ||
- visitNode(cbNode, node.declarationList);
- case 212:
- return visitNodes(cbNodes, node.declarations);
- case 195:
- return visitNode(cbNode, node.expression);
- case 196:
- return visitNode(cbNode, node.expression) ||
- visitNode(cbNode, node.thenStatement) ||
- visitNode(cbNode, node.elseStatement);
- case 197:
- return visitNode(cbNode, node.statement) ||
- visitNode(cbNode, node.expression);
- case 198:
- return visitNode(cbNode, node.expression) ||
- visitNode(cbNode, node.statement);
- case 199:
- return visitNode(cbNode, node.initializer) ||
- visitNode(cbNode, node.condition) ||
- visitNode(cbNode, node.incrementor) ||
- visitNode(cbNode, node.statement);
- case 200:
- return visitNode(cbNode, node.initializer) ||
- visitNode(cbNode, node.expression) ||
- visitNode(cbNode, node.statement);
- case 201:
- return visitNode(cbNode, node.initializer) ||
- visitNode(cbNode, node.expression) ||
- visitNode(cbNode, node.statement);
- case 202:
- case 203:
- return visitNode(cbNode, node.label);
- case 204:
- return visitNode(cbNode, node.expression);
- case 205:
- return visitNode(cbNode, node.expression) ||
- visitNode(cbNode, node.statement);
- case 206:
- return visitNode(cbNode, node.expression) ||
- visitNode(cbNode, node.caseBlock);
- case 220:
- return visitNodes(cbNodes, node.clauses);
- case 241:
- return visitNode(cbNode, node.expression) ||
- visitNodes(cbNodes, node.statements);
- case 242:
- return visitNodes(cbNodes, node.statements);
- case 207:
- return visitNode(cbNode, node.label) ||
- visitNode(cbNode, node.statement);
- case 208:
- return visitNode(cbNode, node.expression);
- case 209:
- return visitNode(cbNode, node.tryBlock) ||
- visitNode(cbNode, node.catchClause) ||
- visitNode(cbNode, node.finallyBlock);
- case 244:
- return visitNode(cbNode, node.variableDeclaration) ||
- visitNode(cbNode, node.block);
- case 139:
- return visitNode(cbNode, node.expression);
- case 214:
- case 186:
- return visitNodes(cbNodes, node.decorators) ||
- visitNodes(cbNodes, node.modifiers) ||
- visitNode(cbNode, node.name) ||
- visitNodes(cbNodes, node.typeParameters) ||
- visitNodes(cbNodes, node.heritageClauses) ||
- visitNodes(cbNodes, node.members);
- case 215:
- return visitNodes(cbNodes, node.decorators) ||
- visitNodes(cbNodes, node.modifiers) ||
- visitNode(cbNode, node.name) ||
- visitNodes(cbNodes, node.typeParameters) ||
- visitNodes(cbNodes, node.heritageClauses) ||
- visitNodes(cbNodes, node.members);
- case 216:
- return visitNodes(cbNodes, node.decorators) ||
- visitNodes(cbNodes, node.modifiers) ||
- visitNode(cbNode, node.name) ||
- visitNodes(cbNodes, node.typeParameters) ||
- visitNode(cbNode, node.type);
- case 217:
- return visitNodes(cbNodes, node.decorators) ||
- visitNodes(cbNodes, node.modifiers) ||
- visitNode(cbNode, node.name) ||
- visitNodes(cbNodes, node.members);
- case 247:
- return visitNode(cbNode, node.name) ||
- visitNode(cbNode, node.initializer);
- case 218:
- return visitNodes(cbNodes, node.decorators) ||
- visitNodes(cbNodes, node.modifiers) ||
- visitNode(cbNode, node.name) ||
- visitNode(cbNode, node.body);
- case 221:
- return visitNodes(cbNodes, node.decorators) ||
- visitNodes(cbNodes, node.modifiers) ||
- visitNode(cbNode, node.name) ||
- visitNode(cbNode, node.moduleReference);
- case 222:
- return visitNodes(cbNodes, node.decorators) ||
- visitNodes(cbNodes, node.modifiers) ||
- visitNode(cbNode, node.importClause) ||
- visitNode(cbNode, node.moduleSpecifier);
- case 223:
- return visitNode(cbNode, node.name) ||
- visitNode(cbNode, node.namedBindings);
- case 224:
- return visitNode(cbNode, node.name);
- case 225:
- case 229:
- return visitNodes(cbNodes, node.elements);
- case 228:
- return visitNodes(cbNodes, node.decorators) ||
- visitNodes(cbNodes, node.modifiers) ||
- visitNode(cbNode, node.exportClause) ||
- visitNode(cbNode, node.moduleSpecifier);
- case 226:
- case 230:
- return visitNode(cbNode, node.propertyName) ||
- visitNode(cbNode, node.name);
- case 227:
- return visitNodes(cbNodes, node.decorators) ||
- visitNodes(cbNodes, node.modifiers) ||
- visitNode(cbNode, node.expression);
- case 183:
- return visitNode(cbNode, node.head) || visitNodes(cbNodes, node.templateSpans);
- case 190:
- return visitNode(cbNode, node.expression) || visitNode(cbNode, node.literal);
- case 136:
- return visitNode(cbNode, node.expression);
- case 243:
- return visitNodes(cbNodes, node.types);
- case 188:
- return visitNode(cbNode, node.expression) ||
- visitNodes(cbNodes, node.typeArguments);
- case 232:
- return visitNode(cbNode, node.expression);
- case 231:
- return visitNodes(cbNodes, node.decorators);
- case 233:
- return visitNode(cbNode, node.openingElement) ||
- visitNodes(cbNodes, node.children) ||
- visitNode(cbNode, node.closingElement);
- case 234:
- case 235:
- return visitNode(cbNode, node.tagName) ||
- visitNodes(cbNodes, node.attributes);
- case 238:
- return visitNode(cbNode, node.name) ||
- visitNode(cbNode, node.initializer);
- case 239:
- return visitNode(cbNode, node.expression);
- case 240:
- return visitNode(cbNode, node.expression);
- case 237:
- return visitNode(cbNode, node.tagName);
- case 249:
- return visitNode(cbNode, node.type);
- case 253:
- return visitNodes(cbNodes, node.types);
- case 254:
- return visitNodes(cbNodes, node.types);
- case 252:
- return visitNode(cbNode, node.elementType);
- case 256:
- return visitNode(cbNode, node.type);
- case 255:
- return visitNode(cbNode, node.type);
- case 257:
- return visitNodes(cbNodes, node.members);
- case 259:
- return visitNode(cbNode, node.name) ||
- visitNodes(cbNodes, node.typeArguments);
- case 260:
- return visitNode(cbNode, node.type);
- case 261:
- return visitNodes(cbNodes, node.parameters) ||
- visitNode(cbNode, node.type);
- case 262:
- return visitNode(cbNode, node.type);
- case 263:
- return visitNode(cbNode, node.type);
- case 264:
- return visitNode(cbNode, node.type);
- case 258:
- return visitNode(cbNode, node.name) ||
- visitNode(cbNode, node.type);
- case 265:
- return visitNodes(cbNodes, node.tags);
- case 267:
- return visitNode(cbNode, node.preParameterName) ||
- visitNode(cbNode, node.typeExpression) ||
- visitNode(cbNode, node.postParameterName);
- case 268:
- return visitNode(cbNode, node.typeExpression);
- case 269:
- return visitNode(cbNode, node.typeExpression);
- case 270:
- return visitNodes(cbNodes, node.typeParameters);
- }
- }
- ts.forEachChild = forEachChild;
- function createSourceFile(fileName, sourceText, languageVersion, setParentNodes) {
- if (setParentNodes === void 0) { setParentNodes = false; }
- var start = new Date().getTime();
- var result = Parser.parseSourceFile(fileName, sourceText, languageVersion, undefined, setParentNodes);
- ts.parseTime += new Date().getTime() - start;
- return result;
- }
- ts.createSourceFile = createSourceFile;
- function updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks) {
- return IncrementalParser.updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks);
- }
- ts.updateSourceFile = updateSourceFile;
- function parseIsolatedJSDocComment(content, start, length) {
- return Parser.JSDocParser.parseIsolatedJSDocComment(content, start, length);
- }
- ts.parseIsolatedJSDocComment = parseIsolatedJSDocComment;
- function parseJSDocTypeExpressionForTests(content, start, length) {
- return Parser.JSDocParser.parseJSDocTypeExpressionForTests(content, start, length);
- }
- ts.parseJSDocTypeExpressionForTests = parseJSDocTypeExpressionForTests;
- var Parser;
- (function (Parser) {
- var scanner = ts.createScanner(2, true);
- var disallowInAndDecoratorContext = 1 | 4;
- var sourceFile;
- var parseDiagnostics;
- var syntaxCursor;
- var token;
- var sourceText;
- var nodeCount;
- var identifiers;
- var identifierCount;
- var parsingContext;
- var contextFlags;
- var parseErrorBeforeNextFinishedNode = false;
- function parseSourceFile(fileName, _sourceText, languageVersion, _syntaxCursor, setParentNodes) {
- initializeState(fileName, _sourceText, languageVersion, _syntaxCursor);
- var result = parseSourceFileWorker(fileName, languageVersion, setParentNodes);
- clearState();
- return result;
- }
- Parser.parseSourceFile = parseSourceFile;
- function initializeState(fileName, _sourceText, languageVersion, _syntaxCursor) {
- sourceText = _sourceText;
- syntaxCursor = _syntaxCursor;
- parseDiagnostics = [];
- parsingContext = 0;
- identifiers = {};
- identifierCount = 0;
- nodeCount = 0;
- contextFlags = ts.isJavaScript(fileName) ? 32 : 0;
- parseErrorBeforeNextFinishedNode = false;
- scanner.setText(sourceText);
- scanner.setOnError(scanError);
- scanner.setScriptTarget(languageVersion);
- scanner.setLanguageVariant(ts.isTsx(fileName) ? 1 : 0);
- }
- function clearState() {
- scanner.setText("");
- scanner.setOnError(undefined);
- parseDiagnostics = undefined;
- sourceFile = undefined;
- identifiers = undefined;
- syntaxCursor = undefined;
- sourceText = undefined;
- }
- function parseSourceFileWorker(fileName, languageVersion, setParentNodes) {
- sourceFile = createSourceFile(fileName, languageVersion);
- token = nextToken();
- processReferenceComments(sourceFile);
- sourceFile.statements = parseList(0, parseStatement);
- ts.Debug.assert(token === 1);
- sourceFile.endOfFileToken = parseTokenNode();
- setExternalModuleIndicator(sourceFile);
- sourceFile.nodeCount = nodeCount;
- sourceFile.identifierCount = identifierCount;
- sourceFile.identifiers = identifiers;
- sourceFile.parseDiagnostics = parseDiagnostics;
- if (setParentNodes) {
- fixupParentReferences(sourceFile);
- }
- if (ts.isJavaScript(fileName)) {
- addJSDocComments();
- }
- return sourceFile;
- }
- function addJSDocComments() {
- forEachChild(sourceFile, visit);
- return;
- function visit(node) {
- switch (node.kind) {
- case 193:
- case 213:
- case 138:
- addJSDocComment(node);
- }
- forEachChild(node, visit);
- }
- }
- function addJSDocComment(node) {
- var comments = ts.getLeadingCommentRangesOfNode(node, sourceFile);
- if (comments) {
- for (var _i = 0; _i < comments.length; _i++) {
- var comment = comments[_i];
- var jsDocComment = JSDocParser.parseJSDocComment(node, comment.pos, comment.end - comment.pos);
- if (jsDocComment) {
- node.jsDocComment = jsDocComment;
- }
- }
- }
- }
- function fixupParentReferences(sourceFile) {
- var parent = sourceFile;
- forEachChild(sourceFile, visitNode);
- return;
- function visitNode(n) {
- if (n.parent !== parent) {
- n.parent = parent;
- var saveParent = parent;
- parent = n;
- forEachChild(n, visitNode);
- parent = saveParent;
- }
- }
- }
- Parser.fixupParentReferences = fixupParentReferences;
- function createSourceFile(fileName, languageVersion) {
- var sourceFile = createNode(248, 0);
- sourceFile.pos = 0;
- sourceFile.end = sourceText.length;
- sourceFile.text = sourceText;
- sourceFile.bindDiagnostics = [];
- sourceFile.languageVersion = languageVersion;
- sourceFile.fileName = ts.normalizePath(fileName);
- sourceFile.flags = ts.fileExtensionIs(sourceFile.fileName, ".d.ts") ? 8192 : 0;
- sourceFile.languageVariant = ts.isTsx(sourceFile.fileName) ? 1 : 0;
- return sourceFile;
- }
- function setContextFlag(val, flag) {
- if (val) {
- contextFlags |= flag;
- }
- else {
- contextFlags &= ~flag;
- }
- }
- function setDisallowInContext(val) {
- setContextFlag(val, 1);
- }
- function setYieldContext(val) {
- setContextFlag(val, 2);
- }
- function setDecoratorContext(val) {
- setContextFlag(val, 4);
- }
- function setAwaitContext(val) {
- setContextFlag(val, 8);
- }
- function doOutsideOfContext(context, func) {
- var contextFlagsToClear = context & contextFlags;
- if (contextFlagsToClear) {
- setContextFlag(false, contextFlagsToClear);
- var result = func();
- setContextFlag(true, contextFlagsToClear);
- return result;
- }
- return func();
- }
- function doInsideOfContext(context, func) {
- var contextFlagsToSet = context & ~contextFlags;
- if (contextFlagsToSet) {
- setContextFlag(true, contextFlagsToSet);
- var result = func();
- setContextFlag(false, contextFlagsToSet);
- return result;
- }
- return func();
- }
- function allowInAnd(func) {
- return doOutsideOfContext(1, func);
- }
- function disallowInAnd(func) {
- return doInsideOfContext(1, func);
- }
- function doInYieldContext(func) {
- return doInsideOfContext(2, func);
- }
- function doOutsideOfYieldContext(func) {
- return doOutsideOfContext(2, func);
- }
- function doInDecoratorContext(func) {
- return doInsideOfContext(4, func);
- }
- function doInAwaitContext(func) {
- return doInsideOfContext(8, func);
- }
- function doOutsideOfAwaitContext(func) {
- return doOutsideOfContext(8, func);
- }
- function doInYieldAndAwaitContext(func) {
- return doInsideOfContext(2 | 8, func);
- }
- function doOutsideOfYieldAndAwaitContext(func) {
- return doOutsideOfContext(2 | 8, func);
- }
- function inContext(flags) {
- return (contextFlags & flags) !== 0;
- }
- function inYieldContext() {
- return inContext(2);
- }
- function inDisallowInContext() {
- return inContext(1);
- }
- function inDecoratorContext() {
- return inContext(4);
- }
- function inAwaitContext() {
- return inContext(8);
- }
- function parseErrorAtCurrentToken(message, arg0) {
- var start = scanner.getTokenPos();
- var length = scanner.getTextPos() - start;
- parseErrorAtPosition(start, length, message, arg0);
- }
- function parseErrorAtPosition(start, length, message, arg0) {
- var lastError = ts.lastOrUndefined(parseDiagnostics);
- if (!lastError || start !== lastError.start) {
- parseDiagnostics.push(ts.createFileDiagnostic(sourceFile, start, length, message, arg0));
- }
- parseErrorBeforeNextFinishedNode = true;
- }
- function scanError(message, length) {
- var pos = scanner.getTextPos();
- parseErrorAtPosition(pos, length || 0, message);
- }
- function getNodePos() {
- return scanner.getStartPos();
- }
- function getNodeEnd() {
- return scanner.getStartPos();
- }
- function nextToken() {
- return token = scanner.scan();
- }
- function getTokenPos(pos) {
- return ts.skipTrivia(sourceText, pos);
- }
- function reScanGreaterToken() {
- return token = scanner.reScanGreaterToken();
- }
- function reScanSlashToken() {
- return token = scanner.reScanSlashToken();
- }
- function reScanTemplateToken() {
- return token = scanner.reScanTemplateToken();
- }
- function scanJsxIdentifier() {
- return token = scanner.scanJsxIdentifier();
- }
- function scanJsxText() {
- return token = scanner.scanJsxToken();
- }
- function speculationHelper(callback, isLookAhead) {
- var saveToken = token;
- var saveParseDiagnosticsLength = parseDiagnostics.length;
- var saveParseErrorBeforeNextFinishedNode = parseErrorBeforeNextFinishedNode;
- var saveContextFlags = contextFlags;
- var result = isLookAhead
- ? scanner.lookAhead(callback)
- : scanner.tryScan(callback);
- ts.Debug.assert(saveContextFlags === contextFlags);
- if (!result || isLookAhead) {
- token = saveToken;
- parseDiagnostics.length = saveParseDiagnosticsLength;
- parseErrorBeforeNextFinishedNode = saveParseErrorBeforeNextFinishedNode;
- }
- return result;
- }
- function lookAhead(callback) {
- return speculationHelper(callback, true);
- }
- function tryParse(callback) {
- return speculationHelper(callback, false);
- }
- function isIdentifier() {
- if (token === 69) {
- return true;
- }
- if (token === 114 && inYieldContext()) {
- return false;
- }
- if (token === 119 && inAwaitContext()) {
- return false;
- }
- return token > 105;
- }
- function parseExpected(kind, diagnosticMessage, shouldAdvance) {
- if (shouldAdvance === void 0) { shouldAdvance = true; }
- if (token === kind) {
- if (shouldAdvance) {
- nextToken();
- }
- return true;
- }
- if (diagnosticMessage) {
- parseErrorAtCurrentToken(diagnosticMessage);
- }
- else {
- parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(kind));
- }
- return false;
- }
- function parseOptional(t) {
- if (token === t) {
- nextToken();
- return true;
- }
- return false;
- }
- function parseOptionalToken(t) {
- if (token === t) {
- return parseTokenNode();
- }
- return undefined;
- }
- function parseExpectedToken(t, reportAtCurrentPosition, diagnosticMessage, arg0) {
- return parseOptionalToken(t) ||
- createMissingNode(t, reportAtCurrentPosition, diagnosticMessage, arg0);
- }
- function parseTokenNode() {
- var node = createNode(token);
- nextToken();
- return finishNode(node);
- }
- function canParseSemicolon() {
- if (token === 23) {
- return true;
- }
- return token === 16 || token === 1 || scanner.hasPrecedingLineBreak();
- }
- function parseSemicolon() {
- if (canParseSemicolon()) {
- if (token === 23) {
- nextToken();
- }
- return true;
- }
- else {
- return parseExpected(23);
- }
- }
- function createNode(kind, pos) {
- nodeCount++;
- var node = new (nodeConstructors[kind] || (nodeConstructors[kind] = ts.objectAllocator.getNodeConstructor(kind)))();
- if (!(pos >= 0)) {
- pos = scanner.getStartPos();
- }
- node.pos = pos;
- node.end = pos;
- return node;
- }
- function finishNode(node, end) {
- node.end = end === undefined ? scanner.getStartPos() : end;
- if (contextFlags) {
- node.parserContextFlags = contextFlags;
- }
- if (parseErrorBeforeNextFinishedNode) {
- parseErrorBeforeNextFinishedNode = false;
- node.parserContextFlags |= 16;
- }
- return node;
- }
- function createMissingNode(kind, reportAtCurrentPosition, diagnosticMessage, arg0) {
- if (reportAtCurrentPosition) {
- parseErrorAtPosition(scanner.getStartPos(), 0, diagnosticMessage, arg0);
- }
- else {
- parseErrorAtCurrentToken(diagnosticMessage, arg0);
- }
- var result = createNode(kind, scanner.getStartPos());
- result.text = "";
- return finishNode(result);
- }
- function internIdentifier(text) {
- text = ts.escapeIdentifier(text);
- return ts.hasProperty(identifiers, text) ? identifiers[text] : (identifiers[text] = text);
- }
- function createIdentifier(isIdentifier, diagnosticMessage) {
- identifierCount++;
- if (isIdentifier) {
- var node = createNode(69);
- if (token !== 69) {
- node.originalKeywordKind = token;
- }
- node.text = internIdentifier(scanner.getTokenValue());
- nextToken();
- return finishNode(node);
- }
- return createMissingNode(69, false, diagnosticMessage || ts.Diagnostics.Identifier_expected);
- }
- function parseIdentifier(diagnosticMessage) {
- return createIdentifier(isIdentifier(), diagnosticMessage);
- }
- function parseIdentifierName() {
- return createIdentifier(ts.tokenIsIdentifierOrKeyword(token));
- }
- function isLiteralPropertyName() {
- return ts.tokenIsIdentifierOrKeyword(token) ||
- token === 9 ||
- token === 8;
- }
- function parsePropertyNameWorker(allowComputedPropertyNames) {
- if (token === 9 || token === 8) {
- return parseLiteralNode(true);
- }
- if (allowComputedPropertyNames && token === 19) {
- return parseComputedPropertyName();
- }
- return parseIdentifierName();
- }
- function parsePropertyName() {
- return parsePropertyNameWorker(true);
- }
- function parseSimplePropertyName() {
- return parsePropertyNameWorker(false);
- }
- function isSimplePropertyName() {
- return token === 9 || token === 8 || ts.tokenIsIdentifierOrKeyword(token);
- }
- function parseComputedPropertyName() {
- var node = createNode(136);
- parseExpected(19);
- node.expression = allowInAnd(parseExpression);
- parseExpected(20);
- return finishNode(node);
- }
- function parseContextualModifier(t) {
- return token === t && tryParse(nextTokenCanFollowModifier);
- }
- function nextTokenCanFollowModifier() {
- if (token === 74) {
- return nextToken() === 81;
- }
- if (token === 82) {
- nextToken();
- if (token === 77) {
- return lookAhead(nextTokenIsClassOrFunction);
- }
- return token !== 37 && token !== 15 && canFollowModifier();
- }
- if (token === 77) {
- return nextTokenIsClassOrFunction();
- }
- if (token === 113) {
- nextToken();
- return canFollowModifier();
- }
- nextToken();
- if (scanner.hasPrecedingLineBreak()) {
- return false;
- }
- return canFollowModifier();
- }
- function parseAnyContextualModifier() {
- return ts.isModifier(token) && tryParse(nextTokenCanFollowModifier);
- }
- function canFollowModifier() {
- return token === 19
- || token === 15
- || token === 37
- || isLiteralPropertyName();
- }
- function nextTokenIsClassOrFunction() {
- nextToken();
- return token === 73 || token === 87;
- }
- function isListElement(parsingContext, inErrorRecovery) {
- var node = currentNode(parsingContext);
- if (node) {
- return true;
- }
- switch (parsingContext) {
- case 0:
- case 1:
- case 3:
- return !(token === 23 && inErrorRecovery) && isStartOfStatement();
- case 2:
- return token === 71 || token === 77;
- case 4:
- return isStartOfTypeMember();
- case 5:
- return lookAhead(isClassMemberStart) || (token === 23 && !inErrorRecovery);
- case 6:
- return token === 19 || isLiteralPropertyName();
- case 12:
- return token === 19 || token === 37 || isLiteralPropertyName();
- case 9:
- return isLiteralPropertyName();
- case 7:
- if (token === 15) {
- return lookAhead(isValidHeritageClauseObjectLiteral);
- }
- if (!inErrorRecovery) {
- return isStartOfLeftHandSideExpression() && !isHeritageClauseExtendsOrImplementsKeyword();
- }
- else {
- return isIdentifier() && !isHeritageClauseExtendsOrImplementsKeyword();
- }
- case 8:
- return isIdentifierOrPattern();
- case 10:
- return token === 24 || token === 22 || isIdentifierOrPattern();
- case 17:
- return isIdentifier();
- case 11:
- case 15:
- return token === 24 || token === 22 || isStartOfExpression();
- case 16:
- return isStartOfParameter();
- case 18:
- case 19:
- return token === 24 || isStartOfType();
- case 20:
- return isHeritageClause();
- case 21:
- return ts.tokenIsIdentifierOrKeyword(token);
- case 13:
- return ts.tokenIsIdentifierOrKeyword(token) || token === 15;
- case 14:
- return true;
- case 22:
- case 23:
- case 25:
- return JSDocParser.isJSDocType();
- case 24:
- return isSimplePropertyName();
- }
- ts.Debug.fail("Non-exhaustive case in 'isListElement'.");
- }
- function isValidHeritageClauseObjectLiteral() {
- ts.Debug.assert(token === 15);
- if (nextToken() === 16) {
- var next = nextToken();
- return next === 24 || next === 15 || next === 83 || next === 106;
- }
- return true;
- }
- function nextTokenIsIdentifier() {
- nextToken();
- return isIdentifier();
- }
- function nextTokenIsIdentifierOrKeyword() {
- nextToken();
- return ts.tokenIsIdentifierOrKeyword(token);
- }
- function isHeritageClauseExtendsOrImplementsKeyword() {
- if (token === 106 ||
- token === 83) {
- return lookAhead(nextTokenIsStartOfExpression);
- }
- return false;
- }
- function nextTokenIsStartOfExpression() {
- nextToken();
- return isStartOfExpression();
- }
- function isListTerminator(kind) {
- if (token === 1) {
- return true;
- }
- switch (kind) {
- case 1:
- case 2:
- case 4:
- case 5:
- case 6:
- case 12:
- case 9:
- case 21:
- return token === 16;
- case 3:
- return token === 16 || token === 71 || token === 77;
- case 7:
- return token === 15 || token === 83 || token === 106;
- case 8:
- return isVariableDeclaratorListTerminator();
- case 17:
- return token === 27 || token === 17 || token === 15 || token === 83 || token === 106;
- case 11:
- return token === 18 || token === 23;
- case 15:
- case 19:
- case 10:
- return token === 20;
- case 16:
- return token === 18 || token === 20;
- case 18:
- return token === 27 || token === 17;
- case 20:
- return token === 15 || token === 16;
- case 13:
- return token === 27 || token === 39;
- case 14:
- return token === 25 && lookAhead(nextTokenIsSlash);
- case 22:
- return token === 18 || token === 54 || token === 16;
- case 23:
- return token === 27 || token === 16;
- case 25:
- return token === 20 || token === 16;
- case 24:
- return token === 16;
- }
- }
- function isVariableDeclaratorListTerminator() {
- if (canParseSemicolon()) {
- return true;
- }
- if (isInOrOfKeyword(token)) {
- return true;
- }
- if (token === 34) {
- return true;
- }
- return false;
- }
- function isInSomeParsingContext() {
- for (var kind = 0; kind < 26; kind++) {
- if (parsingContext & (1 << kind)) {
- if (isListElement(kind, true) || isListTerminator(kind)) {
- return true;
- }
- }
- }
- return false;
- }
- function parseList(kind, parseElement) {
- var saveParsingContext = parsingContext;
- parsingContext |= 1 << kind;
- var result = [];
- result.pos = getNodePos();
- while (!isListTerminator(kind)) {
- if (isListElement(kind, false)) {
- var element = parseListElement(kind, parseElement);
- result.push(element);
- continue;
- }
- if (abortParsingListOrMoveToNextToken(kind)) {
- break;
- }
- }
- result.end = getNodeEnd();
- parsingContext = saveParsingContext;
- return result;
- }
- function parseListElement(parsingContext, parseElement) {
- var node = currentNode(parsingContext);
- if (node) {
- return consumeNode(node);
- }
- return parseElement();
- }
- function currentNode(parsingContext) {
- if (parseErrorBeforeNextFinishedNode) {
- return undefined;
- }
- if (!syntaxCursor) {
- return undefined;
- }
- var node = syntaxCursor.currentNode(scanner.getStartPos());
- if (ts.nodeIsMissing(node)) {
- return undefined;
- }
- if (node.intersectsChange) {
- return undefined;
- }
- if (ts.containsParseError(node)) {
- return undefined;
- }
- var nodeContextFlags = node.parserContextFlags & 31;
- if (nodeContextFlags !== contextFlags) {
- return undefined;
- }
- if (!canReuseNode(node, parsingContext)) {
- return undefined;
- }
- return node;
- }
- function consumeNode(node) {
- scanner.setTextPos(node.end);
- nextToken();
- return node;
- }
- function canReuseNode(node, parsingContext) {
- switch (parsingContext) {
- case 5:
- return isReusableClassMember(node);
- case 2:
- return isReusableSwitchClause(node);
- case 0:
- case 1:
- case 3:
- return isReusableStatement(node);
- case 6:
- return isReusableEnumMember(node);
- case 4:
- return isReusableTypeMember(node);
- case 8:
- return isReusableVariableDeclaration(node);
- case 16:
- return isReusableParameter(node);
- case 20:
- case 17:
- case 19:
- case 18:
- case 11:
- case 12:
- case 7:
- case 13:
- case 14:
- }
- return false;
- }
- function isReusableClassMember(node) {
- if (node) {
- switch (node.kind) {
- case 144:
- case 149:
- case 145:
- case 146:
- case 141:
- case 191:
- return true;
- case 143:
- var methodDeclaration = node;
- var nameIsConstructor = methodDeclaration.name.kind === 69 &&
- methodDeclaration.name.originalKeywordKind === 121;
- return !nameIsConstructor;
- }
- }
- return false;
- }
- function isReusableSwitchClause(node) {
- if (node) {
- switch (node.kind) {
- case 241:
- case 242:
- return true;
- }
- }
- return false;
- }
- function isReusableStatement(node) {
- if (node) {
- switch (node.kind) {
- case 213:
- case 193:
- case 192:
- case 196:
- case 195:
- case 208:
- case 204:
- case 206:
- case 203:
- case 202:
- case 200:
- case 201:
- case 199:
- case 198:
- case 205:
- case 194:
- case 209:
- case 207:
- case 197:
- case 210:
- case 222:
- case 221:
- case 228:
- case 227:
- case 218:
- case 214:
- case 215:
- case 217:
- case 216:
- return true;
- }
- }
- return false;
- }
- function isReusableEnumMember(node) {
- return node.kind === 247;
- }
- function isReusableTypeMember(node) {
- if (node) {
- switch (node.kind) {
- case 148:
- case 142:
- case 149:
- case 140:
- case 147:
- return true;
- }
- }
- return false;
- }
- function isReusableVariableDeclaration(node) {
- if (node.kind !== 211) {
- return false;
- }
- var variableDeclarator = node;
- return variableDeclarator.initializer === undefined;
- }
- function isReusableParameter(node) {
- if (node.kind !== 138) {
- return false;
- }
- var parameter = node;
- return parameter.initializer === undefined;
- }
- function abortParsingListOrMoveToNextToken(kind) {
- parseErrorAtCurrentToken(parsingContextErrors(kind));
- if (isInSomeParsingContext()) {
- return true;
- }
- nextToken();
- return false;
- }
- function parsingContextErrors(context) {
- switch (context) {
- case 0: return ts.Diagnostics.Declaration_or_statement_expected;
- case 1: return ts.Diagnostics.Declaration_or_statement_expected;
- case 2: return ts.Diagnostics.case_or_default_expected;
- case 3: return ts.Diagnostics.Statement_expected;
- case 4: return ts.Diagnostics.Property_or_signature_expected;
- case 5: return ts.Diagnostics.Unexpected_token_A_constructor_method_accessor_or_property_was_expected;
- case 6: return ts.Diagnostics.Enum_member_expected;
- case 7: return ts.Diagnostics.Expression_expected;
- case 8: return ts.Diagnostics.Variable_declaration_expected;
- case 9: return ts.Diagnostics.Property_destructuring_pattern_expected;
- case 10: return ts.Diagnostics.Array_element_destructuring_pattern_expected;
- case 11: return ts.Diagnostics.Argument_expression_expected;
- case 12: return ts.Diagnostics.Property_assignment_expected;
- case 15: return ts.Diagnostics.Expression_or_comma_expected;
- case 16: return ts.Diagnostics.Parameter_declaration_expected;
- case 17: return ts.Diagnostics.Type_parameter_declaration_expected;
- case 18: return ts.Diagnostics.Type_argument_expected;
- case 19: return ts.Diagnostics.Type_expected;
- case 20: return ts.Diagnostics.Unexpected_token_expected;
- case 21: return ts.Diagnostics.Identifier_expected;
- case 13: return ts.Diagnostics.Identifier_expected;
- case 14: return ts.Diagnostics.Identifier_expected;
- case 22: return ts.Diagnostics.Parameter_declaration_expected;
- case 23: return ts.Diagnostics.Type_argument_expected;
- case 25: return ts.Diagnostics.Type_expected;
- case 24: return ts.Diagnostics.Property_assignment_expected;
- }
- }
- ;
- function parseDelimitedList(kind, parseElement, considerSemicolonAsDelimeter) {
- var saveParsingContext = parsingContext;
- parsingContext |= 1 << kind;
- var result = [];
- result.pos = getNodePos();
- var commaStart = -1;
- while (true) {
- if (isListElement(kind, false)) {
- result.push(parseListElement(kind, parseElement));
- commaStart = scanner.getTokenPos();
- if (parseOptional(24)) {
- continue;
- }
- commaStart = -1;
- if (isListTerminator(kind)) {
- break;
- }
- parseExpected(24);
- if (considerSemicolonAsDelimeter && token === 23 && !scanner.hasPrecedingLineBreak()) {
- nextToken();
- }
- continue;
- }
- if (isListTerminator(kind)) {
- break;
- }
- if (abortParsingListOrMoveToNextToken(kind)) {
- break;
- }
- }
- if (commaStart >= 0) {
- result.hasTrailingComma = true;
- }
- result.end = getNodeEnd();
- parsingContext = saveParsingContext;
- return result;
- }
- function createMissingList() {
- var pos = getNodePos();
- var result = [];
- result.pos = pos;
- result.end = pos;
- return result;
- }
- function parseBracketedList(kind, parseElement, open, close) {
- if (parseExpected(open)) {
- var result = parseDelimitedList(kind, parseElement);
- parseExpected(close);
- return result;
- }
- return createMissingList();
- }
- function parseEntityName(allowReservedWords, diagnosticMessage) {
- var entity = parseIdentifier(diagnosticMessage);
- while (parseOptional(21)) {
- var node = createNode(135, entity.pos);
- node.left = entity;
- node.right = parseRightSideOfDot(allowReservedWords);
- entity = finishNode(node);
- }
- return entity;
- }
- function parseRightSideOfDot(allowIdentifierNames) {
- if (scanner.hasPrecedingLineBreak() && ts.tokenIsIdentifierOrKeyword(token)) {
- var matchesPattern = lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine);
- if (matchesPattern) {
- return createMissingNode(69, true, ts.Diagnostics.Identifier_expected);
- }
- }
- return allowIdentifierNames ? parseIdentifierName() : parseIdentifier();
- }
- function parseTemplateExpression() {
- var template = createNode(183);
- template.head = parseLiteralNode();
- ts.Debug.assert(template.head.kind === 12, "Template head has wrong token kind");
- var templateSpans = [];
- templateSpans.pos = getNodePos();
- do {
- templateSpans.push(parseTemplateSpan());
- } while (ts.lastOrUndefined(templateSpans).literal.kind === 13);
- templateSpans.end = getNodeEnd();
- template.templateSpans = templateSpans;
- return finishNode(template);
- }
- function parseTemplateSpan() {
- var span = createNode(190);
- span.expression = allowInAnd(parseExpression);
- var literal;
- if (token === 16) {
- reScanTemplateToken();
- literal = parseLiteralNode();
- }
- else {
- literal = parseExpectedToken(14, false, ts.Diagnostics._0_expected, ts.tokenToString(16));
- }
- span.literal = literal;
- return finishNode(span);
- }
- function parseLiteralNode(internName) {
- var node = createNode(token);
- var text = scanner.getTokenValue();
- node.text = internName ? internIdentifier(text) : text;
- if (scanner.hasExtendedUnicodeEscape()) {
- node.hasExtendedUnicodeEscape = true;
- }
- if (scanner.isUnterminated()) {
- node.isUnterminated = true;
- }
- var tokenPos = scanner.getTokenPos();
- nextToken();
- finishNode(node);
- if (node.kind === 8
- && sourceText.charCodeAt(tokenPos) === 48
- && ts.isOctalDigit(sourceText.charCodeAt(tokenPos + 1))) {
- node.flags |= 65536;
- }
- return node;
- }
- function parseTypeReferenceOrTypePredicate() {
- var typeName = parseEntityName(false, ts.Diagnostics.Type_expected);
- if (typeName.kind === 69 && token === 124 && !scanner.hasPrecedingLineBreak()) {
- nextToken();
- var node_1 = createNode(150, typeName.pos);
- node_1.parameterName = typeName;
- node_1.type = parseType();
- return finishNode(node_1);
- }
- var node = createNode(151, typeName.pos);
- node.typeName = typeName;
- if (!scanner.hasPrecedingLineBreak() && token === 25) {
- node.typeArguments = parseBracketedList(18, parseType, 25, 27);
- }
- return finishNode(node);
- }
- function parseTypeQuery() {
- var node = createNode(154);
- parseExpected(101);
- node.exprName = parseEntityName(true);
- return finishNode(node);
- }
- function parseTypeParameter() {
- var node = createNode(137);
- node.name = parseIdentifier();
- if (parseOptional(83)) {
- if (isStartOfType() || !isStartOfExpression()) {
- node.constraint = parseType();
- }
- else {
- node.expression = parseUnaryExpressionOrHigher();
- }
- }
- return finishNode(node);
- }
- function parseTypeParameters() {
- if (token === 25) {
- return parseBracketedList(17, parseTypeParameter, 25, 27);
- }
- }
- function parseParameterType() {
- if (parseOptional(54)) {
- return token === 9
- ? parseLiteralNode(true)
- : parseType();
- }
- return undefined;
- }
- function isStartOfParameter() {
- return token === 22 || isIdentifierOrPattern() || ts.isModifier(token) || token === 55;
- }
- function setModifiers(node, modifiers) {
- if (modifiers) {
- node.flags |= modifiers.flags;
- node.modifiers = modifiers;
- }
- }
- function parseParameter() {
- var node = createNode(138);
- node.decorators = parseDecorators();
- setModifiers(node, parseModifiers());
- node.dotDotDotToken = parseOptionalToken(22);
- node.name = parseIdentifierOrPattern();
- if (ts.getFullWidth(node.name) === 0 && node.flags === 0 && ts.isModifier(token)) {
- nextToken();
- }
- node.questionToken = parseOptionalToken(53);
- node.type = parseParameterType();
- node.initializer = parseBindingElementInitializer(true);
- return finishNode(node);
- }
- function parseBindingElementInitializer(inParameter) {
- return inParameter ? parseParameterInitializer() : parseNonParameterInitializer();
- }
- function parseParameterInitializer() {
- return parseInitializer(true);
- }
- function fillSignature(returnToken, yieldContext, awaitContext, requireCompleteParameterList, signature) {
- var returnTokenRequired = returnToken === 34;
- signature.typeParameters = parseTypeParameters();
- signature.parameters = parseParameterList(yieldContext, awaitContext, requireCompleteParameterList);
- if (returnTokenRequired) {
- parseExpected(returnToken);
- signature.type = parseType();
- }
- else if (parseOptional(returnToken)) {
- signature.type = parseType();
- }
- }
- function parseParameterList(yieldContext, awaitContext, requireCompleteParameterList) {
- if (parseExpected(17)) {
- var savedYieldContext = inYieldContext();
- var savedAwaitContext = inAwaitContext();
- setYieldContext(yieldContext);
- setAwaitContext(awaitContext);
- var result = parseDelimitedList(16, parseParameter);
- setYieldContext(savedYieldContext);
- setAwaitContext(savedAwaitContext);
- if (!parseExpected(18) && requireCompleteParameterList) {
- return undefined;
- }
- return result;
- }
- return requireCompleteParameterList ? undefined : createMissingList();
- }
- function parseTypeMemberSemicolon() {
- if (parseOptional(24)) {
- return;
- }
- parseSemicolon();
- }
- function parseSignatureMember(kind) {
- var node = createNode(kind);
- if (kind === 148) {
- parseExpected(92);
- }
- fillSignature(54, false, false, false, node);
- parseTypeMemberSemicolon();
- return finishNode(node);
- }
- function isIndexSignature() {
- if (token !== 19) {
- return false;
- }
- return lookAhead(isUnambiguouslyIndexSignature);
- }
- function isUnambiguouslyIndexSignature() {
- nextToken();
- if (token === 22 || token === 20) {
- return true;
- }
- if (ts.isModifier(token)) {
- nextToken();
- if (isIdentifier()) {
- return true;
- }
- }
- else if (!isIdentifier()) {
- return false;
- }
- else {
- nextToken();
- }
- if (token === 54 || token === 24) {
- return true;
- }
- if (token !== 53) {
- return false;
- }
- nextToken();
- return token === 54 || token === 24 || token === 20;
- }
- function parseIndexSignatureDeclaration(fullStart, decorators, modifiers) {
- var node = createNode(149, fullStart);
- node.decorators = decorators;
- setModifiers(node, modifiers);
- node.parameters = parseBracketedList(16, parseParameter, 19, 20);
- node.type = parseTypeAnnotation();
- parseTypeMemberSemicolon();
- return finishNode(node);
- }
- function parsePropertyOrMethodSignature() {
- var fullStart = scanner.getStartPos();
- var name = parsePropertyName();
- var questionToken = parseOptionalToken(53);
- if (token === 17 || token === 25) {
- var method = createNode(142, fullStart);
- method.name = name;
- method.questionToken = questionToken;
- fillSignature(54, false, false, false, method);
- parseTypeMemberSemicolon();
- return finishNode(method);
- }
- else {
- var property = createNode(140, fullStart);
- property.name = name;
- property.questionToken = questionToken;
- property.type = parseTypeAnnotation();
- parseTypeMemberSemicolon();
- return finishNode(property);
- }
- }
- function isStartOfTypeMember() {
- switch (token) {
- case 17:
- case 25:
- case 19:
- return true;
- default:
- if (ts.isModifier(token)) {
- var result = lookAhead(isStartOfIndexSignatureDeclaration);
- if (result) {
- return result;
- }
- }
- return isLiteralPropertyName() && lookAhead(isTypeMemberWithLiteralPropertyName);
- }
- }
- function isStartOfIndexSignatureDeclaration() {
- while (ts.isModifier(token)) {
- nextToken();
- }
- return isIndexSignature();
- }
- function isTypeMemberWithLiteralPropertyName() {
- nextToken();
- return token === 17 ||
- token === 25 ||
- token === 53 ||
- token === 54 ||
- canParseSemicolon();
- }
- function parseTypeMember() {
- switch (token) {
- case 17:
- case 25:
- return parseSignatureMember(147);
- case 19:
- return isIndexSignature()
- ? parseIndexSignatureDeclaration(scanner.getStartPos(), undefined, undefined)
- : parsePropertyOrMethodSignature();
- case 92:
- if (lookAhead(isStartOfConstructSignature)) {
- return parseSignatureMember(148);
- }
- case 9:
- case 8:
- return parsePropertyOrMethodSignature();
- default:
- if (ts.isModifier(token)) {
- var result = tryParse(parseIndexSignatureWithModifiers);
- if (result) {
- return result;
- }
- }
- if (ts.tokenIsIdentifierOrKeyword(token)) {
- return parsePropertyOrMethodSignature();
- }
- }
- }
- function parseIndexSignatureWithModifiers() {
- var fullStart = scanner.getStartPos();
- var decorators = parseDecorators();
- var modifiers = parseModifiers();
- return isIndexSignature()
- ? parseIndexSignatureDeclaration(fullStart, decorators, modifiers)
- : undefined;
- }
- function isStartOfConstructSignature() {
- nextToken();
- return token === 17 || token === 25;
- }
- function parseTypeLiteral() {
- var node = createNode(155);
- node.members = parseObjectTypeMembers();
- return finishNode(node);
- }
- function parseObjectTypeMembers() {
- var members;
- if (parseExpected(15)) {
- members = parseList(4, parseTypeMember);
- parseExpected(16);
- }
- else {
- members = createMissingList();
- }
- return members;
- }
- function parseTupleType() {
- var node = createNode(157);
- node.elementTypes = parseBracketedList(19, parseType, 19, 20);
- return finishNode(node);
- }
- function parseParenthesizedType() {
- var node = createNode(160);
- parseExpected(17);
- node.type = parseType();
- parseExpected(18);
- return finishNode(node);
- }
- function parseFunctionOrConstructorType(kind) {
- var node = createNode(kind);
- if (kind === 153) {
- parseExpected(92);
- }
- fillSignature(34, false, false, false, node);
- return finishNode(node);
- }
- function parseKeywordAndNoDot() {
- var node = parseTokenNode();
- return token === 21 ? undefined : node;
- }
- function parseNonArrayType() {
- switch (token) {
- case 117:
- case 130:
- case 128:
- case 120:
- case 131:
- var node = tryParse(parseKeywordAndNoDot);
- return node || parseTypeReferenceOrTypePredicate();
- case 103:
- case 97:
- return parseTokenNode();
- case 101:
- return parseTypeQuery();
- case 15:
- return parseTypeLiteral();
- case 19:
- return parseTupleType();
- case 17:
- return parseParenthesizedType();
- default:
- return parseTypeReferenceOrTypePredicate();
- }
- }
- function isStartOfType() {
- switch (token) {
- case 117:
- case 130:
- case 128:
- case 120:
- case 131:
- case 103:
- case 97:
- case 101:
- case 15:
- case 19:
- case 25:
- case 92:
- return true;
- case 17:
- return lookAhead(isStartOfParenthesizedOrFunctionType);
- default:
- return isIdentifier();
- }
- }
- function isStartOfParenthesizedOrFunctionType() {
- nextToken();
- return token === 18 || isStartOfParameter() || isStartOfType();
- }
- function parseArrayTypeOrHigher() {
- var type = parseNonArrayType();
- while (!scanner.hasPrecedingLineBreak() && parseOptional(19)) {
- parseExpected(20);
- var node = createNode(156, type.pos);
- node.elementType = type;
- type = finishNode(node);
- }
- return type;
- }
- function parseUnionOrIntersectionType(kind, parseConstituentType, operator) {
- var type = parseConstituentType();
- if (token === operator) {
- var types = [type];
- types.pos = type.pos;
- while (parseOptional(operator)) {
- types.push(parseConstituentType());
- }
- types.end = getNodeEnd();
- var node = createNode(kind, type.pos);
- node.types = types;
- type = finishNode(node);
- }
- return type;
- }
- function parseIntersectionTypeOrHigher() {
- return parseUnionOrIntersectionType(159, parseArrayTypeOrHigher, 46);
- }
- function parseUnionTypeOrHigher() {
- return parseUnionOrIntersectionType(158, parseIntersectionTypeOrHigher, 47);
- }
- function isStartOfFunctionType() {
- if (token === 25) {
- return true;
- }
- return token === 17 && lookAhead(isUnambiguouslyStartOfFunctionType);
- }
- function isUnambiguouslyStartOfFunctionType() {
- nextToken();
- if (token === 18 || token === 22) {
- return true;
- }
- if (isIdentifier() || ts.isModifier(token)) {
- nextToken();
- if (token === 54 || token === 24 ||
- token === 53 || token === 56 ||
- isIdentifier() || ts.isModifier(token)) {
- return true;
- }
- if (token === 18) {
- nextToken();
- if (token === 34) {
- return true;
- }
- }
- }
- return false;
- }
- function parseType() {
- return doOutsideOfContext(10, parseTypeWorker);
- }
- function parseTypeWorker() {
- if (isStartOfFunctionType()) {
- return parseFunctionOrConstructorType(152);
- }
- if (token === 92) {
- return parseFunctionOrConstructorType(153);
- }
- return parseUnionTypeOrHigher();
- }
- function parseTypeAnnotation() {
- return parseOptional(54) ? parseType() : undefined;
- }
- function isStartOfLeftHandSideExpression() {
- switch (token) {
- case 97:
- case 95:
- case 93:
- case 99:
- case 84:
- case 8:
- case 9:
- case 11:
- case 12:
- case 17:
- case 19:
- case 15:
- case 87:
- case 73:
- case 92:
- case 39:
- case 61:
- case 69:
- return true;
- default:
- return isIdentifier();
- }
- }
- function isStartOfExpression() {
- if (isStartOfLeftHandSideExpression()) {
- return true;
- }
- switch (token) {
- case 35:
- case 36:
- case 50:
- case 49:
- case 78:
- case 101:
- case 103:
- case 41:
- case 42:
- case 25:
- case 119:
- case 114:
- return true;
- default:
- if (isBinaryOperator()) {
- return true;
- }
- return isIdentifier();
- }
- }
- function isStartOfExpressionStatement() {
- return token !== 15 &&
- token !== 87 &&
- token !== 73 &&
- token !== 55 &&
- isStartOfExpression();
- }
- function allowInAndParseExpression() {
- return allowInAnd(parseExpression);
- }
- function parseExpression() {
- var saveDecoratorContext = inDecoratorContext();
- if (saveDecoratorContext) {
- setDecoratorContext(false);
- }
- var expr = parseAssignmentExpressionOrHigher();
- var operatorToken;
- while ((operatorToken = parseOptionalToken(24))) {
- expr = makeBinaryExpression(expr, operatorToken, parseAssignmentExpressionOrHigher());
- }
- if (saveDecoratorContext) {
- setDecoratorContext(true);
- }
- return expr;
- }
- function parseInitializer(inParameter) {
- if (token !== 56) {
- if (scanner.hasPrecedingLineBreak() || (inParameter && token === 15) || !isStartOfExpression()) {
- return undefined;
- }
- }
- parseExpected(56);
- return parseAssignmentExpressionOrHigher();
- }
- function parseAssignmentExpressionOrHigher() {
- if (isYieldExpression()) {
- return parseYieldExpression();
- }
- var arrowExpression = tryParseParenthesizedArrowFunctionExpression();
- if (arrowExpression) {
- return arrowExpression;
- }
- var expr = parseBinaryExpressionOrHigher(0);
- if (expr.kind === 69 && token === 34) {
- return parseSimpleArrowFunctionExpression(expr);
- }
- if (ts.isLeftHandSideExpression(expr) && ts.isAssignmentOperator(reScanGreaterToken())) {
- return makeBinaryExpression(expr, parseTokenNode(), parseAssignmentExpressionOrHigher());
- }
- return parseConditionalExpressionRest(expr);
- }
- function isYieldExpression() {
- if (token === 114) {
- if (inYieldContext()) {
- return true;
- }
- return lookAhead(nextTokenIsIdentifierOrKeywordOrNumberOnSameLine);
- }
- return false;
- }
- function nextTokenIsIdentifierOnSameLine() {
- nextToken();
- return !scanner.hasPrecedingLineBreak() && isIdentifier();
- }
- function parseYieldExpression() {
- var node = createNode(184);
- nextToken();
- if (!scanner.hasPrecedingLineBreak() &&
- (token === 37 || isStartOfExpression())) {
- node.asteriskToken = parseOptionalToken(37);
- node.expression = parseAssignmentExpressionOrHigher();
- return finishNode(node);
- }
- else {
- return finishNode(node);
- }
- }
- function parseSimpleArrowFunctionExpression(identifier) {
- ts.Debug.assert(token === 34, "parseSimpleArrowFunctionExpression should only have been called if we had a =>");
- var node = createNode(174, identifier.pos);
- var parameter = createNode(138, identifier.pos);
- parameter.name = identifier;
- finishNode(parameter);
- node.parameters = [parameter];
- node.parameters.pos = parameter.pos;
- node.parameters.end = parameter.end;
- node.equalsGreaterThanToken = parseExpectedToken(34, false, ts.Diagnostics._0_expected, "=>");
- node.body = parseArrowFunctionExpressionBody(false);
- return finishNode(node);
- }
- function tryParseParenthesizedArrowFunctionExpression() {
- var triState = isParenthesizedArrowFunctionExpression();
- if (triState === 0) {
- return undefined;
- }
- var arrowFunction = triState === 1
- ? parseParenthesizedArrowFunctionExpressionHead(true)
- : tryParse(parsePossibleParenthesizedArrowFunctionExpressionHead);
- if (!arrowFunction) {
- return undefined;
- }
- var isAsync = !!(arrowFunction.flags & 512);
- var lastToken = token;
- arrowFunction.equalsGreaterThanToken = parseExpectedToken(34, false, ts.Diagnostics._0_expected, "=>");
- arrowFunction.body = (lastToken === 34 || lastToken === 15)
- ? parseArrowFunctionExpressionBody(isAsync)
- : parseIdentifier();
- return finishNode(arrowFunction);
- }
- function isParenthesizedArrowFunctionExpression() {
- if (token === 17 || token === 25 || token === 118) {
- return lookAhead(isParenthesizedArrowFunctionExpressionWorker);
- }
- if (token === 34) {
- return 1;
- }
- return 0;
- }
- function isParenthesizedArrowFunctionExpressionWorker() {
- if (token === 118) {
- nextToken();
- if (scanner.hasPrecedingLineBreak()) {
- return 0;
- }
- if (token !== 17 && token !== 25) {
- return 0;
- }
- }
- var first = token;
- var second = nextToken();
- if (first === 17) {
- if (second === 18) {
- var third = nextToken();
- switch (third) {
- case 34:
- case 54:
- case 15:
- return 1;
- default:
- return 0;
- }
- }
- if (second === 19 || second === 15) {
- return 2;
- }
- if (second === 22) {
- return 1;
- }
- if (!isIdentifier()) {
- return 0;
- }
- if (nextToken() === 54) {
- return 1;
- }
- return 2;
- }
- else {
- ts.Debug.assert(first === 25);
- if (!isIdentifier()) {
- return 0;
- }
- if (sourceFile.languageVariant === 1) {
- var isArrowFunctionInJsx = lookAhead(function () {
- var third = nextToken();
- if (third === 83) {
- var fourth = nextToken();
- switch (fourth) {
- case 56:
- case 27:
- return false;
- default:
- return true;
- }
- }
- else if (third === 24) {
- return true;
- }
- return false;
- });
- if (isArrowFunctionInJsx) {
- return 1;
- }
- return 0;
- }
- return 2;
- }
- }
- function parsePossibleParenthesizedArrowFunctionExpressionHead() {
- return parseParenthesizedArrowFunctionExpressionHead(false);
- }
- function parseParenthesizedArrowFunctionExpressionHead(allowAmbiguity) {
- var node = createNode(174);
- setModifiers(node, parseModifiersForArrowFunction());
- var isAsync = !!(node.flags & 512);
- fillSignature(54, false, isAsync, !allowAmbiguity, node);
- if (!node.parameters) {
- return undefined;
- }
- if (!allowAmbiguity && token !== 34 && token !== 15) {
- return undefined;
- }
- return node;
- }
- function parseArrowFunctionExpressionBody(isAsync) {
- if (token === 15) {
- return parseFunctionBlock(false, isAsync, false);
- }
- if (token !== 23 &&
- token !== 87 &&
- token !== 73 &&
- isStartOfStatement() &&
- !isStartOfExpressionStatement()) {
- return parseFunctionBlock(false, isAsync, true);
- }
- return isAsync
- ? doInAwaitContext(parseAssignmentExpressionOrHigher)
- : doOutsideOfAwaitContext(parseAssignmentExpressionOrHigher);
- }
- function parseConditionalExpressionRest(leftOperand) {
- var questionToken = parseOptionalToken(53);
- if (!questionToken) {
- return leftOperand;
- }
- var node = createNode(182, leftOperand.pos);
- node.condition = leftOperand;
- node.questionToken = questionToken;
- node.whenTrue = doOutsideOfContext(disallowInAndDecoratorContext, parseAssignmentExpressionOrHigher);
- node.colonToken = parseExpectedToken(54, false, ts.Diagnostics._0_expected, ts.tokenToString(54));
- node.whenFalse = parseAssignmentExpressionOrHigher();
- return finishNode(node);
- }
- function parseBinaryExpressionOrHigher(precedence) {
- var leftOperand = parseUnaryExpressionOrHigher();
- return parseBinaryExpressionRest(precedence, leftOperand);
- }
- function isInOrOfKeyword(t) {
- return t === 90 || t === 134;
- }
- function parseBinaryExpressionRest(precedence, leftOperand) {
- while (true) {
- reScanGreaterToken();
- var newPrecedence = getBinaryOperatorPrecedence();
- var consumeCurrentOperator = token === 38 ?
- newPrecedence >= precedence :
- newPrecedence > precedence;
- if (!consumeCurrentOperator) {
- break;
- }
- if (token === 90 && inDisallowInContext()) {
- break;
- }
- if (token === 116) {
- if (scanner.hasPrecedingLineBreak()) {
- break;
- }
- else {
- nextToken();
- leftOperand = makeAsExpression(leftOperand, parseType());
- }
- }
- else {
- leftOperand = makeBinaryExpression(leftOperand, parseTokenNode(), parseBinaryExpressionOrHigher(newPrecedence));
- }
- }
- return leftOperand;
- }
- function isBinaryOperator() {
- if (inDisallowInContext() && token === 90) {
- return false;
- }
- return getBinaryOperatorPrecedence() > 0;
- }
- function getBinaryOperatorPrecedence() {
- switch (token) {
- case 52:
- return 1;
- case 51:
- return 2;
- case 47:
- return 3;
- case 48:
- return 4;
- case 46:
- return 5;
- case 30:
- case 31:
- case 32:
- case 33:
- return 6;
- case 25:
- case 27:
- case 28:
- case 29:
- case 91:
- case 90:
- case 116:
- return 7;
- case 43:
- case 44:
- case 45:
- return 8;
- case 35:
- case 36:
- return 9;
- case 37:
- case 39:
- case 40:
- return 10;
- case 38:
- return 11;
- }
- return -1;
- }
- function makeBinaryExpression(left, operatorToken, right) {
- var node = createNode(181, left.pos);
- node.left = left;
- node.operatorToken = operatorToken;
- node.right = right;
- return finishNode(node);
- }
- function makeAsExpression(left, right) {
- var node = createNode(189, left.pos);
- node.expression = left;
- node.type = right;
- return finishNode(node);
- }
- function parsePrefixUnaryExpression() {
- var node = createNode(179);
- node.operator = token;
- nextToken();
- node.operand = parseSimpleUnaryExpression();
- return finishNode(node);
- }
- function parseDeleteExpression() {
- var node = createNode(175);
- nextToken();
- node.expression = parseSimpleUnaryExpression();
- return finishNode(node);
- }
- function parseTypeOfExpression() {
- var node = createNode(176);
- nextToken();
- node.expression = parseSimpleUnaryExpression();
- return finishNode(node);
- }
- function parseVoidExpression() {
- var node = createNode(177);
- nextToken();
- node.expression = parseSimpleUnaryExpression();
- return finishNode(node);
- }
- function isAwaitExpression() {
- if (token === 119) {
- if (inAwaitContext()) {
- return true;
- }
- return lookAhead(nextTokenIsIdentifierOnSameLine);
- }
- return false;
- }
- function parseAwaitExpression() {
- var node = createNode(178);
- nextToken();
- node.expression = parseSimpleUnaryExpression();
- return finishNode(node);
- }
- function parseUnaryExpressionOrHigher() {
- if (isAwaitExpression()) {
- return parseAwaitExpression();
- }
- if (isIncrementExpression()) {
- var incrementExpression = parseIncrementExpression();
- return token === 38 ?
- parseBinaryExpressionRest(getBinaryOperatorPrecedence(), incrementExpression) :
- incrementExpression;
- }
- var unaryOperator = token;
- var simpleUnaryExpression = parseSimpleUnaryExpression();
- if (token === 38) {
- var diagnostic;
- var start = ts.skipTrivia(sourceText, simpleUnaryExpression.pos);
- if (simpleUnaryExpression.kind === 171) {
- parseErrorAtPosition(start, simpleUnaryExpression.end - start, ts.Diagnostics.A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses);
- }
- else {
- parseErrorAtPosition(start, simpleUnaryExpression.end - start, ts.Diagnostics.An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses, ts.tokenToString(unaryOperator));
- }
- }
- return simpleUnaryExpression;
- }
- function parseSimpleUnaryExpression() {
- switch (token) {
- case 35:
- case 36:
- case 50:
- case 49:
- return parsePrefixUnaryExpression();
- case 78:
- return parseDeleteExpression();
- case 101:
- return parseTypeOfExpression();
- case 103:
- return parseVoidExpression();
- case 25:
- return parseTypeAssertion();
- default:
- return parseIncrementExpression();
- }
- }
- function isIncrementExpression() {
- switch (token) {
- case 35:
- case 36:
- case 50:
- case 49:
- case 78:
- case 101:
- case 103:
- return false;
- case 25:
- if (sourceFile.languageVariant !== 1) {
- return false;
- }
- default:
- return true;
- }
- }
- function parseIncrementExpression() {
- if (token === 41 || token === 42) {
- var node = createNode(179);
- node.operator = token;
- nextToken();
- node.operand = parseLeftHandSideExpressionOrHigher();
- return finishNode(node);
- }
- else if (sourceFile.languageVariant === 1 && token === 25 && lookAhead(nextTokenIsIdentifierOrKeyword)) {
- return parseJsxElementOrSelfClosingElement(true);
- }
- var expression = parseLeftHandSideExpressionOrHigher();
- ts.Debug.assert(ts.isLeftHandSideExpression(expression));
- if ((token === 41 || token === 42) && !scanner.hasPrecedingLineBreak()) {
- var node = createNode(180, expression.pos);
- node.operand = expression;
- node.operator = token;
- nextToken();
- return finishNode(node);
- }
- return expression;
- }
- function parseLeftHandSideExpressionOrHigher() {
- var expression = token === 95
- ? parseSuperExpression()
- : parseMemberExpressionOrHigher();
- return parseCallExpressionRest(expression);
- }
- function parseMemberExpressionOrHigher() {
- var expression = parsePrimaryExpression();
- return parseMemberExpressionRest(expression);
- }
- function parseSuperExpression() {
- var expression = parseTokenNode();
- if (token === 17 || token === 21 || token === 19) {
- return expression;
- }
- var node = createNode(166, expression.pos);
- node.expression = expression;
- node.dotToken = parseExpectedToken(21, false, ts.Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access);
- node.name = parseRightSideOfDot(true);
- return finishNode(node);
- }
- function parseJsxElementOrSelfClosingElement(inExpressionContext) {
- var opening = parseJsxOpeningOrSelfClosingElement(inExpressionContext);
- if (opening.kind === 235) {
- var node = createNode(233, opening.pos);
- node.openingElement = opening;
- node.children = parseJsxChildren(node.openingElement.tagName);
- node.closingElement = parseJsxClosingElement(inExpressionContext);
- return finishNode(node);
- }
- else {
- ts.Debug.assert(opening.kind === 234);
- return opening;
- }
- }
- function parseJsxText() {
- var node = createNode(236, scanner.getStartPos());
- token = scanner.scanJsxToken();
- return finishNode(node);
- }
- function parseJsxChild() {
- switch (token) {
- case 236:
- return parseJsxText();
- case 15:
- return parseJsxExpression(false);
- case 25:
- return parseJsxElementOrSelfClosingElement(false);
- }
- ts.Debug.fail("Unknown JSX child kind " + token);
- }
- function parseJsxChildren(openingTagName) {
- var result = [];
- result.pos = scanner.getStartPos();
- var saveParsingContext = parsingContext;
- parsingContext |= 1 << 14;
- while (true) {
- token = scanner.reScanJsxToken();
- if (token === 26) {
- break;
- }
- else if (token === 1) {
- parseErrorAtCurrentToken(ts.Diagnostics.Expected_corresponding_JSX_closing_tag_for_0, ts.getTextOfNodeFromSourceText(sourceText, openingTagName));
- break;
- }
- result.push(parseJsxChild());
- }
- result.end = scanner.getTokenPos();
- parsingContext = saveParsingContext;
- return result;
- }
- function parseJsxOpeningOrSelfClosingElement(inExpressionContext) {
- var fullStart = scanner.getStartPos();
- parseExpected(25);
- var tagName = parseJsxElementName();
- var attributes = parseList(13, parseJsxAttribute);
- var node;
- if (token === 27) {
- node = createNode(235, fullStart);
- scanJsxText();
- }
- else {
- parseExpected(39);
- if (inExpressionContext) {
- parseExpected(27);
- }
- else {
- parseExpected(27, undefined, false);
- scanJsxText();
- }
- node = createNode(234, fullStart);
- }
- node.tagName = tagName;
- node.attributes = attributes;
- return finishNode(node);
- }
- function parseJsxElementName() {
- scanJsxIdentifier();
- var elementName = parseIdentifierName();
- while (parseOptional(21)) {
- scanJsxIdentifier();
- var node = createNode(135, elementName.pos);
- node.left = elementName;
- node.right = parseIdentifierName();
- elementName = finishNode(node);
- }
- return elementName;
- }
- function parseJsxExpression(inExpressionContext) {
- var node = createNode(240);
- parseExpected(15);
- if (token !== 16) {
- node.expression = parseExpression();
- }
- if (inExpressionContext) {
- parseExpected(16);
- }
- else {
- parseExpected(16, undefined, false);
- scanJsxText();
- }
- return finishNode(node);
- }
- function parseJsxAttribute() {
- if (token === 15) {
- return parseJsxSpreadAttribute();
- }
- scanJsxIdentifier();
- var node = createNode(238);
- node.name = parseIdentifierName();
- if (parseOptional(56)) {
- switch (token) {
- case 9:
- node.initializer = parseLiteralNode();
- break;
- default:
- node.initializer = parseJsxExpression(true);
- break;
- }
- }
- return finishNode(node);
- }
- function parseJsxSpreadAttribute() {
- var node = createNode(239);
- parseExpected(15);
- parseExpected(22);
- node.expression = parseExpression();
- parseExpected(16);
- return finishNode(node);
- }
- function parseJsxClosingElement(inExpressionContext) {
- var node = createNode(237);
- parseExpected(26);
- node.tagName = parseJsxElementName();
- if (inExpressionContext) {
- parseExpected(27);
- }
- else {
- parseExpected(27, undefined, false);
- scanJsxText();
- }
- return finishNode(node);
- }
- function parseTypeAssertion() {
- var node = createNode(171);
- parseExpected(25);
- node.type = parseType();
- parseExpected(27);
- node.expression = parseSimpleUnaryExpression();
- return finishNode(node);
- }
- function parseMemberExpressionRest(expression) {
- while (true) {
- var dotToken = parseOptionalToken(21);
- if (dotToken) {
- var propertyAccess = createNode(166, expression.pos);
- propertyAccess.expression = expression;
- propertyAccess.dotToken = dotToken;
- propertyAccess.name = parseRightSideOfDot(true);
- expression = finishNode(propertyAccess);
- continue;
- }
- if (!inDecoratorContext() && parseOptional(19)) {
- var indexedAccess = createNode(167, expression.pos);
- indexedAccess.expression = expression;
- if (token !== 20) {
- indexedAccess.argumentExpression = allowInAnd(parseExpression);
- if (indexedAccess.argumentExpression.kind === 9 || indexedAccess.argumentExpression.kind === 8) {
- var literal = indexedAccess.argumentExpression;
- literal.text = internIdentifier(literal.text);
- }
- }
- parseExpected(20);
- expression = finishNode(indexedAccess);
- continue;
- }
- if (token === 11 || token === 12) {
- var tagExpression = createNode(170, expression.pos);
- tagExpression.tag = expression;
- tagExpression.template = token === 11
- ? parseLiteralNode()
- : parseTemplateExpression();
- expression = finishNode(tagExpression);
- continue;
- }
- return expression;
- }
- }
- function parseCallExpressionRest(expression) {
- while (true) {
- expression = parseMemberExpressionRest(expression);
- if (token === 25) {
- var typeArguments = tryParse(parseTypeArgumentsInExpression);
- if (!typeArguments) {
- return expression;
- }
- var callExpr = createNode(168, expression.pos);
- callExpr.expression = expression;
- callExpr.typeArguments = typeArguments;
- callExpr.arguments = parseArgumentList();
- expression = finishNode(callExpr);
- continue;
- }
- else if (token === 17) {
- var callExpr = createNode(168, expression.pos);
- callExpr.expression = expression;
- callExpr.arguments = parseArgumentList();
- expression = finishNode(callExpr);
- continue;
- }
- return expression;
- }
- }
- function parseArgumentList() {
- parseExpected(17);
- var result = parseDelimitedList(11, parseArgumentExpression);
- parseExpected(18);
- return result;
- }
- function parseTypeArgumentsInExpression() {
- if (!parseOptional(25)) {
- return undefined;
- }
- var typeArguments = parseDelimitedList(18, parseType);
- if (!parseExpected(27)) {
- return undefined;
- }
- return typeArguments && canFollowTypeArgumentsInExpression()
- ? typeArguments
- : undefined;
- }
- function canFollowTypeArgumentsInExpression() {
- switch (token) {
- case 17:
- case 21:
- case 18:
- case 20:
- case 54:
- case 23:
- case 53:
- case 30:
- case 32:
- case 31:
- case 33:
- case 51:
- case 52:
- case 48:
- case 46:
- case 47:
- case 16:
- case 1:
- return true;
- case 24:
- case 15:
- default:
- return false;
- }
- }
- function parsePrimaryExpression() {
- switch (token) {
- case 8:
- case 9:
- case 11:
- return parseLiteralNode();
- case 97:
- case 95:
- case 93:
- case 99:
- case 84:
- return parseTokenNode();
- case 17:
- return parseParenthesizedExpression();
- case 19:
- return parseArrayLiteralExpression();
- case 15:
- return parseObjectLiteralExpression();
- case 118:
- if (!lookAhead(nextTokenIsFunctionKeywordOnSameLine)) {
- break;
- }
- return parseFunctionExpression();
- case 73:
- return parseClassExpression();
- case 87:
- return parseFunctionExpression();
- case 92:
- return parseNewExpression();
- case 39:
- case 61:
- if (reScanSlashToken() === 10) {
- return parseLiteralNode();
- }
- break;
- case 12:
- return parseTemplateExpression();
- }
- return parseIdentifier(ts.Diagnostics.Expression_expected);
- }
- function parseParenthesizedExpression() {
- var node = createNode(172);
- parseExpected(17);
- node.expression = allowInAnd(parseExpression);
- parseExpected(18);
- return finishNode(node);
- }
- function parseSpreadElement() {
- var node = createNode(185);
- parseExpected(22);
- node.expression = parseAssignmentExpressionOrHigher();
- return finishNode(node);
- }
- function parseArgumentOrArrayLiteralElement() {
- return token === 22 ? parseSpreadElement() :
- token === 24 ? createNode(187) :
- parseAssignmentExpressionOrHigher();
- }
- function parseArgumentExpression() {
- return doOutsideOfContext(disallowInAndDecoratorContext, parseArgumentOrArrayLiteralElement);
- }
- function parseArrayLiteralExpression() {
- var node = createNode(164);
- parseExpected(19);
- if (scanner.hasPrecedingLineBreak())
- node.flags |= 2048;
- node.elements = parseDelimitedList(15, parseArgumentOrArrayLiteralElement);
- parseExpected(20);
- return finishNode(node);
- }
- function tryParseAccessorDeclaration(fullStart, decorators, modifiers) {
- if (parseContextualModifier(123)) {
- return parseAccessorDeclaration(145, fullStart, decorators, modifiers);
- }
- else if (parseContextualModifier(129)) {
- return parseAccessorDeclaration(146, fullStart, decorators, modifiers);
- }
- return undefined;
- }
- function parseObjectLiteralElement() {
- var fullStart = scanner.getStartPos();
- var decorators = parseDecorators();
- var modifiers = parseModifiers();
- var accessor = tryParseAccessorDeclaration(fullStart, decorators, modifiers);
- if (accessor) {
- return accessor;
- }
- var asteriskToken = parseOptionalToken(37);
- var tokenIsIdentifier = isIdentifier();
- var nameToken = token;
- var propertyName = parsePropertyName();
- var questionToken = parseOptionalToken(53);
- if (asteriskToken || token === 17 || token === 25) {
- return parseMethodDeclaration(fullStart, decorators, modifiers, asteriskToken, propertyName, questionToken);
- }
- var isShorthandPropertyAssignment = tokenIsIdentifier && (token === 24 || token === 16 || token === 56);
- if (isShorthandPropertyAssignment) {
- var shorthandDeclaration = createNode(246, fullStart);
- shorthandDeclaration.name = propertyName;
- shorthandDeclaration.questionToken = questionToken;
- var equalsToken = parseOptionalToken(56);
- if (equalsToken) {
- shorthandDeclaration.equalsToken = equalsToken;
- shorthandDeclaration.objectAssignmentInitializer = allowInAnd(parseAssignmentExpressionOrHigher);
- }
- return finishNode(shorthandDeclaration);
- }
- else {
- var propertyAssignment = createNode(245, fullStart);
- propertyAssignment.name = propertyName;
- propertyAssignment.questionToken = questionToken;
- parseExpected(54);
- propertyAssignment.initializer = allowInAnd(parseAssignmentExpressionOrHigher);
- return finishNode(propertyAssignment);
- }
- }
- function parseObjectLiteralExpression() {
- var node = createNode(165);
- parseExpected(15);
- if (scanner.hasPrecedingLineBreak()) {
- node.flags |= 2048;
- }
- node.properties = parseDelimitedList(12, parseObjectLiteralElement, true);
- parseExpected(16);
- return finishNode(node);
- }
- function parseFunctionExpression() {
- var saveDecoratorContext = inDecoratorContext();
- if (saveDecoratorContext) {
- setDecoratorContext(false);
- }
- var node = createNode(173);
- setModifiers(node, parseModifiers());
- parseExpected(87);
- node.asteriskToken = parseOptionalToken(37);
- var isGenerator = !!node.asteriskToken;
- var isAsync = !!(node.flags & 512);
- node.name =
- isGenerator && isAsync ? doInYieldAndAwaitContext(parseOptionalIdentifier) :
- isGenerator ? doInYieldContext(parseOptionalIdentifier) :
- isAsync ? doInAwaitContext(parseOptionalIdentifier) :
- parseOptionalIdentifier();
- fillSignature(54, isGenerator, isAsync, false, node);
- node.body = parseFunctionBlock(isGenerator, isAsync, false);
- if (saveDecoratorContext) {
- setDecoratorContext(true);
- }
- return finishNode(node);
- }
- function parseOptionalIdentifier() {
- return isIdentifier() ? parseIdentifier() : undefined;
- }
- function parseNewExpression() {
- var node = createNode(169);
- parseExpected(92);
- node.expression = parseMemberExpressionOrHigher();
- node.typeArguments = tryParse(parseTypeArgumentsInExpression);
- if (node.typeArguments || token === 17) {
- node.arguments = parseArgumentList();
- }
- return finishNode(node);
- }
- function parseBlock(ignoreMissingOpenBrace, diagnosticMessage) {
- var node = createNode(192);
- if (parseExpected(15, diagnosticMessage) || ignoreMissingOpenBrace) {
- node.statements = parseList(1, parseStatement);
- parseExpected(16);
- }
- else {
- node.statements = createMissingList();
- }
- return finishNode(node);
- }
- function parseFunctionBlock(allowYield, allowAwait, ignoreMissingOpenBrace, diagnosticMessage) {
- var savedYieldContext = inYieldContext();
- setYieldContext(allowYield);
- var savedAwaitContext = inAwaitContext();
- setAwaitContext(allowAwait);
- var saveDecoratorContext = inDecoratorContext();
- if (saveDecoratorContext) {
- setDecoratorContext(false);
- }
- var block = parseBlock(ignoreMissingOpenBrace, diagnosticMessage);
- if (saveDecoratorContext) {
- setDecoratorContext(true);
- }
- setYieldContext(savedYieldContext);
- setAwaitContext(savedAwaitContext);
- return block;
- }
- function parseEmptyStatement() {
- var node = createNode(194);
- parseExpected(23);
- return finishNode(node);
- }
- function parseIfStatement() {
- var node = createNode(196);
- parseExpected(88);
- parseExpected(17);
- node.expression = allowInAnd(parseExpression);
- parseExpected(18);
- node.thenStatement = parseStatement();
- node.elseStatement = parseOptional(80) ? parseStatement() : undefined;
- return finishNode(node);
- }
- function parseDoStatement() {
- var node = createNode(197);
- parseExpected(79);
- node.statement = parseStatement();
- parseExpected(104);
- parseExpected(17);
- node.expression = allowInAnd(parseExpression);
- parseExpected(18);
- parseOptional(23);
- return finishNode(node);
- }
- function parseWhileStatement() {
- var node = createNode(198);
- parseExpected(104);
- parseExpected(17);
- node.expression = allowInAnd(parseExpression);
- parseExpected(18);
- node.statement = parseStatement();
- return finishNode(node);
- }
- function parseForOrForInOrForOfStatement() {
- var pos = getNodePos();
- parseExpected(86);
- parseExpected(17);
- var initializer = undefined;
- if (token !== 23) {
- if (token === 102 || token === 108 || token === 74) {
- initializer = parseVariableDeclarationList(true);
- }
- else {
- initializer = disallowInAnd(parseExpression);
- }
- }
- var forOrForInOrForOfStatement;
- if (parseOptional(90)) {
- var forInStatement = createNode(200, pos);
- forInStatement.initializer = initializer;
- forInStatement.expression = allowInAnd(parseExpression);
- parseExpected(18);
- forOrForInOrForOfStatement = forInStatement;
- }
- else if (parseOptional(134)) {
- var forOfStatement = createNode(201, pos);
- forOfStatement.initializer = initializer;
- forOfStatement.expression = allowInAnd(parseAssignmentExpressionOrHigher);
- parseExpected(18);
- forOrForInOrForOfStatement = forOfStatement;
- }
- else {
- var forStatement = createNode(199, pos);
- forStatement.initializer = initializer;
- parseExpected(23);
- if (token !== 23 && token !== 18) {
- forStatement.condition = allowInAnd(parseExpression);
- }
- parseExpected(23);
- if (token !== 18) {
- forStatement.incrementor = allowInAnd(parseExpression);
- }
- parseExpected(18);
- forOrForInOrForOfStatement = forStatement;
- }
- forOrForInOrForOfStatement.statement = parseStatement();
- return finishNode(forOrForInOrForOfStatement);
- }
- function parseBreakOrContinueStatement(kind) {
- var node = createNode(kind);
- parseExpected(kind === 203 ? 70 : 75);
- if (!canParseSemicolon()) {
- node.label = parseIdentifier();
- }
- parseSemicolon();
- return finishNode(node);
- }
- function parseReturnStatement() {
- var node = createNode(204);
- parseExpected(94);
- if (!canParseSemicolon()) {
- node.expression = allowInAnd(parseExpression);
- }
- parseSemicolon();
- return finishNode(node);
- }
- function parseWithStatement() {
- var node = createNode(205);
- parseExpected(105);
- parseExpected(17);
- node.expression = allowInAnd(parseExpression);
- parseExpected(18);
- node.statement = parseStatement();
- return finishNode(node);
- }
- function parseCaseClause() {
- var node = createNode(241);
- parseExpected(71);
- node.expression = allowInAnd(parseExpression);
- parseExpected(54);
- node.statements = parseList(3, parseStatement);
- return finishNode(node);
- }
- function parseDefaultClause() {
- var node = createNode(242);
- parseExpected(77);
- parseExpected(54);
- node.statements = parseList(3, parseStatement);
- return finishNode(node);
- }
- function parseCaseOrDefaultClause() {
- return token === 71 ? parseCaseClause() : parseDefaultClause();
- }
- function parseSwitchStatement() {
- var node = createNode(206);
- parseExpected(96);
- parseExpected(17);
- node.expression = allowInAnd(parseExpression);
- parseExpected(18);
- var caseBlock = createNode(220, scanner.getStartPos());
- parseExpected(15);
- caseBlock.clauses = parseList(2, parseCaseOrDefaultClause);
- parseExpected(16);
- node.caseBlock = finishNode(caseBlock);
- return finishNode(node);
- }
- function parseThrowStatement() {
- var node = createNode(208);
- parseExpected(98);
- node.expression = scanner.hasPrecedingLineBreak() ? undefined : allowInAnd(parseExpression);
- parseSemicolon();
- return finishNode(node);
- }
- function parseTryStatement() {
- var node = createNode(209);
- parseExpected(100);
- node.tryBlock = parseBlock(false);
- node.catchClause = token === 72 ? parseCatchClause() : undefined;
- if (!node.catchClause || token === 85) {
- parseExpected(85);
- node.finallyBlock = parseBlock(false);
- }
- return finishNode(node);
- }
- function parseCatchClause() {
- var result = createNode(244);
- parseExpected(72);
- if (parseExpected(17)) {
- result.variableDeclaration = parseVariableDeclaration();
- }
- parseExpected(18);
- result.block = parseBlock(false);
- return finishNode(result);
- }
- function parseDebuggerStatement() {
- var node = createNode(210);
- parseExpected(76);
- parseSemicolon();
- return finishNode(node);
- }
- function parseExpressionOrLabeledStatement() {
- var fullStart = scanner.getStartPos();
- var expression = allowInAnd(parseExpression);
- if (expression.kind === 69 && parseOptional(54)) {
- var labeledStatement = createNode(207, fullStart);
- labeledStatement.label = expression;
- labeledStatement.statement = parseStatement();
- return finishNode(labeledStatement);
- }
- else {
- var expressionStatement = createNode(195, fullStart);
- expressionStatement.expression = expression;
- parseSemicolon();
- return finishNode(expressionStatement);
- }
- }
- function nextTokenIsIdentifierOrKeywordOnSameLine() {
- nextToken();
- return ts.tokenIsIdentifierOrKeyword(token) && !scanner.hasPrecedingLineBreak();
- }
- function nextTokenIsFunctionKeywordOnSameLine() {
- nextToken();
- return token === 87 && !scanner.hasPrecedingLineBreak();
- }
- function nextTokenIsIdentifierOrKeywordOrNumberOnSameLine() {
- nextToken();
- return (ts.tokenIsIdentifierOrKeyword(token) || token === 8) && !scanner.hasPrecedingLineBreak();
- }
- function isDeclaration() {
- while (true) {
- switch (token) {
- case 102:
- case 108:
- case 74:
- case 87:
- case 73:
- case 81:
- return true;
- case 107:
- case 132:
- return nextTokenIsIdentifierOnSameLine();
- case 125:
- case 126:
- return nextTokenIsIdentifierOrStringLiteralOnSameLine();
- case 115:
- case 118:
- case 122:
- case 110:
- case 111:
- case 112:
- nextToken();
- if (scanner.hasPrecedingLineBreak()) {
- return false;
- }
- continue;
- case 89:
- nextToken();
- return token === 9 || token === 37 ||
- token === 15 || ts.tokenIsIdentifierOrKeyword(token);
- case 82:
- nextToken();
- if (token === 56 || token === 37 ||
- token === 15 || token === 77) {
- return true;
- }
- continue;
- case 113:
- nextToken();
- continue;
- default:
- return false;
- }
- }
- }
- function isStartOfDeclaration() {
- return lookAhead(isDeclaration);
- }
- function isStartOfStatement() {
- switch (token) {
- case 55:
- case 23:
- case 15:
- case 102:
- case 108:
- case 87:
- case 73:
- case 81:
- case 88:
- case 79:
- case 104:
- case 86:
- case 75:
- case 70:
- case 94:
- case 105:
- case 96:
- case 98:
- case 100:
- case 76:
- case 72:
- case 85:
- return true;
- case 74:
- case 82:
- case 89:
- return isStartOfDeclaration();
- case 118:
- case 122:
- case 107:
- case 125:
- case 126:
- case 132:
- return true;
- case 112:
- case 110:
- case 111:
- case 113:
- return isStartOfDeclaration() || !lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine);
- default:
- return isStartOfExpression();
- }
- }
- function nextTokenIsIdentifierOrStartOfDestructuring() {
- nextToken();
- return isIdentifier() || token === 15 || token === 19;
- }
- function isLetDeclaration() {
- return lookAhead(nextTokenIsIdentifierOrStartOfDestructuring);
- }
- function parseStatement() {
- switch (token) {
- case 23:
- return parseEmptyStatement();
- case 15:
- return parseBlock(false);
- case 102:
- return parseVariableStatement(scanner.getStartPos(), undefined, undefined);
- case 108:
- if (isLetDeclaration()) {
- return parseVariableStatement(scanner.getStartPos(), undefined, undefined);
- }
- break;
- case 87:
- return parseFunctionDeclaration(scanner.getStartPos(), undefined, undefined);
- case 73:
- return parseClassDeclaration(scanner.getStartPos(), undefined, undefined);
- case 88:
- return parseIfStatement();
- case 79:
- return parseDoStatement();
- case 104:
- return parseWhileStatement();
- case 86:
- return parseForOrForInOrForOfStatement();
- case 75:
- return parseBreakOrContinueStatement(202);
- case 70:
- return parseBreakOrContinueStatement(203);
- case 94:
- return parseReturnStatement();
- case 105:
- return parseWithStatement();
- case 96:
- return parseSwitchStatement();
- case 98:
- return parseThrowStatement();
- case 100:
- case 72:
- case 85:
- return parseTryStatement();
- case 76:
- return parseDebuggerStatement();
- case 55:
- return parseDeclaration();
- case 118:
- case 107:
- case 132:
- case 125:
- case 126:
- case 122:
- case 74:
- case 81:
- case 82:
- case 89:
- case 110:
- case 111:
- case 112:
- case 115:
- case 113:
- if (isStartOfDeclaration()) {
- return parseDeclaration();
- }
- break;
- }
- return parseExpressionOrLabeledStatement();
- }
- function parseDeclaration() {
- var fullStart = getNodePos();
- var decorators = parseDecorators();
- var modifiers = parseModifiers();
- switch (token) {
- case 102:
- case 108:
- case 74:
- return parseVariableStatement(fullStart, decorators, modifiers);
- case 87:
- return parseFunctionDeclaration(fullStart, decorators, modifiers);
- case 73:
- return parseClassDeclaration(fullStart, decorators, modifiers);
- case 107:
- return parseInterfaceDeclaration(fullStart, decorators, modifiers);
- case 132:
- return parseTypeAliasDeclaration(fullStart, decorators, modifiers);
- case 81:
- return parseEnumDeclaration(fullStart, decorators, modifiers);
- case 125:
- case 126:
- return parseModuleDeclaration(fullStart, decorators, modifiers);
- case 89:
- return parseImportDeclarationOrImportEqualsDeclaration(fullStart, decorators, modifiers);
- case 82:
- nextToken();
- return token === 77 || token === 56 ?
- parseExportAssignment(fullStart, decorators, modifiers) :
- parseExportDeclaration(fullStart, decorators, modifiers);
- default:
- if (decorators || modifiers) {
- var node = createMissingNode(231, true, ts.Diagnostics.Declaration_expected);
- node.pos = fullStart;
- node.decorators = decorators;
- setModifiers(node, modifiers);
- return finishNode(node);
- }
- }
- }
- function nextTokenIsIdentifierOrStringLiteralOnSameLine() {
- nextToken();
- return !scanner.hasPrecedingLineBreak() && (isIdentifier() || token === 9);
- }
- function parseFunctionBlockOrSemicolon(isGenerator, isAsync, diagnosticMessage) {
- if (token !== 15 && canParseSemicolon()) {
- parseSemicolon();
- return;
- }
- return parseFunctionBlock(isGenerator, isAsync, false, diagnosticMessage);
- }
- function parseArrayBindingElement() {
- if (token === 24) {
- return createNode(187);
- }
- var node = createNode(163);
- node.dotDotDotToken = parseOptionalToken(22);
- node.name = parseIdentifierOrPattern();
- node.initializer = parseBindingElementInitializer(false);
- return finishNode(node);
- }
- function parseObjectBindingElement() {
- var node = createNode(163);
- var tokenIsIdentifier = isIdentifier();
- var propertyName = parsePropertyName();
- if (tokenIsIdentifier && token !== 54) {
- node.name = propertyName;
- }
- else {
- parseExpected(54);
- node.propertyName = propertyName;
- node.name = parseIdentifierOrPattern();
- }
- node.initializer = parseBindingElementInitializer(false);
- return finishNode(node);
- }
- function parseObjectBindingPattern() {
- var node = createNode(161);
- parseExpected(15);
- node.elements = parseDelimitedList(9, parseObjectBindingElement);
- parseExpected(16);
- return finishNode(node);
- }
- function parseArrayBindingPattern() {
- var node = createNode(162);
- parseExpected(19);
- node.elements = parseDelimitedList(10, parseArrayBindingElement);
- parseExpected(20);
- return finishNode(node);
- }
- function isIdentifierOrPattern() {
- return token === 15 || token === 19 || isIdentifier();
- }
- function parseIdentifierOrPattern() {
- if (token === 19) {
- return parseArrayBindingPattern();
- }
- if (token === 15) {
- return parseObjectBindingPattern();
- }
- return parseIdentifier();
- }
- function parseVariableDeclaration() {
- var node = createNode(211);
- node.name = parseIdentifierOrPattern();
- node.type = parseTypeAnnotation();
- if (!isInOrOfKeyword(token)) {
- node.initializer = parseInitializer(false);
- }
- return finishNode(node);
- }
- function parseVariableDeclarationList(inForStatementInitializer) {
- var node = createNode(212);
- switch (token) {
- case 102:
- break;
- case 108:
- node.flags |= 16384;
- break;
- case 74:
- node.flags |= 32768;
- break;
- default:
- ts.Debug.fail();
- }
- nextToken();
- if (token === 134 && lookAhead(canFollowContextualOfKeyword)) {
- node.declarations = createMissingList();
- }
- else {
- var savedDisallowIn = inDisallowInContext();
- setDisallowInContext(inForStatementInitializer);
- node.declarations = parseDelimitedList(8, parseVariableDeclaration);
- setDisallowInContext(savedDisallowIn);
- }
- return finishNode(node);
- }
- function canFollowContextualOfKeyword() {
- return nextTokenIsIdentifier() && nextToken() === 18;
- }
- function parseVariableStatement(fullStart, decorators, modifiers) {
- var node = createNode(193, fullStart);
- node.decorators = decorators;
- setModifiers(node, modifiers);
- node.declarationList = parseVariableDeclarationList(false);
- parseSemicolon();
- return finishNode(node);
- }
- function parseFunctionDeclaration(fullStart, decorators, modifiers) {
- var node = createNode(213, fullStart);
- node.decorators = decorators;
- setModifiers(node, modifiers);
- parseExpected(87);
- node.asteriskToken = parseOptionalToken(37);
- node.name = node.flags & 1024 ? parseOptionalIdentifier() : parseIdentifier();
- var isGenerator = !!node.asteriskToken;
- var isAsync = !!(node.flags & 512);
- fillSignature(54, isGenerator, isAsync, false, node);
- node.body = parseFunctionBlockOrSemicolon(isGenerator, isAsync, ts.Diagnostics.or_expected);
- return finishNode(node);
- }
- function parseConstructorDeclaration(pos, decorators, modifiers) {
- var node = createNode(144, pos);
- node.decorators = decorators;
- setModifiers(node, modifiers);
- parseExpected(121);
- fillSignature(54, false, false, false, node);
- node.body = parseFunctionBlockOrSemicolon(false, false, ts.Diagnostics.or_expected);
- return finishNode(node);
- }
- function parseMethodDeclaration(fullStart, decorators, modifiers, asteriskToken, name, questionToken, diagnosticMessage) {
- var method = createNode(143, fullStart);
- method.decorators = decorators;
- setModifiers(method, modifiers);
- method.asteriskToken = asteriskToken;
- method.name = name;
- method.questionToken = questionToken;
- var isGenerator = !!asteriskToken;
- var isAsync = !!(method.flags & 512);
- fillSignature(54, isGenerator, isAsync, false, method);
- method.body = parseFunctionBlockOrSemicolon(isGenerator, isAsync, diagnosticMessage);
- return finishNode(method);
- }
- function parsePropertyDeclaration(fullStart, decorators, modifiers, name, questionToken) {
- var property = createNode(141, fullStart);
- property.decorators = decorators;
- setModifiers(property, modifiers);
- property.name = name;
- property.questionToken = questionToken;
- property.type = parseTypeAnnotation();
- property.initializer = modifiers && modifiers.flags & 128
- ? allowInAnd(parseNonParameterInitializer)
- : doOutsideOfContext(2 | 1, parseNonParameterInitializer);
- parseSemicolon();
- return finishNode(property);
- }
- function parsePropertyOrMethodDeclaration(fullStart, decorators, modifiers) {
- var asteriskToken = parseOptionalToken(37);
- var name = parsePropertyName();
- var questionToken = parseOptionalToken(53);
- if (asteriskToken || token === 17 || token === 25) {
- return parseMethodDeclaration(fullStart, decorators, modifiers, asteriskToken, name, questionToken, ts.Diagnostics.or_expected);
- }
- else {
- return parsePropertyDeclaration(fullStart, decorators, modifiers, name, questionToken);
- }
- }
- function parseNonParameterInitializer() {
- return parseInitializer(false);
- }
- function parseAccessorDeclaration(kind, fullStart, decorators, modifiers) {
- var node = createNode(kind, fullStart);
- node.decorators = decorators;
- setModifiers(node, modifiers);
- node.name = parsePropertyName();
- fillSignature(54, false, false, false, node);
- node.body = parseFunctionBlockOrSemicolon(false, false);
- return finishNode(node);
- }
- function isClassMemberModifier(idToken) {
- switch (idToken) {
- case 112:
- case 110:
- case 111:
- case 113:
- return true;
- default:
- return false;
- }
- }
- function isClassMemberStart() {
- var idToken;
- if (token === 55) {
- return true;
- }
- while (ts.isModifier(token)) {
- idToken = token;
- if (isClassMemberModifier(idToken)) {
- return true;
- }
- nextToken();
- }
- if (token === 37) {
- return true;
- }
- if (isLiteralPropertyName()) {
- idToken = token;
- nextToken();
- }
- if (token === 19) {
- return true;
- }
- if (idToken !== undefined) {
- if (!ts.isKeyword(idToken) || idToken === 129 || idToken === 123) {
- return true;
- }
- switch (token) {
- case 17:
- case 25:
- case 54:
- case 56:
- case 53:
- return true;
- default:
- return canParseSemicolon();
- }
- }
- return false;
- }
- function parseDecorators() {
- var decorators;
- while (true) {
- var decoratorStart = getNodePos();
- if (!parseOptional(55)) {
- break;
- }
- if (!decorators) {
- decorators = [];
- decorators.pos = scanner.getStartPos();
- }
- var decorator = createNode(139, decoratorStart);
- decorator.expression = doInDecoratorContext(parseLeftHandSideExpressionOrHigher);
- decorators.push(finishNode(decorator));
- }
- if (decorators) {
- decorators.end = getNodeEnd();
- }
- return decorators;
- }
- function parseModifiers() {
- var flags = 0;
- var modifiers;
- while (true) {
- var modifierStart = scanner.getStartPos();
- var modifierKind = token;
- if (!parseAnyContextualModifier()) {
- break;
- }
- if (!modifiers) {
- modifiers = [];
- modifiers.pos = modifierStart;
- }
- flags |= ts.modifierToFlag(modifierKind);
- modifiers.push(finishNode(createNode(modifierKind, modifierStart)));
- }
- if (modifiers) {
- modifiers.flags = flags;
- modifiers.end = scanner.getStartPos();
- }
- return modifiers;
- }
- function parseModifiersForArrowFunction() {
- var flags = 0;
- var modifiers;
- if (token === 118) {
- var modifierStart = scanner.getStartPos();
- var modifierKind = token;
- nextToken();
- modifiers = [];
- modifiers.pos = modifierStart;
- flags |= ts.modifierToFlag(modifierKind);
- modifiers.push(finishNode(createNode(modifierKind, modifierStart)));
- modifiers.flags = flags;
- modifiers.end = scanner.getStartPos();
- }
- return modifiers;
- }
- function parseClassElement() {
- if (token === 23) {
- var result = createNode(191);
- nextToken();
- return finishNode(result);
- }
- var fullStart = getNodePos();
- var decorators = parseDecorators();
- var modifiers = parseModifiers();
- var accessor = tryParseAccessorDeclaration(fullStart, decorators, modifiers);
- if (accessor) {
- return accessor;
- }
- if (token === 121) {
- return parseConstructorDeclaration(fullStart, decorators, modifiers);
- }
- if (isIndexSignature()) {
- return parseIndexSignatureDeclaration(fullStart, decorators, modifiers);
- }
- if (ts.tokenIsIdentifierOrKeyword(token) ||
- token === 9 ||
- token === 8 ||
- token === 37 ||
- token === 19) {
- return parsePropertyOrMethodDeclaration(fullStart, decorators, modifiers);
- }
- if (decorators || modifiers) {
- var name_7 = createMissingNode(69, true, ts.Diagnostics.Declaration_expected);
- return parsePropertyDeclaration(fullStart, decorators, modifiers, name_7, undefined);
- }
- ts.Debug.fail("Should not have attempted to parse class member declaration.");
- }
- function parseClassExpression() {
- return parseClassDeclarationOrExpression(scanner.getStartPos(), undefined, undefined, 186);
- }
- function parseClassDeclaration(fullStart, decorators, modifiers) {
- return parseClassDeclarationOrExpression(fullStart, decorators, modifiers, 214);
- }
- function parseClassDeclarationOrExpression(fullStart, decorators, modifiers, kind) {
- var node = createNode(kind, fullStart);
- node.decorators = decorators;
- setModifiers(node, modifiers);
- parseExpected(73);
- node.name = parseNameOfClassDeclarationOrExpression();
- node.typeParameters = parseTypeParameters();
- node.heritageClauses = parseHeritageClauses(true);
- if (parseExpected(15)) {
- node.members = parseClassMembers();
- parseExpected(16);
- }
- else {
- node.members = createMissingList();
- }
- return finishNode(node);
- }
- function parseNameOfClassDeclarationOrExpression() {
- return isIdentifier() && !isImplementsClause()
- ? parseIdentifier()
- : undefined;
- }
- function isImplementsClause() {
- return token === 106 && lookAhead(nextTokenIsIdentifierOrKeyword);
- }
- function parseHeritageClauses(isClassHeritageClause) {
- if (isHeritageClause()) {
- return parseList(20, parseHeritageClause);
- }
- return undefined;
- }
- function parseHeritageClausesWorker() {
- return parseList(20, parseHeritageClause);
- }
- function parseHeritageClause() {
- if (token === 83 || token === 106) {
- var node = createNode(243);
- node.token = token;
- nextToken();
- node.types = parseDelimitedList(7, parseExpressionWithTypeArguments);
- return finishNode(node);
- }
- return undefined;
- }
- function parseExpressionWithTypeArguments() {
- var node = createNode(188);
- node.expression = parseLeftHandSideExpressionOrHigher();
- if (token === 25) {
- node.typeArguments = parseBracketedList(18, parseType, 25, 27);
- }
- return finishNode(node);
- }
- function isHeritageClause() {
- return token === 83 || token === 106;
- }
- function parseClassMembers() {
- return parseList(5, parseClassElement);
- }
- function parseInterfaceDeclaration(fullStart, decorators, modifiers) {
- var node = createNode(215, fullStart);
- node.decorators = decorators;
- setModifiers(node, modifiers);
- parseExpected(107);
- node.name = parseIdentifier();
- node.typeParameters = parseTypeParameters();
- node.heritageClauses = parseHeritageClauses(false);
- node.members = parseObjectTypeMembers();
- return finishNode(node);
- }
- function parseTypeAliasDeclaration(fullStart, decorators, modifiers) {
- var node = createNode(216, fullStart);
- node.decorators = decorators;
- setModifiers(node, modifiers);
- parseExpected(132);
- node.name = parseIdentifier();
- node.typeParameters = parseTypeParameters();
- parseExpected(56);
- node.type = parseType();
- parseSemicolon();
- return finishNode(node);
- }
- function parseEnumMember() {
- var node = createNode(247, scanner.getStartPos());
- node.name = parsePropertyName();
- node.initializer = allowInAnd(parseNonParameterInitializer);
- return finishNode(node);
- }
- function parseEnumDeclaration(fullStart, decorators, modifiers) {
- var node = createNode(217, fullStart);
- node.decorators = decorators;
- setModifiers(node, modifiers);
- parseExpected(81);
- node.name = parseIdentifier();
- if (parseExpected(15)) {
- node.members = parseDelimitedList(6, parseEnumMember);
- parseExpected(16);
- }
- else {
- node.members = createMissingList();
- }
- return finishNode(node);
- }
- function parseModuleBlock() {
- var node = createNode(219, scanner.getStartPos());
- if (parseExpected(15)) {
- node.statements = parseList(1, parseStatement);
- parseExpected(16);
- }
- else {
- node.statements = createMissingList();
- }
- return finishNode(node);
- }
- function parseModuleOrNamespaceDeclaration(fullStart, decorators, modifiers, flags) {
- var node = createNode(218, fullStart);
- var namespaceFlag = flags & 131072;
- node.decorators = decorators;
- setModifiers(node, modifiers);
- node.flags |= flags;
- node.name = parseIdentifier();
- node.body = parseOptional(21)
- ? parseModuleOrNamespaceDeclaration(getNodePos(), undefined, undefined, 1 | namespaceFlag)
- : parseModuleBlock();
- return finishNode(node);
- }
- function parseAmbientExternalModuleDeclaration(fullStart, decorators, modifiers) {
- var node = createNode(218, fullStart);
- node.decorators = decorators;
- setModifiers(node, modifiers);
- node.name = parseLiteralNode(true);
- node.body = parseModuleBlock();
- return finishNode(node);
- }
- function parseModuleDeclaration(fullStart, decorators, modifiers) {
- var flags = modifiers ? modifiers.flags : 0;
- if (parseOptional(126)) {
- flags |= 131072;
- }
- else {
- parseExpected(125);
- if (token === 9) {
- return parseAmbientExternalModuleDeclaration(fullStart, decorators, modifiers);
- }
- }
- return parseModuleOrNamespaceDeclaration(fullStart, decorators, modifiers, flags);
- }
- function isExternalModuleReference() {
- return token === 127 &&
- lookAhead(nextTokenIsOpenParen);
- }
- function nextTokenIsOpenParen() {
- return nextToken() === 17;
- }
- function nextTokenIsSlash() {
- return nextToken() === 39;
- }
- function nextTokenIsCommaOrFromKeyword() {
- nextToken();
- return token === 24 ||
- token === 133;
- }
- function parseImportDeclarationOrImportEqualsDeclaration(fullStart, decorators, modifiers) {
- parseExpected(89);
- var afterImportPos = scanner.getStartPos();
- var identifier;
- if (isIdentifier()) {
- identifier = parseIdentifier();
- if (token !== 24 && token !== 133) {
- var importEqualsDeclaration = createNode(221, fullStart);
- importEqualsDeclaration.decorators = decorators;
- setModifiers(importEqualsDeclaration, modifiers);
- importEqualsDeclaration.name = identifier;
- parseExpected(56);
- importEqualsDeclaration.moduleReference = parseModuleReference();
- parseSemicolon();
- return finishNode(importEqualsDeclaration);
- }
- }
- var importDeclaration = createNode(222, fullStart);
- importDeclaration.decorators = decorators;
- setModifiers(importDeclaration, modifiers);
- if (identifier ||
- token === 37 ||
- token === 15) {
- importDeclaration.importClause = parseImportClause(identifier, afterImportPos);
- parseExpected(133);
- }
- importDeclaration.moduleSpecifier = parseModuleSpecifier();
- parseSemicolon();
- return finishNode(importDeclaration);
- }
- function parseImportClause(identifier, fullStart) {
- var importClause = createNode(223, fullStart);
- if (identifier) {
- importClause.name = identifier;
- }
- if (!importClause.name ||
- parseOptional(24)) {
- importClause.namedBindings = token === 37 ? parseNamespaceImport() : parseNamedImportsOrExports(225);
- }
- return finishNode(importClause);
- }
- function parseModuleReference() {
- return isExternalModuleReference()
- ? parseExternalModuleReference()
- : parseEntityName(false);
- }
- function parseExternalModuleReference() {
- var node = createNode(232);
- parseExpected(127);
- parseExpected(17);
- node.expression = parseModuleSpecifier();
- parseExpected(18);
- return finishNode(node);
- }
- function parseModuleSpecifier() {
- var result = parseExpression();
- if (result.kind === 9) {
- internIdentifier(result.text);
- }
- return result;
- }
- function parseNamespaceImport() {
- var namespaceImport = createNode(224);
- parseExpected(37);
- parseExpected(116);
- namespaceImport.name = parseIdentifier();
- return finishNode(namespaceImport);
- }
- function parseNamedImportsOrExports(kind) {
- var node = createNode(kind);
- node.elements = parseBracketedList(21, kind === 225 ? parseImportSpecifier : parseExportSpecifier, 15, 16);
- return finishNode(node);
- }
- function parseExportSpecifier() {
- return parseImportOrExportSpecifier(230);
- }
- function parseImportSpecifier() {
- return parseImportOrExportSpecifier(226);
- }
- function parseImportOrExportSpecifier(kind) {
- var node = createNode(kind);
- var checkIdentifierIsKeyword = ts.isKeyword(token) && !isIdentifier();
- var checkIdentifierStart = scanner.getTokenPos();
- var checkIdentifierEnd = scanner.getTextPos();
- var identifierName = parseIdentifierName();
- if (token === 116) {
- node.propertyName = identifierName;
- parseExpected(116);
- checkIdentifierIsKeyword = ts.isKeyword(token) && !isIdentifier();
- checkIdentifierStart = scanner.getTokenPos();
- checkIdentifierEnd = scanner.getTextPos();
- node.name = parseIdentifierName();
- }
- else {
- node.name = identifierName;
- }
- if (kind === 226 && checkIdentifierIsKeyword) {
- parseErrorAtPosition(checkIdentifierStart, checkIdentifierEnd - checkIdentifierStart, ts.Diagnostics.Identifier_expected);
- }
- return finishNode(node);
- }
- function parseExportDeclaration(fullStart, decorators, modifiers) {
- var node = createNode(228, fullStart);
- node.decorators = decorators;
- setModifiers(node, modifiers);
- if (parseOptional(37)) {
- parseExpected(133);
- node.moduleSpecifier = parseModuleSpecifier();
- }
- else {
- node.exportClause = parseNamedImportsOrExports(229);
- if (token === 133 || (token === 9 && !scanner.hasPrecedingLineBreak())) {
- parseExpected(133);
- node.moduleSpecifier = parseModuleSpecifier();
- }
- }
- parseSemicolon();
- return finishNode(node);
- }
- function parseExportAssignment(fullStart, decorators, modifiers) {
- var node = createNode(227, fullStart);
- node.decorators = decorators;
- setModifiers(node, modifiers);
- if (parseOptional(56)) {
- node.isExportEquals = true;
- }
- else {
- parseExpected(77);
- }
- node.expression = parseAssignmentExpressionOrHigher();
- parseSemicolon();
- return finishNode(node);
- }
- function processReferenceComments(sourceFile) {
- var triviaScanner = ts.createScanner(sourceFile.languageVersion, false, 0, sourceText);
- var referencedFiles = [];
- var amdDependencies = [];
- var amdModuleName;
- while (true) {
- var kind = triviaScanner.scan();
- if (kind === 5 || kind === 4 || kind === 3) {
- continue;
- }
- if (kind !== 2) {
- break;
- }
- var range = { pos: triviaScanner.getTokenPos(), end: triviaScanner.getTextPos(), kind: triviaScanner.getToken() };
- var comment = sourceText.substring(range.pos, range.end);
- var referencePathMatchResult = ts.getFileReferenceFromReferencePath(comment, range);
- if (referencePathMatchResult) {
- var fileReference = referencePathMatchResult.fileReference;
- sourceFile.hasNoDefaultLib = referencePathMatchResult.isNoDefaultLib;
- var diagnosticMessage = referencePathMatchResult.diagnosticMessage;
- if (fileReference) {
- referencedFiles.push(fileReference);
- }
- if (diagnosticMessage) {
- parseDiagnostics.push(ts.createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, diagnosticMessage));
- }
- }
- else {
- var amdModuleNameRegEx = /^\/\/\/\s*<amd-module\s+name\s*=\s*('|")(.+?)\1/gim;
- var amdModuleNameMatchResult = amdModuleNameRegEx.exec(comment);
- if (amdModuleNameMatchResult) {
- if (amdModuleName) {
- parseDiagnostics.push(ts.createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, ts.Diagnostics.An_AMD_module_cannot_have_multiple_name_assignments));
- }
- amdModuleName = amdModuleNameMatchResult[2];
- }
- var amdDependencyRegEx = /^\/\/\/\s*<amd-dependency\s/gim;
- var pathRegex = /\spath\s*=\s*('|")(.+?)\1/gim;
- var nameRegex = /\sname\s*=\s*('|")(.+?)\1/gim;
- var amdDependencyMatchResult = amdDependencyRegEx.exec(comment);
- if (amdDependencyMatchResult) {
- var pathMatchResult = pathRegex.exec(comment);
- var nameMatchResult = nameRegex.exec(comment);
- if (pathMatchResult) {
- var amdDependency = { path: pathMatchResult[2], name: nameMatchResult ? nameMatchResult[2] : undefined };
- amdDependencies.push(amdDependency);
- }
- }
- }
- }
- sourceFile.referencedFiles = referencedFiles;
- sourceFile.amdDependencies = amdDependencies;
- sourceFile.moduleName = amdModuleName;
- }
- function setExternalModuleIndicator(sourceFile) {
- sourceFile.externalModuleIndicator = ts.forEach(sourceFile.statements, function (node) {
- return node.flags & 1
- || node.kind === 221 && node.moduleReference.kind === 232
- || node.kind === 222
- || node.kind === 227
- || node.kind === 228
- ? node
- : undefined;
- });
- }
- var JSDocParser;
- (function (JSDocParser) {
- function isJSDocType() {
- switch (token) {
- case 37:
- case 53:
- case 17:
- case 19:
- case 49:
- case 15:
- case 87:
- case 22:
- case 92:
- case 97:
- return true;
- }
- return ts.tokenIsIdentifierOrKeyword(token);
- }
- JSDocParser.isJSDocType = isJSDocType;
- function parseJSDocTypeExpressionForTests(content, start, length) {
- initializeState("file.js", content, 2, undefined);
- var jsDocTypeExpression = parseJSDocTypeExpression(start, length);
- var diagnostics = parseDiagnostics;
- clearState();
- return jsDocTypeExpression ? { jsDocTypeExpression: jsDocTypeExpression, diagnostics: diagnostics } : undefined;
- }
- JSDocParser.parseJSDocTypeExpressionForTests = parseJSDocTypeExpressionForTests;
- function parseJSDocTypeExpression(start, length) {
- scanner.setText(sourceText, start, length);
- token = nextToken();
- var result = createNode(249);
- parseExpected(15);
- result.type = parseJSDocTopLevelType();
- parseExpected(16);
- fixupParentReferences(result);
- return finishNode(result);
- }
- JSDocParser.parseJSDocTypeExpression = parseJSDocTypeExpression;
- function parseJSDocTopLevelType() {
- var type = parseJSDocType();
- if (token === 47) {
- var unionType = createNode(253, type.pos);
- unionType.types = parseJSDocTypeList(type);
- type = finishNode(unionType);
- }
- if (token === 56) {
- var optionalType = createNode(260, type.pos);
- nextToken();
- optionalType.type = type;
- type = finishNode(optionalType);
- }
- return type;
- }
- function parseJSDocType() {
- var type = parseBasicTypeExpression();
- while (true) {
- if (token === 19) {
- var arrayType = createNode(252, type.pos);
- arrayType.elementType = type;
- nextToken();
- parseExpected(20);
- type = finishNode(arrayType);
- }
- else if (token === 53) {
- var nullableType = createNode(255, type.pos);
- nullableType.type = type;
- nextToken();
- type = finishNode(nullableType);
- }
- else if (token === 49) {
- var nonNullableType = createNode(256, type.pos);
- nonNullableType.type = type;
- nextToken();
- type = finishNode(nonNullableType);
- }
- else {
- break;
- }
- }
- return type;
- }
- function parseBasicTypeExpression() {
- switch (token) {
- case 37:
- return parseJSDocAllType();
- case 53:
- return parseJSDocUnknownOrNullableType();
- case 17:
- return parseJSDocUnionType();
- case 19:
- return parseJSDocTupleType();
- case 49:
- return parseJSDocNonNullableType();
- case 15:
- return parseJSDocRecordType();
- case 87:
- return parseJSDocFunctionType();
- case 22:
- return parseJSDocVariadicType();
- case 92:
- return parseJSDocConstructorType();
- case 97:
- return parseJSDocThisType();
- case 117:
- case 130:
- case 128:
- case 120:
- case 131:
- case 103:
- return parseTokenNode();
- }
- return parseJSDocTypeReference();
- }
- function parseJSDocThisType() {
- var result = createNode(264);
- nextToken();
- parseExpected(54);
- result.type = parseJSDocType();
- return finishNode(result);
- }
- function parseJSDocConstructorType() {
- var result = createNode(263);
- nextToken();
- parseExpected(54);
- result.type = parseJSDocType();
- return finishNode(result);
- }
- function parseJSDocVariadicType() {
- var result = createNode(262);
- nextToken();
- result.type = parseJSDocType();
- return finishNode(result);
- }
- function parseJSDocFunctionType() {
- var result = createNode(261);
- nextToken();
- parseExpected(17);
- result.parameters = parseDelimitedList(22, parseJSDocParameter);
- checkForTrailingComma(result.parameters);
- parseExpected(18);
- if (token === 54) {
- nextToken();
- result.type = parseJSDocType();
- }
- return finishNode(result);
- }
- function parseJSDocParameter() {
- var parameter = createNode(138);
- parameter.type = parseJSDocType();
- return finishNode(parameter);
- }
- function parseJSDocOptionalType(type) {
- var result = createNode(260, type.pos);
- nextToken();
- result.type = type;
- return finishNode(result);
- }
- function parseJSDocTypeReference() {
- var result = createNode(259);
- result.name = parseSimplePropertyName();
- while (parseOptional(21)) {
- if (token === 25) {
- result.typeArguments = parseTypeArguments();
- break;
- }
- else {
- result.name = parseQualifiedName(result.name);
- }
- }
- return finishNode(result);
- }
- function parseTypeArguments() {
- nextToken();
- var typeArguments = parseDelimitedList(23, parseJSDocType);
- checkForTrailingComma(typeArguments);
- checkForEmptyTypeArgumentList(typeArguments);
- parseExpected(27);
- return typeArguments;
- }
- function checkForEmptyTypeArgumentList(typeArguments) {
- if (parseDiagnostics.length === 0 && typeArguments && typeArguments.length === 0) {
- var start = typeArguments.pos - "<".length;
- var end = ts.skipTrivia(sourceText, typeArguments.end) + ">".length;
- return parseErrorAtPosition(start, end - start, ts.Diagnostics.Type_argument_list_cannot_be_empty);
- }
- }
- function parseQualifiedName(left) {
- var result = createNode(135, left.pos);
- result.left = left;
- result.right = parseIdentifierName();
- return finishNode(result);
- }
- function parseJSDocRecordType() {
- var result = createNode(257);
- nextToken();
- result.members = parseDelimitedList(24, parseJSDocRecordMember);
- checkForTrailingComma(result.members);
- parseExpected(16);
- return finishNode(result);
- }
- function parseJSDocRecordMember() {
- var result = createNode(258);
- result.name = parseSimplePropertyName();
- if (token === 54) {
- nextToken();
- result.type = parseJSDocType();
- }
- return finishNode(result);
- }
- function parseJSDocNonNullableType() {
- var result = createNode(256);
- nextToken();
- result.type = parseJSDocType();
- return finishNode(result);
- }
- function parseJSDocTupleType() {
- var result = createNode(254);
- nextToken();
- result.types = parseDelimitedList(25, parseJSDocType);
- checkForTrailingComma(result.types);
- parseExpected(20);
- return finishNode(result);
- }
- function checkForTrailingComma(list) {
- if (parseDiagnostics.length === 0 && list.hasTrailingComma) {
- var start = list.end - ",".length;
- parseErrorAtPosition(start, ",".length, ts.Diagnostics.Trailing_comma_not_allowed);
- }
- }
- function parseJSDocUnionType() {
- var result = createNode(253);
- nextToken();
- result.types = parseJSDocTypeList(parseJSDocType());
- parseExpected(18);
- return finishNode(result);
- }
- function parseJSDocTypeList(firstType) {
- ts.Debug.assert(!!firstType);
- var types = [];
- types.pos = firstType.pos;
- types.push(firstType);
- while (parseOptional(47)) {
- types.push(parseJSDocType());
- }
- types.end = scanner.getStartPos();
- return types;
- }
- function parseJSDocAllType() {
- var result = createNode(250);
- nextToken();
- return finishNode(result);
- }
- function parseJSDocUnknownOrNullableType() {
- var pos = scanner.getStartPos();
- nextToken();
- if (token === 24 ||
- token === 16 ||
- token === 18 ||
- token === 27 ||
- token === 56 ||
- token === 47) {
- var result = createNode(251, pos);
- return finishNode(result);
- }
- else {
- var result = createNode(255, pos);
- result.type = parseJSDocType();
- return finishNode(result);
- }
- }
- function parseIsolatedJSDocComment(content, start, length) {
- initializeState("file.js", content, 2, undefined);
- var jsDocComment = parseJSDocComment(undefined, start, length);
- var diagnostics = parseDiagnostics;
- clearState();
- return jsDocComment ? { jsDocComment: jsDocComment, diagnostics: diagnostics } : undefined;
- }
- JSDocParser.parseIsolatedJSDocComment = parseIsolatedJSDocComment;
- function parseJSDocComment(parent, start, length) {
- var comment = parseJSDocCommentWorker(start, length);
- if (comment) {
- fixupParentReferences(comment);
- comment.parent = parent;
- }
- return comment;
- }
- JSDocParser.parseJSDocComment = parseJSDocComment;
- function parseJSDocCommentWorker(start, length) {
- var content = sourceText;
- start = start || 0;
- var end = length === undefined ? content.length : start + length;
- length = end - start;
- ts.Debug.assert(start >= 0);
- ts.Debug.assert(start <= end);
- ts.Debug.assert(end <= content.length);
- var tags;
- var pos;
- if (length >= "/** */".length) {
- if (content.charCodeAt(start) === 47 &&
- content.charCodeAt(start + 1) === 42 &&
- content.charCodeAt(start + 2) === 42 &&
- content.charCodeAt(start + 3) !== 42) {
- var canParseTag = true;
- var seenAsterisk = true;
- for (pos = start + "/**".length; pos < end;) {
- var ch = content.charCodeAt(pos);
- pos++;
- if (ch === 64 && canParseTag) {
- parseTag();
- canParseTag = false;
- continue;
- }
- if (ts.isLineBreak(ch)) {
- canParseTag = true;
- seenAsterisk = false;
- continue;
- }
- if (ts.isWhiteSpace(ch)) {
- continue;
- }
- if (ch === 42) {
- if (seenAsterisk) {
- canParseTag = false;
- }
- seenAsterisk = true;
- continue;
- }
- canParseTag = false;
- }
- }
- }
- return createJSDocComment();
- function createJSDocComment() {
- if (!tags) {
- return undefined;
- }
- var result = createNode(265, start);
- result.tags = tags;
- return finishNode(result, end);
- }
- function skipWhitespace() {
- while (pos < end && ts.isWhiteSpace(content.charCodeAt(pos))) {
- pos++;
- }
- }
- function parseTag() {
- ts.Debug.assert(content.charCodeAt(pos - 1) === 64);
- var atToken = createNode(55, pos - 1);
- atToken.end = pos;
- var tagName = scanIdentifier();
- if (!tagName) {
- return;
- }
- var tag = handleTag(atToken, tagName) || handleUnknownTag(atToken, tagName);
- addTag(tag);
- }
- function handleTag(atToken, tagName) {
- if (tagName) {
- switch (tagName.text) {
- case "param":
- return handleParamTag(atToken, tagName);
- case "return":
- case "returns":
- return handleReturnTag(atToken, tagName);
- case "template":
- return handleTemplateTag(atToken, tagName);
- case "type":
- return handleTypeTag(atToken, tagName);
- }
- }
- return undefined;
- }
- function handleUnknownTag(atToken, tagName) {
- var result = createNode(266, atToken.pos);
- result.atToken = atToken;
- result.tagName = tagName;
- return finishNode(result, pos);
- }
- function addTag(tag) {
- if (tag) {
- if (!tags) {
- tags = [];
- tags.pos = tag.pos;
- }
- tags.push(tag);
- tags.end = tag.end;
- }
- }
- function tryParseTypeExpression() {
- skipWhitespace();
- if (content.charCodeAt(pos) !== 123) {
- return undefined;
- }
- var typeExpression = parseJSDocTypeExpression(pos, end - pos);
- pos = typeExpression.end;
- return typeExpression;
- }
- function handleParamTag(atToken, tagName) {
- var typeExpression = tryParseTypeExpression();
- skipWhitespace();
- var name;
- var isBracketed;
- if (content.charCodeAt(pos) === 91) {
- pos++;
- skipWhitespace();
- name = scanIdentifier();
- isBracketed = true;
- }
- else {
- name = scanIdentifier();
- }
- if (!name) {
- parseErrorAtPosition(pos, 0, ts.Diagnostics.Identifier_expected);
- }
- var preName, postName;
- if (typeExpression) {
- postName = name;
- }
- else {
- preName = name;
- }
- if (!typeExpression) {
- typeExpression = tryParseTypeExpression();
- }
- var result = createNode(267, atToken.pos);
- result.atToken = atToken;
- result.tagName = tagName;
- result.preParameterName = preName;
- result.typeExpression = typeExpression;
- result.postParameterName = postName;
- result.isBracketed = isBracketed;
- return finishNode(result, pos);
- }
- function handleReturnTag(atToken, tagName) {
- if (ts.forEach(tags, function (t) { return t.kind === 268; })) {
- parseErrorAtPosition(tagName.pos, pos - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.text);
- }
- var result = createNode(268, atToken.pos);
- result.atToken = atToken;
- result.tagName = tagName;
- result.typeExpression = tryParseTypeExpression();
- return finishNode(result, pos);
- }
- function handleTypeTag(atToken, tagName) {
- if (ts.forEach(tags, function (t) { return t.kind === 269; })) {
- parseErrorAtPosition(tagName.pos, pos - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.text);
- }
- var result = createNode(269, atToken.pos);
- result.atToken = atToken;
- result.tagName = tagName;
- result.typeExpression = tryParseTypeExpression();
- return finishNode(result, pos);
- }
- function handleTemplateTag(atToken, tagName) {
- if (ts.forEach(tags, function (t) { return t.kind === 270; })) {
- parseErrorAtPosition(tagName.pos, pos - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.text);
- }
- var typeParameters = [];
- typeParameters.pos = pos;
- while (true) {
- skipWhitespace();
- var startPos = pos;
- var name_8 = scanIdentifier();
- if (!name_8) {
- parseErrorAtPosition(startPos, 0, ts.Diagnostics.Identifier_expected);
- return undefined;
- }
- var typeParameter = createNode(137, name_8.pos);
- typeParameter.name = name_8;
- finishNode(typeParameter, pos);
- typeParameters.push(typeParameter);
- skipWhitespace();
- if (content.charCodeAt(pos) !== 44) {
- break;
- }
- pos++;
- }
- typeParameters.end = pos;
- var result = createNode(270, atToken.pos);
- result.atToken = atToken;
- result.tagName = tagName;
- result.typeParameters = typeParameters;
- return finishNode(result, pos);
- }
- function scanIdentifier() {
- var startPos = pos;
- for (; pos < end; pos++) {
- var ch = content.charCodeAt(pos);
- if (pos === startPos && ts.isIdentifierStart(ch, 2)) {
- continue;
- }
- else if (pos > startPos && ts.isIdentifierPart(ch, 2)) {
- continue;
- }
- break;
- }
- if (startPos === pos) {
- return undefined;
- }
- var result = createNode(69, startPos);
- result.text = content.substring(startPos, pos);
- return finishNode(result, pos);
- }
- }
- JSDocParser.parseJSDocCommentWorker = parseJSDocCommentWorker;
- })(JSDocParser = Parser.JSDocParser || (Parser.JSDocParser = {}));
- })(Parser || (Parser = {}));
- var IncrementalParser;
- (function (IncrementalParser) {
- function updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks) {
- aggressiveChecks = aggressiveChecks || ts.Debug.shouldAssert(2);
- checkChangeRange(sourceFile, newText, textChangeRange, aggressiveChecks);
- if (ts.textChangeRangeIsUnchanged(textChangeRange)) {
- return sourceFile;
- }
- if (sourceFile.statements.length === 0) {
- return Parser.parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, undefined, true);
- }
- var incrementalSourceFile = sourceFile;
- ts.Debug.assert(!incrementalSourceFile.hasBeenIncrementallyParsed);
- incrementalSourceFile.hasBeenIncrementallyParsed = true;
- var oldText = sourceFile.text;
- var syntaxCursor = createSyntaxCursor(sourceFile);
- var changeRange = extendToAffectedRange(sourceFile, textChangeRange);
- checkChangeRange(sourceFile, newText, changeRange, aggressiveChecks);
- ts.Debug.assert(changeRange.span.start <= textChangeRange.span.start);
- ts.Debug.assert(ts.textSpanEnd(changeRange.span) === ts.textSpanEnd(textChangeRange.span));
- ts.Debug.assert(ts.textSpanEnd(ts.textChangeRangeNewSpan(changeRange)) === ts.textSpanEnd(ts.textChangeRangeNewSpan(textChangeRange)));
- var delta = ts.textChangeRangeNewSpan(changeRange).length - changeRange.span.length;
- updateTokenPositionsAndMarkElements(incrementalSourceFile, changeRange.span.start, ts.textSpanEnd(changeRange.span), ts.textSpanEnd(ts.textChangeRangeNewSpan(changeRange)), delta, oldText, newText, aggressiveChecks);
- var result = Parser.parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, syntaxCursor, true);
- return result;
- }
- IncrementalParser.updateSourceFile = updateSourceFile;
- function moveElementEntirelyPastChangeRange(element, isArray, delta, oldText, newText, aggressiveChecks) {
- if (isArray) {
- visitArray(element);
- }
- else {
- visitNode(element);
- }
- return;
- function visitNode(node) {
- var text = "";
- if (aggressiveChecks && shouldCheckNode(node)) {
- text = oldText.substring(node.pos, node.end);
- }
- if (node._children) {
- node._children = undefined;
- }
- if (node.jsDocComment) {
- node.jsDocComment = undefined;
- }
- node.pos += delta;
- node.end += delta;
- if (aggressiveChecks && shouldCheckNode(node)) {
- ts.Debug.assert(text === newText.substring(node.pos, node.end));
- }
- forEachChild(node, visitNode, visitArray);
- checkNodePositions(node, aggressiveChecks);
- }
- function visitArray(array) {
- array._children = undefined;
- array.pos += delta;
- array.end += delta;
- for (var _i = 0; _i < array.length; _i++) {
- var node = array[_i];
- visitNode(node);
- }
- }
- }
- function shouldCheckNode(node) {
- switch (node.kind) {
- case 9:
- case 8:
- case 69:
- return true;
- }
- return false;
- }
- function adjustIntersectingElement(element, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta) {
- ts.Debug.assert(element.end >= changeStart, "Adjusting an element that was entirely before the change range");
- ts.Debug.assert(element.pos <= changeRangeOldEnd, "Adjusting an element that was entirely after the change range");
- ts.Debug.assert(element.pos <= element.end);
- element.pos = Math.min(element.pos, changeRangeNewEnd);
- if (element.end >= changeRangeOldEnd) {
- element.end += delta;
- }
- else {
- element.end = Math.min(element.end, changeRangeNewEnd);
- }
- ts.Debug.assert(element.pos <= element.end);
- if (element.parent) {
- ts.Debug.assert(element.pos >= element.parent.pos);
- ts.Debug.assert(element.end <= element.parent.end);
- }
- }
- function checkNodePositions(node, aggressiveChecks) {
- if (aggressiveChecks) {
- var pos = node.pos;
- forEachChild(node, function (child) {
- ts.Debug.assert(child.pos >= pos);
- pos = child.end;
- });
- ts.Debug.assert(pos <= node.end);
- }
- }
- function updateTokenPositionsAndMarkElements(sourceFile, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta, oldText, newText, aggressiveChecks) {
- visitNode(sourceFile);
- return;
- function visitNode(child) {
- ts.Debug.assert(child.pos <= child.end);
- if (child.pos > changeRangeOldEnd) {
- moveElementEntirelyPastChangeRange(child, false, delta, oldText, newText, aggressiveChecks);
- return;
- }
- var fullEnd = child.end;
- if (fullEnd >= changeStart) {
- child.intersectsChange = true;
- child._children = undefined;
- adjustIntersectingElement(child, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta);
- forEachChild(child, visitNode, visitArray);
- checkNodePositions(child, aggressiveChecks);
- return;
- }
- ts.Debug.assert(fullEnd < changeStart);
- }
- function visitArray(array) {
- ts.Debug.assert(array.pos <= array.end);
- if (array.pos > changeRangeOldEnd) {
- moveElementEntirelyPastChangeRange(array, true, delta, oldText, newText, aggressiveChecks);
- return;
- }
- var fullEnd = array.end;
- if (fullEnd >= changeStart) {
- array.intersectsChange = true;
- array._children = undefined;
- adjustIntersectingElement(array, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta);
- for (var _i = 0; _i < array.length; _i++) {
- var node = array[_i];
- visitNode(node);
- }
- return;
- }
- ts.Debug.assert(fullEnd < changeStart);
- }
- }
- function extendToAffectedRange(sourceFile, changeRange) {
- var maxLookahead = 1;
- var start = changeRange.span.start;
- for (var i = 0; start > 0 && i <= maxLookahead; i++) {
- var nearestNode = findNearestNodeStartingBeforeOrAtPosition(sourceFile, start);
- ts.Debug.assert(nearestNode.pos <= start);
- var position = nearestNode.pos;
- start = Math.max(0, position - 1);
- }
- var finalSpan = ts.createTextSpanFromBounds(start, ts.textSpanEnd(changeRange.span));
- var finalLength = changeRange.newLength + (changeRange.span.start - start);
- return ts.createTextChangeRange(finalSpan, finalLength);
- }
- function findNearestNodeStartingBeforeOrAtPosition(sourceFile, position) {
- var bestResult = sourceFile;
- var lastNodeEntirelyBeforePosition;
- forEachChild(sourceFile, visit);
- if (lastNodeEntirelyBeforePosition) {
- var lastChildOfLastEntireNodeBeforePosition = getLastChild(lastNodeEntirelyBeforePosition);
- if (lastChildOfLastEntireNodeBeforePosition.pos > bestResult.pos) {
- bestResult = lastChildOfLastEntireNodeBeforePosition;
- }
- }
- return bestResult;
- function getLastChild(node) {
- while (true) {
- var lastChild = getLastChildWorker(node);
- if (lastChild) {
- node = lastChild;
- }
- else {
- return node;
- }
- }
- }
- function getLastChildWorker(node) {
- var last = undefined;
- forEachChild(node, function (child) {
- if (ts.nodeIsPresent(child)) {
- last = child;
- }
- });
- return last;
- }
- function visit(child) {
- if (ts.nodeIsMissing(child)) {
- return;
- }
- if (child.pos <= position) {
- if (child.pos >= bestResult.pos) {
- bestResult = child;
- }
- if (position < child.end) {
- forEachChild(child, visit);
- return true;
- }
- else {
- ts.Debug.assert(child.end <= position);
- lastNodeEntirelyBeforePosition = child;
- }
- }
- else {
- ts.Debug.assert(child.pos > position);
- return true;
- }
- }
- }
- function checkChangeRange(sourceFile, newText, textChangeRange, aggressiveChecks) {
- var oldText = sourceFile.text;
- if (textChangeRange) {
- ts.Debug.assert((oldText.length - textChangeRange.span.length + textChangeRange.newLength) === newText.length);
- if (aggressiveChecks || ts.Debug.shouldAssert(3)) {
- var oldTextPrefix = oldText.substr(0, textChangeRange.span.start);
- var newTextPrefix = newText.substr(0, textChangeRange.span.start);
- ts.Debug.assert(oldTextPrefix === newTextPrefix);
- var oldTextSuffix = oldText.substring(ts.textSpanEnd(textChangeRange.span), oldText.length);
- var newTextSuffix = newText.substring(ts.textSpanEnd(ts.textChangeRangeNewSpan(textChangeRange)), newText.length);
- ts.Debug.assert(oldTextSuffix === newTextSuffix);
- }
- }
- }
- function createSyntaxCursor(sourceFile) {
- var currentArray = sourceFile.statements;
- var currentArrayIndex = 0;
- ts.Debug.assert(currentArrayIndex < currentArray.length);
- var current = currentArray[currentArrayIndex];
- var lastQueriedPosition = -1;
- return {
- currentNode: function (position) {
- if (position !== lastQueriedPosition) {
- if (current && current.end === position && currentArrayIndex < (currentArray.length - 1)) {
- currentArrayIndex++;
- current = currentArray[currentArrayIndex];
- }
- if (!current || current.pos !== position) {
- findHighestListElementThatStartsAtPosition(position);
- }
- }
- lastQueriedPosition = position;
- ts.Debug.assert(!current || current.pos === position);
- return current;
- }
- };
- function findHighestListElementThatStartsAtPosition(position) {
- currentArray = undefined;
- currentArrayIndex = -1;
- current = undefined;
- forEachChild(sourceFile, visitNode, visitArray);
- return;
- function visitNode(node) {
- if (position >= node.pos && position < node.end) {
- forEachChild(node, visitNode, visitArray);
- return true;
- }
- return false;
- }
- function visitArray(array) {
- if (position >= array.pos && position < array.end) {
- for (var i = 0, n = array.length; i < n; i++) {
- var child = array[i];
- if (child) {
- if (child.pos === position) {
- currentArray = array;
- currentArrayIndex = i;
- current = child;
- return true;
- }
- else {
- if (child.pos < position && position < child.end) {
- forEachChild(child, visitNode, visitArray);
- return true;
- }
- }
- }
- }
- }
- return false;
- }
- }
- }
- })(IncrementalParser || (IncrementalParser = {}));
- })(ts || (ts = {}));
- var ts;
- (function (ts) {
- var nextSymbolId = 1;
- var nextNodeId = 1;
- var nextMergeId = 1;
- function getNodeId(node) {
- if (!node.id)
- node.id = nextNodeId++;
- return node.id;
- }
- ts.getNodeId = getNodeId;
- ts.checkTime = 0;
- function getSymbolId(symbol) {
- if (!symbol.id) {
- symbol.id = nextSymbolId++;
- }
- return symbol.id;
- }
- ts.getSymbolId = getSymbolId;
- function createTypeChecker(host, produceDiagnostics) {
- var cancellationToken;
- var Symbol = ts.objectAllocator.getSymbolConstructor();
- var Type = ts.objectAllocator.getTypeConstructor();
- var Signature = ts.objectAllocator.getSignatureConstructor();
- var typeCount = 0;
- var symbolCount = 0;
- var emptyArray = [];
- var emptySymbols = {};
- var compilerOptions = host.getCompilerOptions();
- var languageVersion = compilerOptions.target || 0;
- var modulekind = compilerOptions.module ? compilerOptions.module : languageVersion === 2 ? 5 : 0;
- var emitResolver = createResolver();
- var undefinedSymbol = createSymbol(4 | 67108864, "undefined");
- var argumentsSymbol = createSymbol(4 | 67108864, "arguments");
- var checker = {
- getNodeCount: function () { return ts.sum(host.getSourceFiles(), "nodeCount"); },
- getIdentifierCount: function () { return ts.sum(host.getSourceFiles(), "identifierCount"); },
- getSymbolCount: function () { return ts.sum(host.getSourceFiles(), "symbolCount") + symbolCount; },
- getTypeCount: function () { return typeCount; },
- isUndefinedSymbol: function (symbol) { return symbol === undefinedSymbol; },
- isArgumentsSymbol: function (symbol) { return symbol === argumentsSymbol; },
- getDiagnostics: getDiagnostics,
- getGlobalDiagnostics: getGlobalDiagnostics,
- getTypeOfSymbolAtLocation: getNarrowedTypeOfSymbol,
- getDeclaredTypeOfSymbol: getDeclaredTypeOfSymbol,
- getPropertiesOfType: getPropertiesOfType,
- getPropertyOfType: getPropertyOfType,
- getSignaturesOfType: getSignaturesOfType,
- getIndexTypeOfType: getIndexTypeOfType,
- getBaseTypes: getBaseTypes,
- getReturnTypeOfSignature: getReturnTypeOfSignature,
- getSymbolsInScope: getSymbolsInScope,
- getSymbolAtLocation: getSymbolAtLocation,
- getShorthandAssignmentValueSymbol: getShorthandAssignmentValueSymbol,
- getTypeAtLocation: getTypeOfNode,
- typeToString: typeToString,
- getSymbolDisplayBuilder: getSymbolDisplayBuilder,
- symbolToString: symbolToString,
- getAugmentedPropertiesOfType: getAugmentedPropertiesOfType,
- getRootSymbols: getRootSymbols,
- getContextualType: getContextualType,
- getFullyQualifiedName: getFullyQualifiedName,
- getResolvedSignature: getResolvedSignature,
- getConstantValue: getConstantValue,
- isValidPropertyAccess: isValidPropertyAccess,
- getSignatureFromDeclaration: getSignatureFromDeclaration,
- isImplementationOfOverload: isImplementationOfOverload,
- getAliasedSymbol: resolveAlias,
- getEmitResolver: getEmitResolver,
- getExportsOfModule: getExportsOfModuleAsArray,
- getJsxElementAttributesType: getJsxElementAttributesType,
- getJsxIntrinsicTagNames: getJsxIntrinsicTagNames,
- isOptionalParameter: isOptionalParameter
- };
- var unknownSymbol = createSymbol(4 | 67108864, "unknown");
- var resolvingSymbol = createSymbol(67108864, "__resolving__");
- var anyType = createIntrinsicType(1, "any");
- var stringType = createIntrinsicType(2, "string");
- var numberType = createIntrinsicType(4, "number");
- var booleanType = createIntrinsicType(8, "boolean");
- var esSymbolType = createIntrinsicType(16777216, "symbol");
- var voidType = createIntrinsicType(16, "void");
- var undefinedType = createIntrinsicType(32 | 2097152, "undefined");
- var nullType = createIntrinsicType(64 | 2097152, "null");
- var unknownType = createIntrinsicType(1, "unknown");
- var circularType = createIntrinsicType(1, "__circular__");
- var emptyObjectType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
- var emptyGenericType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
- emptyGenericType.instantiations = {};
- var anyFunctionType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
- anyFunctionType.flags |= 8388608;
- var noConstraintType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
- var anySignature = createSignature(undefined, undefined, emptyArray, anyType, undefined, 0, false, false);
- var unknownSignature = createSignature(undefined, undefined, emptyArray, unknownType, undefined, 0, false, false);
- var globals = {};
- var globalESSymbolConstructorSymbol;
- var getGlobalPromiseConstructorSymbol;
- var globalObjectType;
- var globalFunctionType;
- var globalArrayType;
- var globalStringType;
- var globalNumberType;
- var globalBooleanType;
- var globalRegExpType;
- var globalTemplateStringsArrayType;
- var globalESSymbolType;
- var jsxElementType;
- var jsxIntrinsicElementsType;
- var globalIterableType;
- var globalIteratorType;
- var globalIterableIteratorType;
- var anyArrayType;
- var getGlobalClassDecoratorType;
- var getGlobalParameterDecoratorType;
- var getGlobalPropertyDecoratorType;
- var getGlobalMethodDecoratorType;
- var getGlobalTypedPropertyDescriptorType;
- var getGlobalPromiseType;
- var tryGetGlobalPromiseType;
- var getGlobalPromiseLikeType;
- var getInstantiatedGlobalPromiseLikeType;
- var getGlobalPromiseConstructorLikeType;
- var getGlobalThenableType;
- var tupleTypes = {};
- var unionTypes = {};
- var intersectionTypes = {};
- var stringLiteralTypes = {};
- var emitExtends = false;
- var emitDecorate = false;
- var emitParam = false;
- var emitAwaiter = false;
- var emitGenerator = false;
- var resolutionTargets = [];
- var resolutionResults = [];
- var resolutionPropertyNames = [];
- var mergedSymbols = [];
- var symbolLinks = [];
- var nodeLinks = [];
- var potentialThisCollisions = [];
- var awaitedTypeStack = [];
- var diagnostics = ts.createDiagnosticCollection();
- var primitiveTypeInfo = {
- "string": {
- type: stringType,
- flags: 258
- },
- "number": {
- type: numberType,
- flags: 132
- },
- "boolean": {
- type: booleanType,
- flags: 8
- },
- "symbol": {
- type: esSymbolType,
- flags: 16777216
- }
- };
- var JsxNames = {
- JSX: "JSX",
- IntrinsicElements: "IntrinsicElements",
- ElementClass: "ElementClass",
- ElementAttributesPropertyNameContainer: "ElementAttributesProperty",
- Element: "Element"
- };
- var subtypeRelation = {};
- var assignableRelation = {};
- var identityRelation = {};
- var _displayBuilder;
- initializeTypeChecker();
- return checker;
- function getEmitResolver(sourceFile, cancellationToken) {
- getDiagnostics(sourceFile, cancellationToken);
- return emitResolver;
- }
- function error(location, message, arg0, arg1, arg2) {
- var diagnostic = location
- ? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2)
- : ts.createCompilerDiagnostic(message, arg0, arg1, arg2);
- diagnostics.add(diagnostic);
- }
- function createSymbol(flags, name) {
- symbolCount++;
- return new Symbol(flags, name);
- }
- function getExcludedSymbolFlags(flags) {
- var result = 0;
- if (flags & 2)
- result |= 107455;
- if (flags & 1)
- result |= 107454;
- if (flags & 4)
- result |= 107455;
- if (flags & 8)
- result |= 107455;
- if (flags & 16)
- result |= 106927;
- if (flags & 32)
- result |= 899519;
- if (flags & 64)
- result |= 792960;
- if (flags & 256)
- result |= 899327;
- if (flags & 128)
- result |= 899967;
- if (flags & 512)
- result |= 106639;
- if (flags & 8192)
- result |= 99263;
- if (flags & 32768)
- result |= 41919;
- if (flags & 65536)
- result |= 74687;
- if (flags & 262144)
- result |= 530912;
- if (flags & 524288)
- result |= 793056;
- if (flags & 8388608)
- result |= 8388608;
- return result;
- }
- function recordMergedSymbol(target, source) {
- if (!source.mergeId)
- source.mergeId = nextMergeId++;
- mergedSymbols[source.mergeId] = target;
- }
- function cloneSymbol(symbol) {
- var result = createSymbol(symbol.flags | 33554432, symbol.name);
- result.declarations = symbol.declarations.slice(0);
- result.parent = symbol.parent;
- if (symbol.valueDeclaration)
- result.valueDeclaration = symbol.valueDeclaration;
- if (symbol.constEnumOnlyModule)
- result.constEnumOnlyModule = true;
- if (symbol.members)
- result.members = cloneSymbolTable(symbol.members);
- if (symbol.exports)
- result.exports = cloneSymbolTable(symbol.exports);
- recordMergedSymbol(result, symbol);
- return result;
- }
- function mergeSymbol(target, source) {
- if (!(target.flags & getExcludedSymbolFlags(source.flags))) {
- if (source.flags & 512 && target.flags & 512 && target.constEnumOnlyModule && !source.constEnumOnlyModule) {
- target.constEnumOnlyModule = false;
- }
- target.flags |= source.flags;
- if (!target.valueDeclaration && source.valueDeclaration)
- target.valueDeclaration = source.valueDeclaration;
- ts.forEach(source.declarations, function (node) {
- target.declarations.push(node);
- });
- if (source.members) {
- if (!target.members)
- target.members = {};
- mergeSymbolTable(target.members, source.members);
- }
- if (source.exports) {
- if (!target.exports)
- target.exports = {};
- mergeSymbolTable(target.exports, source.exports);
- }
- recordMergedSymbol(target, source);
- }
- else {
- var message = target.flags & 2 || source.flags & 2
- ? ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0 : ts.Diagnostics.Duplicate_identifier_0;
- ts.forEach(source.declarations, function (node) {
- error(node.name ? node.name : node, message, symbolToString(source));
- });
- ts.forEach(target.declarations, function (node) {
- error(node.name ? node.name : node, message, symbolToString(source));
- });
- }
- }
- function cloneSymbolTable(symbolTable) {
- var result = {};
- for (var id in symbolTable) {
- if (ts.hasProperty(symbolTable, id)) {
- result[id] = symbolTable[id];
- }
- }
- return result;
- }
- function mergeSymbolTable(target, source) {
- for (var id in source) {
- if (ts.hasProperty(source, id)) {
- if (!ts.hasProperty(target, id)) {
- target[id] = source[id];
- }
- else {
- var symbol = target[id];
- if (!(symbol.flags & 33554432)) {
- target[id] = symbol = cloneSymbol(symbol);
- }
- mergeSymbol(symbol, source[id]);
- }
- }
- }
- }
- function getSymbolLinks(symbol) {
- if (symbol.flags & 67108864)
- return symbol;
- var id = getSymbolId(symbol);
- return symbolLinks[id] || (symbolLinks[id] = {});
- }
- function getNodeLinks(node) {
- var nodeId = getNodeId(node);
- return nodeLinks[nodeId] || (nodeLinks[nodeId] = {});
- }
- function getSourceFile(node) {
- return ts.getAncestor(node, 248);
- }
- function isGlobalSourceFile(node) {
- return node.kind === 248 && !ts.isExternalModule(node);
- }
- function getSymbol(symbols, name, meaning) {
- if (meaning && ts.hasProperty(symbols, name)) {
- var symbol = symbols[name];
- ts.Debug.assert((symbol.flags & 16777216) === 0, "Should never get an instantiated symbol here.");
- if (symbol.flags & meaning) {
- return symbol;
- }
- if (symbol.flags & 8388608) {
- var target = resolveAlias(symbol);
- if (target === unknownSymbol || target.flags & meaning) {
- return symbol;
- }
- }
- }
- }
- function isBlockScopedNameDeclaredBeforeUse(declaration, usage) {
- var declarationFile = ts.getSourceFileOfNode(declaration);
- var useFile = ts.getSourceFileOfNode(usage);
- if (declarationFile !== useFile) {
- if (modulekind || (!compilerOptions.outFile && !compilerOptions.out)) {
- return true;
- }
- var sourceFiles = host.getSourceFiles();
- return ts.indexOf(sourceFiles, declarationFile) <= ts.indexOf(sourceFiles, useFile);
- }
- if (declaration.pos <= usage.pos) {
- return declaration.kind !== 211 ||
- !isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage);
- }
- return isUsedInFunctionOrNonStaticProperty(declaration, usage);
- function isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage) {
- var container = ts.getEnclosingBlockScopeContainer(declaration);
- if (declaration.parent.parent.kind === 193 ||
- declaration.parent.parent.kind === 199) {
- return isSameScopeDescendentOf(usage, declaration, container);
- }
- else if (declaration.parent.parent.kind === 201 ||
- declaration.parent.parent.kind === 200) {
- var expression = declaration.parent.parent.expression;
- return isSameScopeDescendentOf(usage, expression, container);
- }
- }
- function isUsedInFunctionOrNonStaticProperty(declaration, usage) {
- var container = ts.getEnclosingBlockScopeContainer(declaration);
- var current = usage;
- while (current) {
- if (current === container) {
- return false;
- }
- if (ts.isFunctionLike(current)) {
- return true;
- }
- var initializerOfNonStaticProperty = current.parent &&
- current.parent.kind === 141 &&
- (current.parent.flags & 128) === 0 &&
- current.parent.initializer === current;
- if (initializerOfNonStaticProperty) {
- return true;
- }
- current = current.parent;
- }
- return false;
- }
- }
- function resolveName(location, name, meaning, nameNotFoundMessage, nameArg) {
- var result;
- var lastLocation;
- var propertyWithInvalidInitializer;
- var errorLocation = location;
- var grandparent;
- loop: while (location) {
- if (location.locals && !isGlobalSourceFile(location)) {
- if (result = getSymbol(location.locals, name, meaning)) {
- if (!(meaning & 793056) ||
- !(result.flags & (793056 & ~262144)) ||
- !ts.isFunctionLike(location) ||
- lastLocation === location.body) {
- break loop;
- }
- result = undefined;
- }
- }
- switch (location.kind) {
- case 248:
- if (!ts.isExternalModule(location))
- break;
- case 218:
- var moduleExports = getSymbolOfNode(location).exports;
- if (location.kind === 248 ||
- (location.kind === 218 && location.name.kind === 9)) {
- if (ts.hasProperty(moduleExports, name) &&
- moduleExports[name].flags === 8388608 &&
- ts.getDeclarationOfKind(moduleExports[name], 230)) {
- break;
- }
- result = moduleExports["default"];
- var localSymbol = ts.getLocalSymbolForExportDefault(result);
- if (result && localSymbol && (result.flags & meaning) && localSymbol.name === name) {
- break loop;
- }
- result = undefined;
- }
- if (result = getSymbol(moduleExports, name, meaning & 8914931)) {
- break loop;
- }
- break;
- case 217:
- if (result = getSymbol(getSymbolOfNode(location).exports, name, meaning & 8)) {
- break loop;
- }
- break;
- case 141:
- case 140:
- if (ts.isClassLike(location.parent) && !(location.flags & 128)) {
- var ctor = findConstructorDeclaration(location.parent);
- if (ctor && ctor.locals) {
- if (getSymbol(ctor.locals, name, meaning & 107455)) {
- propertyWithInvalidInitializer = location;
- }
- }
- }
- break;
- case 214:
- case 186:
- case 215:
- if (result = getSymbol(getSymbolOfNode(location).members, name, meaning & 793056)) {
- if (lastLocation && lastLocation.flags & 128) {
- error(errorLocation, ts.Diagnostics.Static_members_cannot_reference_class_type_parameters);
- return undefined;
- }
- break loop;
- }
- if (location.kind === 186 && meaning & 32) {
- var className = location.name;
- if (className && name === className.text) {
- result = location.symbol;
- break loop;
- }
- }
- break;
- case 136:
- grandparent = location.parent.parent;
- if (ts.isClassLike(grandparent) || grandparent.kind === 215) {
- if (result = getSymbol(getSymbolOfNode(grandparent).members, name, meaning & 793056)) {
- error(errorLocation, ts.Diagnostics.A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type);
- return undefined;
- }
- }
- break;
- case 143:
- case 142:
- case 144:
- case 145:
- case 146:
- case 213:
- case 174:
- if (meaning & 3 && name === "arguments") {
- result = argumentsSymbol;
- break loop;
- }
- break;
- case 173:
- if (meaning & 3 && name === "arguments") {
- result = argumentsSymbol;
- break loop;
- }
- if (meaning & 16) {
- var functionName = location.name;
- if (functionName && name === functionName.text) {
- result = location.symbol;
- break loop;
- }
- }
- break;
- case 139:
- if (location.parent && location.parent.kind === 138) {
- location = location.parent;
- }
- if (location.parent && ts.isClassElement(location.parent)) {
- location = location.parent;
- }
- break;
- }
- lastLocation = location;
- location = location.parent;
- }
- if (!result) {
- result = getSymbol(globals, name, meaning);
- }
- if (!result) {
- if (nameNotFoundMessage) {
- error(errorLocation, nameNotFoundMessage, typeof nameArg === "string" ? nameArg : ts.declarationNameToString(nameArg));
- }
- return undefined;
- }
- if (nameNotFoundMessage) {
- if (propertyWithInvalidInitializer) {
- var propertyName = propertyWithInvalidInitializer.name;
- error(errorLocation, ts.Diagnostics.Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor, ts.declarationNameToString(propertyName), typeof nameArg === "string" ? nameArg : ts.declarationNameToString(nameArg));
- return undefined;
- }
- if (meaning & 2) {
- var exportOrLocalSymbol = getExportSymbolOfValueSymbolIfExported(result);
- if (exportOrLocalSymbol.flags & 2) {
- checkResolvedBlockScopedVariable(exportOrLocalSymbol, errorLocation);
- }
- }
- }
- return result;
- }
- function checkResolvedBlockScopedVariable(result, errorLocation) {
- ts.Debug.assert((result.flags & 2) !== 0);
- var declaration = ts.forEach(result.declarations, function (d) { return ts.isBlockOrCatchScoped(d) ? d : undefined; });
- ts.Debug.assert(declaration !== undefined, "Block-scoped variable declaration is undefined");
- if (!isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 211), errorLocation)) {
- error(errorLocation, ts.Diagnostics.Block_scoped_variable_0_used_before_its_declaration, ts.declarationNameToString(declaration.name));
- }
- }
- function isSameScopeDescendentOf(initial, parent, stopAt) {
- if (!parent) {
- return false;
- }
- for (var current = initial; current && current !== stopAt && !ts.isFunctionLike(current); current = current.parent) {
- if (current === parent) {
- return true;
- }
- }
- return false;
- }
- function getAnyImportSyntax(node) {
- if (ts.isAliasSymbolDeclaration(node)) {
- if (node.kind === 221) {
- return node;
- }
- while (node && node.kind !== 222) {
- node = node.parent;
- }
- return node;
- }
- }
- function getDeclarationOfAliasSymbol(symbol) {
- return ts.forEach(symbol.declarations, function (d) { return ts.isAliasSymbolDeclaration(d) ? d : undefined; });
- }
- function getTargetOfImportEqualsDeclaration(node) {
- if (node.moduleReference.kind === 232) {
- return resolveExternalModuleSymbol(resolveExternalModuleName(node, ts.getExternalModuleImportEqualsDeclarationExpression(node)));
- }
- return getSymbolOfPartOfRightHandSideOfImportEquals(node.moduleReference, node);
- }
- function getTargetOfImportClause(node) {
- var moduleSymbol = resolveExternalModuleName(node, node.parent.moduleSpecifier);
- if (moduleSymbol) {
- var exportDefaultSymbol = resolveSymbol(moduleSymbol.exports["default"]);
- if (!exportDefaultSymbol) {
- error(node.name, ts.Diagnostics.Module_0_has_no_default_export, symbolToString(moduleSymbol));
- }
- return exportDefaultSymbol;
- }
- }
- function getTargetOfNamespaceImport(node) {
- var moduleSpecifier = node.parent.parent.moduleSpecifier;
- return resolveESModuleSymbol(resolveExternalModuleName(node, moduleSpecifier), moduleSpecifier);
- }
- function getMemberOfModuleVariable(moduleSymbol, name) {
- if (moduleSymbol.flags & 3) {
- var typeAnnotation = moduleSymbol.valueDeclaration.type;
- if (typeAnnotation) {
- return getPropertyOfType(getTypeFromTypeNode(typeAnnotation), name);
- }
- }
- }
- function combineValueAndTypeSymbols(valueSymbol, typeSymbol) {
- if (valueSymbol.flags & (793056 | 1536)) {
- return valueSymbol;
- }
- var result = createSymbol(valueSymbol.flags | typeSymbol.flags, valueSymbol.name);
- result.declarations = ts.concatenate(valueSymbol.declarations, typeSymbol.declarations);
- result.parent = valueSymbol.parent || typeSymbol.parent;
- if (valueSymbol.valueDeclaration)
- result.valueDeclaration = valueSymbol.valueDeclaration;
- if (typeSymbol.members)
- result.members = typeSymbol.members;
- if (valueSymbol.exports)
- result.exports = valueSymbol.exports;
- return result;
- }
- function getExportOfModule(symbol, name) {
- if (symbol.flags & 1536) {
- var exports = getExportsOfSymbol(symbol);
- if (ts.hasProperty(exports, name)) {
- return resolveSymbol(exports[name]);
- }
- }
- }
- function getPropertyOfVariable(symbol, name) {
- if (symbol.flags & 3) {
- var typeAnnotation = symbol.valueDeclaration.type;
- if (typeAnnotation) {
- return resolveSymbol(getPropertyOfType(getTypeFromTypeNode(typeAnnotation), name));
- }
- }
- }
- function getExternalModuleMember(node, specifier) {
- var moduleSymbol = resolveExternalModuleName(node, node.moduleSpecifier);
- var targetSymbol = resolveESModuleSymbol(moduleSymbol, node.moduleSpecifier);
- if (targetSymbol) {
- var name_9 = specifier.propertyName || specifier.name;
- if (name_9.text) {
- var symbolFromModule = getExportOfModule(targetSymbol, name_9.text);
- var symbolFromVariable = getPropertyOfVariable(targetSymbol, name_9.text);
- var symbol = symbolFromModule && symbolFromVariable ?
- combineValueAndTypeSymbols(symbolFromVariable, symbolFromModule) :
- symbolFromModule || symbolFromVariable;
- if (!symbol) {
- error(name_9, ts.Diagnostics.Module_0_has_no_exported_member_1, getFullyQualifiedName(moduleSymbol), ts.declarationNameToString(name_9));
- }
- return symbol;
- }
- }
- }
- function getTargetOfImportSpecifier(node) {
- return getExternalModuleMember(node.parent.parent.parent, node);
- }
- function getTargetOfExportSpecifier(node) {
- return node.parent.parent.moduleSpecifier ?
- getExternalModuleMember(node.parent.parent, node) :
- resolveEntityName(node.propertyName || node.name, 107455 | 793056 | 1536);
- }
- function getTargetOfExportAssignment(node) {
- return resolveEntityName(node.expression, 107455 | 793056 | 1536);
- }
- function getTargetOfAliasDeclaration(node) {
- switch (node.kind) {
- case 221:
- return getTargetOfImportEqualsDeclaration(node);
- case 223:
- return getTargetOfImportClause(node);
- case 224:
- return getTargetOfNamespaceImport(node);
- case 226:
- return getTargetOfImportSpecifier(node);
- case 230:
- return getTargetOfExportSpecifier(node);
- case 227:
- return getTargetOfExportAssignment(node);
- }
- }
- function resolveSymbol(symbol) {
- return symbol && symbol.flags & 8388608 && !(symbol.flags & (107455 | 793056 | 1536)) ? resolveAlias(symbol) : symbol;
- }
- function resolveAlias(symbol) {
- ts.Debug.assert((symbol.flags & 8388608) !== 0, "Should only get Alias here.");
- var links = getSymbolLinks(symbol);
- if (!links.target) {
- links.target = resolvingSymbol;
- var node = getDeclarationOfAliasSymbol(symbol);
- var target = getTargetOfAliasDeclaration(node);
- if (links.target === resolvingSymbol) {
- links.target = target || unknownSymbol;
- }
- else {
- error(node, ts.Diagnostics.Circular_definition_of_import_alias_0, symbolToString(symbol));
- }
- }
- else if (links.target === resolvingSymbol) {
- links.target = unknownSymbol;
- }
- return links.target;
- }
- function markExportAsReferenced(node) {
- var symbol = getSymbolOfNode(node);
- var target = resolveAlias(symbol);
- if (target) {
- var markAlias = (target === unknownSymbol && compilerOptions.isolatedModules) ||
- (target !== unknownSymbol && (target.flags & 107455) && !isConstEnumOrConstEnumOnlyModule(target));
- if (markAlias) {
- markAliasSymbolAsReferenced(symbol);
- }
- }
- }
- function markAliasSymbolAsReferenced(symbol) {
- var links = getSymbolLinks(symbol);
- if (!links.referenced) {
- links.referenced = true;
- var node = getDeclarationOfAliasSymbol(symbol);
- if (node.kind === 227) {
- checkExpressionCached(node.expression);
- }
- else if (node.kind === 230) {
- checkExpressionCached(node.propertyName || node.name);
- }
- else if (ts.isInternalModuleImportEqualsDeclaration(node)) {
- checkExpressionCached(node.moduleReference);
- }
- }
- }
- function getSymbolOfPartOfRightHandSideOfImportEquals(entityName, importDeclaration) {
- if (!importDeclaration) {
- importDeclaration = ts.getAncestor(entityName, 221);
- ts.Debug.assert(importDeclaration !== undefined);
- }
- if (entityName.kind === 69 && ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) {
- entityName = entityName.parent;
- }
- if (entityName.kind === 69 || entityName.parent.kind === 135) {
- return resolveEntityName(entityName, 1536);
- }
- else {
- ts.Debug.assert(entityName.parent.kind === 221);
- return resolveEntityName(entityName, 107455 | 793056 | 1536);
- }
- }
- function getFullyQualifiedName(symbol) {
- return symbol.parent ? getFullyQualifiedName(symbol.parent) + "." + symbolToString(symbol) : symbolToString(symbol);
- }
- function resolveEntityName(name, meaning, ignoreErrors) {
- if (ts.nodeIsMissing(name)) {
- return undefined;
- }
- var symbol;
- if (name.kind === 69) {
- var message = meaning === 1536 ? ts.Diagnostics.Cannot_find_namespace_0 : ts.Diagnostics.Cannot_find_name_0;
- symbol = resolveName(name, name.text, meaning, ignoreErrors ? undefined : message, name);
- if (!symbol) {
- return undefined;
- }
- }
- else if (name.kind === 135 || name.kind === 166) {
- var left = name.kind === 135 ? name.left : name.expression;
- var right = name.kind === 135 ? name.right : name.name;
- var namespace = resolveEntityName(left, 1536, ignoreErrors);
- if (!namespace || namespace === unknownSymbol || ts.nodeIsMissing(right)) {
- return undefined;
- }
- symbol = getSymbol(getExportsOfSymbol(namespace), right.text, meaning);
- if (!symbol) {
- if (!ignoreErrors) {
- error(right, ts.Diagnostics.Module_0_has_no_exported_member_1, getFullyQualifiedName(namespace), ts.declarationNameToString(right));
- }
- return undefined;
- }
- }
- else {
- ts.Debug.fail("Unknown entity name kind.");
- }
- ts.Debug.assert((symbol.flags & 16777216) === 0, "Should never get an instantiated symbol here.");
- return symbol.flags & meaning ? symbol : resolveAlias(symbol);
- }
- function resolveExternalModuleName(location, moduleReferenceExpression) {
- if (moduleReferenceExpression.kind !== 9) {
- return;
- }
- var moduleReferenceLiteral = moduleReferenceExpression;
- var searchPath = ts.getDirectoryPath(getSourceFile(location).fileName);
- var moduleName = ts.escapeIdentifier(moduleReferenceLiteral.text);
- if (moduleName === undefined) {
- return;
- }
- var isRelative = ts.isExternalModuleNameRelative(moduleName);
- if (!isRelative) {
- var symbol = getSymbol(globals, "\"" + moduleName + "\"", 512);
- if (symbol) {
- return symbol;
- }
- }
- var resolvedModule = ts.getResolvedModule(getSourceFile(location), moduleReferenceLiteral.text);
- var sourceFile = resolvedModule && host.getSourceFile(resolvedModule.resolvedFileName);
- if (sourceFile) {
- if (sourceFile.symbol) {
- return sourceFile.symbol;
- }
- error(moduleReferenceLiteral, ts.Diagnostics.File_0_is_not_a_module, sourceFile.fileName);
- return;
- }
- error(moduleReferenceLiteral, ts.Diagnostics.Cannot_find_module_0, moduleName);
- }
- function resolveExternalModuleSymbol(moduleSymbol) {
- return moduleSymbol && resolveSymbol(moduleSymbol.exports["export="]) || moduleSymbol;
- }
- function resolveESModuleSymbol(moduleSymbol, moduleReferenceExpression) {
- var symbol = resolveExternalModuleSymbol(moduleSymbol);
- if (symbol && !(symbol.flags & (1536 | 3))) {
- error(moduleReferenceExpression, ts.Diagnostics.Module_0_resolves_to_a_non_module_entity_and_cannot_be_imported_using_this_construct, symbolToString(moduleSymbol));
- symbol = undefined;
- }
- return symbol;
- }
- function getExportAssignmentSymbol(moduleSymbol) {
- return moduleSymbol.exports["export="];
- }
- function getExportsOfModuleAsArray(moduleSymbol) {
- return symbolsToArray(getExportsOfModule(moduleSymbol));
- }
- function getExportsOfSymbol(symbol) {
- return symbol.flags & 1536 ? getExportsOfModule(symbol) : symbol.exports || emptySymbols;
- }
- function getExportsOfModule(moduleSymbol) {
- var links = getSymbolLinks(moduleSymbol);
- return links.resolvedExports || (links.resolvedExports = getExportsForModule(moduleSymbol));
- }
- function extendExportSymbols(target, source) {
- for (var id in source) {
- if (id !== "default" && !ts.hasProperty(target, id)) {
- target[id] = source[id];
- }
- }
- }
- function getExportsForModule(moduleSymbol) {
- var result;
- var visitedSymbols = [];
- visit(moduleSymbol);
- return result || moduleSymbol.exports;
- function visit(symbol) {
- if (symbol && symbol.flags & 1952 && !ts.contains(visitedSymbols, symbol)) {
- visitedSymbols.push(symbol);
- if (symbol !== moduleSymbol) {
- if (!result) {
- result = cloneSymbolTable(moduleSymbol.exports);
- }
- extendExportSymbols(result, symbol.exports);
- }
- var exportStars = symbol.exports["__export"];
- if (exportStars) {
- for (var _i = 0, _a = exportStars.declarations; _i < _a.length; _i++) {
- var node = _a[_i];
- visit(resolveExternalModuleName(node, node.moduleSpecifier));
- }
- }
- }
- }
- }
- function getMergedSymbol(symbol) {
- var merged;
- return symbol && symbol.mergeId && (merged = mergedSymbols[symbol.mergeId]) ? merged : symbol;
- }
- function getSymbolOfNode(node) {
- return getMergedSymbol(node.symbol);
- }
- function getParentOfSymbol(symbol) {
- return getMergedSymbol(symbol.parent);
- }
- function getExportSymbolOfValueSymbolIfExported(symbol) {
- return symbol && (symbol.flags & 1048576) !== 0
- ? getMergedSymbol(symbol.exportSymbol)
- : symbol;
- }
- function symbolIsValue(symbol) {
- if (symbol.flags & 16777216) {
- return symbolIsValue(getSymbolLinks(symbol).target);
- }
- if (symbol.flags & 107455) {
- return true;
- }
- if (symbol.flags & 8388608) {
- return (resolveAlias(symbol).flags & 107455) !== 0;
- }
- return false;
- }
- function findConstructorDeclaration(node) {
- var members = node.members;
- for (var _i = 0; _i < members.length; _i++) {
- var member = members[_i];
- if (member.kind === 144 && ts.nodeIsPresent(member.body)) {
- return member;
- }
- }
- }
- function createType(flags) {
- var result = new Type(checker, flags);
- result.id = typeCount++;
- return result;
- }
- function createIntrinsicType(kind, intrinsicName) {
- var type = createType(kind);
- type.intrinsicName = intrinsicName;
- return type;
- }
- function createObjectType(kind, symbol) {
- var type = createType(kind);
- type.symbol = symbol;
- return type;
- }
- function isReservedMemberName(name) {
- return name.charCodeAt(0) === 95 &&
- name.charCodeAt(1) === 95 &&
- name.charCodeAt(2) !== 95 &&
- name.charCodeAt(2) !== 64;
- }
- function getNamedMembers(members) {
- var result;
- for (var id in members) {
- if (ts.hasProperty(members, id)) {
- if (!isReservedMemberName(id)) {
- if (!result)
- result = [];
- var symbol = members[id];
- if (symbolIsValue(symbol)) {
- result.push(symbol);
- }
- }
- }
- }
- return result || emptyArray;
- }
- function setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType) {
- type.members = members;
- type.properties = getNamedMembers(members);
- type.callSignatures = callSignatures;
- type.constructSignatures = constructSignatures;
- if (stringIndexType)
- type.stringIndexType = stringIndexType;
- if (numberIndexType)
- type.numberIndexType = numberIndexType;
- return type;
- }
- function createAnonymousType(symbol, members, callSignatures, constructSignatures, stringIndexType, numberIndexType) {
- return setObjectTypeMembers(createObjectType(65536, symbol), members, callSignatures, constructSignatures, stringIndexType, numberIndexType);
- }
- function forEachSymbolTableInScope(enclosingDeclaration, callback) {
- var result;
- for (var location_1 = enclosingDeclaration; location_1; location_1 = location_1.parent) {
- if (location_1.locals && !isGlobalSourceFile(location_1)) {
- if (result = callback(location_1.locals)) {
- return result;
- }
- }
- switch (location_1.kind) {
- case 248:
- if (!ts.isExternalModule(location_1)) {
- break;
- }
- case 218:
- if (result = callback(getSymbolOfNode(location_1).exports)) {
- return result;
- }
- break;
- case 214:
- case 215:
- if (result = callback(getSymbolOfNode(location_1).members)) {
- return result;
- }
- break;
- }
- }
- return callback(globals);
- }
- function getQualifiedLeftMeaning(rightMeaning) {
- return rightMeaning === 107455 ? 107455 : 1536;
- }
- function getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning, useOnlyExternalAliasing) {
- function getAccessibleSymbolChainFromSymbolTable(symbols) {
- function canQualifySymbol(symbolFromSymbolTable, meaning) {
- if (!needsQualification(symbolFromSymbolTable, enclosingDeclaration, meaning)) {
- return true;
- }
- var accessibleParent = getAccessibleSymbolChain(symbolFromSymbolTable.parent, enclosingDeclaration, getQualifiedLeftMeaning(meaning), useOnlyExternalAliasing);
- return !!accessibleParent;
- }
- function isAccessible(symbolFromSymbolTable, resolvedAliasSymbol) {
- if (symbol === (resolvedAliasSymbol || symbolFromSymbolTable)) {
- return !ts.forEach(symbolFromSymbolTable.declarations, hasExternalModuleSymbol) &&
- canQualifySymbol(symbolFromSymbolTable, meaning);
- }
- }
- if (isAccessible(ts.lookUp(symbols, symbol.name))) {
- return [symbol];
- }
- return ts.forEachValue(symbols, function (symbolFromSymbolTable) {
- if (symbolFromSymbolTable.flags & 8388608
- && symbolFromSymbolTable.name !== "export="
- && !ts.getDeclarationOfKind(symbolFromSymbolTable, 230)) {
- if (!useOnlyExternalAliasing ||
- ts.forEach(symbolFromSymbolTable.declarations, ts.isExternalModuleImportEqualsDeclaration)) {
- var resolvedImportedSymbol = resolveAlias(symbolFromSymbolTable);
- if (isAccessible(symbolFromSymbolTable, resolveAlias(symbolFromSymbolTable))) {
- return [symbolFromSymbolTable];
- }
- var accessibleSymbolsFromExports = resolvedImportedSymbol.exports ? getAccessibleSymbolChainFromSymbolTable(resolvedImportedSymbol.exports) : undefined;
- if (accessibleSymbolsFromExports && canQualifySymbol(symbolFromSymbolTable, getQualifiedLeftMeaning(meaning))) {
- return [symbolFromSymbolTable].concat(accessibleSymbolsFromExports);
- }
- }
- }
- });
- }
- if (symbol) {
- return forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolChainFromSymbolTable);
- }
- }
- function needsQualification(symbol, enclosingDeclaration, meaning) {
- var qualify = false;
- forEachSymbolTableInScope(enclosingDeclaration, function (symbolTable) {
- if (!ts.hasProperty(symbolTable, symbol.name)) {
- return false;
- }
- var symbolFromSymbolTable = symbolTable[symbol.name];
- if (symbolFromSymbolTable === symbol) {
- return true;
- }
- symbolFromSymbolTable = (symbolFromSymbolTable.flags & 8388608 && !ts.getDeclarationOfKind(symbolFromSymbolTable, 230)) ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable;
- if (symbolFromSymbolTable.flags & meaning) {
- qualify = true;
- return true;
- }
- return false;
- });
- return qualify;
- }
- function isSymbolAccessible(symbol, enclosingDeclaration, meaning) {
- if (symbol && enclosingDeclaration && !(symbol.flags & 262144)) {
- var initialSymbol = symbol;
- var meaningToLook = meaning;
- while (symbol) {
- var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaningToLook, false);
- if (accessibleSymbolChain) {
- var hasAccessibleDeclarations = hasVisibleDeclarations(accessibleSymbolChain[0]);
- if (!hasAccessibleDeclarations) {
- return {
- accessibility: 1,
- errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning),
- errorModuleName: symbol !== initialSymbol ? symbolToString(symbol, enclosingDeclaration, 1536) : undefined
- };
- }
- return hasAccessibleDeclarations;
- }
- meaningToLook = getQualifiedLeftMeaning(meaning);
- symbol = getParentOfSymbol(symbol);
- }
- var symbolExternalModule = ts.forEach(initialSymbol.declarations, getExternalModuleContainer);
- if (symbolExternalModule) {
- var enclosingExternalModule = getExternalModuleContainer(enclosingDeclaration);
- if (symbolExternalModule !== enclosingExternalModule) {
- return {
- accessibility: 2,
- errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning),
- errorModuleName: symbolToString(symbolExternalModule)
- };
- }
- }
- return {
- accessibility: 1,
- errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning)
- };
- }
- return { accessibility: 0 };
- function getExternalModuleContainer(declaration) {
- for (; declaration; declaration = declaration.parent) {
- if (hasExternalModuleSymbol(declaration)) {
- return getSymbolOfNode(declaration);
- }
- }
- }
- }
- function hasExternalModuleSymbol(declaration) {
- return (declaration.kind === 218 && declaration.name.kind === 9) ||
- (declaration.kind === 248 && ts.isExternalModule(declaration));
- }
- function hasVisibleDeclarations(symbol) {
- var aliasesToMakeVisible;
- if (ts.forEach(symbol.declarations, function (declaration) { return !getIsDeclarationVisible(declaration); })) {
- return undefined;
- }
- return { accessibility: 0, aliasesToMakeVisible: aliasesToMakeVisible };
- function getIsDeclarationVisible(declaration) {
- if (!isDeclarationVisible(declaration)) {
- var anyImportSyntax = getAnyImportSyntax(declaration);
- if (anyImportSyntax &&
- !(anyImportSyntax.flags & 1) &&
- isDeclarationVisible(anyImportSyntax.parent)) {
- getNodeLinks(declaration).isVisible = true;
- if (aliasesToMakeVisible) {
- if (!ts.contains(aliasesToMakeVisible, anyImportSyntax)) {
- aliasesToMakeVisible.push(anyImportSyntax);
- }
- }
- else {
- aliasesToMakeVisible = [anyImportSyntax];
- }
- return true;
- }
- return false;
- }
- return true;
- }
- }
- function isEntityNameVisible(entityName, enclosingDeclaration) {
- var meaning;
- if (entityName.parent.kind === 154) {
- meaning = 107455 | 1048576;
- }
- else if (entityName.kind === 135 || entityName.kind === 166 ||
- entityName.parent.kind === 221) {
- meaning = 1536;
- }
- else {
- meaning = 793056;
- }
- var firstIdentifier = getFirstIdentifier(entityName);
- var symbol = resolveName(enclosingDeclaration, firstIdentifier.text, meaning, undefined, undefined);
- return (symbol && hasVisibleDeclarations(symbol)) || {
- accessibility: 1,
- errorSymbolName: ts.getTextOfNode(firstIdentifier),
- errorNode: firstIdentifier
- };
- }
- function writeKeyword(writer, kind) {
- writer.writeKeyword(ts.tokenToString(kind));
- }
- function writePunctuation(writer, kind) {
- writer.writePunctuation(ts.tokenToString(kind));
- }
- function writeSpace(writer) {
- writer.writeSpace(" ");
- }
- function symbolToString(symbol, enclosingDeclaration, meaning) {
- var writer = ts.getSingleLineStringWriter();
- getSymbolDisplayBuilder().buildSymbolDisplay(symbol, writer, enclosingDeclaration, meaning);
- var result = writer.string();
- ts.releaseStringWriter(writer);
- return result;
- }
- function signatureToString(signature, enclosingDeclaration, flags) {
- var writer = ts.getSingleLineStringWriter();
- getSymbolDisplayBuilder().buildSignatureDisplay(signature, writer, enclosingDeclaration, flags);
- var result = writer.string();
- ts.releaseStringWriter(writer);
- return result;
- }
- function typeToString(type, enclosingDeclaration, flags) {
- var writer = ts.getSingleLineStringWriter();
- getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags);
- var result = writer.string();
- ts.releaseStringWriter(writer);
- var maxLength = compilerOptions.noErrorTruncation || flags & 4 ? undefined : 100;
- if (maxLength && result.length >= maxLength) {
- result = result.substr(0, maxLength - "...".length) + "...";
- }
- return result;
- }
- function getTypeAliasForTypeLiteral(type) {
- if (type.symbol && type.symbol.flags & 2048) {
- var node = type.symbol.declarations[0].parent;
- while (node.kind === 160) {
- node = node.parent;
- }
- if (node.kind === 216) {
- return getSymbolOfNode(node);
- }
- }
- return undefined;
- }
- function getSymbolDisplayBuilder() {
- function getNameOfSymbol(symbol) {
- if (symbol.declarations && symbol.declarations.length) {
- var declaration = symbol.declarations[0];
- if (declaration.name) {
- return ts.declarationNameToString(declaration.name);
- }
- switch (declaration.kind) {
- case 186:
- return "(Anonymous class)";
- case 173:
- case 174:
- return "(Anonymous function)";
- }
- }
- return symbol.name;
- }
- function appendSymbolNameOnly(symbol, writer) {
- writer.writeSymbol(getNameOfSymbol(symbol), symbol);
- }
- function buildSymbolDisplay(symbol, writer, enclosingDeclaration, meaning, flags, typeFlags) {
- var parentSymbol;
- function appendParentTypeArgumentsAndSymbolName(symbol) {
- if (parentSymbol) {
- if (flags & 1) {
- if (symbol.flags & 16777216) {
- buildDisplayForTypeArgumentsAndDelimiters(getTypeParametersOfClassOrInterface(parentSymbol), symbol.mapper, writer, enclosingDeclaration);
- }
- else {
- buildTypeParameterDisplayFromSymbol(parentSymbol, writer, enclosingDeclaration);
- }
- }
- writePunctuation(writer, 21);
- }
- parentSymbol = symbol;
- appendSymbolNameOnly(symbol, writer);
- }
- writer.trackSymbol(symbol, enclosingDeclaration, meaning);
- function walkSymbol(symbol, meaning) {
- if (symbol) {
- var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning, !!(flags & 2));
- if (!accessibleSymbolChain ||
- needsQualification(accessibleSymbolChain[0], enclosingDeclaration, accessibleSymbolChain.length === 1 ? meaning : getQualifiedLeftMeaning(meaning))) {
- walkSymbol(getParentOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol), getQualifiedLeftMeaning(meaning));
- }
- if (accessibleSymbolChain) {
- for (var _i = 0; _i < accessibleSymbolChain.length; _i++) {
- var accessibleSymbol = accessibleSymbolChain[_i];
- appendParentTypeArgumentsAndSymbolName(accessibleSymbol);
- }
- }
- else {
- if (!parentSymbol && ts.forEach(symbol.declarations, hasExternalModuleSymbol)) {
- return;
- }
- if (symbol.flags & 2048 || symbol.flags & 4096) {
- return;
- }
- appendParentTypeArgumentsAndSymbolName(symbol);
- }
- }
- }
- var isTypeParameter = symbol.flags & 262144;
- var typeFormatFlag = 128 & typeFlags;
- if (!isTypeParameter && (enclosingDeclaration || typeFormatFlag)) {
- walkSymbol(symbol, meaning);
- return;
- }
- return appendParentTypeArgumentsAndSymbolName(symbol);
- }
- function buildTypeDisplay(type, writer, enclosingDeclaration, globalFlags, symbolStack) {
- var globalFlagsToPass = globalFlags & 16;
- var inObjectTypeLiteral = false;
- return writeType(type, globalFlags);
- function writeType(type, flags) {
- if (type.flags & 16777343) {
- writer.writeKeyword(!(globalFlags & 16) && isTypeAny(type)
- ? "any"
- : type.intrinsicName);
- }
- else if (type.flags & 33554432) {
- if (inObjectTypeLiteral) {
- writer.reportInaccessibleThisError();
- }
- writer.writeKeyword("this");
- }
- else if (type.flags & 4096) {
- writeTypeReference(type, flags);
- }
- else if (type.flags & (1024 | 2048 | 128 | 512)) {
- buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, 793056, 0, flags);
- }
- else if (type.flags & 8192) {
- writeTupleType(type);
- }
- else if (type.flags & 49152) {
- writeUnionOrIntersectionType(type, flags);
- }
- else if (type.flags & 65536) {
- writeAnonymousType(type, flags);
- }
- else if (type.flags & 256) {
- writer.writeStringLiteral(type.text);
- }
- else {
- writePunctuation(writer, 15);
- writeSpace(writer);
- writePunctuation(writer, 22);
- writeSpace(writer);
- writePunctuation(writer, 16);
- }
- }
- function writeTypeList(types, delimiter) {
- for (var i = 0; i < types.length; i++) {
- if (i > 0) {
- if (delimiter !== 24) {
- writeSpace(writer);
- }
- writePunctuation(writer, delimiter);
- writeSpace(writer);
- }
- writeType(types[i], delimiter === 24 ? 0 : 64);
- }
- }
- function writeSymbolTypeReference(symbol, typeArguments, pos, end, flags) {
- if (symbol.flags & 32 || !isReservedMemberName(symbol.name)) {
- buildSymbolDisplay(symbol, writer, enclosingDeclaration, 793056, 0, flags);
- }
- if (pos < end) {
- writePunctuation(writer, 25);
- writeType(typeArguments[pos++], 0);
- while (pos < end) {
- writePunctuation(writer, 24);
- writeSpace(writer);
- writeType(typeArguments[pos++], 0);
- }
- writePunctuation(writer, 27);
- }
- }
- function writeTypeReference(type, flags) {
- var typeArguments = type.typeArguments || emptyArray;
- if (type.target === globalArrayType && !(flags & 1)) {
- writeType(typeArguments[0], 64);
- writePunctuation(writer, 19);
- writePunctuation(writer, 20);
- }
- else {
- var outerTypeParameters = type.target.outerTypeParameters;
- var i = 0;
- if (outerTypeParameters) {
- var length_1 = outerTypeParameters.length;
- while (i < length_1) {
- var start = i;
- var parent_3 = getParentSymbolOfTypeParameter(outerTypeParameters[i]);
- do {
- i++;
- } while (i < length_1 && getParentSymbolOfTypeParameter(outerTypeParameters[i]) === parent_3);
- if (!ts.rangeEquals(outerTypeParameters, typeArguments, start, i)) {
- writeSymbolTypeReference(parent_3, typeArguments, start, i, flags);
- writePunctuation(writer, 21);
- }
- }
- }
- var typeParameterCount = (type.target.typeParameters || emptyArray).length;
- writeSymbolTypeReference(type.symbol, typeArguments, i, typeParameterCount, flags);
- }
- }
- function writeTupleType(type) {
- writePunctuation(writer, 19);
- writeTypeList(type.elementTypes, 24);
- writePunctuation(writer, 20);
- }
- function writeUnionOrIntersectionType(type, flags) {
- if (flags & 64) {
- writePunctuation(writer, 17);
- }
- writeTypeList(type.types, type.flags & 16384 ? 47 : 46);
- if (flags & 64) {
- writePunctuation(writer, 18);
- }
- }
- function writeAnonymousType(type, flags) {
- var symbol = type.symbol;
- if (symbol) {
- if (symbol.flags & (32 | 384 | 512)) {
- writeTypeofSymbol(type, flags);
- }
- else if (shouldWriteTypeOfFunctionSymbol()) {
- writeTypeofSymbol(type, flags);
- }
- else if (ts.contains(symbolStack, symbol)) {
- var typeAlias = getTypeAliasForTypeLiteral(type);
- if (typeAlias) {
- buildSymbolDisplay(typeAlias, writer, enclosingDeclaration, 793056, 0, flags);
- }
- else {
- writeKeyword(writer, 117);
- }
- }
- else {
- if (!symbolStack) {
- symbolStack = [];
- }
- symbolStack.push(symbol);
- writeLiteralType(type, flags);
- symbolStack.pop();
- }
- }
- else {
- writeLiteralType(type, flags);
- }
- function shouldWriteTypeOfFunctionSymbol() {
- var isStaticMethodSymbol = !!(symbol.flags & 8192 &&
- ts.forEach(symbol.declarations, function (declaration) { return declaration.flags & 128; }));
- var isNonLocalFunctionSymbol = !!(symbol.flags & 16) &&
- (symbol.parent ||
- ts.forEach(symbol.declarations, function (declaration) {
- return declaration.parent.kind === 248 || declaration.parent.kind === 219;
- }));
- if (isStaticMethodSymbol || isNonLocalFunctionSymbol) {
- return !!(flags & 2) ||
- (ts.contains(symbolStack, symbol));
- }
- }
- }
- function writeTypeofSymbol(type, typeFormatFlags) {
- writeKeyword(writer, 101);
- writeSpace(writer);
- buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, 107455, 0, typeFormatFlags);
- }
- function getIndexerParameterName(type, indexKind, fallbackName) {
- var declaration = getIndexDeclarationOfSymbol(type.symbol, indexKind);
- if (!declaration) {
- return fallbackName;
- }
- ts.Debug.assert(declaration.parameters.length !== 0);
- return ts.declarationNameToString(declaration.parameters[0].name);
- }
- function writeLiteralType(type, flags) {
- var resolved = resolveStructuredTypeMembers(type);
- if (!resolved.properties.length && !resolved.stringIndexType && !resolved.numberIndexType) {
- if (!resolved.callSignatures.length && !resolved.constructSignatures.length) {
- writePunctuation(writer, 15);
- writePunctuation(writer, 16);
- return;
- }
- if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) {
- if (flags & 64) {
- writePunctuation(writer, 17);
- }
- buildSignatureDisplay(resolved.callSignatures[0], writer, enclosingDeclaration, globalFlagsToPass | 8, symbolStack);
- if (flags & 64) {
- writePunctuation(writer, 18);
- }
- return;
- }
- if (resolved.constructSignatures.length === 1 && !resolved.callSignatures.length) {
- if (flags & 64) {
- writePunctuation(writer, 17);
- }
- writeKeyword(writer, 92);
- writeSpace(writer);
- buildSignatureDisplay(resolved.constructSignatures[0], writer, enclosingDeclaration, globalFlagsToPass | 8, symbolStack);
- if (flags & 64) {
- writePunctuation(writer, 18);
- }
- return;
- }
- }
- var saveInObjectTypeLiteral = inObjectTypeLiteral;
- inObjectTypeLiteral = true;
- writePunctuation(writer, 15);
- writer.writeLine();
- writer.increaseIndent();
- for (var _i = 0, _a = resolved.callSignatures; _i < _a.length; _i++) {
- var signature = _a[_i];
- buildSignatureDisplay(signature, writer, enclosingDeclaration, globalFlagsToPass, symbolStack);
- writePunctuation(writer, 23);
- writer.writeLine();
- }
- for (var _b = 0, _c = resolved.constructSignatures; _b < _c.length; _b++) {
- var signature = _c[_b];
- writeKeyword(writer, 92);
- writeSpace(writer);
- buildSignatureDisplay(signature, writer, enclosingDeclaration, globalFlagsToPass, symbolStack);
- writePunctuation(writer, 23);
- writer.writeLine();
- }
- if (resolved.stringIndexType) {
- writePunctuation(writer, 19);
- writer.writeParameter(getIndexerParameterName(resolved, 0, "x"));
- writePunctuation(writer, 54);
- writeSpace(writer);
- writeKeyword(writer, 130);
- writePunctuation(writer, 20);
- writePunctuation(writer, 54);
- writeSpace(writer);
- writeType(resolved.stringIndexType, 0);
- writePunctuation(writer, 23);
- writer.writeLine();
- }
- if (resolved.numberIndexType) {
- writePunctuation(writer, 19);
- writer.writeParameter(getIndexerParameterName(resolved, 1, "x"));
- writePunctuation(writer, 54);
- writeSpace(writer);
- writeKeyword(writer, 128);
- writePunctuation(writer, 20);
- writePunctuation(writer, 54);
- writeSpace(writer);
- writeType(resolved.numberIndexType, 0);
- writePunctuation(writer, 23);
- writer.writeLine();
- }
- for (var _d = 0, _e = resolved.properties; _d < _e.length; _d++) {
- var p = _e[_d];
- var t = getTypeOfSymbol(p);
- if (p.flags & (16 | 8192) && !getPropertiesOfObjectType(t).length) {
- var signatures = getSignaturesOfType(t, 0);
- for (var _f = 0; _f < signatures.length; _f++) {
- var signature = signatures[_f];
- buildSymbolDisplay(p, writer);
- if (p.flags & 536870912) {
- writePunctuation(writer, 53);
- }
- buildSignatureDisplay(signature, writer, enclosingDeclaration, globalFlagsToPass, symbolStack);
- writePunctuation(writer, 23);
- writer.writeLine();
- }
- }
- else {
- buildSymbolDisplay(p, writer);
- if (p.flags & 536870912) {
- writePunctuation(writer, 53);
- }
- writePunctuation(writer, 54);
- writeSpace(writer);
- writeType(t, 0);
- writePunctuation(writer, 23);
- writer.writeLine();
- }
- }
- writer.decreaseIndent();
- writePunctuation(writer, 16);
- inObjectTypeLiteral = saveInObjectTypeLiteral;
- }
- }
- function buildTypeParameterDisplayFromSymbol(symbol, writer, enclosingDeclaraiton, flags) {
- var targetSymbol = getTargetSymbol(symbol);
- if (targetSymbol.flags & 32 || targetSymbol.flags & 64 || targetSymbol.flags & 524288) {
- buildDisplayForTypeParametersAndDelimiters(getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol), writer, enclosingDeclaraiton, flags);
- }
- }
- function buildTypeParameterDisplay(tp, writer, enclosingDeclaration, flags, symbolStack) {
- appendSymbolNameOnly(tp.symbol, writer);
- var constraint = getConstraintOfTypeParameter(tp);
- if (constraint) {
- writeSpace(writer);
- writeKeyword(writer, 83);
- writeSpace(writer);
- buildTypeDisplay(constraint, writer, enclosingDeclaration, flags, symbolStack);
- }
- }
- function buildParameterDisplay(p, writer, enclosingDeclaration, flags, symbolStack) {
- var parameterNode = p.valueDeclaration;
- if (ts.isRestParameter(parameterNode)) {
- writePunctuation(writer, 22);
- }
- appendSymbolNameOnly(p, writer);
- if (isOptionalParameter(parameterNode)) {
- writePunctuation(writer, 53);
- }
- writePunctuation(writer, 54);
- writeSpace(writer);
- buildTypeDisplay(getTypeOfSymbol(p), writer, enclosingDeclaration, flags, symbolStack);
- }
- function buildDisplayForTypeParametersAndDelimiters(typeParameters, writer, enclosingDeclaration, flags, symbolStack) {
- if (typeParameters && typeParameters.length) {
- writePunctuation(writer, 25);
- for (var i = 0; i < typeParameters.length; i++) {
- if (i > 0) {
- writePunctuation(writer, 24);
- writeSpace(writer);
- }
- buildTypeParameterDisplay(typeParameters[i], writer, enclosingDeclaration, flags, symbolStack);
- }
- writePunctuation(writer, 27);
- }
- }
- function buildDisplayForTypeArgumentsAndDelimiters(typeParameters, mapper, writer, enclosingDeclaration, flags, symbolStack) {
- if (typeParameters && typeParameters.length) {
- writePunctuation(writer, 25);
- for (var i = 0; i < typeParameters.length; i++) {
- if (i > 0) {
- writePunctuation(writer, 24);
- writeSpace(writer);
- }
- buildTypeDisplay(mapper(typeParameters[i]), writer, enclosingDeclaration, 0);
- }
- writePunctuation(writer, 27);
- }
- }
- function buildDisplayForParametersAndDelimiters(parameters, writer, enclosingDeclaration, flags, symbolStack) {
- writePunctuation(writer, 17);
- for (var i = 0; i < parameters.length; i++) {
- if (i > 0) {
- writePunctuation(writer, 24);
- writeSpace(writer);
- }
- buildParameterDisplay(parameters[i], writer, enclosingDeclaration, flags, symbolStack);
- }
- writePunctuation(writer, 18);
- }
- function buildReturnTypeDisplay(signature, writer, enclosingDeclaration, flags, symbolStack) {
- if (flags & 8) {
- writeSpace(writer);
- writePunctuation(writer, 34);
- }
- else {
- writePunctuation(writer, 54);
- }
- writeSpace(writer);
- var returnType;
- if (signature.typePredicate) {
- writer.writeParameter(signature.typePredicate.parameterName);
- writeSpace(writer);
- writeKeyword(writer, 124);
- writeSpace(writer);
- returnType = signature.typePredicate.type;
- }
- else {
- returnType = getReturnTypeOfSignature(signature);
- }
- buildTypeDisplay(returnType, writer, enclosingDeclaration, flags, symbolStack);
- }
- function buildSignatureDisplay(signature, writer, enclosingDeclaration, flags, symbolStack) {
- if (signature.target && (flags & 32)) {
- buildDisplayForTypeArgumentsAndDelimiters(signature.target.typeParameters, signature.mapper, writer, enclosingDeclaration);
- }
- else {
- buildDisplayForTypeParametersAndDelimiters(signature.typeParameters, writer, enclosingDeclaration, flags, symbolStack);
- }
- buildDisplayForParametersAndDelimiters(signature.parameters, writer, enclosingDeclaration, flags, symbolStack);
- buildReturnTypeDisplay(signature, writer, enclosingDeclaration, flags, symbolStack);
- }
- return _displayBuilder || (_displayBuilder = {
- buildSymbolDisplay: buildSymbolDisplay,
- buildTypeDisplay: buildTypeDisplay,
- buildTypeParameterDisplay: buildTypeParameterDisplay,
- buildParameterDisplay: buildParameterDisplay,
- buildDisplayForParametersAndDelimiters: buildDisplayForParametersAndDelimiters,
- buildDisplayForTypeParametersAndDelimiters: buildDisplayForTypeParametersAndDelimiters,
- buildTypeParameterDisplayFromSymbol: buildTypeParameterDisplayFromSymbol,
- buildSignatureDisplay: buildSignatureDisplay,
- buildReturnTypeDisplay: buildReturnTypeDisplay
- });
- }
- function isDeclarationVisible(node) {
- function getContainingExternalModule(node) {
- for (; node; node = node.parent) {
- if (node.kind === 218) {
- if (node.name.kind === 9) {
- return node;
- }
- }
- else if (node.kind === 248) {
- return ts.isExternalModule(node) ? node : undefined;
- }
- }
- ts.Debug.fail("getContainingModule cant reach here");
- }
- function isUsedInExportAssignment(node) {
- var externalModule = getContainingExternalModule(node);
- var exportAssignmentSymbol;
- var resolvedExportSymbol;
- if (externalModule) {
- var externalModuleSymbol = getSymbolOfNode(externalModule);
- exportAssignmentSymbol = getExportAssignmentSymbol(externalModuleSymbol);
- var symbolOfNode = getSymbolOfNode(node);
- if (isSymbolUsedInExportAssignment(symbolOfNode)) {
- return true;
- }
- if (symbolOfNode.flags & 8388608) {
- return isSymbolUsedInExportAssignment(resolveAlias(symbolOfNode));
- }
- }
- function isSymbolUsedInExportAssignment(symbol) {
- if (exportAssignmentSymbol === symbol) {
- return true;
- }
- if (exportAssignmentSymbol && !!(exportAssignmentSymbol.flags & 8388608)) {
- resolvedExportSymbol = resolvedExportSymbol || resolveAlias(exportAssignmentSymbol);
- if (resolvedExportSymbol === symbol) {
- return true;
- }
- return ts.forEach(resolvedExportSymbol.declarations, function (current) {
- while (current) {
- if (current === node) {
- return true;
- }
- current = current.parent;
- }
- });
- }
- }
- }
- function determineIfDeclarationIsVisible() {
- switch (node.kind) {
- case 163:
- return isDeclarationVisible(node.parent.parent);
- case 211:
- if (ts.isBindingPattern(node.name) &&
- !node.name.elements.length) {
- return false;
- }
- case 218:
- case 214:
- case 215:
- case 216:
- case 213:
- case 217:
- case 221:
- var parent_4 = getDeclarationContainer(node);
- if (!(ts.getCombinedNodeFlags(node) & 1) &&
- !(node.kind !== 221 && parent_4.kind !== 248 && ts.isInAmbientContext(parent_4))) {
- return isGlobalSourceFile(parent_4);
- }
- return isDeclarationVisible(parent_4);
- case 141:
- case 140:
- case 145:
- case 146:
- case 143:
- case 142:
- if (node.flags & (32 | 64)) {
- return false;
- }
- case 144:
- case 148:
- case 147:
- case 149:
- case 138:
- case 219:
- case 152:
- case 153:
- case 155:
- case 151:
- case 156:
- case 157:
- case 158:
- case 159:
- case 160:
- return isDeclarationVisible(node.parent);
- case 223:
- case 224:
- case 226:
- return false;
- case 137:
- case 248:
- return true;
- case 227:
- return false;
- default:
- ts.Debug.fail("isDeclarationVisible unknown: SyntaxKind: " + node.kind);
- }
- }
- if (node) {
- var links = getNodeLinks(node);
- if (links.isVisible === undefined) {
- links.isVisible = !!determineIfDeclarationIsVisible();
- }
- return links.isVisible;
- }
- }
- function collectLinkedAliases(node) {
- var exportSymbol;
- if (node.parent && node.parent.kind === 227) {
- exportSymbol = resolveName(node.parent, node.text, 107455 | 793056 | 1536 | 8388608, ts.Diagnostics.Cannot_find_name_0, node);
- }
- else if (node.parent.kind === 230) {
- var exportSpecifier = node.parent;
- exportSymbol = exportSpecifier.parent.parent.moduleSpecifier ?
- getExternalModuleMember(exportSpecifier.parent.parent, exportSpecifier) :
- resolveEntityName(exportSpecifier.propertyName || exportSpecifier.name, 107455 | 793056 | 1536 | 8388608);
- }
- var result = [];
- if (exportSymbol) {
- buildVisibleNodeList(exportSymbol.declarations);
- }
- return result;
- function buildVisibleNodeList(declarations) {
- ts.forEach(declarations, function (declaration) {
- getNodeLinks(declaration).isVisible = true;
- var resultNode = getAnyImportSyntax(declaration) || declaration;
- if (!ts.contains(result, resultNode)) {
- result.push(resultNode);
- }
- if (ts.isInternalModuleImportEqualsDeclaration(declaration)) {
- var internalModuleReference = declaration.moduleReference;
- var firstIdentifier = getFirstIdentifier(internalModuleReference);
- var importSymbol = resolveName(declaration, firstIdentifier.text, 107455 | 793056 | 1536, ts.Diagnostics.Cannot_find_name_0, firstIdentifier);
- buildVisibleNodeList(importSymbol.declarations);
- }
- });
- }
- }
- function pushTypeResolution(target, propertyName) {
- var resolutionCycleStartIndex = findResolutionCycleStartIndex(target, propertyName);
- if (resolutionCycleStartIndex >= 0) {
- var length_2 = resolutionTargets.length;
- for (var i = resolutionCycleStartIndex; i < length_2; i++) {
- resolutionResults[i] = false;
- }
- return false;
- }
- resolutionTargets.push(target);
- resolutionResults.push(true);
- resolutionPropertyNames.push(propertyName);
- return true;
- }
- function findResolutionCycleStartIndex(target, propertyName) {
- for (var i = resolutionTargets.length - 1; i >= 0; i--) {
- if (hasType(resolutionTargets[i], resolutionPropertyNames[i])) {
- return -1;
- }
- if (resolutionTargets[i] === target && resolutionPropertyNames[i] === propertyName) {
- return i;
- }
- }
- return -1;
- }
- function hasType(target, propertyName) {
- if (propertyName === 0) {
- return getSymbolLinks(target).type;
- }
- if (propertyName === 2) {
- return getSymbolLinks(target).declaredType;
- }
- if (propertyName === 1) {
- ts.Debug.assert(!!(target.flags & 1024));
- return target.resolvedBaseConstructorType;
- }
- if (propertyName === 3) {
- return target.resolvedReturnType;
- }
- ts.Debug.fail("Unhandled TypeSystemPropertyName " + propertyName);
- }
- function popTypeResolution() {
- resolutionTargets.pop();
- resolutionPropertyNames.pop();
- return resolutionResults.pop();
- }
- function getDeclarationContainer(node) {
- node = ts.getRootDeclaration(node);
- return node.kind === 211 ? node.parent.parent.parent : node.parent;
- }
- function getTypeOfPrototypeProperty(prototype) {
- var classType = getDeclaredTypeOfSymbol(prototype.parent);
- return classType.typeParameters ? createTypeReference(classType, ts.map(classType.typeParameters, function (_) { return anyType; })) : classType;
- }
- function getTypeOfPropertyOfType(type, name) {
- var prop = getPropertyOfType(type, name);
- return prop ? getTypeOfSymbol(prop) : undefined;
- }
- function isTypeAny(type) {
- return type && (type.flags & 1) !== 0;
- }
- function getTypeForBindingElementParent(node) {
- var symbol = getSymbolOfNode(node);
- return symbol && getSymbolLinks(symbol).type || getTypeForVariableLikeDeclaration(node);
- }
- function getTypeForBindingElement(declaration) {
- var pattern = declaration.parent;
- var parentType = getTypeForBindingElementParent(pattern.parent);
- if (parentType === unknownType) {
- return unknownType;
- }
- if (!parentType || isTypeAny(parentType)) {
- if (declaration.initializer) {
- return checkExpressionCached(declaration.initializer);
- }
- return parentType;
- }
- var type;
- if (pattern.kind === 161) {
- var name_10 = declaration.propertyName || declaration.name;
- type = getTypeOfPropertyOfType(parentType, name_10.text) ||
- isNumericLiteralName(name_10.text) && getIndexTypeOfType(parentType, 1) ||
- getIndexTypeOfType(parentType, 0);
- if (!type) {
- error(name_10, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(parentType), ts.declarationNameToString(name_10));
- return unknownType;
- }
- }
- else {
- var elementType = checkIteratedTypeOrElementType(parentType, pattern, false);
- if (!declaration.dotDotDotToken) {
- var propName = "" + ts.indexOf(pattern.elements, declaration);
- type = isTupleLikeType(parentType)
- ? getTypeOfPropertyOfType(parentType, propName)
- : elementType;
- if (!type) {
- if (isTupleType(parentType)) {
- error(declaration, ts.Diagnostics.Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2, typeToString(parentType), parentType.elementTypes.length, pattern.elements.length);
- }
- else {
- error(declaration, ts.Diagnostics.Type_0_has_no_property_1, typeToString(parentType), propName);
- }
- return unknownType;
- }
- }
- else {
- type = createArrayType(elementType);
- }
- }
- return type;
- }
- function getTypeForVariableLikeDeclaration(declaration) {
- if (declaration.parent.parent.kind === 200) {
- return anyType;
- }
- if (declaration.parent.parent.kind === 201) {
- return checkRightHandSideOfForOf(declaration.parent.parent.expression) || anyType;
- }
- if (ts.isBindingPattern(declaration.parent)) {
- return getTypeForBindingElement(declaration);
- }
- if (declaration.type) {
- return getTypeFromTypeNode(declaration.type);
- }
- if (declaration.kind === 138) {
- var func = declaration.parent;
- if (func.kind === 146 && !ts.hasDynamicName(func)) {
- var getter = ts.getDeclarationOfKind(declaration.parent.symbol, 145);
- if (getter) {
- return getReturnTypeOfSignature(getSignatureFromDeclaration(getter));
- }
- }
- var type = getContextuallyTypedParameterType(declaration);
- if (type) {
- return type;
- }
- }
- if (declaration.initializer) {
- return checkExpressionCached(declaration.initializer);
- }
- if (declaration.kind === 246) {
- return checkIdentifier(declaration.name);
- }
- if (ts.isBindingPattern(declaration.name)) {
- return getTypeFromBindingPattern(declaration.name, false);
- }
- return undefined;
- }
- function getTypeFromBindingElement(element, includePatternInType) {
- if (element.initializer) {
- return getWidenedType(checkExpressionCached(element.initializer));
- }
- if (ts.isBindingPattern(element.name)) {
- return getTypeFromBindingPattern(element.name, includePatternInType);
- }
- return anyType;
- }
- function getTypeFromObjectBindingPattern(pattern, includePatternInType) {
- var members = {};
- ts.forEach(pattern.elements, function (e) {
- var flags = 4 | 67108864 | (e.initializer ? 536870912 : 0);
- var name = e.propertyName || e.name;
- var symbol = createSymbol(flags, name.text);
- symbol.type = getTypeFromBindingElement(e, includePatternInType);
- symbol.bindingElement = e;
- members[symbol.name] = symbol;
- });
- var result = createAnonymousType(undefined, members, emptyArray, emptyArray, undefined, undefined);
- if (includePatternInType) {
- result.pattern = pattern;
- }
- return result;
- }
- function getTypeFromArrayBindingPattern(pattern, includePatternInType) {
- var elements = pattern.elements;
- if (elements.length === 0 || elements[elements.length - 1].dotDotDotToken) {
- return languageVersion >= 2 ? createIterableType(anyType) : anyArrayType;
- }
- var elementTypes = ts.map(elements, function (e) { return e.kind === 187 ? anyType : getTypeFromBindingElement(e, includePatternInType); });
- if (includePatternInType) {
- var result = createNewTupleType(elementTypes);
- result.pattern = pattern;
- return result;
- }
- return createTupleType(elementTypes);
- }
- function getTypeFromBindingPattern(pattern, includePatternInType) {
- return pattern.kind === 161
- ? getTypeFromObjectBindingPattern(pattern, includePatternInType)
- : getTypeFromArrayBindingPattern(pattern, includePatternInType);
- }
- function getWidenedTypeForVariableLikeDeclaration(declaration, reportErrors) {
- var type = getTypeForVariableLikeDeclaration(declaration);
- if (type) {
- if (reportErrors) {
- reportErrorsFromWidening(declaration, type);
- }
- return declaration.kind !== 245 ? getWidenedType(type) : type;
- }
- type = declaration.dotDotDotToken ? anyArrayType : anyType;
- if (reportErrors && compilerOptions.noImplicitAny) {
- var root = ts.getRootDeclaration(declaration);
- if (!isPrivateWithinAmbient(root) && !(root.kind === 138 && isPrivateWithinAmbient(root.parent))) {
- reportImplicitAnyError(declaration, type);
- }
- }
- return type;
- }
- function getTypeOfVariableOrParameterOrProperty(symbol) {
- var links = getSymbolLinks(symbol);
- if (!links.type) {
- if (symbol.flags & 134217728) {
- return links.type = getTypeOfPrototypeProperty(symbol);
- }
- var declaration = symbol.valueDeclaration;
- if (declaration.parent.kind === 244) {
- return links.type = anyType;
- }
- if (declaration.kind === 227) {
- return links.type = checkExpression(declaration.expression);
- }
- if (!pushTypeResolution(symbol, 0)) {
- return unknownType;
- }
- var type = getWidenedTypeForVariableLikeDeclaration(declaration, true);
- if (!popTypeResolution()) {
- if (symbol.valueDeclaration.type) {
- type = unknownType;
- error(symbol.valueDeclaration, ts.Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_type_annotation, symbolToString(symbol));
- }
- else {
- type = anyType;
- if (compilerOptions.noImplicitAny) {
- error(symbol.valueDeclaration, ts.Diagnostics._0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer, symbolToString(symbol));
- }
- }
- }
- links.type = type;
- }
- return links.type;
- }
- function getAnnotatedAccessorType(accessor) {
- if (accessor) {
- if (accessor.kind === 145) {
- return accessor.type && getTypeFromTypeNode(accessor.type);
- }
- else {
- var setterTypeAnnotation = ts.getSetAccessorTypeAnnotationNode(accessor);
- return setterTypeAnnotation && getTypeFromTypeNode(setterTypeAnnotation);
- }
- }
- return undefined;
- }
- function getTypeOfAccessors(symbol) {
- var links = getSymbolLinks(symbol);
- if (!links.type) {
- if (!pushTypeResolution(symbol, 0)) {
- return unknownType;
- }
- var getter = ts.getDeclarationOfKind(symbol, 145);
- var setter = ts.getDeclarationOfKind(symbol, 146);
- var type;
- var getterReturnType = getAnnotatedAccessorType(getter);
- if (getterReturnType) {
- type = getterReturnType;
- }
- else {
- var setterParameterType = getAnnotatedAccessorType(setter);
- if (setterParameterType) {
- type = setterParameterType;
- }
- else {
- if (getter && getter.body) {
- type = getReturnTypeFromBody(getter);
- }
- else {
- if (compilerOptions.noImplicitAny) {
- error(setter, ts.Diagnostics.Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_type_annotation, symbolToString(symbol));
- }
- type = anyType;
- }
- }
- }
- if (!popTypeResolution()) {
- type = anyType;
- if (compilerOptions.noImplicitAny) {
- var getter_1 = ts.getDeclarationOfKind(symbol, 145);
- error(getter_1, ts.Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions, symbolToString(symbol));
- }
- }
- links.type = type;
- }
- return links.type;
- }
- function getTypeOfFuncClassEnumModule(symbol) {
- var links = getSymbolLinks(symbol);
- if (!links.type) {
- links.type = createObjectType(65536, symbol);
- }
- return links.type;
- }
- function getTypeOfEnumMember(symbol) {
- var links = getSymbolLinks(symbol);
- if (!links.type) {
- links.type = getDeclaredTypeOfEnum(getParentOfSymbol(symbol));
- }
- return links.type;
- }
- function getTypeOfAlias(symbol) {
- var links = getSymbolLinks(symbol);
- if (!links.type) {
- var targetSymbol = resolveAlias(symbol);
- links.type = targetSymbol.flags & 107455
- ? getTypeOfSymbol(targetSymbol)
- : unknownType;
- }
- return links.type;
- }
- function getTypeOfInstantiatedSymbol(symbol) {
- var links = getSymbolLinks(symbol);
- if (!links.type) {
- links.type = instantiateType(getTypeOfSymbol(links.target), links.mapper);
- }
- return links.type;
- }
- function getTypeOfSymbol(symbol) {
- if (symbol.flags & 16777216) {
- return getTypeOfInstantiatedSymbol(symbol);
- }
- if (symbol.flags & (3 | 4)) {
- return getTypeOfVariableOrParameterOrProperty(symbol);
- }
- if (symbol.flags & (16 | 8192 | 32 | 384 | 512)) {
- return getTypeOfFuncClassEnumModule(symbol);
- }
- if (symbol.flags & 8) {
- return getTypeOfEnumMember(symbol);
- }
- if (symbol.flags & 98304) {
- return getTypeOfAccessors(symbol);
- }
- if (symbol.flags & 8388608) {
- return getTypeOfAlias(symbol);
- }
- return unknownType;
- }
- function getTargetType(type) {
- return type.flags & 4096 ? type.target : type;
- }
- function hasBaseType(type, checkBase) {
- return check(type);
- function check(type) {
- var target = getTargetType(type);
- return target === checkBase || ts.forEach(getBaseTypes(target), check);
- }
- }
- function appendTypeParameters(typeParameters, declarations) {
- for (var _i = 0; _i < declarations.length; _i++) {
- var declaration = declarations[_i];
- var tp = getDeclaredTypeOfTypeParameter(getSymbolOfNode(declaration));
- if (!typeParameters) {
- typeParameters = [tp];
- }
- else if (!ts.contains(typeParameters, tp)) {
- typeParameters.push(tp);
- }
- }
- return typeParameters;
- }
- function appendOuterTypeParameters(typeParameters, node) {
- while (true) {
- node = node.parent;
- if (!node) {
- return typeParameters;
- }
- if (node.kind === 214 || node.kind === 186 ||
- node.kind === 213 || node.kind === 173 ||
- node.kind === 143 || node.kind === 174) {
- var declarations = node.typeParameters;
- if (declarations) {
- return appendTypeParameters(appendOuterTypeParameters(typeParameters, node), declarations);
- }
- }
- }
- }
- function getOuterTypeParametersOfClassOrInterface(symbol) {
- var declaration = symbol.flags & 32 ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 215);
- return appendOuterTypeParameters(undefined, declaration);
- }
- function getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol) {
- var result;
- for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
- var node = _a[_i];
- if (node.kind === 215 || node.kind === 214 ||
- node.kind === 186 || node.kind === 216) {
- var declaration = node;
- if (declaration.typeParameters) {
- result = appendTypeParameters(result, declaration.typeParameters);
- }
- }
- }
- return result;
- }
- function getTypeParametersOfClassOrInterface(symbol) {
- return ts.concatenate(getOuterTypeParametersOfClassOrInterface(symbol), getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol));
- }
- function isConstructorType(type) {
- return type.flags & 80896 && getSignaturesOfType(type, 1).length > 0;
- }
- function getBaseTypeNodeOfClass(type) {
- return ts.getClassExtendsHeritageClauseElement(type.symbol.valueDeclaration);
- }
- function getConstructorsForTypeArguments(type, typeArgumentNodes) {
- var typeArgCount = typeArgumentNodes ? typeArgumentNodes.length : 0;
- return ts.filter(getSignaturesOfType(type, 1), function (sig) { return (sig.typeParameters ? sig.typeParameters.length : 0) === typeArgCount; });
- }
- function getInstantiatedConstructorsForTypeArguments(type, typeArgumentNodes) {
- var signatures = getConstructorsForTypeArguments(type, typeArgumentNodes);
- if (typeArgumentNodes) {
- var typeArguments = ts.map(typeArgumentNodes, getTypeFromTypeNode);
- signatures = ts.map(signatures, function (sig) { return getSignatureInstantiation(sig, typeArguments); });
- }
- return signatures;
- }
- function getBaseConstructorTypeOfClass(type) {
- if (!type.resolvedBaseConstructorType) {
- var baseTypeNode = getBaseTypeNodeOfClass(type);
- if (!baseTypeNode) {
- return type.resolvedBaseConstructorType = undefinedType;
- }
- if (!pushTypeResolution(type, 1)) {
- return unknownType;
- }
- var baseConstructorType = checkExpression(baseTypeNode.expression);
- if (baseConstructorType.flags & 80896) {
- resolveStructuredTypeMembers(baseConstructorType);
- }
- if (!popTypeResolution()) {
- error(type.symbol.valueDeclaration, ts.Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_base_expression, symbolToString(type.symbol));
- return type.resolvedBaseConstructorType = unknownType;
- }
- if (baseConstructorType !== unknownType && baseConstructorType !== nullType && !isConstructorType(baseConstructorType)) {
- error(baseTypeNode.expression, ts.Diagnostics.Type_0_is_not_a_constructor_function_type, typeToString(baseConstructorType));
- return type.resolvedBaseConstructorType = unknownType;
- }
- type.resolvedBaseConstructorType = baseConstructorType;
- }
- return type.resolvedBaseConstructorType;
- }
- function hasClassBaseType(type) {
- return !!ts.forEach(getBaseTypes(type), function (t) { return !!(t.symbol.flags & 32); });
- }
- function getBaseTypes(type) {
- var isClass = type.symbol.flags & 32;
- var isInterface = type.symbol.flags & 64;
- if (!type.resolvedBaseTypes) {
- if (!isClass && !isInterface) {
- ts.Debug.fail("type must be class or interface");
- }
- if (isClass) {
- resolveBaseTypesOfClass(type);
- }
- if (isInterface) {
- resolveBaseTypesOfInterface(type);
- }
- }
- return type.resolvedBaseTypes;
- }
- function resolveBaseTypesOfClass(type) {
- type.resolvedBaseTypes = type.resolvedBaseTypes || emptyArray;
- var baseContructorType = getBaseConstructorTypeOfClass(type);
- if (!(baseContructorType.flags & 80896)) {
- return;
- }
- var baseTypeNode = getBaseTypeNodeOfClass(type);
- var baseType;
- if (baseContructorType.symbol && baseContructorType.symbol.flags & 32) {
- baseType = getTypeFromClassOrInterfaceReference(baseTypeNode, baseContructorType.symbol);
- }
- else {
- var constructors = getInstantiatedConstructorsForTypeArguments(baseContructorType, baseTypeNode.typeArguments);
- if (!constructors.length) {
- error(baseTypeNode.expression, ts.Diagnostics.No_base_constructor_has_the_specified_number_of_type_arguments);
- return;
- }
- baseType = getReturnTypeOfSignature(constructors[0]);
- }
- if (baseType === unknownType) {
- return;
- }
- if (!(getTargetType(baseType).flags & (1024 | 2048))) {
- error(baseTypeNode.expression, ts.Diagnostics.Base_constructor_return_type_0_is_not_a_class_or_interface_type, typeToString(baseType));
- return;
- }
- if (type === baseType || hasBaseType(baseType, type)) {
- error(type.symbol.valueDeclaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 1));
- return;
- }
- if (type.resolvedBaseTypes === emptyArray) {
- type.resolvedBaseTypes = [baseType];
- }
- else {
- type.resolvedBaseTypes.push(baseType);
- }
- }
- function resolveBaseTypesOfInterface(type) {
- type.resolvedBaseTypes = type.resolvedBaseTypes || emptyArray;
- for (var _i = 0, _a = type.symbol.declarations; _i < _a.length; _i++) {
- var declaration = _a[_i];
- if (declaration.kind === 215 && ts.getInterfaceBaseTypeNodes(declaration)) {
- for (var _b = 0, _c = ts.getInterfaceBaseTypeNodes(declaration); _b < _c.length; _b++) {
- var node = _c[_b];
- var baseType = getTypeFromTypeNode(node);
- if (baseType !== unknownType) {
- if (getTargetType(baseType).flags & (1024 | 2048)) {
- if (type !== baseType && !hasBaseType(baseType, type)) {
- if (type.resolvedBaseTypes === emptyArray) {
- type.resolvedBaseTypes = [baseType];
- }
- else {
- type.resolvedBaseTypes.push(baseType);
- }
- }
- else {
- error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 1));
- }
- }
- else {
- error(node, ts.Diagnostics.An_interface_may_only_extend_a_class_or_another_interface);
- }
- }
- }
- }
- }
- }
- function isIndependentInterface(symbol) {
- for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
- var declaration = _a[_i];
- if (declaration.kind === 215) {
- if (declaration.flags & 524288) {
- return false;
- }
- var baseTypeNodes = ts.getInterfaceBaseTypeNodes(declaration);
- if (baseTypeNodes) {
- for (var _b = 0; _b < baseTypeNodes.length; _b++) {
- var node = baseTypeNodes[_b];
- if (ts.isSupportedExpressionWithTypeArguments(node)) {
- var baseSymbol = resolveEntityName(node.expression, 793056, true);
- if (!baseSymbol || !(baseSymbol.flags & 64) || getDeclaredTypeOfClassOrInterface(baseSymbol).thisType) {
- return false;
- }
- }
- }
- }
- }
- }
- return true;
- }
- function getDeclaredTypeOfClassOrInterface(symbol) {
- var links = getSymbolLinks(symbol);
- if (!links.declaredType) {
- var kind = symbol.flags & 32 ? 1024 : 2048;
- var type = links.declaredType = createObjectType(kind, symbol);
- var outerTypeParameters = getOuterTypeParametersOfClassOrInterface(symbol);
- var localTypeParameters = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol);
- if (outerTypeParameters || localTypeParameters || kind === 1024 || !isIndependentInterface(symbol)) {
- type.flags |= 4096;
- type.typeParameters = ts.concatenate(outerTypeParameters, localTypeParameters);
- type.outerTypeParameters = outerTypeParameters;
- type.localTypeParameters = localTypeParameters;
- type.instantiations = {};
- type.instantiations[getTypeListId(type.typeParameters)] = type;
- type.target = type;
- type.typeArguments = type.typeParameters;
- type.thisType = createType(512 | 33554432);
- type.thisType.symbol = symbol;
- type.thisType.constraint = getTypeWithThisArgument(type);
- }
- }
- return links.declaredType;
- }
- function getDeclaredTypeOfTypeAlias(symbol) {
- var links = getSymbolLinks(symbol);
- if (!links.declaredType) {
- if (!pushTypeResolution(symbol, 2)) {
- return unknownType;
- }
- var declaration = ts.getDeclarationOfKind(symbol, 216);
- var type = getTypeFromTypeNode(declaration.type);
- if (popTypeResolution()) {
- links.typeParameters = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol);
- if (links.typeParameters) {
- links.instantiations = {};
- links.instantiations[getTypeListId(links.typeParameters)] = type;
- }
- }
- else {
- type = unknownType;
- error(declaration.name, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol));
- }
- links.declaredType = type;
- }
- return links.declaredType;
- }
- function getDeclaredTypeOfEnum(symbol) {
- var links = getSymbolLinks(symbol);
- if (!links.declaredType) {
- var type = createType(128);
- type.symbol = symbol;
- links.declaredType = type;
- }
- return links.declaredType;
- }
- function getDeclaredTypeOfTypeParameter(symbol) {
- var links = getSymbolLinks(symbol);
- if (!links.declaredType) {
- var type = createType(512);
- type.symbol = symbol;
- if (!ts.getDeclarationOfKind(symbol, 137).constraint) {
- type.constraint = noConstraintType;
- }
- links.declaredType = type;
- }
- return links.declaredType;
- }
- function getDeclaredTypeOfAlias(symbol) {
- var links = getSymbolLinks(symbol);
- if (!links.declaredType) {
- links.declaredType = getDeclaredTypeOfSymbol(resolveAlias(symbol));
- }
- return links.declaredType;
- }
- function getDeclaredTypeOfSymbol(symbol) {
- ts.Debug.assert((symbol.flags & 16777216) === 0);
- if (symbol.flags & (32 | 64)) {
- return getDeclaredTypeOfClassOrInterface(symbol);
- }
- if (symbol.flags & 524288) {
- return getDeclaredTypeOfTypeAlias(symbol);
- }
- if (symbol.flags & 384) {
- return getDeclaredTypeOfEnum(symbol);
- }
- if (symbol.flags & 262144) {
- return getDeclaredTypeOfTypeParameter(symbol);
- }
- if (symbol.flags & 8388608) {
- return getDeclaredTypeOfAlias(symbol);
- }
- return unknownType;
- }
- function isIndependentTypeReference(node) {
- if (node.typeArguments) {
- for (var _i = 0, _a = node.typeArguments; _i < _a.length; _i++) {
- var typeNode = _a[_i];
- if (!isIndependentType(typeNode)) {
- return false;
- }
- }
- }
- return true;
- }
- function isIndependentType(node) {
- switch (node.kind) {
- case 117:
- case 130:
- case 128:
- case 120:
- case 131:
- case 103:
- case 9:
- return true;
- case 156:
- return isIndependentType(node.elementType);
- case 151:
- return isIndependentTypeReference(node);
- }
- return false;
- }
- function isIndependentVariableLikeDeclaration(node) {
- return node.type && isIndependentType(node.type) || !node.type && !node.initializer;
- }
- function isIndependentFunctionLikeDeclaration(node) {
- if (node.kind !== 144 && (!node.type || !isIndependentType(node.type))) {
- return false;
- }
- for (var _i = 0, _a = node.parameters; _i < _a.length; _i++) {
- var parameter = _a[_i];
- if (!isIndependentVariableLikeDeclaration(parameter)) {
- return false;
- }
- }
- return true;
- }
- function isIndependentMember(symbol) {
- if (symbol.declarations && symbol.declarations.length === 1) {
- var declaration = symbol.declarations[0];
- if (declaration) {
- switch (declaration.kind) {
- case 141:
- case 140:
- return isIndependentVariableLikeDeclaration(declaration);
- case 143:
- case 142:
- case 144:
- return isIndependentFunctionLikeDeclaration(declaration);
- }
- }
- }
- return false;
- }
- function createSymbolTable(symbols) {
- var result = {};
- for (var _i = 0; _i < symbols.length; _i++) {
- var symbol = symbols[_i];
- result[symbol.name] = symbol;
- }
- return result;
- }
- function createInstantiatedSymbolTable(symbols, mapper, mappingThisOnly) {
- var result = {};
- for (var _i = 0; _i < symbols.length; _i++) {
- var symbol = symbols[_i];
- result[symbol.name] = mappingThisOnly && isIndependentMember(symbol) ? symbol : instantiateSymbol(symbol, mapper);
- }
- return result;
- }
- function addInheritedMembers(symbols, baseSymbols) {
- for (var _i = 0; _i < baseSymbols.length; _i++) {
- var s = baseSymbols[_i];
- if (!ts.hasProperty(symbols, s.name)) {
- symbols[s.name] = s;
- }
- }
- }
- function addInheritedSignatures(signatures, baseSignatures) {
- if (baseSignatures) {
- for (var _i = 0; _i < baseSignatures.length; _i++) {
- var signature = baseSignatures[_i];
- signatures.push(signature);
- }
- }
- }
- function resolveDeclaredMembers(type) {
- if (!type.declaredProperties) {
- var symbol = type.symbol;
- type.declaredProperties = getNamedMembers(symbol.members);
- type.declaredCallSignatures = getSignaturesOfSymbol(symbol.members["__call"]);
- type.declaredConstructSignatures = getSignaturesOfSymbol(symbol.members["__new"]);
- type.declaredStringIndexType = getIndexTypeOfSymbol(symbol, 0);
- type.declaredNumberIndexType = getIndexTypeOfSymbol(symbol, 1);
- }
- return type;
- }
- function getTypeWithThisArgument(type, thisArgument) {
- if (type.flags & 4096) {
- return createTypeReference(type.target, ts.concatenate(type.typeArguments, [thisArgument || type.target.thisType]));
- }
- return type;
- }
- function resolveObjectTypeMembers(type, source, typeParameters, typeArguments) {
- var mapper = identityMapper;
- var members = source.symbol.members;
- var callSignatures = source.declaredCallSignatures;
- var constructSignatures = source.declaredConstructSignatures;
- var stringIndexType = source.declaredStringIndexType;
- var numberIndexType = source.declaredNumberIndexType;
- if (!ts.rangeEquals(typeParameters, typeArguments, 0, typeParameters.length)) {
- mapper = createTypeMapper(typeParameters, typeArguments);
- members = createInstantiatedSymbolTable(source.declaredProperties, mapper, typeParameters.length === 1);
- callSignatures = instantiateList(source.declaredCallSignatures, mapper, instantiateSignature);
- constructSignatures = instantiateList(source.declaredConstructSignatures, mapper, instantiateSignature);
- stringIndexType = instantiateType(source.declaredStringIndexType, mapper);
- numberIndexType = instantiateType(source.declaredNumberIndexType, mapper);
- }
- var baseTypes = getBaseTypes(source);
- if (baseTypes.length) {
- if (members === source.symbol.members) {
- members = createSymbolTable(source.declaredProperties);
- }
- var thisArgument = ts.lastOrUndefined(typeArguments);
- for (var _i = 0; _i < baseTypes.length; _i++) {
- var baseType = baseTypes[_i];
- var instantiatedBaseType = thisArgument ? getTypeWithThisArgument(instantiateType(baseType, mapper), thisArgument) : baseType;
- addInheritedMembers(members, getPropertiesOfObjectType(instantiatedBaseType));
- callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(instantiatedBaseType, 0));
- constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(instantiatedBaseType, 1));
- stringIndexType = stringIndexType || getIndexTypeOfType(instantiatedBaseType, 0);
- numberIndexType = numberIndexType || getIndexTypeOfType(instantiatedBaseType, 1);
- }
- }
- setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType);
- }
- function resolveClassOrInterfaceMembers(type) {
- resolveObjectTypeMembers(type, resolveDeclaredMembers(type), emptyArray, emptyArray);
- }
- function resolveTypeReferenceMembers(type) {
- var source = resolveDeclaredMembers(type.target);
- var typeParameters = ts.concatenate(source.typeParameters, [source.thisType]);
- var typeArguments = type.typeArguments && type.typeArguments.length === typeParameters.length ?
- type.typeArguments : ts.concatenate(type.typeArguments, [type]);
- resolveObjectTypeMembers(type, source, typeParameters, typeArguments);
- }
- function createSignature(declaration, typeParameters, parameters, resolvedReturnType, typePredicate, minArgumentCount, hasRestParameter, hasStringLiterals) {
- var sig = new Signature(checker);
- sig.declaration = declaration;
- sig.typeParameters = typeParameters;
- sig.parameters = parameters;
- sig.resolvedReturnType = resolvedReturnType;
- sig.typePredicate = typePredicate;
- sig.minArgumentCount = minArgumentCount;
- sig.hasRestParameter = hasRestParameter;
- sig.hasStringLiterals = hasStringLiterals;
- return sig;
- }
- function cloneSignature(sig) {
- return createSignature(sig.declaration, sig.typeParameters, sig.parameters, sig.resolvedReturnType, sig.typePredicate, sig.minArgumentCount, sig.hasRestParameter, sig.hasStringLiterals);
- }
- function getDefaultConstructSignatures(classType) {
- if (!hasClassBaseType(classType)) {
- return [createSignature(undefined, classType.localTypeParameters, emptyArray, classType, undefined, 0, false, false)];
- }
- var baseConstructorType = getBaseConstructorTypeOfClass(classType);
- var baseSignatures = getSignaturesOfType(baseConstructorType, 1);
- var baseTypeNode = getBaseTypeNodeOfClass(classType);
- var typeArguments = ts.map(baseTypeNode.typeArguments, getTypeFromTypeNode);
- var typeArgCount = typeArguments ? typeArguments.length : 0;
- var result = [];
- for (var _i = 0; _i < baseSignatures.length; _i++) {
- var baseSig = baseSignatures[_i];
- var typeParamCount = baseSig.typeParameters ? baseSig.typeParameters.length : 0;
- if (typeParamCount === typeArgCount) {
- var sig = typeParamCount ? getSignatureInstantiation(baseSig, typeArguments) : cloneSignature(baseSig);
- sig.typeParameters = classType.localTypeParameters;
- sig.resolvedReturnType = classType;
- result.push(sig);
- }
- }
- return result;
- }
- function createTupleTypeMemberSymbols(memberTypes) {
- var members = {};
- for (var i = 0; i < memberTypes.length; i++) {
- var symbol = createSymbol(4 | 67108864, "" + i);
- symbol.type = memberTypes[i];
- members[i] = symbol;
- }
- return members;
- }
- function resolveTupleTypeMembers(type) {
- var arrayElementType = getUnionType(type.elementTypes, true);
- var arrayType = resolveStructuredTypeMembers(createTypeFromGenericGlobalType(globalArrayType, [arrayElementType, type]));
- var members = createTupleTypeMemberSymbols(type.elementTypes);
- addInheritedMembers(members, arrayType.properties);
- setObjectTypeMembers(type, members, arrayType.callSignatures, arrayType.constructSignatures, arrayType.stringIndexType, arrayType.numberIndexType);
- }
- function findMatchingSignature(signatureList, signature, partialMatch, ignoreReturnTypes) {
- for (var _i = 0; _i < signatureList.length; _i++) {
- var s = signatureList[_i];
- if (compareSignatures(s, signature, partialMatch, ignoreReturnTypes, compareTypes)) {
- return s;
- }
- }
- }
- function findMatchingSignatures(signatureLists, signature, listIndex) {
- if (signature.typeParameters) {
- if (listIndex > 0) {
- return undefined;
- }
- for (var i = 1; i < signatureLists.length; i++) {
- if (!findMatchingSignature(signatureLists[i], signature, false, false)) {
- return undefined;
- }
- }
- return [signature];
- }
- var result = undefined;
- for (var i = 0; i < signatureLists.length; i++) {
- var match = i === listIndex ? signature : findMatchingSignature(signatureLists[i], signature, true, true);
- if (!match) {
- return undefined;
- }
- if (!ts.contains(result, match)) {
- (result || (result = [])).push(match);
- }
- }
- return result;
- }
- function getUnionSignatures(types, kind) {
- var signatureLists = ts.map(types, function (t) { return getSignaturesOfType(t, kind); });
- var result = undefined;
- for (var i = 0; i < signatureLists.length; i++) {
- for (var _i = 0, _a = signatureLists[i]; _i < _a.length; _i++) {
- var signature = _a[_i];
- if (!result || !findMatchingSignature(result, signature, false, true)) {
- var unionSignatures = findMatchingSignatures(signatureLists, signature, i);
- if (unionSignatures) {
- var s = signature;
- if (unionSignatures.length > 1) {
- s = cloneSignature(signature);
- s.resolvedReturnType = undefined;
- s.unionSignatures = unionSignatures;
- }
- (result || (result = [])).push(s);
- }
- }
- }
- }
- return result || emptyArray;
- }
- function getUnionIndexType(types, kind) {
- var indexTypes = [];
- for (var _i = 0; _i < types.length; _i++) {
- var type = types[_i];
- var indexType = getIndexTypeOfType(type, kind);
- if (!indexType) {
- return undefined;
- }
- indexTypes.push(indexType);
- }
- return getUnionType(indexTypes);
- }
- function resolveUnionTypeMembers(type) {
- var callSignatures = getUnionSignatures(type.types, 0);
- var constructSignatures = getUnionSignatures(type.types, 1);
- var stringIndexType = getUnionIndexType(type.types, 0);
- var numberIndexType = getUnionIndexType(type.types, 1);
- setObjectTypeMembers(type, emptySymbols, callSignatures, constructSignatures, stringIndexType, numberIndexType);
- }
- function intersectTypes(type1, type2) {
- return !type1 ? type2 : !type2 ? type1 : getIntersectionType([type1, type2]);
- }
- function resolveIntersectionTypeMembers(type) {
- var callSignatures = emptyArray;
- var constructSignatures = emptyArray;
- var stringIndexType = undefined;
- var numberIndexType = undefined;
- for (var _i = 0, _a = type.types; _i < _a.length; _i++) {
- var t = _a[_i];
- callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(t, 0));
- constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(t, 1));
- stringIndexType = intersectTypes(stringIndexType, getIndexTypeOfType(t, 0));
- numberIndexType = intersectTypes(numberIndexType, getIndexTypeOfType(t, 1));
- }
- setObjectTypeMembers(type, emptySymbols, callSignatures, constructSignatures, stringIndexType, numberIndexType);
- }
- function resolveAnonymousTypeMembers(type) {
- var symbol = type.symbol;
- var members;
- var callSignatures;
- var constructSignatures;
- var stringIndexType;
- var numberIndexType;
- if (type.target) {
- members = createInstantiatedSymbolTable(getPropertiesOfObjectType(type.target), type.mapper, false);
- callSignatures = instantiateList(getSignaturesOfType(type.target, 0), type.mapper, instantiateSignature);
- constructSignatures = instantiateList(getSignaturesOfType(type.target, 1), type.mapper, instantiateSignature);
- stringIndexType = instantiateType(getIndexTypeOfType(type.target, 0), type.mapper);
- numberIndexType = instantiateType(getIndexTypeOfType(type.target, 1), type.mapper);
- }
- else if (symbol.flags & 2048) {
- members = symbol.members;
- callSignatures = getSignaturesOfSymbol(members["__call"]);
- constructSignatures = getSignaturesOfSymbol(members["__new"]);
- stringIndexType = getIndexTypeOfSymbol(symbol, 0);
- numberIndexType = getIndexTypeOfSymbol(symbol, 1);
- }
- else {
- members = emptySymbols;
- callSignatures = emptyArray;
- constructSignatures = emptyArray;
- if (symbol.flags & 1952) {
- members = getExportsOfSymbol(symbol);
- }
- if (symbol.flags & (16 | 8192)) {
- callSignatures = getSignaturesOfSymbol(symbol);
- }
- if (symbol.flags & 32) {
- var classType = getDeclaredTypeOfClassOrInterface(symbol);
- constructSignatures = getSignaturesOfSymbol(symbol.members["__constructor"]);
- if (!constructSignatures.length) {
- constructSignatures = getDefaultConstructSignatures(classType);
- }
- var baseConstructorType = getBaseConstructorTypeOfClass(classType);
- if (baseConstructorType.flags & 80896) {
- members = createSymbolTable(getNamedMembers(members));
- addInheritedMembers(members, getPropertiesOfObjectType(baseConstructorType));
- }
- }
- stringIndexType = undefined;
- numberIndexType = (symbol.flags & 384) ? stringType : undefined;
- }
- setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType);
- }
- function resolveStructuredTypeMembers(type) {
- if (!type.members) {
- if (type.flags & 4096) {
- resolveTypeReferenceMembers(type);
- }
- else if (type.flags & (1024 | 2048)) {
- resolveClassOrInterfaceMembers(type);
- }
- else if (type.flags & 65536) {
- resolveAnonymousTypeMembers(type);
- }
- else if (type.flags & 8192) {
- resolveTupleTypeMembers(type);
- }
- else if (type.flags & 16384) {
- resolveUnionTypeMembers(type);
- }
- else if (type.flags & 32768) {
- resolveIntersectionTypeMembers(type);
- }
- }
- return type;
- }
- function getPropertiesOfObjectType(type) {
- if (type.flags & 80896) {
- return resolveStructuredTypeMembers(type).properties;
- }
- return emptyArray;
- }
- function getPropertyOfObjectType(type, name) {
- if (type.flags & 80896) {
- var resolved = resolveStructuredTypeMembers(type);
- if (ts.hasProperty(resolved.members, name)) {
- var symbol = resolved.members[name];
- if (symbolIsValue(symbol)) {
- return symbol;
- }
- }
- }
- }
- function getPropertiesOfUnionOrIntersectionType(type) {
- for (var _i = 0, _a = type.types; _i < _a.length; _i++) {
- var current = _a[_i];
- for (var _b = 0, _c = getPropertiesOfType(current); _b < _c.length; _b++) {
- var prop = _c[_b];
- getPropertyOfUnionOrIntersectionType(type, prop.name);
- }
- if (type.flags & 16384) {
- break;
- }
- }
- return type.resolvedProperties ? symbolsToArray(type.resolvedProperties) : emptyArray;
- }
- function getPropertiesOfType(type) {
- type = getApparentType(type);
- return type.flags & 49152 ? getPropertiesOfUnionOrIntersectionType(type) : getPropertiesOfObjectType(type);
- }
- function getApparentType(type) {
- if (type.flags & 512) {
- do {
- type = getConstraintOfTypeParameter(type);
- } while (type && type.flags & 512);
- if (!type) {
- type = emptyObjectType;
- }
- }
- if (type.flags & 258) {
- type = globalStringType;
- }
- else if (type.flags & 132) {
- type = globalNumberType;
- }
- else if (type.flags & 8) {
- type = globalBooleanType;
- }
- else if (type.flags & 16777216) {
- type = globalESSymbolType;
- }
- return type;
- }
- function createUnionOrIntersectionProperty(containingType, name) {
- var types = containingType.types;
- var props;
- for (var _i = 0; _i < types.length; _i++) {
- var current = types[_i];
- var type = getApparentType(current);
- if (type !== unknownType) {
- var prop = getPropertyOfType(type, name);
- if (prop && !(getDeclarationFlagsFromSymbol(prop) & (32 | 64))) {
- if (!props) {
- props = [prop];
- }
- else if (!ts.contains(props, prop)) {
- props.push(prop);
- }
- }
- else if (containingType.flags & 16384) {
- return undefined;
- }
- }
- }
- if (!props) {
- return undefined;
- }
- if (props.length === 1) {
- return props[0];
- }
- var propTypes = [];
- var declarations = [];
- for (var _a = 0; _a < props.length; _a++) {
- var prop = props[_a];
- if (prop.declarations) {
- ts.addRange(declarations, prop.declarations);
- }
- propTypes.push(getTypeOfSymbol(prop));
- }
- var result = createSymbol(4 | 67108864 | 268435456, name);
- result.containingType = containingType;
- result.declarations = declarations;
- result.type = containingType.flags & 16384 ? getUnionType(propTypes) : getIntersectionType(propTypes);
- return result;
- }
- function getPropertyOfUnionOrIntersectionType(type, name) {
- var properties = type.resolvedProperties || (type.resolvedProperties = {});
- if (ts.hasProperty(properties, name)) {
- return properties[name];
- }
- var property = createUnionOrIntersectionProperty(type, name);
- if (property) {
- properties[name] = property;
- }
- return property;
- }
- function getPropertyOfType(type, name) {
- type = getApparentType(type);
- if (type.flags & 80896) {
- var resolved = resolveStructuredTypeMembers(type);
- if (ts.hasProperty(resolved.members, name)) {
- var symbol = resolved.members[name];
- if (symbolIsValue(symbol)) {
- return symbol;
- }
- }
- if (resolved === anyFunctionType || resolved.callSignatures.length || resolved.constructSignatures.length) {
- var symbol = getPropertyOfObjectType(globalFunctionType, name);
- if (symbol) {
- return symbol;
- }
- }
- return getPropertyOfObjectType(globalObjectType, name);
- }
- if (type.flags & 49152) {
- return getPropertyOfUnionOrIntersectionType(type, name);
- }
- return undefined;
- }
- function getSignaturesOfStructuredType(type, kind) {
- if (type.flags & 130048) {
- var resolved = resolveStructuredTypeMembers(type);
- return kind === 0 ? resolved.callSignatures : resolved.constructSignatures;
- }
- return emptyArray;
- }
- function getSignaturesOfType(type, kind) {
- return getSignaturesOfStructuredType(getApparentType(type), kind);
- }
- function typeHasConstructSignatures(type) {
- var apparentType = getApparentType(type);
- if (apparentType.flags & (80896 | 16384)) {
- var resolved = resolveStructuredTypeMembers(type);
- return resolved.constructSignatures.length > 0;
- }
- return false;
- }
- function typeHasCallOrConstructSignatures(type) {
- var apparentType = getApparentType(type);
- if (apparentType.flags & 130048) {
- var resolved = resolveStructuredTypeMembers(type);
- return resolved.callSignatures.length > 0 || resolved.constructSignatures.length > 0;
- }
- return false;
- }
- function getIndexTypeOfStructuredType(type, kind) {
- if (type.flags & 130048) {
- var resolved = resolveStructuredTypeMembers(type);
- return kind === 0 ? resolved.stringIndexType : resolved.numberIndexType;
- }
- }
- function getIndexTypeOfType(type, kind) {
- return getIndexTypeOfStructuredType(getApparentType(type), kind);
- }
- function getTypeParametersFromDeclaration(typeParameterDeclarations) {
- var result = [];
- ts.forEach(typeParameterDeclarations, function (node) {
- var tp = getDeclaredTypeOfTypeParameter(node.symbol);
- if (!ts.contains(result, tp)) {
- result.push(tp);
- }
- });
- return result;
- }
- function symbolsToArray(symbols) {
- var result = [];
- for (var id in symbols) {
- if (!isReservedMemberName(id)) {
- result.push(symbols[id]);
- }
- }
- return result;
- }
- function isOptionalParameter(node) {
- if (ts.hasQuestionToken(node)) {
- return true;
- }
- if (node.initializer) {
- var signatureDeclaration = node.parent;
- var signature = getSignatureFromDeclaration(signatureDeclaration);
- var parameterIndex = signatureDeclaration.parameters.indexOf(node);
- ts.Debug.assert(parameterIndex >= 0);
- return parameterIndex >= signature.minArgumentCount;
- }
- return false;
- }
- function getSignatureFromDeclaration(declaration) {
- var links = getNodeLinks(declaration);
- if (!links.resolvedSignature) {
- var classType = declaration.kind === 144 ?
- getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol))
- : undefined;
- var typeParameters = classType ? classType.localTypeParameters :
- declaration.typeParameters ? getTypeParametersFromDeclaration(declaration.typeParameters) : undefined;
- var parameters = [];
- var hasStringLiterals = false;
- var minArgumentCount = -1;
- for (var i = 0, n = declaration.parameters.length; i < n; i++) {
- var param = declaration.parameters[i];
- parameters.push(param.symbol);
- if (param.type && param.type.kind === 9) {
- hasStringLiterals = true;
- }
- if (param.initializer || param.questionToken || param.dotDotDotToken) {
- if (minArgumentCount < 0) {
- minArgumentCount = i;
- }
- }
- else {
- minArgumentCount = -1;
- }
- }
- if (minArgumentCount < 0) {
- minArgumentCount = declaration.parameters.length;
- }
- var returnType;
- var typePredicate;
- if (classType) {
- returnType = classType;
- }
- else if (declaration.type) {
- returnType = getTypeFromTypeNode(declaration.type);
- if (declaration.type.kind === 150) {
- var typePredicateNode = declaration.type;
- typePredicate = {
- parameterName: typePredicateNode.parameterName ? typePredicateNode.parameterName.text : undefined,
- parameterIndex: typePredicateNode.parameterName ? getTypePredicateParameterIndex(declaration.parameters, typePredicateNode.parameterName) : undefined,
- type: getTypeFromTypeNode(typePredicateNode.type)
- };
- }
- }
- else {
- if (declaration.kind === 145 && !ts.hasDynamicName(declaration)) {
- var setter = ts.getDeclarationOfKind(declaration.symbol, 146);
- returnType = getAnnotatedAccessorType(setter);
- }
- if (!returnType && ts.nodeIsMissing(declaration.body)) {
- returnType = anyType;
- }
- }
- links.resolvedSignature = createSignature(declaration, typeParameters, parameters, returnType, typePredicate, minArgumentCount, ts.hasRestParameter(declaration), hasStringLiterals);
- }
- return links.resolvedSignature;
- }
- function getSignaturesOfSymbol(symbol) {
- if (!symbol)
- return emptyArray;
- var result = [];
- for (var i = 0, len = symbol.declarations.length; i < len; i++) {
- var node = symbol.declarations[i];
- switch (node.kind) {
- case 152:
- case 153:
- case 213:
- case 143:
- case 142:
- case 144:
- case 147:
- case 148:
- case 149:
- case 145:
- case 146:
- case 173:
- case 174:
- if (i > 0 && node.body) {
- var previous = symbol.declarations[i - 1];
- if (node.parent === previous.parent && node.kind === previous.kind && node.pos === previous.end) {
- break;
- }
- }
- result.push(getSignatureFromDeclaration(node));
- }
- }
- return result;
- }
- function getReturnTypeOfSignature(signature) {
- if (!signature.resolvedReturnType) {
- if (!pushTypeResolution(signature, 3)) {
- return unknownType;
- }
- var type;
- if (signature.target) {
- type = instantiateType(getReturnTypeOfSignature(signature.target), signature.mapper);
- }
- else if (signature.unionSignatures) {
- type = getUnionType(ts.map(signature.unionSignatures, getReturnTypeOfSignature));
- }
- else {
- type = getReturnTypeFromBody(signature.declaration);
- }
- if (!popTypeResolution()) {
- type = anyType;
- if (compilerOptions.noImplicitAny) {
- var declaration = signature.declaration;
- if (declaration.name) {
- error(declaration.name, ts.Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions, ts.declarationNameToString(declaration.name));
- }
- else {
- error(declaration, ts.Diagnostics.Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions);
- }
- }
- }
- signature.resolvedReturnType = type;
- }
- return signature.resolvedReturnType;
- }
- function getRestTypeOfSignature(signature) {
- if (signature.hasRestParameter) {
- var type = getTypeOfSymbol(ts.lastOrUndefined(signature.parameters));
- if (type.flags & 4096 && type.target === globalArrayType) {
- return type.typeArguments[0];
- }
- }
- return anyType;
- }
- function getSignatureInstantiation(signature, typeArguments) {
- return instantiateSignature(signature, createTypeMapper(signature.typeParameters, typeArguments), true);
- }
- function getErasedSignature(signature) {
- if (!signature.typeParameters)
- return signature;
- if (!signature.erasedSignatureCache) {
- if (signature.target) {
- signature.erasedSignatureCache = instantiateSignature(getErasedSignature(signature.target), signature.mapper);
- }
- else {
- signature.erasedSignatureCache = instantiateSignature(signature, createTypeEraser(signature.typeParameters), true);
- }
- }
- return signature.erasedSignatureCache;
- }
- function getOrCreateTypeFromSignature(signature) {
- if (!signature.isolatedSignatureType) {
- var isConstructor = signature.declaration.kind === 144 || signature.declaration.kind === 148;
- var type = createObjectType(65536 | 262144);
- type.members = emptySymbols;
- type.properties = emptyArray;
- type.callSignatures = !isConstructor ? [signature] : emptyArray;
- type.constructSignatures = isConstructor ? [signature] : emptyArray;
- signature.isolatedSignatureType = type;
- }
- return signature.isolatedSignatureType;
- }
- function getIndexSymbol(symbol) {
- return symbol.members["__index"];
- }
- function getIndexDeclarationOfSymbol(symbol, kind) {
- var syntaxKind = kind === 1 ? 128 : 130;
- var indexSymbol = getIndexSymbol(symbol);
- if (indexSymbol) {
- for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
- var decl = _a[_i];
- var node = decl;
- if (node.parameters.length === 1) {
- var parameter = node.parameters[0];
- if (parameter && parameter.type && parameter.type.kind === syntaxKind) {
- return node;
- }
- }
- }
- }
- return undefined;
- }
- function getIndexTypeOfSymbol(symbol, kind) {
- var declaration = getIndexDeclarationOfSymbol(symbol, kind);
- return declaration
- ? declaration.type ? getTypeFromTypeNode(declaration.type) : anyType
- : undefined;
- }
- function getConstraintOfTypeParameter(type) {
- if (!type.constraint) {
- if (type.target) {
- var targetConstraint = getConstraintOfTypeParameter(type.target);
- type.constraint = targetConstraint ? instantiateType(targetConstraint, type.mapper) : noConstraintType;
- }
- else {
- type.constraint = getTypeFromTypeNode(ts.getDeclarationOfKind(type.symbol, 137).constraint);
- }
- }
- return type.constraint === noConstraintType ? undefined : type.constraint;
- }
- function getParentSymbolOfTypeParameter(typeParameter) {
- return getSymbolOfNode(ts.getDeclarationOfKind(typeParameter.symbol, 137).parent);
- }
- function getTypeListId(types) {
- if (types) {
- switch (types.length) {
- case 1:
- return "" + types[0].id;
- case 2:
- return types[0].id + "," + types[1].id;
- default:
- var result = "";
- for (var i = 0; i < types.length; i++) {
- if (i > 0) {
- result += ",";
- }
- result += types[i].id;
- }
- return result;
- }
- }
- return "";
- }
- function getPropagatingFlagsOfTypes(types) {
- var result = 0;
- for (var _i = 0; _i < types.length; _i++) {
- var type = types[_i];
- result |= type.flags;
- }
- return result & 14680064;
- }
- function createTypeReference(target, typeArguments) {
- var id = getTypeListId(typeArguments);
- var type = target.instantiations[id];
- if (!type) {
- var flags = 4096 | (typeArguments ? getPropagatingFlagsOfTypes(typeArguments) : 0);
- type = target.instantiations[id] = createObjectType(flags, target.symbol);
- type.target = target;
- type.typeArguments = typeArguments;
- }
- return type;
- }
- function isTypeParameterReferenceIllegalInConstraint(typeReferenceNode, typeParameterSymbol) {
- var links = getNodeLinks(typeReferenceNode);
- if (links.isIllegalTypeReferenceInConstraint !== undefined) {
- return links.isIllegalTypeReferenceInConstraint;
- }
- var currentNode = typeReferenceNode;
- while (!ts.forEach(typeParameterSymbol.declarations, function (d) { return d.parent === currentNode.parent; })) {
- currentNode = currentNode.parent;
- }
- links.isIllegalTypeReferenceInConstraint = currentNode.kind === 137;
- return links.isIllegalTypeReferenceInConstraint;
- }
- function checkTypeParameterHasIllegalReferencesInConstraint(typeParameter) {
- var typeParameterSymbol;
- function check(n) {
- if (n.kind === 151 && n.typeName.kind === 69) {
- var links = getNodeLinks(n);
- if (links.isIllegalTypeReferenceInConstraint === undefined) {
- var symbol = resolveName(typeParameter, n.typeName.text, 793056, undefined, undefined);
- if (symbol && (symbol.flags & 262144)) {
- links.isIllegalTypeReferenceInConstraint = ts.forEach(symbol.declarations, function (d) { return d.parent === typeParameter.parent; });
- }
- }
- if (links.isIllegalTypeReferenceInConstraint) {
- error(typeParameter, ts.Diagnostics.Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list);
- }
- }
- ts.forEachChild(n, check);
- }
- if (typeParameter.constraint) {
- typeParameterSymbol = getSymbolOfNode(typeParameter);
- check(typeParameter.constraint);
- }
- }
- function getTypeFromClassOrInterfaceReference(node, symbol) {
- var type = getDeclaredTypeOfSymbol(symbol);
- var typeParameters = type.localTypeParameters;
- if (typeParameters) {
- if (!node.typeArguments || node.typeArguments.length !== typeParameters.length) {
- error(node, ts.Diagnostics.Generic_type_0_requires_1_type_argument_s, typeToString(type, undefined, 1), typeParameters.length);
- return unknownType;
- }
- return createTypeReference(type, ts.concatenate(type.outerTypeParameters, ts.map(node.typeArguments, getTypeFromTypeNode)));
- }
- if (node.typeArguments) {
- error(node, ts.Diagnostics.Type_0_is_not_generic, typeToString(type));
- return unknownType;
- }
- return type;
- }
- function getTypeFromTypeAliasReference(node, symbol) {
- var type = getDeclaredTypeOfSymbol(symbol);
- var links = getSymbolLinks(symbol);
- var typeParameters = links.typeParameters;
- if (typeParameters) {
- if (!node.typeArguments || node.typeArguments.length !== typeParameters.length) {
- error(node, ts.Diagnostics.Generic_type_0_requires_1_type_argument_s, symbolToString(symbol), typeParameters.length);
- return unknownType;
- }
- var typeArguments = ts.map(node.typeArguments, getTypeFromTypeNode);
- var id = getTypeListId(typeArguments);
- return links.instantiations[id] || (links.instantiations[id] = instantiateType(type, createTypeMapper(typeParameters, typeArguments)));
- }
- if (node.typeArguments) {
- error(node, ts.Diagnostics.Type_0_is_not_generic, symbolToString(symbol));
- return unknownType;
- }
- return type;
- }
- function getTypeFromNonGenericTypeReference(node, symbol) {
- if (symbol.flags & 262144 && isTypeParameterReferenceIllegalInConstraint(node, symbol)) {
- return unknownType;
- }
- if (node.typeArguments) {
- error(node, ts.Diagnostics.Type_0_is_not_generic, symbolToString(symbol));
- return unknownType;
- }
- return getDeclaredTypeOfSymbol(symbol);
- }
- function getTypeFromTypeReference(node) {
- var links = getNodeLinks(node);
- if (!links.resolvedType) {
- var typeNameOrExpression = node.kind === 151 ? node.typeName :
- ts.isSupportedExpressionWithTypeArguments(node) ? node.expression :
- undefined;
- var symbol = typeNameOrExpression && resolveEntityName(typeNameOrExpression, 793056) || unknownSymbol;
- var type = symbol === unknownSymbol ? unknownType :
- symbol.flags & (32 | 64) ? getTypeFromClassOrInterfaceReference(node, symbol) :
- symbol.flags & 524288 ? getTypeFromTypeAliasReference(node, symbol) :
- getTypeFromNonGenericTypeReference(node, symbol);
- links.resolvedSymbol = symbol;
- links.resolvedType = type;
- }
- return links.resolvedType;
- }
- function getTypeFromTypeQueryNode(node) {
- var links = getNodeLinks(node);
- if (!links.resolvedType) {
- links.resolvedType = getWidenedType(checkExpression(node.exprName));
- }
- return links.resolvedType;
- }
- function getTypeOfGlobalSymbol(symbol, arity) {
- function getTypeDeclaration(symbol) {
- var declarations = symbol.declarations;
- for (var _i = 0; _i < declarations.length; _i++) {
- var declaration = declarations[_i];
- switch (declaration.kind) {
- case 214:
- case 215:
- case 217:
- return declaration;
- }
- }
- }
- if (!symbol) {
- return arity ? emptyGenericType : emptyObjectType;
- }
- var type = getDeclaredTypeOfSymbol(symbol);
- if (!(type.flags & 80896)) {
- error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_be_a_class_or_interface_type, symbol.name);
- return arity ? emptyGenericType : emptyObjectType;
- }
- if ((type.typeParameters ? type.typeParameters.length : 0) !== arity) {
- error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_have_1_type_parameter_s, symbol.name, arity);
- return arity ? emptyGenericType : emptyObjectType;
- }
- return type;
- }
- function getGlobalValueSymbol(name) {
- return getGlobalSymbol(name, 107455, ts.Diagnostics.Cannot_find_global_value_0);
- }
- function getGlobalTypeSymbol(name) {
- return getGlobalSymbol(name, 793056, ts.Diagnostics.Cannot_find_global_type_0);
- }
- function getGlobalSymbol(name, meaning, diagnostic) {
- return resolveName(undefined, name, meaning, diagnostic, name);
- }
- function getGlobalType(name, arity) {
- if (arity === void 0) { arity = 0; }
- return getTypeOfGlobalSymbol(getGlobalTypeSymbol(name), arity);
- }
- function tryGetGlobalType(name, arity) {
- if (arity === void 0) { arity = 0; }
- return getTypeOfGlobalSymbol(getGlobalSymbol(name, 793056, undefined), arity);
- }
- function getExportedTypeFromNamespace(namespace, name) {
- var namespaceSymbol = getGlobalSymbol(namespace, 1536, undefined);
- var typeSymbol = namespaceSymbol && getSymbol(namespaceSymbol.exports, name, 793056);
- return typeSymbol && getDeclaredTypeOfSymbol(typeSymbol);
- }
- function getGlobalESSymbolConstructorSymbol() {
- return globalESSymbolConstructorSymbol || (globalESSymbolConstructorSymbol = getGlobalValueSymbol("Symbol"));
- }
- function createTypedPropertyDescriptorType(propertyType) {
- var globalTypedPropertyDescriptorType = getGlobalTypedPropertyDescriptorType();
- return globalTypedPropertyDescriptorType !== emptyGenericType
- ? createTypeReference(globalTypedPropertyDescriptorType, [propertyType])
- : emptyObjectType;
- }
- function createTypeFromGenericGlobalType(genericGlobalType, typeArguments) {
- return genericGlobalType !== emptyGenericType ? createTypeReference(genericGlobalType, typeArguments) : emptyObjectType;
- }
- function createIterableType(elementType) {
- return createTypeFromGenericGlobalType(globalIterableType, [elementType]);
- }
- function createIterableIteratorType(elementType) {
- return createTypeFromGenericGlobalType(globalIterableIteratorType, [elementType]);
- }
- function createArrayType(elementType) {
- return createTypeFromGenericGlobalType(globalArrayType, [elementType]);
- }
- function getTypeFromArrayTypeNode(node) {
- var links = getNodeLinks(node);
- if (!links.resolvedType) {
- links.resolvedType = createArrayType(getTypeFromTypeNode(node.elementType));
- }
- return links.resolvedType;
- }
- function createTupleType(elementTypes) {
- var id = getTypeListId(elementTypes);
- return tupleTypes[id] || (tupleTypes[id] = createNewTupleType(elementTypes));
- }
- function createNewTupleType(elementTypes) {
- var type = createObjectType(8192 | getPropagatingFlagsOfTypes(elementTypes));
- type.elementTypes = elementTypes;
- return type;
- }
- function getTypeFromTupleTypeNode(node) {
- var links = getNodeLinks(node);
- if (!links.resolvedType) {
- links.resolvedType = createTupleType(ts.map(node.elementTypes, getTypeFromTypeNode));
- }
- return links.resolvedType;
- }
- function addTypeToSet(typeSet, type, typeSetKind) {
- if (type.flags & typeSetKind) {
- addTypesToSet(typeSet, type.types, typeSetKind);
- }
- else if (!ts.contains(typeSet, type)) {
- typeSet.push(type);
- }
- }
- function addTypesToSet(typeSet, types, typeSetKind) {
- for (var _i = 0; _i < types.length; _i++) {
- var type = types[_i];
- addTypeToSet(typeSet, type, typeSetKind);
- }
- }
- function isSubtypeOfAny(candidate, types) {
- for (var i = 0, len = types.length; i < len; i++) {
- if (candidate !== types[i] && isTypeSubtypeOf(candidate, types[i])) {
- return true;
- }
- }
- return false;
- }
- function removeSubtypes(types) {
- var i = types.length;
- while (i > 0) {
- i--;
- if (isSubtypeOfAny(types[i], types)) {
- types.splice(i, 1);
- }
- }
- }
- function containsTypeAny(types) {
- for (var _i = 0; _i < types.length; _i++) {
- var type = types[_i];
- if (isTypeAny(type)) {
- return true;
- }
- }
- return false;
- }
- function removeAllButLast(types, typeToRemove) {
- var i = types.length;
- while (i > 0 && types.length > 1) {
- i--;
- if (types[i] === typeToRemove) {
- types.splice(i, 1);
- }
- }
- }
- function getUnionType(types, noSubtypeReduction) {
- if (types.length === 0) {
- return emptyObjectType;
- }
- var typeSet = [];
- addTypesToSet(typeSet, types, 16384);
- if (containsTypeAny(typeSet)) {
- return anyType;
- }
- if (noSubtypeReduction) {
- removeAllButLast(typeSet, undefinedType);
- removeAllButLast(typeSet, nullType);
- }
- else {
- removeSubtypes(typeSet);
- }
- if (typeSet.length === 1) {
- return typeSet[0];
- }
- var id = getTypeListId(typeSet);
- var type = unionTypes[id];
- if (!type) {
- type = unionTypes[id] = createObjectType(16384 | getPropagatingFlagsOfTypes(typeSet));
- type.types = typeSet;
- }
- return type;
- }
- function getTypeFromUnionTypeNode(node) {
- var links = getNodeLinks(node);
- if (!links.resolvedType) {
- links.resolvedType = getUnionType(ts.map(node.types, getTypeFromTypeNode), true);
- }
- return links.resolvedType;
- }
- function getIntersectionType(types) {
- if (types.length === 0) {
- return emptyObjectType;
- }
- var typeSet = [];
- addTypesToSet(typeSet, types, 32768);
- if (containsTypeAny(typeSet)) {
- return anyType;
- }
- if (typeSet.length === 1) {
- return typeSet[0];
- }
- var id = getTypeListId(typeSet);
- var type = intersectionTypes[id];
- if (!type) {
- type = intersectionTypes[id] = createObjectType(32768 | getPropagatingFlagsOfTypes(typeSet));
- type.types = typeSet;
- }
- return type;
- }
- function getTypeFromIntersectionTypeNode(node) {
- var links = getNodeLinks(node);
- if (!links.resolvedType) {
- links.resolvedType = getIntersectionType(ts.map(node.types, getTypeFromTypeNode));
- }
- return links.resolvedType;
- }
- function getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node) {
- var links = getNodeLinks(node);
- if (!links.resolvedType) {
- links.resolvedType = createObjectType(65536, node.symbol);
- }
- return links.resolvedType;
- }
- function getStringLiteralType(node) {
- if (ts.hasProperty(stringLiteralTypes, node.text)) {
- return stringLiteralTypes[node.text];
- }
- var type = stringLiteralTypes[node.text] = createType(256);
- type.text = ts.getTextOfNode(node);
- return type;
- }
- function getTypeFromStringLiteral(node) {
- var links = getNodeLinks(node);
- if (!links.resolvedType) {
- links.resolvedType = getStringLiteralType(node);
- }
- return links.resolvedType;
- }
- function getThisType(node) {
- var container = ts.getThisContainer(node, false);
- var parent = container && container.parent;
- if (parent && (ts.isClassLike(parent) || parent.kind === 215)) {
- if (!(container.flags & 128) &&
- (container.kind !== 144 || ts.isNodeDescendentOf(node, container.body))) {
- return getDeclaredTypeOfClassOrInterface(getSymbolOfNode(parent)).thisType;
- }
- }
- error(node, ts.Diagnostics.A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface);
- return unknownType;
- }
- function getTypeFromThisTypeNode(node) {
- var links = getNodeLinks(node);
- if (!links.resolvedType) {
- links.resolvedType = getThisType(node);
- }
- return links.resolvedType;
- }
- function getTypeFromTypeNode(node) {
- switch (node.kind) {
- case 117:
- return anyType;
- case 130:
- return stringType;
- case 128:
- return numberType;
- case 120:
- return booleanType;
- case 131:
- return esSymbolType;
- case 103:
- return voidType;
- case 97:
- return getTypeFromThisTypeNode(node);
- case 9:
- return getTypeFromStringLiteral(node);
- case 151:
- return getTypeFromTypeReference(node);
- case 150:
- return booleanType;
- case 188:
- return getTypeFromTypeReference(node);
- case 154:
- return getTypeFromTypeQueryNode(node);
- case 156:
- return getTypeFromArrayTypeNode(node);
- case 157:
- return getTypeFromTupleTypeNode(node);
- case 158:
- return getTypeFromUnionTypeNode(node);
- case 159:
- return getTypeFromIntersectionTypeNode(node);
- case 160:
- return getTypeFromTypeNode(node.type);
- case 152:
- case 153:
- case 155:
- return getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node);
- case 69:
- case 135:
- var symbol = getSymbolAtLocation(node);
- return symbol && getDeclaredTypeOfSymbol(symbol);
- default:
- return unknownType;
- }
- }
- function instantiateList(items, mapper, instantiator) {
- if (items && items.length) {
- var result = [];
- for (var _i = 0; _i < items.length; _i++) {
- var v = items[_i];
- result.push(instantiator(v, mapper));
- }
- return result;
- }
- return items;
- }
- function createUnaryTypeMapper(source, target) {
- return function (t) { return t === source ? target : t; };
- }
- function createBinaryTypeMapper(source1, target1, source2, target2) {
- return function (t) { return t === source1 ? target1 : t === source2 ? target2 : t; };
- }
- function createTypeMapper(sources, targets) {
- switch (sources.length) {
- case 1: return createUnaryTypeMapper(sources[0], targets[0]);
- case 2: return createBinaryTypeMapper(sources[0], targets[0], sources[1], targets[1]);
- }
- return function (t) {
- for (var i = 0; i < sources.length; i++) {
- if (t === sources[i]) {
- return targets[i];
- }
- }
- return t;
- };
- }
- function createUnaryTypeEraser(source) {
- return function (t) { return t === source ? anyType : t; };
- }
- function createBinaryTypeEraser(source1, source2) {
- return function (t) { return t === source1 || t === source2 ? anyType : t; };
- }
- function createTypeEraser(sources) {
- switch (sources.length) {
- case 1: return createUnaryTypeEraser(sources[0]);
- case 2: return createBinaryTypeEraser(sources[0], sources[1]);
- }
- return function (t) {
- for (var _i = 0; _i < sources.length; _i++) {
- var source = sources[_i];
- if (t === source) {
- return anyType;
- }
- }
- return t;
- };
- }
- function createInferenceMapper(context) {
- var mapper = function (t) {
- for (var i = 0; i < context.typeParameters.length; i++) {
- if (t === context.typeParameters[i]) {
- context.inferences[i].isFixed = true;
- return getInferredType(context, i);
- }
- }
- return t;
- };
- mapper.context = context;
- return mapper;
- }
- function identityMapper(type) {
- return type;
- }
- function combineTypeMappers(mapper1, mapper2) {
- return function (t) { return instantiateType(mapper1(t), mapper2); };
- }
- function instantiateTypeParameter(typeParameter, mapper) {
- var result = createType(512);
- result.symbol = typeParameter.symbol;
- if (typeParameter.constraint) {
- result.constraint = instantiateType(typeParameter.constraint, mapper);
- }
- else {
- result.target = typeParameter;
- result.mapper = mapper;
- }
- return result;
- }
- function instantiateSignature(signature, mapper, eraseTypeParameters) {
- var freshTypeParameters;
- var freshTypePredicate;
- if (signature.typeParameters && !eraseTypeParameters) {
- freshTypeParameters = instantiateList(signature.typeParameters, mapper, instantiateTypeParameter);
- mapper = combineTypeMappers(createTypeMapper(signature.typeParameters, freshTypeParameters), mapper);
- }
- if (signature.typePredicate) {
- freshTypePredicate = {
- parameterName: signature.typePredicate.parameterName,
- parameterIndex: signature.typePredicate.parameterIndex,
- type: instantiateType(signature.typePredicate.type, mapper)
- };
- }
- var result = createSignature(signature.declaration, freshTypeParameters, instantiateList(signature.parameters, mapper, instantiateSymbol), instantiateType(signature.resolvedReturnType, mapper), freshTypePredicate, signature.minArgumentCount, signature.hasRestParameter, signature.hasStringLiterals);
- result.target = signature;
- result.mapper = mapper;
- return result;
- }
- function instantiateSymbol(symbol, mapper) {
- if (symbol.flags & 16777216) {
- var links = getSymbolLinks(symbol);
- symbol = links.target;
- mapper = combineTypeMappers(links.mapper, mapper);
- }
- var result = createSymbol(16777216 | 67108864 | symbol.flags, symbol.name);
- result.declarations = symbol.declarations;
- result.parent = symbol.parent;
- result.target = symbol;
- result.mapper = mapper;
- if (symbol.valueDeclaration) {
- result.valueDeclaration = symbol.valueDeclaration;
- }
- return result;
- }
- function instantiateAnonymousType(type, mapper) {
- if (mapper.instantiations) {
- var cachedType = mapper.instantiations[type.id];
- if (cachedType) {
- return cachedType;
- }
- }
- else {
- mapper.instantiations = [];
- }
- var result = createObjectType(65536 | 131072, type.symbol);
- result.target = type;
- result.mapper = mapper;
- mapper.instantiations[type.id] = result;
- return result;
- }
- function instantiateType(type, mapper) {
- if (type && mapper !== identityMapper) {
- if (type.flags & 512) {
- return mapper(type);
- }
- if (type.flags & 65536) {
- return type.symbol && type.symbol.flags & (16 | 8192 | 32 | 2048 | 4096) ?
- instantiateAnonymousType(type, mapper) : type;
- }
- if (type.flags & 4096) {
- return createTypeReference(type.target, instantiateList(type.typeArguments, mapper, instantiateType));
- }
- if (type.flags & 8192) {
- return createTupleType(instantiateList(type.elementTypes, mapper, instantiateType));
- }
- if (type.flags & 16384) {
- return getUnionType(instantiateList(type.types, mapper, instantiateType), true);
- }
- if (type.flags & 32768) {
- return getIntersectionType(instantiateList(type.types, mapper, instantiateType));
- }
- }
- return type;
- }
- function isContextSensitive(node) {
- ts.Debug.assert(node.kind !== 143 || ts.isObjectLiteralMethod(node));
- switch (node.kind) {
- case 173:
- case 174:
- return isContextSensitiveFunctionLikeDeclaration(node);
- case 165:
- return ts.forEach(node.properties, isContextSensitive);
- case 164:
- return ts.forEach(node.elements, isContextSensitive);
- case 182:
- return isContextSensitive(node.whenTrue) ||
- isContextSensitive(node.whenFalse);
- case 181:
- return node.operatorToken.kind === 52 &&
- (isContextSensitive(node.left) || isContextSensitive(node.right));
- case 245:
- return isContextSensitive(node.initializer);
- case 143:
- case 142:
- return isContextSensitiveFunctionLikeDeclaration(node);
- case 172:
- return isContextSensitive(node.expression);
- }
- return false;
- }
- function isContextSensitiveFunctionLikeDeclaration(node) {
- return !node.typeParameters && node.parameters.length && !ts.forEach(node.parameters, function (p) { return p.type; });
- }
- function getTypeWithoutSignatures(type) {
- if (type.flags & 80896) {
- var resolved = resolveStructuredTypeMembers(type);
- if (resolved.constructSignatures.length) {
- var result = createObjectType(65536, type.symbol);
- result.members = resolved.members;
- result.properties = resolved.properties;
- result.callSignatures = emptyArray;
- result.constructSignatures = emptyArray;
- type = result;
- }
- }
- return type;
- }
- function isTypeIdenticalTo(source, target) {
- return checkTypeRelatedTo(source, target, identityRelation, undefined);
- }
- function compareTypes(source, target) {
- return checkTypeRelatedTo(source, target, identityRelation, undefined) ? -1 : 0;
- }
- function isTypeSubtypeOf(source, target) {
- return checkTypeSubtypeOf(source, target, undefined);
- }
- function isTypeAssignableTo(source, target) {
- return checkTypeAssignableTo(source, target, undefined);
- }
- function checkTypeSubtypeOf(source, target, errorNode, headMessage, containingMessageChain) {
- return checkTypeRelatedTo(source, target, subtypeRelation, errorNode, headMessage, containingMessageChain);
- }
- function checkTypeAssignableTo(source, target, errorNode, headMessage, containingMessageChain) {
- return checkTypeRelatedTo(source, target, assignableRelation, errorNode, headMessage, containingMessageChain);
- }
- function isSignatureAssignableTo(source, target) {
- var sourceType = getOrCreateTypeFromSignature(source);
- var targetType = getOrCreateTypeFromSignature(target);
- return checkTypeRelatedTo(sourceType, targetType, assignableRelation, undefined);
- }
- function checkTypeRelatedTo(source, target, relation, errorNode, headMessage, containingMessageChain) {
- var errorInfo;
- var sourceStack;
- var targetStack;
- var maybeStack;
- var expandingFlags;
- var depth = 0;
- var overflow = false;
- var elaborateErrors = false;
- ts.Debug.assert(relation !== identityRelation || !errorNode, "no error reporting in identity checking");
- var result = isRelatedTo(source, target, errorNode !== undefined, headMessage);
- if (overflow) {
- error(errorNode, ts.Diagnostics.Excessive_stack_depth_comparing_types_0_and_1, typeToString(source), typeToString(target));
- }
- else if (errorInfo) {
- if (errorInfo.next === undefined) {
- errorInfo = undefined;
- elaborateErrors = true;
- isRelatedTo(source, target, errorNode !== undefined, headMessage);
- }
- if (containingMessageChain) {
- errorInfo = ts.concatenateDiagnosticMessageChains(containingMessageChain, errorInfo);
- }
- diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo));
- }
- return result !== 0;
- function reportError(message, arg0, arg1, arg2) {
- errorInfo = ts.chainDiagnosticMessages(errorInfo, message, arg0, arg1, arg2);
- }
- function reportRelationError(message, source, target) {
- var sourceType = typeToString(source);
- var targetType = typeToString(target);
- if (sourceType === targetType) {
- sourceType = typeToString(source, undefined, 128);
- targetType = typeToString(target, undefined, 128);
- }
- reportError(message || ts.Diagnostics.Type_0_is_not_assignable_to_type_1, sourceType, targetType);
- }
- function isRelatedTo(source, target, reportErrors, headMessage) {
- var result;
- if (source === target)
- return -1;
- if (relation === identityRelation) {
- return isIdenticalTo(source, target);
- }
- if (isTypeAny(target))
- return -1;
- if (source === undefinedType)
- return -1;
- if (source === nullType && target !== undefinedType)
- return -1;
- if (source.flags & 128 && target === numberType)
- return -1;
- if (source.flags & 256 && target === stringType)
- return -1;
- if (relation === assignableRelation) {
- if (isTypeAny(source))
- return -1;
- if (source === numberType && target.flags & 128)
- return -1;
- }
- if (source.flags & 1048576) {
- if (hasExcessProperties(source, target, reportErrors)) {
- if (reportErrors) {
- reportRelationError(headMessage, source, target);
- }
- return 0;
- }
- if (target.flags & 49152) {
- source = getRegularTypeOfObjectLiteral(source);
- }
- }
- var saveErrorInfo = errorInfo;
- if (source.flags & 16384) {
- if (result = eachTypeRelatedToType(source, target, reportErrors)) {
- return result;
- }
- }
- else if (target.flags & 32768) {
- if (result = typeRelatedToEachType(source, target, reportErrors)) {
- return result;
- }
- }
- else {
- if (source.flags & 32768) {
- if (result = someTypeRelatedToType(source, target, reportErrors && !(target.flags & 16384))) {
- return result;
- }
- }
- if (target.flags & 16384) {
- if (result = typeRelatedToSomeType(source, target, reportErrors)) {
- return result;
- }
- }
- }
- if (source.flags & 512) {
- var constraint = getConstraintOfTypeParameter(source);
- if (!constraint || constraint.flags & 1) {
- constraint = emptyObjectType;
- }
- var reportConstraintErrors = reportErrors && constraint !== emptyObjectType;
- if (result = isRelatedTo(constraint, target, reportConstraintErrors)) {
- errorInfo = saveErrorInfo;
- return result;
- }
- }
- else {
- if (source.flags & 4096 && target.flags & 4096 && source.target === target.target) {
- if (result = typeArgumentsRelatedTo(source, target, reportErrors)) {
- return result;
- }
- }
- var apparentType = getApparentType(source);
- if (apparentType.flags & (80896 | 32768) && target.flags & 80896) {
- var reportStructuralErrors = reportErrors && errorInfo === saveErrorInfo;
- if (result = objectTypeRelatedTo(apparentType, target, reportStructuralErrors)) {
- errorInfo = saveErrorInfo;
- return result;
- }
- }
- }
- if (reportErrors) {
- reportRelationError(headMessage, source, target);
- }
- return 0;
- }
- function isIdenticalTo(source, target) {
- var result;
- if (source.flags & 80896 && target.flags & 80896) {
- if (source.flags & 4096 && target.flags & 4096 && source.target === target.target) {
- if (result = typeArgumentsRelatedTo(source, target, false)) {
- return result;
- }
- }
- return objectTypeRelatedTo(source, target, false);
- }
- if (source.flags & 512 && target.flags & 512) {
- return typeParameterIdenticalTo(source, target);
- }
- if (source.flags & 16384 && target.flags & 16384 ||
- source.flags & 32768 && target.flags & 32768) {
- if (result = eachTypeRelatedToSomeType(source, target)) {
- if (result &= eachTypeRelatedToSomeType(target, source)) {
- return result;
- }
- }
- }
- return 0;
- }
- function isKnownProperty(type, name) {
- if (type.flags & 80896) {
- var resolved = resolveStructuredTypeMembers(type);
- if (relation === assignableRelation && (type === globalObjectType || resolved.properties.length === 0) ||
- resolved.stringIndexType || resolved.numberIndexType || getPropertyOfType(type, name)) {
- return true;
- }
- return false;
- }
- if (type.flags & 49152) {
- for (var _i = 0, _a = type.types; _i < _a.length; _i++) {
- var t = _a[_i];
- if (isKnownProperty(t, name)) {
- return true;
- }
- }
- return false;
- }
- return true;
- }
- function hasExcessProperties(source, target, reportErrors) {
- for (var _i = 0, _a = getPropertiesOfObjectType(source); _i < _a.length; _i++) {
- var prop = _a[_i];
- if (!isKnownProperty(target, prop.name)) {
- if (reportErrors) {
- errorNode = prop.valueDeclaration;
- reportError(ts.Diagnostics.Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1, symbolToString(prop), typeToString(target));
- }
- return true;
- }
- }
- }
- function eachTypeRelatedToSomeType(source, target) {
- var result = -1;
- var sourceTypes = source.types;
- for (var _i = 0; _i < sourceTypes.length; _i++) {
- var sourceType = sourceTypes[_i];
- var related = typeRelatedToSomeType(sourceType, target, false);
- if (!related) {
- return 0;
- }
- result &= related;
- }
- return result;
- }
- function typeRelatedToSomeType(source, target, reportErrors) {
- var targetTypes = target.types;
- for (var i = 0, len = targetTypes.length; i < len; i++) {
- var related = isRelatedTo(source, targetTypes[i], reportErrors && i === len - 1);
- if (related) {
- return related;
- }
- }
- return 0;
- }
- function typeRelatedToEachType(source, target, reportErrors) {
- var result = -1;
- var targetTypes = target.types;
- for (var _i = 0; _i < targetTypes.length; _i++) {
- var targetType = targetTypes[_i];
- var related = isRelatedTo(source, targetType, reportErrors);
- if (!related) {
- return 0;
- }
- result &= related;
- }
- return result;
- }
- function someTypeRelatedToType(source, target, reportErrors) {
- var sourceTypes = source.types;
- for (var i = 0, len = sourceTypes.length; i < len; i++) {
- var related = isRelatedTo(sourceTypes[i], target, reportErrors && i === len - 1);
- if (related) {
- return related;
- }
- }
- return 0;
- }
- function eachTypeRelatedToType(source, target, reportErrors) {
- var result = -1;
- var sourceTypes = source.types;
- for (var _i = 0; _i < sourceTypes.length; _i++) {
- var sourceType = sourceTypes[_i];
- var related = isRelatedTo(sourceType, target, reportErrors);
- if (!related) {
- return 0;
- }
- result &= related;
- }
- return result;
- }
- function typeArgumentsRelatedTo(source, target, reportErrors) {
- var sources = source.typeArguments || emptyArray;
- var targets = target.typeArguments || emptyArray;
- if (sources.length !== targets.length && relation === identityRelation) {
- return 0;
- }
- var result = -1;
- for (var i = 0; i < targets.length; i++) {
- var related = isRelatedTo(sources[i], targets[i], reportErrors);
- if (!related) {
- return 0;
- }
- result &= related;
- }
- return result;
- }
- function typeParameterIdenticalTo(source, target) {
- if (source.symbol.name !== target.symbol.name) {
- return 0;
- }
- if (source.constraint === target.constraint) {
- return -1;
- }
- if (source.constraint === noConstraintType || target.constraint === noConstraintType) {
- return 0;
- }
- return isIdenticalTo(source.constraint, target.constraint);
- }
- function objectTypeRelatedTo(source, target, reportErrors) {
- if (overflow) {
- return 0;
- }
- var id = relation !== identityRelation || source.id < target.id ? source.id + "," + target.id : target.id + "," + source.id;
- var related = relation[id];
- if (related !== undefined) {
- if (!elaborateErrors || (related === 3)) {
- return related === 1 ? -1 : 0;
- }
- }
- if (depth > 0) {
- for (var i = 0; i < depth; i++) {
- if (maybeStack[i][id]) {
- return 1;
- }
- }
- if (depth === 100) {
- overflow = true;
- return 0;
- }
- }
- else {
- sourceStack = [];
- targetStack = [];
- maybeStack = [];
- expandingFlags = 0;
- }
- sourceStack[depth] = source;
- targetStack[depth] = target;
- maybeStack[depth] = {};
- maybeStack[depth][id] = 1;
- depth++;
- var saveExpandingFlags = expandingFlags;
- if (!(expandingFlags & 1) && isDeeplyNestedGeneric(source, sourceStack, depth))
- expandingFlags |= 1;
- if (!(expandingFlags & 2) && isDeeplyNestedGeneric(target, targetStack, depth))
- expandingFlags |= 2;
- var result;
- if (expandingFlags === 3) {
- result = 1;
- }
- else {
- result = propertiesRelatedTo(source, target, reportErrors);
- if (result) {
- result &= signaturesRelatedTo(source, target, 0, reportErrors);
- if (result) {
- result &= signaturesRelatedTo(source, target, 1, reportErrors);
- if (result) {
- result &= stringIndexTypesRelatedTo(source, target, reportErrors);
- if (result) {
- result &= numberIndexTypesRelatedTo(source, target, reportErrors);
- }
- }
- }
- }
- }
- expandingFlags = saveExpandingFlags;
- depth--;
- if (result) {
- var maybeCache = maybeStack[depth];
- var destinationCache = (result === -1 || depth === 0) ? relation : maybeStack[depth - 1];
- ts.copyMap(maybeCache, destinationCache);
- }
- else {
- relation[id] = reportErrors ? 3 : 2;
- }
- return result;
- }
- function propertiesRelatedTo(source, target, reportErrors) {
- if (relation === identityRelation) {
- return propertiesIdenticalTo(source, target);
- }
- var result = -1;
- var properties = getPropertiesOfObjectType(target);
- var requireOptionalProperties = relation === subtypeRelation && !(source.flags & 524288);
- for (var _i = 0; _i < properties.length; _i++) {
- var targetProp = properties[_i];
- var sourceProp = getPropertyOfType(source, targetProp.name);
- if (sourceProp !== targetProp) {
- if (!sourceProp) {
- if (!(targetProp.flags & 536870912) || requireOptionalProperties) {
- if (reportErrors) {
- reportError(ts.Diagnostics.Property_0_is_missing_in_type_1, symbolToString(targetProp), typeToString(source));
- }
- return 0;
- }
- }
- else if (!(targetProp.flags & 134217728)) {
- var sourcePropFlags = getDeclarationFlagsFromSymbol(sourceProp);
- var targetPropFlags = getDeclarationFlagsFromSymbol(targetProp);
- if (sourcePropFlags & 32 || targetPropFlags & 32) {
- if (sourceProp.valueDeclaration !== targetProp.valueDeclaration) {
- if (reportErrors) {
- if (sourcePropFlags & 32 && targetPropFlags & 32) {
- reportError(ts.Diagnostics.Types_have_separate_declarations_of_a_private_property_0, symbolToString(targetProp));
- }
- else {
- reportError(ts.Diagnostics.Property_0_is_private_in_type_1_but_not_in_type_2, symbolToString(targetProp), typeToString(sourcePropFlags & 32 ? source : target), typeToString(sourcePropFlags & 32 ? target : source));
- }
- }
- return 0;
- }
- }
- else if (targetPropFlags & 64) {
- var sourceDeclaredInClass = sourceProp.parent && sourceProp.parent.flags & 32;
- var sourceClass = sourceDeclaredInClass ? getDeclaredTypeOfSymbol(sourceProp.parent) : undefined;
- var targetClass = getDeclaredTypeOfSymbol(targetProp.parent);
- if (!sourceClass || !hasBaseType(sourceClass, targetClass)) {
- if (reportErrors) {
- reportError(ts.Diagnostics.Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2, symbolToString(targetProp), typeToString(sourceClass || source), typeToString(targetClass));
- }
- return 0;
- }
- }
- else if (sourcePropFlags & 64) {
- if (reportErrors) {
- reportError(ts.Diagnostics.Property_0_is_protected_in_type_1_but_public_in_type_2, symbolToString(targetProp), typeToString(source), typeToString(target));
- }
- return 0;
- }
- var related = isRelatedTo(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp), reportErrors);
- if (!related) {
- if (reportErrors) {
- reportError(ts.Diagnostics.Types_of_property_0_are_incompatible, symbolToString(targetProp));
- }
- return 0;
- }
- result &= related;
- if (sourceProp.flags & 536870912 && !(targetProp.flags & 536870912)) {
- if (reportErrors) {
- reportError(ts.Diagnostics.Property_0_is_optional_in_type_1_but_required_in_type_2, symbolToString(targetProp), typeToString(source), typeToString(target));
- }
- return 0;
- }
- }
- }
- }
- return result;
- }
- function propertiesIdenticalTo(source, target) {
- if (!(source.flags & 80896 && target.flags & 80896)) {
- return 0;
- }
- var sourceProperties = getPropertiesOfObjectType(source);
- var targetProperties = getPropertiesOfObjectType(target);
- if (sourceProperties.length !== targetProperties.length) {
- return 0;
- }
- var result = -1;
- for (var _i = 0; _i < sourceProperties.length; _i++) {
- var sourceProp = sourceProperties[_i];
- var targetProp = getPropertyOfObjectType(target, sourceProp.name);
- if (!targetProp) {
- return 0;
- }
- var related = compareProperties(sourceProp, targetProp, isRelatedTo);
- if (!related) {
- return 0;
- }
- result &= related;
- }
- return result;
- }
- function signaturesRelatedTo(source, target, kind, reportErrors) {
- if (relation === identityRelation) {
- return signaturesIdenticalTo(source, target, kind);
- }
- if (target === anyFunctionType || source === anyFunctionType) {
- return -1;
- }
- var sourceSignatures = getSignaturesOfType(source, kind);
- var targetSignatures = getSignaturesOfType(target, kind);
- var result = -1;
- var saveErrorInfo = errorInfo;
- if (kind === 1) {
- var sourceSig = sourceSignatures[0];
- var targetSig = targetSignatures[0];
- result &= abstractSignatureRelatedTo(source, sourceSig, target, targetSig);
- if (result !== -1) {
- return result;
- }
- }
- outer: for (var _i = 0; _i < targetSignatures.length; _i++) {
- var t = targetSignatures[_i];
- if (!t.hasStringLiterals || target.flags & 262144) {
- var localErrors = reportErrors;
- var checkedAbstractAssignability = false;
- for (var _a = 0; _a < sourceSignatures.length; _a++) {
- var s = sourceSignatures[_a];
- if (!s.hasStringLiterals || source.flags & 262144) {
- var related = signatureRelatedTo(s, t, localErrors);
- if (related) {
- result &= related;
- errorInfo = saveErrorInfo;
- continue outer;
- }
- localErrors = false;
- }
- }
- return 0;
- }
- }
- return result;
- function abstractSignatureRelatedTo(source, sourceSig, target, targetSig) {
- if (sourceSig && targetSig) {
- var sourceDecl = source.symbol && getClassLikeDeclarationOfSymbol(source.symbol);
- var targetDecl = target.symbol && getClassLikeDeclarationOfSymbol(target.symbol);
- if (!sourceDecl) {
- return -1;
- }
- var sourceErasedSignature = getErasedSignature(sourceSig);
- var targetErasedSignature = getErasedSignature(targetSig);
- var sourceReturnType = sourceErasedSignature && getReturnTypeOfSignature(sourceErasedSignature);
- var targetReturnType = targetErasedSignature && getReturnTypeOfSignature(targetErasedSignature);
- var sourceReturnDecl = sourceReturnType && sourceReturnType.symbol && getClassLikeDeclarationOfSymbol(sourceReturnType.symbol);
- var targetReturnDecl = targetReturnType && targetReturnType.symbol && getClassLikeDeclarationOfSymbol(targetReturnType.symbol);
- var sourceIsAbstract = sourceReturnDecl && sourceReturnDecl.flags & 256;
- var targetIsAbstract = targetReturnDecl && targetReturnDecl.flags & 256;
- if (sourceIsAbstract && !(targetIsAbstract && targetDecl)) {
- if (reportErrors) {
- reportError(ts.Diagnostics.Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type);
- }
- return 0;
- }
- }
- return -1;
- }
- }
- function signatureRelatedTo(source, target, reportErrors) {
- if (source === target) {
- return -1;
- }
- if (!target.hasRestParameter && source.minArgumentCount > target.parameters.length) {
- return 0;
- }
- var sourceMax = source.parameters.length;
- var targetMax = target.parameters.length;
- var checkCount;
- if (source.hasRestParameter && target.hasRestParameter) {
- checkCount = sourceMax > targetMax ? sourceMax : targetMax;
- sourceMax--;
- targetMax--;
- }
- else if (source.hasRestParameter) {
- sourceMax--;
- checkCount = targetMax;
- }
- else if (target.hasRestParameter) {
- targetMax--;
- checkCount = sourceMax;
- }
- else {
- checkCount = sourceMax < targetMax ? sourceMax : targetMax;
- }
- source = getErasedSignature(source);
- target = getErasedSignature(target);
- var result = -1;
- for (var i = 0; i < checkCount; i++) {
- var s = i < sourceMax ? getTypeOfSymbol(source.parameters[i]) : getRestTypeOfSignature(source);
- var t = i < targetMax ? getTypeOfSymbol(target.parameters[i]) : getRestTypeOfSignature(target);
- var saveErrorInfo = errorInfo;
- var related = isRelatedTo(s, t, reportErrors);
- if (!related) {
- related = isRelatedTo(t, s, false);
- if (!related) {
- if (reportErrors) {
- reportError(ts.Diagnostics.Types_of_parameters_0_and_1_are_incompatible, source.parameters[i < sourceMax ? i : sourceMax].name, target.parameters[i < targetMax ? i : targetMax].name);
- }
- return 0;
- }
- errorInfo = saveErrorInfo;
- }
- result &= related;
- }
- if (source.typePredicate && target.typePredicate) {
- var hasDifferentParameterIndex = source.typePredicate.parameterIndex !== target.typePredicate.parameterIndex;
- var hasDifferentTypes;
- if (hasDifferentParameterIndex ||
- (hasDifferentTypes = !isTypeIdenticalTo(source.typePredicate.type, target.typePredicate.type))) {
- if (reportErrors) {
- var sourceParamText = source.typePredicate.parameterName;
- var targetParamText = target.typePredicate.parameterName;
- var sourceTypeText = typeToString(source.typePredicate.type);
- var targetTypeText = typeToString(target.typePredicate.type);
- if (hasDifferentParameterIndex) {
- reportError(ts.Diagnostics.Parameter_0_is_not_in_the_same_position_as_parameter_1, sourceParamText, targetParamText);
- }
- else if (hasDifferentTypes) {
- reportError(ts.Diagnostics.Type_0_is_not_assignable_to_type_1, sourceTypeText, targetTypeText);
- }
- reportError(ts.Diagnostics.Type_predicate_0_is_not_assignable_to_1, sourceParamText + " is " + sourceTypeText, targetParamText + " is " + targetTypeText);
- }
- return 0;
- }
- }
- else if (!source.typePredicate && target.typePredicate) {
- if (reportErrors) {
- reportError(ts.Diagnostics.Signature_0_must_have_a_type_predicate, signatureToString(source));
- }
- return 0;
- }
- var targetReturnType = getReturnTypeOfSignature(target);
- if (targetReturnType === voidType)
- return result;
- var sourceReturnType = getReturnTypeOfSignature(source);
- return result & isRelatedTo(sourceReturnType, targetReturnType, reportErrors);
- }
- function signaturesIdenticalTo(source, target, kind) {
- var sourceSignatures = getSignaturesOfType(source, kind);
- var targetSignatures = getSignaturesOfType(target, kind);
- if (sourceSignatures.length !== targetSignatures.length) {
- return 0;
- }
- var result = -1;
- for (var i = 0, len = sourceSignatures.length; i < len; ++i) {
- var related = compareSignatures(sourceSignatures[i], targetSignatures[i], false, false, isRelatedTo);
- if (!related) {
- return 0;
- }
- result &= related;
- }
- return result;
- }
- function stringIndexTypesRelatedTo(source, target, reportErrors) {
- if (relation === identityRelation) {
- return indexTypesIdenticalTo(0, source, target);
- }
- var targetType = getIndexTypeOfType(target, 0);
- if (targetType && !(targetType.flags & 1)) {
- var sourceType = getIndexTypeOfType(source, 0);
- if (!sourceType) {
- if (reportErrors) {
- reportError(ts.Diagnostics.Index_signature_is_missing_in_type_0, typeToString(source));
- }
- return 0;
- }
- var related = isRelatedTo(sourceType, targetType, reportErrors);
- if (!related) {
- if (reportErrors) {
- reportError(ts.Diagnostics.Index_signatures_are_incompatible);
- }
- return 0;
- }
- return related;
- }
- return -1;
- }
- function numberIndexTypesRelatedTo(source, target, reportErrors) {
- if (relation === identityRelation) {
- return indexTypesIdenticalTo(1, source, target);
- }
- var targetType = getIndexTypeOfType(target, 1);
- if (targetType && !(targetType.flags & 1)) {
- var sourceStringType = getIndexTypeOfType(source, 0);
- var sourceNumberType = getIndexTypeOfType(source, 1);
- if (!(sourceStringType || sourceNumberType)) {
- if (reportErrors) {
- reportError(ts.Diagnostics.Index_signature_is_missing_in_type_0, typeToString(source));
- }
- return 0;
- }
- var related;
- if (sourceStringType && sourceNumberType) {
- related = isRelatedTo(sourceStringType, targetType, false) || isRelatedTo(sourceNumberType, targetType, reportErrors);
- }
- else {
- related = isRelatedTo(sourceStringType || sourceNumberType, targetType, reportErrors);
- }
- if (!related) {
- if (reportErrors) {
- reportError(ts.Diagnostics.Index_signatures_are_incompatible);
- }
- return 0;
- }
- return related;
- }
- return -1;
- }
- function indexTypesIdenticalTo(indexKind, source, target) {
- var targetType = getIndexTypeOfType(target, indexKind);
- var sourceType = getIndexTypeOfType(source, indexKind);
- if (!sourceType && !targetType) {
- return -1;
- }
- if (sourceType && targetType) {
- return isRelatedTo(sourceType, targetType);
- }
- return 0;
- }
- }
- function isDeeplyNestedGeneric(type, stack, depth) {
- if (type.flags & (4096 | 131072) && depth >= 5) {
- var symbol = type.symbol;
- var count = 0;
- for (var i = 0; i < depth; i++) {
- var t = stack[i];
- if (t.flags & (4096 | 131072) && t.symbol === symbol) {
- count++;
- if (count >= 5)
- return true;
- }
- }
- }
- return false;
- }
- function isPropertyIdenticalTo(sourceProp, targetProp) {
- return compareProperties(sourceProp, targetProp, compareTypes) !== 0;
- }
- function compareProperties(sourceProp, targetProp, compareTypes) {
- if (sourceProp === targetProp) {
- return -1;
- }
- var sourcePropAccessibility = getDeclarationFlagsFromSymbol(sourceProp) & (32 | 64);
- var targetPropAccessibility = getDeclarationFlagsFromSymbol(targetProp) & (32 | 64);
- if (sourcePropAccessibility !== targetPropAccessibility) {
- return 0;
- }
- if (sourcePropAccessibility) {
- if (getTargetSymbol(sourceProp) !== getTargetSymbol(targetProp)) {
- return 0;
- }
- }
- else {
- if ((sourceProp.flags & 536870912) !== (targetProp.flags & 536870912)) {
- return 0;
- }
- }
- return compareTypes(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp));
- }
- function compareSignatures(source, target, partialMatch, ignoreReturnTypes, compareTypes) {
- if (source === target) {
- return -1;
- }
- if (source.parameters.length !== target.parameters.length ||
- source.minArgumentCount !== target.minArgumentCount ||
- source.hasRestParameter !== target.hasRestParameter) {
- if (!partialMatch ||
- source.parameters.length < target.parameters.length && !source.hasRestParameter ||
- source.minArgumentCount > target.minArgumentCount) {
- return 0;
- }
- }
- var result = -1;
- if (source.typeParameters && target.typeParameters) {
- if (source.typeParameters.length !== target.typeParameters.length) {
- return 0;
- }
- for (var i = 0, len = source.typeParameters.length; i < len; ++i) {
- var related = compareTypes(source.typeParameters[i], target.typeParameters[i]);
- if (!related) {
- return 0;
- }
- result &= related;
- }
- }
- else if (source.typeParameters || target.typeParameters) {
- return 0;
- }
- source = getErasedSignature(source);
- target = getErasedSignature(target);
- var targetLen = target.parameters.length;
- for (var i = 0; i < targetLen; i++) {
- var s = isRestParameterIndex(source, i) ? getRestTypeOfSignature(source) : getTypeOfSymbol(source.parameters[i]);
- var t = isRestParameterIndex(target, i) ? getRestTypeOfSignature(target) : getTypeOfSymbol(target.parameters[i]);
- var related = compareTypes(s, t);
- if (!related) {
- return 0;
- }
- result &= related;
- }
- if (!ignoreReturnTypes) {
- result &= compareTypes(getReturnTypeOfSignature(source), getReturnTypeOfSignature(target));
- }
- return result;
- }
- function isRestParameterIndex(signature, parameterIndex) {
- return signature.hasRestParameter && parameterIndex >= signature.parameters.length - 1;
- }
- function isSupertypeOfEach(candidate, types) {
- for (var _i = 0; _i < types.length; _i++) {
- var type = types[_i];
- if (candidate !== type && !isTypeSubtypeOf(type, candidate))
- return false;
- }
- return true;
- }
- function getCommonSupertype(types) {
- return ts.forEach(types, function (t) { return isSupertypeOfEach(t, types) ? t : undefined; });
- }
- function reportNoCommonSupertypeError(types, errorLocation, errorMessageChainHead) {
- var bestSupertype;
- var bestSupertypeDownfallType;
- var bestSupertypeScore = 0;
- for (var i = 0; i < types.length; i++) {
- var score = 0;
- var downfallType = undefined;
- for (var j = 0; j < types.length; j++) {
- if (isTypeSubtypeOf(types[j], types[i])) {
- score++;
- }
- else if (!downfallType) {
- downfallType = types[j];
- }
- }
- ts.Debug.assert(!!downfallType, "If there is no common supertype, each type should have a downfallType");
- if (score > bestSupertypeScore) {
- bestSupertype = types[i];
- bestSupertypeDownfallType = downfallType;
- bestSupertypeScore = score;
- }
- if (bestSupertypeScore === types.length - 1) {
- break;
- }
- }
- checkTypeSubtypeOf(bestSupertypeDownfallType, bestSupertype, errorLocation, ts.Diagnostics.Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0, errorMessageChainHead);
- }
- function isArrayType(type) {
- return type.flags & 4096 && type.target === globalArrayType;
- }
- function isArrayLikeType(type) {
- return !(type.flags & (32 | 64)) && isTypeAssignableTo(type, anyArrayType);
- }
- function isTupleLikeType(type) {
- return !!getPropertyOfType(type, "0");
- }
- function isTupleType(type) {
- return !!(type.flags & 8192);
- }
- function getRegularTypeOfObjectLiteral(type) {
- if (type.flags & 1048576) {
- var regularType = type.regularType;
- if (!regularType) {
- regularType = createType(type.flags & ~1048576);
- regularType.symbol = type.symbol;
- regularType.members = type.members;
- regularType.properties = type.properties;
- regularType.callSignatures = type.callSignatures;
- regularType.constructSignatures = type.constructSignatures;
- regularType.stringIndexType = type.stringIndexType;
- regularType.numberIndexType = type.numberIndexType;
- type.regularType = regularType;
- }
- return regularType;
- }
- return type;
- }
- function getWidenedTypeOfObjectLiteral(type) {
- var properties = getPropertiesOfObjectType(type);
- var members = {};
- ts.forEach(properties, function (p) {
- var propType = getTypeOfSymbol(p);
- var widenedType = getWidenedType(propType);
- if (propType !== widenedType) {
- var symbol = createSymbol(p.flags | 67108864, p.name);
- symbol.declarations = p.declarations;
- symbol.parent = p.parent;
- symbol.type = widenedType;
- symbol.target = p;
- if (p.valueDeclaration)
- symbol.valueDeclaration = p.valueDeclaration;
- p = symbol;
- }
- members[p.name] = p;
- });
- var stringIndexType = getIndexTypeOfType(type, 0);
- var numberIndexType = getIndexTypeOfType(type, 1);
- if (stringIndexType)
- stringIndexType = getWidenedType(stringIndexType);
- if (numberIndexType)
- numberIndexType = getWidenedType(numberIndexType);
- return createAnonymousType(type.symbol, members, emptyArray, emptyArray, stringIndexType, numberIndexType);
- }
- function getWidenedType(type) {
- if (type.flags & 6291456) {
- if (type.flags & (32 | 64)) {
- return anyType;
- }
- if (type.flags & 524288) {
- return getWidenedTypeOfObjectLiteral(type);
- }
- if (type.flags & 16384) {
- return getUnionType(ts.map(type.types, getWidenedType), true);
- }
- if (isArrayType(type)) {
- return createArrayType(getWidenedType(type.typeArguments[0]));
- }
- if (isTupleType(type)) {
- return createTupleType(ts.map(type.elementTypes, getWidenedType));
- }
- }
- return type;
- }
- function reportWideningErrorsInType(type) {
- var errorReported = false;
- if (type.flags & 16384) {
- for (var _i = 0, _a = type.types; _i < _a.length; _i++) {
- var t = _a[_i];
- if (reportWideningErrorsInType(t)) {
- errorReported = true;
- }
- }
- }
- if (isArrayType(type)) {
- return reportWideningErrorsInType(type.typeArguments[0]);
- }
- if (isTupleType(type)) {
- for (var _b = 0, _c = type.elementTypes; _b < _c.length; _b++) {
- var t = _c[_b];
- if (reportWideningErrorsInType(t)) {
- errorReported = true;
- }
- }
- }
- if (type.flags & 524288) {
- for (var _d = 0, _e = getPropertiesOfObjectType(type); _d < _e.length; _d++) {
- var p = _e[_d];
- var t = getTypeOfSymbol(p);
- if (t.flags & 2097152) {
- if (!reportWideningErrorsInType(t)) {
- error(p.valueDeclaration, ts.Diagnostics.Object_literal_s_property_0_implicitly_has_an_1_type, p.name, typeToString(getWidenedType(t)));
- }
- errorReported = true;
- }
- }
- }
- return errorReported;
- }
- function reportImplicitAnyError(declaration, type) {
- var typeAsString = typeToString(getWidenedType(type));
- var diagnostic;
- switch (declaration.kind) {
- case 141:
- case 140:
- diagnostic = ts.Diagnostics.Member_0_implicitly_has_an_1_type;
- break;
- case 138:
- diagnostic = declaration.dotDotDotToken ?
- ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type :
- ts.Diagnostics.Parameter_0_implicitly_has_an_1_type;
- break;
- case 213:
- case 143:
- case 142:
- case 145:
- case 146:
- case 173:
- case 174:
- if (!declaration.name) {
- error(declaration, ts.Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeAsString);
- return;
- }
- diagnostic = ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type;
- break;
- default:
- diagnostic = ts.Diagnostics.Variable_0_implicitly_has_an_1_type;
- }
- error(declaration, diagnostic, ts.declarationNameToString(declaration.name), typeAsString);
- }
- function reportErrorsFromWidening(declaration, type) {
- if (produceDiagnostics && compilerOptions.noImplicitAny && type.flags & 2097152) {
- if (!reportWideningErrorsInType(type)) {
- reportImplicitAnyError(declaration, type);
- }
- }
- }
- function forEachMatchingParameterType(source, target, callback) {
- var sourceMax = source.parameters.length;
- var targetMax = target.parameters.length;
- var count;
- if (source.hasRestParameter && target.hasRestParameter) {
- count = sourceMax > targetMax ? sourceMax : targetMax;
- sourceMax--;
- targetMax--;
- }
- else if (source.hasRestParameter) {
- sourceMax--;
- count = targetMax;
- }
- else if (target.hasRestParameter) {
- targetMax--;
- count = sourceMax;
- }
- else {
- count = sourceMax < targetMax ? sourceMax : targetMax;
- }
- for (var i = 0; i < count; i++) {
- var s = i < sourceMax ? getTypeOfSymbol(source.parameters[i]) : getRestTypeOfSignature(source);
- var t = i < targetMax ? getTypeOfSymbol(target.parameters[i]) : getRestTypeOfSignature(target);
- callback(s, t);
- }
- }
- function createInferenceContext(typeParameters, inferUnionTypes) {
- var inferences = [];
- for (var _i = 0; _i < typeParameters.length; _i++) {
- var unused = typeParameters[_i];
- inferences.push({
- primary: undefined, secondary: undefined, isFixed: false
- });
- }
- return {
- typeParameters: typeParameters,
- inferUnionTypes: inferUnionTypes,
- inferences: inferences,
- inferredTypes: new Array(typeParameters.length)
- };
- }
- function inferTypes(context, source, target) {
- var sourceStack;
- var targetStack;
- var depth = 0;
- var inferiority = 0;
- inferFromTypes(source, target);
- function isInProcess(source, target) {
- for (var i = 0; i < depth; i++) {
- if (source === sourceStack[i] && target === targetStack[i]) {
- return true;
- }
- }
- return false;
- }
- function inferFromTypes(source, target) {
- if (target.flags & 512) {
- if (source.flags & 8388608) {
- return;
- }
- var typeParameters = context.typeParameters;
- for (var i = 0; i < typeParameters.length; i++) {
- if (target === typeParameters[i]) {
- var inferences = context.inferences[i];
- if (!inferences.isFixed) {
- var candidates = inferiority ?
- inferences.secondary || (inferences.secondary = []) :
- inferences.primary || (inferences.primary = []);
- if (!ts.contains(candidates, source)) {
- candidates.push(source);
- }
- }
- return;
- }
- }
- }
- else if (source.flags & 4096 && target.flags & 4096 && source.target === target.target) {
- var sourceTypes = source.typeArguments || emptyArray;
- var targetTypes = target.typeArguments || emptyArray;
- var count = sourceTypes.length < targetTypes.length ? sourceTypes.length : targetTypes.length;
- for (var i = 0; i < count; i++) {
- inferFromTypes(sourceTypes[i], targetTypes[i]);
- }
- }
- else if (source.flags & 8192 && target.flags & 8192 && source.elementTypes.length === target.elementTypes.length) {
- var sourceTypes = source.elementTypes;
- var targetTypes = target.elementTypes;
- for (var i = 0; i < sourceTypes.length; i++) {
- inferFromTypes(sourceTypes[i], targetTypes[i]);
- }
- }
- else if (target.flags & 49152) {
- var targetTypes = target.types;
- var typeParameterCount = 0;
- var typeParameter;
- for (var _i = 0; _i < targetTypes.length; _i++) {
- var t = targetTypes[_i];
- if (t.flags & 512 && ts.contains(context.typeParameters, t)) {
- typeParameter = t;
- typeParameterCount++;
- }
- else {
- inferFromTypes(source, t);
- }
- }
- if (target.flags & 16384 && typeParameterCount === 1) {
- inferiority++;
- inferFromTypes(source, typeParameter);
- inferiority--;
- }
- }
- else if (source.flags & 49152) {
- var sourceTypes = source.types;
- for (var _a = 0; _a < sourceTypes.length; _a++) {
- var sourceType = sourceTypes[_a];
- inferFromTypes(sourceType, target);
- }
- }
- else {
- source = getApparentType(source);
- if (source.flags & 80896 && (target.flags & (4096 | 8192) ||
- (target.flags & 65536) && target.symbol && target.symbol.flags & (8192 | 2048 | 32))) {
- if (isInProcess(source, target)) {
- return;
- }
- if (isDeeplyNestedGeneric(source, sourceStack, depth) && isDeeplyNestedGeneric(target, targetStack, depth)) {
- return;
- }
- if (depth === 0) {
- sourceStack = [];
- targetStack = [];
- }
- sourceStack[depth] = source;
- targetStack[depth] = target;
- depth++;
- inferFromProperties(source, target);
- inferFromSignatures(source, target, 0);
- inferFromSignatures(source, target, 1);
- inferFromIndexTypes(source, target, 0, 0);
- inferFromIndexTypes(source, target, 1, 1);
- inferFromIndexTypes(source, target, 0, 1);
- depth--;
- }
- }
- }
- function inferFromProperties(source, target) {
- var properties = getPropertiesOfObjectType(target);
- for (var _i = 0; _i < properties.length; _i++) {
- var targetProp = properties[_i];
- var sourceProp = getPropertyOfObjectType(source, targetProp.name);
- if (sourceProp) {
- inferFromTypes(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp));
- }
- }
- }
- function inferFromSignatures(source, target, kind) {
- var sourceSignatures = getSignaturesOfType(source, kind);
- var targetSignatures = getSignaturesOfType(target, kind);
- var sourceLen = sourceSignatures.length;
- var targetLen = targetSignatures.length;
- var len = sourceLen < targetLen ? sourceLen : targetLen;
- for (var i = 0; i < len; i++) {
- inferFromSignature(getErasedSignature(sourceSignatures[sourceLen - len + i]), getErasedSignature(targetSignatures[targetLen - len + i]));
- }
- }
- function inferFromSignature(source, target) {
- forEachMatchingParameterType(source, target, inferFromTypes);
- if (source.typePredicate && target.typePredicate) {
- if (target.typePredicate.parameterIndex === source.typePredicate.parameterIndex) {
- inferFromTypes(source.typePredicate.type, target.typePredicate.type);
- }
- }
- else {
- inferFromTypes(getReturnTypeOfSignature(source), getReturnTypeOfSignature(target));
- }
- }
- function inferFromIndexTypes(source, target, sourceKind, targetKind) {
- var targetIndexType = getIndexTypeOfType(target, targetKind);
- if (targetIndexType) {
- var sourceIndexType = getIndexTypeOfType(source, sourceKind);
- if (sourceIndexType) {
- inferFromTypes(sourceIndexType, targetIndexType);
- }
- }
- }
- }
- function getInferenceCandidates(context, index) {
- var inferences = context.inferences[index];
- return inferences.primary || inferences.secondary || emptyArray;
- }
- function getInferredType(context, index) {
- var inferredType = context.inferredTypes[index];
- var inferenceSucceeded;
- if (!inferredType) {
- var inferences = getInferenceCandidates(context, index);
- if (inferences.length) {
- var unionOrSuperType = context.inferUnionTypes ? getUnionType(inferences) : getCommonSupertype(inferences);
- inferredType = unionOrSuperType ? getWidenedType(unionOrSuperType) : unknownType;
- inferenceSucceeded = !!unionOrSuperType;
- }
- else {
- inferredType = emptyObjectType;
- inferenceSucceeded = true;
- }
- if (inferenceSucceeded) {
- var constraint = getConstraintOfTypeParameter(context.typeParameters[index]);
- inferredType = constraint && !isTypeAssignableTo(inferredType, constraint) ? constraint : inferredType;
- }
- else if (context.failedTypeParameterIndex === undefined || context.failedTypeParameterIndex > index) {
- context.failedTypeParameterIndex = index;
- }
- context.inferredTypes[index] = inferredType;
- }
- return inferredType;
- }
- function getInferredTypes(context) {
- for (var i = 0; i < context.inferredTypes.length; i++) {
- getInferredType(context, i);
- }
- return context.inferredTypes;
- }
- function hasAncestor(node, kind) {
- return ts.getAncestor(node, kind) !== undefined;
- }
- function getResolvedSymbol(node) {
- var links = getNodeLinks(node);
- if (!links.resolvedSymbol) {
- links.resolvedSymbol = (!ts.nodeIsMissing(node) && resolveName(node, node.text, 107455 | 1048576, ts.Diagnostics.Cannot_find_name_0, node)) || unknownSymbol;
- }
- return links.resolvedSymbol;
- }
- function isInTypeQuery(node) {
- while (node) {
- switch (node.kind) {
- case 154:
- return true;
- case 69:
- case 135:
- node = node.parent;
- continue;
- default:
- return false;
- }
- }
- ts.Debug.fail("should not get here");
- }
- function removeTypesFromUnionType(type, typeKind, isOfTypeKind, allowEmptyUnionResult) {
- if (type.flags & 16384) {
- var types = type.types;
- if (ts.forEach(types, function (t) { return !!(t.flags & typeKind) === isOfTypeKind; })) {
- var narrowedType = getUnionType(ts.filter(types, function (t) { return !(t.flags & typeKind) === isOfTypeKind; }));
- if (allowEmptyUnionResult || narrowedType !== emptyObjectType) {
- return narrowedType;
- }
- }
- }
- else if (allowEmptyUnionResult && !!(type.flags & typeKind) === isOfTypeKind) {
- return getUnionType(emptyArray);
- }
- return type;
- }
- function hasInitializer(node) {
- return !!(node.initializer || ts.isBindingPattern(node.parent) && hasInitializer(node.parent.parent));
- }
- function isVariableAssignedWithin(symbol, node) {
- var links = getNodeLinks(node);
- if (links.assignmentChecks) {
- var cachedResult = links.assignmentChecks[symbol.id];
- if (cachedResult !== undefined) {
- return cachedResult;
- }
- }
- else {
- links.assignmentChecks = {};
- }
- return links.assignmentChecks[symbol.id] = isAssignedIn(node);
- function isAssignedInBinaryExpression(node) {
- if (node.operatorToken.kind >= 56 && node.operatorToken.kind <= 68) {
- var n = node.left;
- while (n.kind === 172) {
- n = n.expression;
- }
- if (n.kind === 69 && getResolvedSymbol(n) === symbol) {
- return true;
- }
- }
- return ts.forEachChild(node, isAssignedIn);
- }
- function isAssignedInVariableDeclaration(node) {
- if (!ts.isBindingPattern(node.name) && getSymbolOfNode(node) === symbol && hasInitializer(node)) {
- return true;
- }
- return ts.forEachChild(node, isAssignedIn);
- }
- function isAssignedIn(node) {
- switch (node.kind) {
- case 181:
- return isAssignedInBinaryExpression(node);
- case 211:
- case 163:
- return isAssignedInVariableDeclaration(node);
- case 161:
- case 162:
- case 164:
- case 165:
- case 166:
- case 167:
- case 168:
- case 169:
- case 171:
- case 189:
- case 172:
- case 179:
- case 175:
- case 178:
- case 176:
- case 177:
- case 180:
- case 184:
- case 182:
- case 185:
- case 192:
- case 193:
- case 195:
- case 196:
- case 197:
- case 198:
- case 199:
- case 200:
- case 201:
- case 204:
- case 205:
- case 206:
- case 241:
- case 242:
- case 207:
- case 208:
- case 209:
- case 244:
- case 233:
- case 234:
- case 238:
- case 239:
- case 235:
- case 240:
- return ts.forEachChild(node, isAssignedIn);
- }
- return false;
- }
- }
- function getNarrowedTypeOfSymbol(symbol, node) {
- var type = getTypeOfSymbol(symbol);
- if (node && symbol.flags & 3) {
- if (isTypeAny(type) || type.flags & (80896 | 16384 | 512)) {
- loop: while (node.parent) {
- var child = node;
- node = node.parent;
- var narrowedType = type;
- switch (node.kind) {
- case 196:
- if (child !== node.expression) {
- narrowedType = narrowType(type, node.expression, child === node.thenStatement);
- }
- break;
- case 182:
- if (child !== node.condition) {
- narrowedType = narrowType(type, node.condition, child === node.whenTrue);
- }
- break;
- case 181:
- if (child === node.right) {
- if (node.operatorToken.kind === 51) {
- narrowedType = narrowType(type, node.left, true);
- }
- else if (node.operatorToken.kind === 52) {
- narrowedType = narrowType(type, node.left, false);
- }
- }
- break;
- case 248:
- case 218:
- case 213:
- case 143:
- case 142:
- case 145:
- case 146:
- case 144:
- break loop;
- }
- if (narrowedType !== type) {
- if (isVariableAssignedWithin(symbol, node)) {
- break;
- }
- type = narrowedType;
- }
- }
- }
- }
- return type;
- function narrowTypeByEquality(type, expr, assumeTrue) {
- if (expr.left.kind !== 176 || expr.right.kind !== 9) {
- return type;
- }
- var left = expr.left;
- var right = expr.right;
- if (left.expression.kind !== 69 || getResolvedSymbol(left.expression) !== symbol) {
- return type;
- }
- var typeInfo = primitiveTypeInfo[right.text];
- if (expr.operatorToken.kind === 33) {
- assumeTrue = !assumeTrue;
- }
- if (assumeTrue) {
- if (!typeInfo) {
- return removeTypesFromUnionType(type, 258 | 132 | 8 | 16777216, true, false);
- }
- if (isTypeSubtypeOf(typeInfo.type, type)) {
- return typeInfo.type;
- }
- return removeTypesFromUnionType(type, typeInfo.flags, false, false);
- }
- else {
- if (typeInfo) {
- return removeTypesFromUnionType(type, typeInfo.flags, true, false);
- }
- return type;
- }
- }
- function narrowTypeByAnd(type, expr, assumeTrue) {
- if (assumeTrue) {
- return narrowType(narrowType(type, expr.left, true), expr.right, true);
- }
- else {
- return getUnionType([
- narrowType(type, expr.left, false),
- narrowType(narrowType(type, expr.left, true), expr.right, false)
- ]);
- }
- }
- function narrowTypeByOr(type, expr, assumeTrue) {
- if (assumeTrue) {
- return getUnionType([
- narrowType(type, expr.left, true),
- narrowType(narrowType(type, expr.left, false), expr.right, true)
- ]);
- }
- else {
- return narrowType(narrowType(type, expr.left, false), expr.right, false);
- }
- }
- function narrowTypeByInstanceof(type, expr, assumeTrue) {
- if (isTypeAny(type) || !assumeTrue || expr.left.kind !== 69 || getResolvedSymbol(expr.left) !== symbol) {
- return type;
- }
- var rightType = checkExpression(expr.right);
- if (!isTypeSubtypeOf(rightType, globalFunctionType)) {
- return type;
- }
- var targetType;
- var prototypeProperty = getPropertyOfType(rightType, "prototype");
- if (prototypeProperty) {
- var prototypePropertyType = getTypeOfSymbol(prototypeProperty);
- if (!isTypeAny(prototypePropertyType)) {
- targetType = prototypePropertyType;
- }
- }
- if (!targetType) {
- var constructSignatures;
- if (rightType.flags & 2048) {
- constructSignatures = resolveDeclaredMembers(rightType).declaredConstructSignatures;
- }
- else if (rightType.flags & 65536) {
- constructSignatures = getSignaturesOfType(rightType, 1);
- }
- if (constructSignatures && constructSignatures.length) {
- targetType = getUnionType(ts.map(constructSignatures, function (signature) { return getReturnTypeOfSignature(getErasedSignature(signature)); }));
- }
- }
- if (targetType) {
- return getNarrowedType(type, targetType);
- }
- return type;
- }
- function getNarrowedType(originalType, narrowedTypeCandidate) {
- if (originalType.flags & 16384) {
- var assignableConstituents = ts.filter(originalType.types, function (t) { return isTypeAssignableTo(t, narrowedTypeCandidate); });
- if (assignableConstituents.length) {
- return getUnionType(assignableConstituents);
- }
- }
- if (isTypeAssignableTo(narrowedTypeCandidate, originalType)) {
- return narrowedTypeCandidate;
- }
- return originalType;
- }
- function narrowTypeByTypePredicate(type, expr, assumeTrue) {
- if (type.flags & 1) {
- return type;
- }
- var signature = getResolvedSignature(expr);
- if (signature.typePredicate &&
- expr.arguments[signature.typePredicate.parameterIndex] &&
- getSymbolAtLocation(expr.arguments[signature.typePredicate.parameterIndex]) === symbol) {
- if (!assumeTrue) {
- if (type.flags & 16384) {
- return getUnionType(ts.filter(type.types, function (t) { return !isTypeSubtypeOf(t, signature.typePredicate.type); }));
- }
- return type;
- }
- return getNarrowedType(type, signature.typePredicate.type);
- }
- return type;
- }
- function narrowType(type, expr, assumeTrue) {
- switch (expr.kind) {
- case 168:
- return narrowTypeByTypePredicate(type, expr, assumeTrue);
- case 172:
- return narrowType(type, expr.expression, assumeTrue);
- case 181:
- var operator = expr.operatorToken.kind;
- if (operator === 32 || operator === 33) {
- return narrowTypeByEquality(type, expr, assumeTrue);
- }
- else if (operator === 51) {
- return narrowTypeByAnd(type, expr, assumeTrue);
- }
- else if (operator === 52) {
- return narrowTypeByOr(type, expr, assumeTrue);
- }
- else if (operator === 91) {
- return narrowTypeByInstanceof(type, expr, assumeTrue);
- }
- break;
- case 179:
- if (expr.operator === 49) {
- return narrowType(type, expr.operand, !assumeTrue);
- }
- break;
- }
- return type;
- }
- }
- function checkIdentifier(node) {
- var symbol = getResolvedSymbol(node);
- if (symbol === argumentsSymbol) {
- var container = ts.getContainingFunction(node);
- if (container.kind === 174) {
- if (languageVersion < 2) {
- error(node, ts.Diagnostics.The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_standard_function_expression);
- }
- }
- if (node.parserContextFlags & 8) {
- getNodeLinks(container).flags |= 4096;
- getNodeLinks(node).flags |= 2048;
- }
- }
- if (symbol.flags & 8388608 && !isInTypeQuery(node) && !isConstEnumOrConstEnumOnlyModule(resolveAlias(symbol))) {
- markAliasSymbolAsReferenced(symbol);
- }
- checkCollisionWithCapturedSuperVariable(node, node);
- checkCollisionWithCapturedThisVariable(node, node);
- checkBlockScopedBindingCapturedInLoop(node, symbol);
- return getNarrowedTypeOfSymbol(getExportSymbolOfValueSymbolIfExported(symbol), node);
- }
- function isInsideFunction(node, threshold) {
- var current = node;
- while (current && current !== threshold) {
- if (ts.isFunctionLike(current)) {
- return true;
- }
- current = current.parent;
- }
- return false;
- }
- function checkBlockScopedBindingCapturedInLoop(node, symbol) {
- if (languageVersion >= 2 ||
- (symbol.flags & 2) === 0 ||
- symbol.valueDeclaration.parent.kind === 244) {
- return;
- }
- var container = symbol.valueDeclaration;
- while (container.kind !== 212) {
- container = container.parent;
- }
- container = container.parent;
- if (container.kind === 193) {
- container = container.parent;
- }
- var inFunction = isInsideFunction(node.parent, container);
- var current = container;
- while (current && !ts.nodeStartsNewLexicalEnvironment(current)) {
- if (isIterationStatement(current, false)) {
- if (inFunction) {
- grammarErrorOnFirstToken(current, ts.Diagnostics.Loop_contains_block_scoped_variable_0_referenced_by_a_function_in_the_loop_This_is_only_supported_in_ECMAScript_6_or_higher, ts.declarationNameToString(node));
- }
- getNodeLinks(symbol.valueDeclaration).flags |= 16384;
- break;
- }
- current = current.parent;
- }
- }
- function captureLexicalThis(node, container) {
- getNodeLinks(node).flags |= 2;
- if (container.kind === 141 || container.kind === 144) {
- var classNode = container.parent;
- getNodeLinks(classNode).flags |= 4;
- }
- else {
- getNodeLinks(container).flags |= 4;
- }
- }
- function checkThisExpression(node) {
- var container = ts.getThisContainer(node, true);
- var needToCaptureLexicalThis = false;
- if (container.kind === 174) {
- container = ts.getThisContainer(container, false);
- needToCaptureLexicalThis = (languageVersion < 2);
- }
- switch (container.kind) {
- case 218:
- error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_module_or_namespace_body);
- break;
- case 217:
- error(node, ts.Diagnostics.this_cannot_be_referenced_in_current_location);
- break;
- case 144:
- if (isInConstructorArgumentInitializer(node, container)) {
- error(node, ts.Diagnostics.this_cannot_be_referenced_in_constructor_arguments);
- }
- break;
- case 141:
- case 140:
- if (container.flags & 128) {
- error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_static_property_initializer);
- }
- break;
- case 136:
- error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_computed_property_name);
- break;
- }
- if (needToCaptureLexicalThis) {
- captureLexicalThis(node, container);
- }
- if (ts.isClassLike(container.parent)) {
- var symbol = getSymbolOfNode(container.parent);
- return container.flags & 128 ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
- }
- return anyType;
- }
- function isInConstructorArgumentInitializer(node, constructorDecl) {
- for (var n = node; n && n !== constructorDecl; n = n.parent) {
- if (n.kind === 138) {
- return true;
- }
- }
- return false;
- }
- function checkSuperExpression(node) {
- var isCallExpression = node.parent.kind === 168 && node.parent.expression === node;
- var classDeclaration = ts.getContainingClass(node);
- var classType = classDeclaration && getDeclaredTypeOfSymbol(getSymbolOfNode(classDeclaration));
- var baseClassType = classType && getBaseTypes(classType)[0];
- var container = ts.getSuperContainer(node, true);
- var needToCaptureLexicalThis = false;
- if (!isCallExpression) {
- while (container && container.kind === 174) {
- container = ts.getSuperContainer(container, true);
- needToCaptureLexicalThis = languageVersion < 2;
- }
- }
- var canUseSuperExpression = isLegalUsageOfSuperExpression(container);
- var nodeCheckFlag = 0;
- if (canUseSuperExpression) {
- if ((container.flags & 128) || isCallExpression) {
- nodeCheckFlag = 512;
- }
- else {
- nodeCheckFlag = 256;
- }
- getNodeLinks(node).flags |= nodeCheckFlag;
- if (needToCaptureLexicalThis) {
- captureLexicalThis(node.parent, container);
- }
- }
- if (!baseClassType) {
- if (!classDeclaration || !ts.getClassExtendsHeritageClauseElement(classDeclaration)) {
- error(node, ts.Diagnostics.super_can_only_be_referenced_in_a_derived_class);
- }
- return unknownType;
- }
- if (!canUseSuperExpression) {
- if (container && container.kind === 136) {
- error(node, ts.Diagnostics.super_cannot_be_referenced_in_a_computed_property_name);
- }
- else if (isCallExpression) {
- error(node, ts.Diagnostics.Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors);
- }
- else {
- error(node, ts.Diagnostics.super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class);
- }
- return unknownType;
- }
- if (container.kind === 144 && isInConstructorArgumentInitializer(node, container)) {
- error(node, ts.Diagnostics.super_cannot_be_referenced_in_constructor_arguments);
- return unknownType;
- }
- return nodeCheckFlag === 512
- ? getBaseConstructorTypeOfClass(classType)
- : baseClassType;
- function isLegalUsageOfSuperExpression(container) {
- if (!container) {
- return false;
- }
- if (isCallExpression) {
- return container.kind === 144;
- }
- else {
- if (container && ts.isClassLike(container.parent)) {
- if (container.flags & 128) {
- return container.kind === 143 ||
- container.kind === 142 ||
- container.kind === 145 ||
- container.kind === 146;
- }
- else {
- return container.kind === 143 ||
- container.kind === 142 ||
- container.kind === 145 ||
- container.kind === 146 ||
- container.kind === 141 ||
- container.kind === 140 ||
- container.kind === 144;
- }
- }
- }
- return false;
- }
- }
- function getContextuallyTypedParameterType(parameter) {
- var func = parameter.parent;
- if (isFunctionExpressionOrArrowFunction(func) || ts.isObjectLiteralMethod(func)) {
- if (isContextSensitive(func)) {
- var contextualSignature = getContextualSignature(func);
- if (contextualSignature) {
- var funcHasRestParameters = ts.hasRestParameter(func);
- var len = func.parameters.length - (funcHasRestParameters ? 1 : 0);
- var indexOfParameter = ts.indexOf(func.parameters, parameter);
- if (indexOfParameter < len) {
- return getTypeAtPosition(contextualSignature, indexOfParameter);
- }
- if (funcHasRestParameters &&
- indexOfParameter === (func.parameters.length - 1) &&
- isRestParameterIndex(contextualSignature, func.parameters.length - 1)) {
- return getTypeOfSymbol(ts.lastOrUndefined(contextualSignature.parameters));
- }
- }
- }
- }
- return undefined;
- }
- function getContextualTypeForInitializerExpression(node) {
- var declaration = node.parent;
- if (node === declaration.initializer) {
- if (declaration.type) {
- return getTypeFromTypeNode(declaration.type);
- }
- if (declaration.kind === 138) {
- var type = getContextuallyTypedParameterType(declaration);
- if (type) {
- return type;
- }
- }
- if (ts.isBindingPattern(declaration.name)) {
- return getTypeFromBindingPattern(declaration.name, true);
- }
- }
- return undefined;
- }
- function getContextualTypeForReturnExpression(node) {
- var func = ts.getContainingFunction(node);
- if (func && !func.asteriskToken) {
- return getContextualReturnType(func);
- }
- return undefined;
- }
- function getContextualTypeForYieldOperand(node) {
- var func = ts.getContainingFunction(node);
- if (func) {
- var contextualReturnType = getContextualReturnType(func);
- if (contextualReturnType) {
- return node.asteriskToken
- ? contextualReturnType
- : getElementTypeOfIterableIterator(contextualReturnType);
- }
- }
- return undefined;
- }
- function isInParameterInitializerBeforeContainingFunction(node) {
- while (node.parent && !ts.isFunctionLike(node.parent)) {
- if (node.parent.kind === 138 && node.parent.initializer === node) {
- return true;
- }
- node = node.parent;
- }
- return false;
- }
- function getContextualReturnType(functionDecl) {
- if (functionDecl.type ||
- functionDecl.kind === 144 ||
- functionDecl.kind === 145 && ts.getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(functionDecl.symbol, 146))) {
- return getReturnTypeOfSignature(getSignatureFromDeclaration(functionDecl));
- }
- var signature = getContextualSignatureForFunctionLikeDeclaration(functionDecl);
- if (signature) {
- return getReturnTypeOfSignature(signature);
- }
- return undefined;
- }
- function getContextualTypeForArgument(callTarget, arg) {
- var args = getEffectiveCallArguments(callTarget);
- var argIndex = ts.indexOf(args, arg);
- if (argIndex >= 0) {
- var signature = getResolvedSignature(callTarget);
- return getTypeAtPosition(signature, argIndex);
- }
- return undefined;
- }
- function getContextualTypeForSubstitutionExpression(template, substitutionExpression) {
- if (template.parent.kind === 170) {
- return getContextualTypeForArgument(template.parent, substitutionExpression);
- }
- return undefined;
- }
- function getContextualTypeForBinaryOperand(node) {
- var binaryExpression = node.parent;
- var operator = binaryExpression.operatorToken.kind;
- if (operator >= 56 && operator <= 68) {
- if (node === binaryExpression.right) {
- return checkExpression(binaryExpression.left);
- }
- }
- else if (operator === 52) {
- var type = getContextualType(binaryExpression);
- if (!type && node === binaryExpression.right) {
- type = checkExpression(binaryExpression.left);
- }
- return type;
- }
- return undefined;
- }
- function applyToContextualType(type, mapper) {
- if (!(type.flags & 16384)) {
- return mapper(type);
- }
- var types = type.types;
- var mappedType;
- var mappedTypes;
- for (var _i = 0; _i < types.length; _i++) {
- var current = types[_i];
- var t = mapper(current);
- if (t) {
- if (!mappedType) {
- mappedType = t;
- }
- else if (!mappedTypes) {
- mappedTypes = [mappedType, t];
- }
- else {
- mappedTypes.push(t);
- }
- }
- }
- return mappedTypes ? getUnionType(mappedTypes) : mappedType;
- }
- function getTypeOfPropertyOfContextualType(type, name) {
- return applyToContextualType(type, function (t) {
- var prop = t.flags & 130048 ? getPropertyOfType(t, name) : undefined;
- return prop ? getTypeOfSymbol(prop) : undefined;
- });
- }
- function getIndexTypeOfContextualType(type, kind) {
- return applyToContextualType(type, function (t) { return getIndexTypeOfStructuredType(t, kind); });
- }
- function contextualTypeIsTupleLikeType(type) {
- return !!(type.flags & 16384 ? ts.forEach(type.types, isTupleLikeType) : isTupleLikeType(type));
- }
- function contextualTypeHasIndexSignature(type, kind) {
- return !!(type.flags & 16384 ? ts.forEach(type.types, function (t) { return getIndexTypeOfStructuredType(t, kind); }) : getIndexTypeOfStructuredType(type, kind));
- }
- function getContextualTypeForObjectLiteralMethod(node) {
- ts.Debug.assert(ts.isObjectLiteralMethod(node));
- if (isInsideWithStatementBody(node)) {
- return undefined;
- }
- return getContextualTypeForObjectLiteralElement(node);
- }
- function getContextualTypeForObjectLiteralElement(element) {
- var objectLiteral = element.parent;
- var type = getContextualType(objectLiteral);
- if (type) {
- if (!ts.hasDynamicName(element)) {
- var symbolName = getSymbolOfNode(element).name;
- var propertyType = getTypeOfPropertyOfContextualType(type, symbolName);
- if (propertyType) {
- return propertyType;
- }
- }
- return isNumericName(element.name) && getIndexTypeOfContextualType(type, 1) ||
- getIndexTypeOfContextualType(type, 0);
- }
- return undefined;
- }
- function getContextualTypeForElementExpression(node) {
- var arrayLiteral = node.parent;
- var type = getContextualType(arrayLiteral);
- if (type) {
- var index = ts.indexOf(arrayLiteral.elements, node);
- return getTypeOfPropertyOfContextualType(type, "" + index)
- || getIndexTypeOfContextualType(type, 1)
- || (languageVersion >= 2 ? getElementTypeOfIterable(type, undefined) : undefined);
- }
- return undefined;
- }
- function getContextualTypeForConditionalOperand(node) {
- var conditional = node.parent;
- return node === conditional.whenTrue || node === conditional.whenFalse ? getContextualType(conditional) : undefined;
- }
- function getContextualTypeForJsxExpression(expr) {
- if (expr.parent.kind === 238) {
- var attrib = expr.parent;
- var attrsType = getJsxElementAttributesType(attrib.parent);
- if (!attrsType || isTypeAny(attrsType)) {
- return undefined;
- }
- else {
- return getTypeOfPropertyOfType(attrsType, attrib.name.text);
- }
- }
- if (expr.kind === 239) {
- return getJsxElementAttributesType(expr.parent);
- }
- return undefined;
- }
- function getContextualType(node) {
- var type = getContextualTypeWorker(node);
- return type && getApparentType(type);
- }
- function getContextualTypeWorker(node) {
- if (isInsideWithStatementBody(node)) {
- return undefined;
- }
- if (node.contextualType) {
- return node.contextualType;
- }
- var parent = node.parent;
- switch (parent.kind) {
- case 211:
- case 138:
- case 141:
- case 140:
- case 163:
- return getContextualTypeForInitializerExpression(node);
- case 174:
- case 204:
- return getContextualTypeForReturnExpression(node);
- case 184:
- return getContextualTypeForYieldOperand(parent);
- case 168:
- case 169:
- return getContextualTypeForArgument(parent, node);
- case 171:
- case 189:
- return getTypeFromTypeNode(parent.type);
- case 181:
- return getContextualTypeForBinaryOperand(node);
- case 245:
- return getContextualTypeForObjectLiteralElement(parent);
- case 164:
- return getContextualTypeForElementExpression(node);
- case 182:
- return getContextualTypeForConditionalOperand(node);
- case 190:
- ts.Debug.assert(parent.parent.kind === 183);
- return getContextualTypeForSubstitutionExpression(parent.parent, node);
- case 172:
- return getContextualType(parent);
- case 240:
- case 239:
- return getContextualTypeForJsxExpression(parent);
- }
- return undefined;
- }
- function getNonGenericSignature(type) {
- var signatures = getSignaturesOfStructuredType(type, 0);
- if (signatures.length === 1) {
- var signature = signatures[0];
- if (!signature.typeParameters) {
- return signature;
- }
- }
- }
- function isFunctionExpressionOrArrowFunction(node) {
- return node.kind === 173 || node.kind === 174;
- }
- function getContextualSignatureForFunctionLikeDeclaration(node) {
- return isFunctionExpressionOrArrowFunction(node) || ts.isObjectLiteralMethod(node)
- ? getContextualSignature(node)
- : undefined;
- }
- function getContextualSignature(node) {
- ts.Debug.assert(node.kind !== 143 || ts.isObjectLiteralMethod(node));
- var type = ts.isObjectLiteralMethod(node)
- ? getContextualTypeForObjectLiteralMethod(node)
- : getContextualType(node);
- if (!type) {
- return undefined;
- }
- if (!(type.flags & 16384)) {
- return getNonGenericSignature(type);
- }
- var signatureList;
- var types = type.types;
- for (var _i = 0; _i < types.length; _i++) {
- var current = types[_i];
- var signature = getNonGenericSignature(current);
- if (signature) {
- if (!signatureList) {
- signatureList = [signature];
- }
- else if (!compareSignatures(signatureList[0], signature, false, true, compareTypes)) {
- return undefined;
- }
- else {
- signatureList.push(signature);
- }
- }
- }
- var result;
- if (signatureList) {
- result = cloneSignature(signatureList[0]);
- result.resolvedReturnType = undefined;
- result.unionSignatures = signatureList;
- }
- return result;
- }
- function isInferentialContext(mapper) {
- return mapper && mapper.context;
- }
- function isAssignmentTarget(node) {
- var parent = node.parent;
- if (parent.kind === 181 && parent.operatorToken.kind === 56 && parent.left === node) {
- return true;
- }
- if (parent.kind === 245) {
- return isAssignmentTarget(parent.parent);
- }
- if (parent.kind === 164) {
- return isAssignmentTarget(parent);
- }
- return false;
- }
- function checkSpreadElementExpression(node, contextualMapper) {
- var arrayOrIterableType = checkExpressionCached(node.expression, contextualMapper);
- return checkIteratedTypeOrElementType(arrayOrIterableType, node.expression, false);
- }
- function hasDefaultValue(node) {
- return (node.kind === 163 && !!node.initializer) ||
- (node.kind === 181 && node.operatorToken.kind === 56);
- }
- function checkArrayLiteral(node, contextualMapper) {
- var elements = node.elements;
- var hasSpreadElement = false;
- var elementTypes = [];
- var inDestructuringPattern = isAssignmentTarget(node);
- for (var _i = 0; _i < elements.length; _i++) {
- var e = elements[_i];
- if (inDestructuringPattern && e.kind === 185) {
- var restArrayType = checkExpression(e.expression, contextualMapper);
- var restElementType = getIndexTypeOfType(restArrayType, 1) ||
- (languageVersion >= 2 ? getElementTypeOfIterable(restArrayType, undefined) : undefined);
- if (restElementType) {
- elementTypes.push(restElementType);
- }
- }
- else {
- var type = checkExpression(e, contextualMapper);
- elementTypes.push(type);
- }
- hasSpreadElement = hasSpreadElement || e.kind === 185;
- }
- if (!hasSpreadElement) {
- if (inDestructuringPattern && elementTypes.length) {
- var type = createNewTupleType(elementTypes);
- type.pattern = node;
- return type;
- }
- var contextualType = getContextualType(node);
- if (contextualType && contextualTypeIsTupleLikeType(contextualType)) {
- var pattern = contextualType.pattern;
- if (pattern && (pattern.kind === 162 || pattern.kind === 164)) {
- var patternElements = pattern.elements;
- for (var i = elementTypes.length; i < patternElements.length; i++) {
- var patternElement = patternElements[i];
- if (hasDefaultValue(patternElement)) {
- elementTypes.push(contextualType.elementTypes[i]);
- }
- else {
- if (patternElement.kind !== 187) {
- error(patternElement, ts.Diagnostics.Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value);
- }
- elementTypes.push(unknownType);
- }
- }
- }
- if (elementTypes.length) {
- return createTupleType(elementTypes);
- }
- }
- }
- return createArrayType(elementTypes.length ? getUnionType(elementTypes) : undefinedType);
- }
- function isNumericName(name) {
- return name.kind === 136 ? isNumericComputedName(name) : isNumericLiteralName(name.text);
- }
- function isNumericComputedName(name) {
- return isTypeAnyOrAllConstituentTypesHaveKind(checkComputedPropertyName(name), 132);
- }
- function isTypeAnyOrAllConstituentTypesHaveKind(type, kind) {
- return isTypeAny(type) || allConstituentTypesHaveKind(type, kind);
- }
- function isNumericLiteralName(name) {
- return (+name).toString() === name;
- }
- function checkComputedPropertyName(node) {
- var links = getNodeLinks(node.expression);
- if (!links.resolvedType) {
- links.resolvedType = checkExpression(node.expression);
- if (!isTypeAnyOrAllConstituentTypesHaveKind(links.resolvedType, 132 | 258 | 16777216)) {
- error(node, ts.Diagnostics.A_computed_property_name_must_be_of_type_string_number_symbol_or_any);
- }
- else {
- checkThatExpressionIsProperSymbolReference(node.expression, links.resolvedType, true);
- }
- }
- return links.resolvedType;
- }
- function checkObjectLiteral(node, contextualMapper) {
- var inDestructuringPattern = isAssignmentTarget(node);
- checkGrammarObjectLiteralExpression(node, inDestructuringPattern);
- var propertiesTable = {};
- var propertiesArray = [];
- var contextualType = getContextualType(node);
- var contextualTypeHasPattern = contextualType && contextualType.pattern &&
- (contextualType.pattern.kind === 161 || contextualType.pattern.kind === 165);
- var typeFlags = 0;
- for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
- var memberDecl = _a[_i];
- var member = memberDecl.symbol;
- if (memberDecl.kind === 245 ||
- memberDecl.kind === 246 ||
- ts.isObjectLiteralMethod(memberDecl)) {
- var type = void 0;
- if (memberDecl.kind === 245) {
- type = checkPropertyAssignment(memberDecl, contextualMapper);
- }
- else if (memberDecl.kind === 143) {
- type = checkObjectLiteralMethod(memberDecl, contextualMapper);
- }
- else {
- ts.Debug.assert(memberDecl.kind === 246);
- type = checkExpression(memberDecl.name, contextualMapper);
- }
- typeFlags |= type.flags;
- var prop = createSymbol(4 | 67108864 | member.flags, member.name);
- if (inDestructuringPattern) {
- var isOptional = (memberDecl.kind === 245 && hasDefaultValue(memberDecl.initializer)) ||
- (memberDecl.kind === 246 && memberDecl.objectAssignmentInitializer);
- if (isOptional) {
- prop.flags |= 536870912;
- }
- }
- else if (contextualTypeHasPattern) {
- var impliedProp = getPropertyOfType(contextualType, member.name);
- if (impliedProp) {
- prop.flags |= impliedProp.flags & 536870912;
- }
- else if (!compilerOptions.suppressExcessPropertyErrors) {
- error(memberDecl.name, ts.Diagnostics.Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1, symbolToString(member), typeToString(contextualType));
- }
- }
- prop.declarations = member.declarations;
- prop.parent = member.parent;
- if (member.valueDeclaration) {
- prop.valueDeclaration = member.valueDeclaration;
- }
- prop.type = type;
- prop.target = member;
- member = prop;
- }
- else {
- ts.Debug.assert(memberDecl.kind === 145 || memberDecl.kind === 146);
- checkAccessorDeclaration(memberDecl);
- }
- if (!ts.hasDynamicName(memberDecl)) {
- propertiesTable[member.name] = member;
- }
- propertiesArray.push(member);
- }
- if (contextualTypeHasPattern) {
- for (var _b = 0, _c = getPropertiesOfType(contextualType); _b < _c.length; _b++) {
- var prop = _c[_b];
- if (!ts.hasProperty(propertiesTable, prop.name)) {
- if (!(prop.flags & 536870912)) {
- error(prop.valueDeclaration || prop.bindingElement, ts.Diagnostics.Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value);
- }
- propertiesTable[prop.name] = prop;
- propertiesArray.push(prop);
- }
- }
- }
- var stringIndexType = getIndexType(0);
- var numberIndexType = getIndexType(1);
- var result = createAnonymousType(node.symbol, propertiesTable, emptyArray, emptyArray, stringIndexType, numberIndexType);
- var freshObjectLiteralFlag = compilerOptions.suppressExcessPropertyErrors ? 0 : 1048576;
- result.flags |= 524288 | 4194304 | freshObjectLiteralFlag | (typeFlags & 14680064);
- if (inDestructuringPattern) {
- result.pattern = node;
- }
- return result;
- function getIndexType(kind) {
- if (contextualType && contextualTypeHasIndexSignature(contextualType, kind)) {
- var propTypes = [];
- for (var i = 0; i < propertiesArray.length; i++) {
- var propertyDecl = node.properties[i];
- if (kind === 0 || isNumericName(propertyDecl.name)) {
- var type = getTypeOfSymbol(propertiesArray[i]);
- if (!ts.contains(propTypes, type)) {
- propTypes.push(type);
- }
- }
- }
- var result_1 = propTypes.length ? getUnionType(propTypes) : undefinedType;
- typeFlags |= result_1.flags;
- return result_1;
- }
- return undefined;
- }
- }
- function checkJsxSelfClosingElement(node) {
- checkJsxOpeningLikeElement(node);
- return jsxElementType || anyType;
- }
- function tagNamesAreEquivalent(lhs, rhs) {
- if (lhs.kind !== rhs.kind) {
- return false;
- }
- if (lhs.kind === 69) {
- return lhs.text === rhs.text;
- }
- return lhs.right.text === rhs.right.text &&
- tagNamesAreEquivalent(lhs.left, rhs.left);
- }
- function checkJsxElement(node) {
- checkJsxOpeningLikeElement(node.openingElement);
- if (!tagNamesAreEquivalent(node.openingElement.tagName, node.closingElement.tagName)) {
- error(node.closingElement, ts.Diagnostics.Expected_corresponding_JSX_closing_tag_for_0, ts.getTextOfNode(node.openingElement.tagName));
- }
- else {
- getJsxElementTagSymbol(node.closingElement);
- }
- for (var _i = 0, _a = node.children; _i < _a.length; _i++) {
- var child = _a[_i];
- switch (child.kind) {
- case 240:
- checkJsxExpression(child);
- break;
- case 233:
- checkJsxElement(child);
- break;
- case 234:
- checkJsxSelfClosingElement(child);
- break;
- default:
- ts.Debug.assert(child.kind === 236);
- }
- }
- return jsxElementType || anyType;
- }
- function isUnhyphenatedJsxName(name) {
- return name.indexOf("-") < 0;
- }
- function isJsxIntrinsicIdentifier(tagName) {
- if (tagName.kind === 135) {
- return false;
- }
- else {
- return ts.isIntrinsicJsxName(tagName.text);
- }
- }
- function checkJsxAttribute(node, elementAttributesType, nameTable) {
- var correspondingPropType = undefined;
- if (elementAttributesType === emptyObjectType && isUnhyphenatedJsxName(node.name.text)) {
- error(node.parent, ts.Diagnostics.JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property, getJsxElementPropertiesName());
- }
- else if (elementAttributesType && !isTypeAny(elementAttributesType)) {
- var correspondingPropSymbol = getPropertyOfType(elementAttributesType, node.name.text);
- correspondingPropType = correspondingPropSymbol && getTypeOfSymbol(correspondingPropSymbol);
- if (isUnhyphenatedJsxName(node.name.text)) {
- var indexerType = getIndexTypeOfType(elementAttributesType, 0);
- if (indexerType) {
- correspondingPropType = indexerType;
- }
- else {
- if (!correspondingPropType) {
- error(node.name, ts.Diagnostics.Property_0_does_not_exist_on_type_1, node.name.text, typeToString(elementAttributesType));
- return unknownType;
- }
- }
- }
- }
- var exprType;
- if (node.initializer) {
- exprType = checkExpression(node.initializer);
- }
- else {
- exprType = booleanType;
- }
- if (correspondingPropType) {
- checkTypeAssignableTo(exprType, correspondingPropType, node);
- }
- nameTable[node.name.text] = true;
- return exprType;
- }
- function checkJsxSpreadAttribute(node, elementAttributesType, nameTable) {
- var type = checkExpression(node.expression);
- var props = getPropertiesOfType(type);
- for (var _i = 0; _i < props.length; _i++) {
- var prop = props[_i];
- if (!nameTable[prop.name]) {
- var targetPropSym = getPropertyOfType(elementAttributesType, prop.name);
- if (targetPropSym) {
- var msg = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property, prop.name);
- checkTypeAssignableTo(getTypeOfSymbol(prop), getTypeOfSymbol(targetPropSym), node, undefined, msg);
- }
- nameTable[prop.name] = true;
- }
- }
- return type;
- }
- function getJsxIntrinsicElementsType() {
- if (!jsxIntrinsicElementsType) {
- jsxIntrinsicElementsType = getExportedTypeFromNamespace(JsxNames.JSX, JsxNames.IntrinsicElements) || unknownType;
- }
- return jsxIntrinsicElementsType;
- }
- function getJsxElementTagSymbol(node) {
- var flags = 8;
- var links = getNodeLinks(node);
- if (!links.resolvedSymbol) {
- if (isJsxIntrinsicIdentifier(node.tagName)) {
- links.resolvedSymbol = lookupIntrinsicTag(node);
- }
- else {
- links.resolvedSymbol = lookupClassTag(node);
- }
- }
- return links.resolvedSymbol;
- function lookupIntrinsicTag(node) {
- var intrinsicElementsType = getJsxIntrinsicElementsType();
- if (intrinsicElementsType !== unknownType) {
- var intrinsicProp = getPropertyOfType(intrinsicElementsType, node.tagName.text);
- if (intrinsicProp) {
- links.jsxFlags |= 1;
- return intrinsicProp;
- }
- var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0);
- if (indexSignatureType) {
- links.jsxFlags |= 2;
- return intrinsicElementsType.symbol;
- }
- error(node, ts.Diagnostics.Property_0_does_not_exist_on_type_1, node.tagName.text, "JSX." + JsxNames.IntrinsicElements);
- return unknownSymbol;
- }
- else {
- if (compilerOptions.noImplicitAny) {
- error(node, ts.Diagnostics.JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists, JsxNames.IntrinsicElements);
- }
- }
- }
- function lookupClassTag(node) {
- var valueSymbol = resolveJsxTagName(node);
- if (valueSymbol && valueSymbol !== unknownSymbol) {
- links.jsxFlags |= 4;
- if (valueSymbol.flags & 8388608) {
- markAliasSymbolAsReferenced(valueSymbol);
- }
- }
- return valueSymbol || unknownSymbol;
- }
- function resolveJsxTagName(node) {
- if (node.tagName.kind === 69) {
- var tag = node.tagName;
- var sym = getResolvedSymbol(tag);
- return sym.exportSymbol || sym;
- }
- else {
- return checkQualifiedName(node.tagName).symbol;
- }
- }
- }
- function getJsxElementInstanceType(node) {
- ts.Debug.assert(!!(getNodeLinks(node).jsxFlags & 4), "Should not call getJsxElementInstanceType on non-class Element");
- var classSymbol = getJsxElementTagSymbol(node);
- if (classSymbol === unknownSymbol) {
- return anyType;
- }
- var valueType = getTypeOfSymbol(classSymbol);
- if (isTypeAny(valueType)) {
- return anyType;
- }
- var signatures = getSignaturesOfType(valueType, 1);
- if (signatures.length === 0) {
- signatures = getSignaturesOfType(valueType, 0);
- if (signatures.length === 0) {
- error(node.tagName, ts.Diagnostics.JSX_element_type_0_does_not_have_any_construct_or_call_signatures, ts.getTextOfNode(node.tagName));
- return unknownType;
- }
- }
- var returnType = getUnionType(signatures.map(getReturnTypeOfSignature));
- var elemClassType = getJsxGlobalElementClassType();
- if (elemClassType) {
- checkTypeRelatedTo(returnType, elemClassType, assignableRelation, node, ts.Diagnostics.JSX_element_type_0_is_not_a_constructor_function_for_JSX_elements);
- }
- return returnType;
- }
- function getJsxElementPropertiesName() {
- var jsxNamespace = getGlobalSymbol(JsxNames.JSX, 1536, undefined);
- var attribsPropTypeSym = jsxNamespace && getSymbol(jsxNamespace.exports, JsxNames.ElementAttributesPropertyNameContainer, 793056);
- var attribPropType = attribsPropTypeSym && getDeclaredTypeOfSymbol(attribsPropTypeSym);
- var attribProperties = attribPropType && getPropertiesOfType(attribPropType);
- if (attribProperties) {
- if (attribProperties.length === 0) {
- return "";
- }
- else if (attribProperties.length === 1) {
- return attribProperties[0].name;
- }
- else {
- error(attribsPropTypeSym.declarations[0], ts.Diagnostics.The_global_type_JSX_0_may_not_have_more_than_one_property, JsxNames.ElementAttributesPropertyNameContainer);
- return undefined;
- }
- }
- else {
- return undefined;
- }
- }
- function getJsxElementAttributesType(node) {
- var links = getNodeLinks(node);
- if (!links.resolvedJsxType) {
- var sym = getJsxElementTagSymbol(node);
- if (links.jsxFlags & 4) {
- var elemInstanceType = getJsxElementInstanceType(node);
- if (isTypeAny(elemInstanceType)) {
- return links.resolvedJsxType = elemInstanceType;
- }
- var propsName = getJsxElementPropertiesName();
- if (propsName === undefined) {
- return links.resolvedJsxType = anyType;
- }
- else if (propsName === "") {
- return links.resolvedJsxType = elemInstanceType;
- }
- else {
- var attributesType = getTypeOfPropertyOfType(elemInstanceType, propsName);
- if (!attributesType) {
- return links.resolvedJsxType = emptyObjectType;
- }
- else if (isTypeAny(attributesType) || (attributesType === unknownType)) {
- return links.resolvedJsxType = attributesType;
- }
- else if (!(attributesType.flags & 80896)) {
- error(node.tagName, ts.Diagnostics.JSX_element_attributes_type_0_must_be_an_object_type, typeToString(attributesType));
- return links.resolvedJsxType = anyType;
- }
- else {
- return links.resolvedJsxType = attributesType;
- }
- }
- }
- else if (links.jsxFlags & 1) {
- return links.resolvedJsxType = getTypeOfSymbol(sym);
- }
- else if (links.jsxFlags & 2) {
- return links.resolvedJsxType = getIndexTypeOfSymbol(sym, 0);
- }
- else {
- return links.resolvedJsxType = anyType;
- }
- }
- return links.resolvedJsxType;
- }
- function getJsxAttributePropertySymbol(attrib) {
- var attributesType = getJsxElementAttributesType(attrib.parent);
- var prop = getPropertyOfType(attributesType, attrib.name.text);
- return prop || unknownSymbol;
- }
- var jsxElementClassType = undefined;
- function getJsxGlobalElementClassType() {
- if (!jsxElementClassType) {
- jsxElementClassType = getExportedTypeFromNamespace(JsxNames.JSX, JsxNames.ElementClass);
- }
- return jsxElementClassType;
- }
- function getJsxIntrinsicTagNames() {
- var intrinsics = getJsxIntrinsicElementsType();
- return intrinsics ? getPropertiesOfType(intrinsics) : emptyArray;
- }
- function checkJsxPreconditions(errorNode) {
- if ((compilerOptions.jsx || 0) === 0) {
- error(errorNode, ts.Diagnostics.Cannot_use_JSX_unless_the_jsx_flag_is_provided);
- }
- if (jsxElementType === undefined) {
- if (compilerOptions.noImplicitAny) {
- error(errorNode, ts.Diagnostics.JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist);
- }
- }
- }
- function checkJsxOpeningLikeElement(node) {
- checkGrammarJsxElement(node);
- checkJsxPreconditions(node);
- if (compilerOptions.jsx === 2) {
- var reactSym = resolveName(node.tagName, "React", 107455, ts.Diagnostics.Cannot_find_name_0, "React");
- if (reactSym) {
- getSymbolLinks(reactSym).referenced = true;
- }
- }
- var targetAttributesType = getJsxElementAttributesType(node);
- var nameTable = {};
- var sawSpreadedAny = false;
- for (var i = node.attributes.length - 1; i >= 0; i--) {
- if (node.attributes[i].kind === 238) {
- checkJsxAttribute((node.attributes[i]), targetAttributesType, nameTable);
- }
- else {
- ts.Debug.assert(node.attributes[i].kind === 239);
- var spreadType = checkJsxSpreadAttribute((node.attributes[i]), targetAttributesType, nameTable);
- if (isTypeAny(spreadType)) {
- sawSpreadedAny = true;
- }
- }
- }
- if (targetAttributesType && !sawSpreadedAny) {
- var targetProperties = getPropertiesOfType(targetAttributesType);
- for (var i = 0; i < targetProperties.length; i++) {
- if (!(targetProperties[i].flags & 536870912) &&
- nameTable[targetProperties[i].name] === undefined) {
- error(node, ts.Diagnostics.Property_0_is_missing_in_type_1, targetProperties[i].name, typeToString(targetAttributesType));
- }
- }
- }
- }
- function checkJsxExpression(node) {
- if (node.expression) {
- return checkExpression(node.expression);
- }
- else {
- return unknownType;
- }
- }
- function getDeclarationKindFromSymbol(s) {
- return s.valueDeclaration ? s.valueDeclaration.kind : 141;
- }
- function getDeclarationFlagsFromSymbol(s) {
- return s.valueDeclaration ? ts.getCombinedNodeFlags(s.valueDeclaration) : s.flags & 134217728 ? 16 | 128 : 0;
- }
- function checkClassPropertyAccess(node, left, type, prop) {
- var flags = getDeclarationFlagsFromSymbol(prop);
- var declaringClass = getDeclaredTypeOfSymbol(prop.parent);
- if (left.kind === 95) {
- var errorNode = node.kind === 166 ?
- node.name :
- node.right;
- if (getDeclarationKindFromSymbol(prop) !== 143) {
- error(errorNode, ts.Diagnostics.Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword);
- return false;
- }
- if (flags & 256) {
- error(errorNode, ts.Diagnostics.Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression, symbolToString(prop), typeToString(declaringClass));
- return false;
- }
- }
- if (!(flags & (32 | 64))) {
- return true;
- }
- var enclosingClassDeclaration = ts.getContainingClass(node);
- var enclosingClass = enclosingClassDeclaration ? getDeclaredTypeOfSymbol(getSymbolOfNode(enclosingClassDeclaration)) : undefined;
- if (flags & 32) {
- if (declaringClass !== enclosingClass) {
- error(node, ts.Diagnostics.Property_0_is_private_and_only_accessible_within_class_1, symbolToString(prop), typeToString(declaringClass));
- return false;
- }
- return true;
- }
- if (left.kind === 95) {
- return true;
- }
- if (!enclosingClass || !hasBaseType(enclosingClass, declaringClass)) {
- error(node, ts.Diagnostics.Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses, symbolToString(prop), typeToString(declaringClass));
- return false;
- }
- if (flags & 128) {
- return true;
- }
- if (type.flags & 33554432) {
- type = getConstraintOfTypeParameter(type);
- }
- if (!(getTargetType(type).flags & (1024 | 2048) && hasBaseType(type, enclosingClass))) {
- error(node, ts.Diagnostics.Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1, symbolToString(prop), typeToString(enclosingClass));
- return false;
- }
- return true;
- }
- function checkPropertyAccessExpression(node) {
- return checkPropertyAccessExpressionOrQualifiedName(node, node.expression, node.name);
- }
- function checkQualifiedName(node) {
- return checkPropertyAccessExpressionOrQualifiedName(node, node.left, node.right);
- }
- function checkPropertyAccessExpressionOrQualifiedName(node, left, right) {
- var type = checkExpression(left);
- if (isTypeAny(type)) {
- return type;
- }
- var apparentType = getApparentType(getWidenedType(type));
- if (apparentType === unknownType) {
- return unknownType;
- }
- var prop = getPropertyOfType(apparentType, right.text);
- if (!prop) {
- if (right.text) {
- error(right, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.declarationNameToString(right), typeToString(type.flags & 33554432 ? apparentType : type));
- }
- return unknownType;
- }
- getNodeLinks(node).resolvedSymbol = prop;
- if (prop.parent && prop.parent.flags & 32) {
- checkClassPropertyAccess(node, left, apparentType, prop);
- }
- return getTypeOfSymbol(prop);
- }
- function isValidPropertyAccess(node, propertyName) {
- var left = node.kind === 166
- ? node.expression
- : node.left;
- var type = checkExpression(left);
- if (type !== unknownType && !isTypeAny(type)) {
- var prop = getPropertyOfType(getWidenedType(type), propertyName);
- if (prop && prop.parent && prop.parent.flags & 32) {
- return checkClassPropertyAccess(node, left, type, prop);
- }
- }
- return true;
- }
- function checkIndexedAccess(node) {
- if (!node.argumentExpression) {
- var sourceFile = getSourceFile(node);
- if (node.parent.kind === 169 && node.parent.expression === node) {
- var start = ts.skipTrivia(sourceFile.text, node.expression.end);
- var end = node.end;
- grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead);
- }
- else {
- var start = node.end - "]".length;
- var end = node.end;
- grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.Expression_expected);
- }
- }
- var objectType = getApparentType(checkExpression(node.expression));
- var indexType = node.argumentExpression ? checkExpression(node.argumentExpression) : unknownType;
- if (objectType === unknownType) {
- return unknownType;
- }
- var isConstEnum = isConstEnumObjectType(objectType);
- if (isConstEnum &&
- (!node.argumentExpression || node.argumentExpression.kind !== 9)) {
- error(node.argumentExpression, ts.Diagnostics.A_const_enum_member_can_only_be_accessed_using_a_string_literal);
- return unknownType;
- }
- if (node.argumentExpression) {
- var name_11 = getPropertyNameForIndexedAccess(node.argumentExpression, indexType);
- if (name_11 !== undefined) {
- var prop = getPropertyOfType(objectType, name_11);
- if (prop) {
- getNodeLinks(node).resolvedSymbol = prop;
- return getTypeOfSymbol(prop);
- }
- else if (isConstEnum) {
- error(node.argumentExpression, ts.Diagnostics.Property_0_does_not_exist_on_const_enum_1, name_11, symbolToString(objectType.symbol));
- return unknownType;
- }
- }
- }
- if (isTypeAnyOrAllConstituentTypesHaveKind(indexType, 258 | 132 | 16777216)) {
- if (isTypeAnyOrAllConstituentTypesHaveKind(indexType, 132)) {
- var numberIndexType = getIndexTypeOfType(objectType, 1);
- if (numberIndexType) {
- return numberIndexType;
- }
- }
- var stringIndexType = getIndexTypeOfType(objectType, 0);
- if (stringIndexType) {
- return stringIndexType;
- }
- if (compilerOptions.noImplicitAny && !compilerOptions.suppressImplicitAnyIndexErrors && !isTypeAny(objectType)) {
- error(node, ts.Diagnostics.Index_signature_of_object_type_implicitly_has_an_any_type);
- }
- return anyType;
- }
- error(node, ts.Diagnostics.An_index_expression_argument_must_be_of_type_string_number_symbol_or_any);
- return unknownType;
- }
- function getPropertyNameForIndexedAccess(indexArgumentExpression, indexArgumentType) {
- if (indexArgumentExpression.kind === 9 || indexArgumentExpression.kind === 8) {
- return indexArgumentExpression.text;
- }
- if (indexArgumentExpression.kind === 167 || indexArgumentExpression.kind === 166) {
- var value = getConstantValue(indexArgumentExpression);
- if (value !== undefined) {
- return value.toString();
- }
- }
- if (checkThatExpressionIsProperSymbolReference(indexArgumentExpression, indexArgumentType, false)) {
- var rightHandSideName = indexArgumentExpression.name.text;
- return ts.getPropertyNameForKnownSymbolName(rightHandSideName);
- }
- return undefined;
- }
- function checkThatExpressionIsProperSymbolReference(expression, expressionType, reportError) {
- if (expressionType === unknownType) {
- return false;
- }
- if (!ts.isWellKnownSymbolSyntactically(expression)) {
- return false;
- }
- if ((expressionType.flags & 16777216) === 0) {
- if (reportError) {
- error(expression, ts.Diagnostics.A_computed_property_name_of_the_form_0_must_be_of_type_symbol, ts.getTextOfNode(expression));
- }
- return false;
- }
- var leftHandSide = expression.expression;
- var leftHandSideSymbol = getResolvedSymbol(leftHandSide);
- if (!leftHandSideSymbol) {
- return false;
- }
- var globalESSymbol = getGlobalESSymbolConstructorSymbol();
- if (!globalESSymbol) {
- return false;
- }
- if (leftHandSideSymbol !== globalESSymbol) {
- if (reportError) {
- error(leftHandSide, ts.Diagnostics.Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object);
- }
- return false;
- }
- return true;
- }
- function resolveUntypedCall(node) {
- if (node.kind === 170) {
- checkExpression(node.template);
- }
- else if (node.kind !== 139) {
- ts.forEach(node.arguments, function (argument) {
- checkExpression(argument);
- });
- }
- return anySignature;
- }
- function resolveErrorCall(node) {
- resolveUntypedCall(node);
- return unknownSignature;
- }
- function reorderCandidates(signatures, result) {
- var lastParent;
- var lastSymbol;
- var cutoffIndex = 0;
- var index;
- var specializedIndex = -1;
- var spliceIndex;
- ts.Debug.assert(!result.length);
- for (var _i = 0; _i < signatures.length; _i++) {
- var signature = signatures[_i];
- var symbol = signature.declaration && getSymbolOfNode(signature.declaration);
- var parent_5 = signature.declaration && signature.declaration.parent;
- if (!lastSymbol || symbol === lastSymbol) {
- if (lastParent && parent_5 === lastParent) {
- index++;
- }
- else {
- lastParent = parent_5;
- index = cutoffIndex;
- }
- }
- else {
- index = cutoffIndex = result.length;
- lastParent = parent_5;
- }
- lastSymbol = symbol;
- if (signature.hasStringLiterals) {
- specializedIndex++;
- spliceIndex = specializedIndex;
- cutoffIndex++;
- }
- else {
- spliceIndex = index;
- }
- result.splice(spliceIndex, 0, signature);
- }
- }
- function getSpreadArgumentIndex(args) {
- for (var i = 0; i < args.length; i++) {
- var arg = args[i];
- if (arg && arg.kind === 185) {
- return i;
- }
- }
- return -1;
- }
- function hasCorrectArity(node, args, signature) {
- var adjustedArgCount;
- var typeArguments;
- var callIsIncomplete;
- var isDecorator;
- var spreadArgIndex = -1;
- if (node.kind === 170) {
- var tagExpression = node;
- adjustedArgCount = args.length;
- typeArguments = undefined;
- if (tagExpression.template.kind === 183) {
- var templateExpression = tagExpression.template;
- var lastSpan = ts.lastOrUndefined(templateExpression.templateSpans);
- ts.Debug.assert(lastSpan !== undefined);
- callIsIncomplete = ts.nodeIsMissing(lastSpan.literal) || !!lastSpan.literal.isUnterminated;
- }
- else {
- var templateLiteral = tagExpression.template;
- ts.Debug.assert(templateLiteral.kind === 11);
- callIsIncomplete = !!templateLiteral.isUnterminated;
- }
- }
- else if (node.kind === 139) {
- isDecorator = true;
- typeArguments = undefined;
- adjustedArgCount = getEffectiveArgumentCount(node, undefined, signature);
- }
- else {
- var callExpression = node;
- if (!callExpression.arguments) {
- ts.Debug.assert(callExpression.kind === 169);
- return signature.minArgumentCount === 0;
- }
- adjustedArgCount = callExpression.arguments.hasTrailingComma ? args.length + 1 : args.length;
- callIsIncomplete = callExpression.arguments.end === callExpression.end;
- typeArguments = callExpression.typeArguments;
- spreadArgIndex = getSpreadArgumentIndex(args);
- }
- var hasRightNumberOfTypeArgs = !typeArguments ||
- (signature.typeParameters && typeArguments.length === signature.typeParameters.length);
- if (!hasRightNumberOfTypeArgs) {
- return false;
- }
- if (spreadArgIndex >= 0) {
- return isRestParameterIndex(signature, spreadArgIndex);
- }
- if (!signature.hasRestParameter && adjustedArgCount > signature.parameters.length) {
- return false;
- }
- var hasEnoughArguments = adjustedArgCount >= signature.minArgumentCount;
- return callIsIncomplete || hasEnoughArguments;
- }
- function getSingleCallSignature(type) {
- if (type.flags & 80896) {
- var resolved = resolveStructuredTypeMembers(type);
- if (resolved.callSignatures.length === 1 && resolved.constructSignatures.length === 0 &&
- resolved.properties.length === 0 && !resolved.stringIndexType && !resolved.numberIndexType) {
- return resolved.callSignatures[0];
- }
- }
- return undefined;
- }
- function instantiateSignatureInContextOf(signature, contextualSignature, contextualMapper) {
- var context = createInferenceContext(signature.typeParameters, true);
- forEachMatchingParameterType(contextualSignature, signature, function (source, target) {
- inferTypes(context, instantiateType(source, contextualMapper), target);
- });
- return getSignatureInstantiation(signature, getInferredTypes(context));
- }
- function inferTypeArguments(node, signature, args, excludeArgument, context) {
- var typeParameters = signature.typeParameters;
- var inferenceMapper = createInferenceMapper(context);
- for (var i = 0; i < typeParameters.length; i++) {
- if (!context.inferences[i].isFixed) {
- context.inferredTypes[i] = undefined;
- }
- }
- if (context.failedTypeParameterIndex !== undefined && !context.inferences[context.failedTypeParameterIndex].isFixed) {
- context.failedTypeParameterIndex = undefined;
- }
- var argCount = getEffectiveArgumentCount(node, args, signature);
- for (var i = 0; i < argCount; i++) {
- var arg = getEffectiveArgument(node, args, i);
- if (arg === undefined || arg.kind !== 187) {
- var paramType = getTypeAtPosition(signature, i);
- var argType = getEffectiveArgumentType(node, i, arg);
- if (argType === undefined) {
- var mapper = excludeArgument && excludeArgument[i] !== undefined ? identityMapper : inferenceMapper;
- argType = checkExpressionWithContextualType(arg, paramType, mapper);
- }
- inferTypes(context, argType, paramType);
- }
- }
- if (excludeArgument) {
- for (var i = 0; i < argCount; i++) {
- if (excludeArgument[i] === false) {
- var arg = args[i];
- var paramType = getTypeAtPosition(signature, i);
- inferTypes(context, checkExpressionWithContextualType(arg, paramType, inferenceMapper), paramType);
- }
- }
- }
- getInferredTypes(context);
- }
- function checkTypeArguments(signature, typeArguments, typeArgumentResultTypes, reportErrors, headMessage) {
- var typeParameters = signature.typeParameters;
- var typeArgumentsAreAssignable = true;
- for (var i = 0; i < typeParameters.length; i++) {
- var typeArgNode = typeArguments[i];
- var typeArgument = getTypeFromTypeNode(typeArgNode);
- typeArgumentResultTypes[i] = typeArgument;
- if (typeArgumentsAreAssignable) {
- var constraint = getConstraintOfTypeParameter(typeParameters[i]);
- if (constraint) {
- var errorInfo = void 0;
- var typeArgumentHeadMessage = ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1;
- if (reportErrors && headMessage) {
- errorInfo = ts.chainDiagnosticMessages(errorInfo, typeArgumentHeadMessage);
- typeArgumentHeadMessage = headMessage;
- }
- typeArgumentsAreAssignable = checkTypeAssignableTo(typeArgument, constraint, reportErrors ? typeArgNode : undefined, typeArgumentHeadMessage, errorInfo);
- }
- }
- }
- return typeArgumentsAreAssignable;
- }
- function checkApplicableSignature(node, args, signature, relation, excludeArgument, reportErrors) {
- var argCount = getEffectiveArgumentCount(node, args, signature);
- for (var i = 0; i < argCount; i++) {
- var arg = getEffectiveArgument(node, args, i);
- if (arg === undefined || arg.kind !== 187) {
- var paramType = getTypeAtPosition(signature, i);
- var argType = getEffectiveArgumentType(node, i, arg);
- if (argType === undefined) {
- argType = arg.kind === 9 && !reportErrors
- ? getStringLiteralType(arg)
- : checkExpressionWithContextualType(arg, paramType, excludeArgument && excludeArgument[i] ? identityMapper : undefined);
- }
- var errorNode = reportErrors ? getEffectiveArgumentErrorNode(node, i, arg) : undefined;
- var headMessage = ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1;
- if (!checkTypeRelatedTo(argType, paramType, relation, errorNode, headMessage)) {
- return false;
- }
- }
- }
- return true;
- }
- function getEffectiveCallArguments(node) {
- var args;
- if (node.kind === 170) {
- var template = node.template;
- args = [undefined];
- if (template.kind === 183) {
- ts.forEach(template.templateSpans, function (span) {
- args.push(span.expression);
- });
- }
- }
- else if (node.kind === 139) {
- return undefined;
- }
- else {
- args = node.arguments || emptyArray;
- }
- return args;
- }
- function getEffectiveArgumentCount(node, args, signature) {
- if (node.kind === 139) {
- switch (node.parent.kind) {
- case 214:
- case 186:
- return 1;
- case 141:
- return 2;
- case 143:
- case 145:
- case 146:
- if (languageVersion === 0) {
- return 2;
- }
- return signature.parameters.length >= 3 ? 3 : 2;
- case 138:
- return 3;
- }
- }
- else {
- return args.length;
- }
- }
- function getEffectiveDecoratorFirstArgumentType(node) {
- if (node.kind === 214) {
- var classSymbol = getSymbolOfNode(node);
- return getTypeOfSymbol(classSymbol);
- }
- if (node.kind === 138) {
- node = node.parent;
- if (node.kind === 144) {
- var classSymbol = getSymbolOfNode(node);
- return getTypeOfSymbol(classSymbol);
- }
- }
- if (node.kind === 141 ||
- node.kind === 143 ||
- node.kind === 145 ||
- node.kind === 146) {
- return getParentTypeOfClassElement(node);
- }
- ts.Debug.fail("Unsupported decorator target.");
- return unknownType;
- }
- function getEffectiveDecoratorSecondArgumentType(node) {
- if (node.kind === 214) {
- ts.Debug.fail("Class decorators should not have a second synthetic argument.");
- return unknownType;
- }
- if (node.kind === 138) {
- node = node.parent;
- if (node.kind === 144) {
- return anyType;
- }
- }
- if (node.kind === 141 ||
- node.kind === 143 ||
- node.kind === 145 ||
- node.kind === 146) {
- var element = node;
- switch (element.name.kind) {
- case 69:
- case 8:
- case 9:
- return getStringLiteralType(element.name);
- case 136:
- var nameType = checkComputedPropertyName(element.name);
- if (allConstituentTypesHaveKind(nameType, 16777216)) {
- return nameType;
- }
- else {
- return stringType;
- }
- default:
- ts.Debug.fail("Unsupported property name.");
- return unknownType;
- }
- }
- ts.Debug.fail("Unsupported decorator target.");
- return unknownType;
- }
- function getEffectiveDecoratorThirdArgumentType(node) {
- if (node.kind === 214) {
- ts.Debug.fail("Class decorators should not have a third synthetic argument.");
- return unknownType;
- }
- if (node.kind === 138) {
- return numberType;
- }
- if (node.kind === 141) {
- ts.Debug.fail("Property decorators should not have a third synthetic argument.");
- return unknownType;
- }
- if (node.kind === 143 ||
- node.kind === 145 ||
- node.kind === 146) {
- var propertyType = getTypeOfNode(node);
- return createTypedPropertyDescriptorType(propertyType);
- }
- ts.Debug.fail("Unsupported decorator target.");
- return unknownType;
- }
- function getEffectiveDecoratorArgumentType(node, argIndex) {
- if (argIndex === 0) {
- return getEffectiveDecoratorFirstArgumentType(node.parent);
- }
- else if (argIndex === 1) {
- return getEffectiveDecoratorSecondArgumentType(node.parent);
- }
- else if (argIndex === 2) {
- return getEffectiveDecoratorThirdArgumentType(node.parent);
- }
- ts.Debug.fail("Decorators should not have a fourth synthetic argument.");
- return unknownType;
- }
- function getEffectiveArgumentType(node, argIndex, arg) {
- if (node.kind === 139) {
- return getEffectiveDecoratorArgumentType(node, argIndex);
- }
- else if (argIndex === 0 && node.kind === 170) {
- return globalTemplateStringsArrayType;
- }
- return undefined;
- }
- function getEffectiveArgument(node, args, argIndex) {
- if (node.kind === 139 ||
- (argIndex === 0 && node.kind === 170)) {
- return undefined;
- }
- return args[argIndex];
- }
- function getEffectiveArgumentErrorNode(node, argIndex, arg) {
- if (node.kind === 139) {
- return node.expression;
- }
- else if (argIndex === 0 && node.kind === 170) {
- return node.template;
- }
- else {
- return arg;
- }
- }
- function resolveCall(node, signatures, candidatesOutArray, headMessage) {
- var isTaggedTemplate = node.kind === 170;
- var isDecorator = node.kind === 139;
- var typeArguments;
- if (!isTaggedTemplate && !isDecorator) {
- typeArguments = node.typeArguments;
- if (node.expression.kind !== 95) {
- ts.forEach(typeArguments, checkSourceElement);
- }
- }
- var candidates = candidatesOutArray || [];
- reorderCandidates(signatures, candidates);
- if (!candidates.length) {
- reportError(ts.Diagnostics.Supplied_parameters_do_not_match_any_signature_of_call_target);
- return resolveErrorCall(node);
- }
- var args = getEffectiveCallArguments(node);
- var excludeArgument;
- if (!isDecorator) {
- for (var i = isTaggedTemplate ? 1 : 0; i < args.length; i++) {
- if (isContextSensitive(args[i])) {
- if (!excludeArgument) {
- excludeArgument = new Array(args.length);
- }
- excludeArgument[i] = true;
- }
- }
- }
- var candidateForArgumentError;
- var candidateForTypeArgumentError;
- var resultOfFailedInference;
- var result;
- if (candidates.length > 1) {
- result = chooseOverload(candidates, subtypeRelation);
- }
- if (!result) {
- candidateForArgumentError = undefined;
- candidateForTypeArgumentError = undefined;
- resultOfFailedInference = undefined;
- result = chooseOverload(candidates, assignableRelation);
- }
- if (result) {
- return result;
- }
- if (candidateForArgumentError) {
- checkApplicableSignature(node, args, candidateForArgumentError, assignableRelation, undefined, true);
- }
- else if (candidateForTypeArgumentError) {
- if (!isTaggedTemplate && !isDecorator && typeArguments) {
- checkTypeArguments(candidateForTypeArgumentError, node.typeArguments, [], true, headMessage);
- }
- else {
- ts.Debug.assert(resultOfFailedInference.failedTypeParameterIndex >= 0);
- var failedTypeParameter = candidateForTypeArgumentError.typeParameters[resultOfFailedInference.failedTypeParameterIndex];
- var inferenceCandidates = getInferenceCandidates(resultOfFailedInference, resultOfFailedInference.failedTypeParameterIndex);
- var diagnosticChainHead = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_type_arguments_explicitly, typeToString(failedTypeParameter));
- if (headMessage) {
- diagnosticChainHead = ts.chainDiagnosticMessages(diagnosticChainHead, headMessage);
- }
- reportNoCommonSupertypeError(inferenceCandidates, node.expression || node.tag, diagnosticChainHead);
- }
- }
- else {
- reportError(ts.Diagnostics.Supplied_parameters_do_not_match_any_signature_of_call_target);
- }
- if (!produceDiagnostics) {
- for (var _i = 0; _i < candidates.length; _i++) {
- var candidate = candidates[_i];
- if (hasCorrectArity(node, args, candidate)) {
- if (candidate.typeParameters && typeArguments) {
- candidate = getSignatureInstantiation(candidate, ts.map(typeArguments, getTypeFromTypeNode));
- }
- return candidate;
- }
- }
- }
- return resolveErrorCall(node);
- function reportError(message, arg0, arg1, arg2) {
- var errorInfo;
- errorInfo = ts.chainDiagnosticMessages(errorInfo, message, arg0, arg1, arg2);
- if (headMessage) {
- errorInfo = ts.chainDiagnosticMessages(errorInfo, headMessage);
- }
- diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(node, errorInfo));
- }
- function chooseOverload(candidates, relation) {
- for (var _i = 0; _i < candidates.length; _i++) {
- var originalCandidate = candidates[_i];
- if (!hasCorrectArity(node, args, originalCandidate)) {
- continue;
- }
- var candidate = void 0;
- var typeArgumentsAreValid = void 0;
- var inferenceContext = originalCandidate.typeParameters
- ? createInferenceContext(originalCandidate.typeParameters, false)
- : undefined;
- while (true) {
- candidate = originalCandidate;
- if (candidate.typeParameters) {
- var typeArgumentTypes = void 0;
- if (typeArguments) {
- typeArgumentTypes = new Array(candidate.typeParameters.length);
- typeArgumentsAreValid = checkTypeArguments(candidate, typeArguments, typeArgumentTypes, false);
- }
- else {
- inferTypeArguments(node, candidate, args, excludeArgument, inferenceContext);
- typeArgumentsAreValid = inferenceContext.failedTypeParameterIndex === undefined;
- typeArgumentTypes = inferenceContext.inferredTypes;
- }
- if (!typeArgumentsAreValid) {
- break;
- }
- candidate = getSignatureInstantiation(candidate, typeArgumentTypes);
- }
- if (!checkApplicableSignature(node, args, candidate, relation, excludeArgument, false)) {
- break;
- }
- var index = excludeArgument ? ts.indexOf(excludeArgument, true) : -1;
- if (index < 0) {
- return candidate;
- }
- excludeArgument[index] = false;
- }
- if (originalCandidate.typeParameters) {
- var instantiatedCandidate = candidate;
- if (typeArgumentsAreValid) {
- candidateForArgumentError = instantiatedCandidate;
- }
- else {
- candidateForTypeArgumentError = originalCandidate;
- if (!typeArguments) {
- resultOfFailedInference = inferenceContext;
- }
- }
- }
- else {
- ts.Debug.assert(originalCandidate === candidate);
- candidateForArgumentError = originalCandidate;
- }
- }
- return undefined;
- }
- }
- function resolveCallExpression(node, candidatesOutArray) {
- if (node.expression.kind === 95) {
- var superType = checkSuperExpression(node.expression);
- if (superType !== unknownType) {
- var baseTypeNode = ts.getClassExtendsHeritageClauseElement(ts.getContainingClass(node));
- var baseConstructors = getInstantiatedConstructorsForTypeArguments(superType, baseTypeNode.typeArguments);
- return resolveCall(node, baseConstructors, candidatesOutArray);
- }
- return resolveUntypedCall(node);
- }
- var funcType = checkExpression(node.expression);
- var apparentType = getApparentType(funcType);
- if (apparentType === unknownType) {
- return resolveErrorCall(node);
- }
- var callSignatures = getSignaturesOfType(apparentType, 0);
- var constructSignatures = getSignaturesOfType(apparentType, 1);
- if (isTypeAny(funcType) || (!callSignatures.length && !constructSignatures.length && !(funcType.flags & 16384) && isTypeAssignableTo(funcType, globalFunctionType))) {
- if (funcType !== unknownType && node.typeArguments) {
- error(node, ts.Diagnostics.Untyped_function_calls_may_not_accept_type_arguments);
- }
- return resolveUntypedCall(node);
- }
- if (!callSignatures.length) {
- if (constructSignatures.length) {
- error(node, ts.Diagnostics.Value_of_type_0_is_not_callable_Did_you_mean_to_include_new, typeToString(funcType));
- }
- else {
- error(node, ts.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature);
- }
- return resolveErrorCall(node);
- }
- return resolveCall(node, callSignatures, candidatesOutArray);
- }
- function resolveNewExpression(node, candidatesOutArray) {
- if (node.arguments && languageVersion < 1) {
- var spreadIndex = getSpreadArgumentIndex(node.arguments);
- if (spreadIndex >= 0) {
- error(node.arguments[spreadIndex], ts.Diagnostics.Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher);
- }
- }
- var expressionType = checkExpression(node.expression);
- expressionType = getApparentType(expressionType);
- if (expressionType === unknownType) {
- return resolveErrorCall(node);
- }
- var valueDecl = expressionType.symbol && getClassLikeDeclarationOfSymbol(expressionType.symbol);
- if (valueDecl && valueDecl.flags & 256) {
- error(node, ts.Diagnostics.Cannot_create_an_instance_of_the_abstract_class_0, ts.declarationNameToString(valueDecl.name));
- return resolveErrorCall(node);
- }
- if (isTypeAny(expressionType)) {
- if (node.typeArguments) {
- error(node, ts.Diagnostics.Untyped_function_calls_may_not_accept_type_arguments);
- }
- return resolveUntypedCall(node);
- }
- var constructSignatures = getSignaturesOfType(expressionType, 1);
- if (constructSignatures.length) {
- return resolveCall(node, constructSignatures, candidatesOutArray);
- }
- var callSignatures = getSignaturesOfType(expressionType, 0);
- if (callSignatures.length) {
- var signature = resolveCall(node, callSignatures, candidatesOutArray);
- if (getReturnTypeOfSignature(signature) !== voidType) {
- error(node, ts.Diagnostics.Only_a_void_function_can_be_called_with_the_new_keyword);
- }
- return signature;
- }
- error(node, ts.Diagnostics.Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature);
- return resolveErrorCall(node);
- }
- function resolveTaggedTemplateExpression(node, candidatesOutArray) {
- var tagType = checkExpression(node.tag);
- var apparentType = getApparentType(tagType);
- if (apparentType === unknownType) {
- return resolveErrorCall(node);
- }
- var callSignatures = getSignaturesOfType(apparentType, 0);
- if (isTypeAny(tagType) || (!callSignatures.length && !(tagType.flags & 16384) && isTypeAssignableTo(tagType, globalFunctionType))) {
- return resolveUntypedCall(node);
- }
- if (!callSignatures.length) {
- error(node, ts.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature);
- return resolveErrorCall(node);
- }
- return resolveCall(node, callSignatures, candidatesOutArray);
- }
- function getDiagnosticHeadMessageForDecoratorResolution(node) {
- switch (node.parent.kind) {
- case 214:
- case 186:
- return ts.Diagnostics.Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression;
- case 138:
- return ts.Diagnostics.Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression;
- case 141:
- return ts.Diagnostics.Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression;
- case 143:
- case 145:
- case 146:
- return ts.Diagnostics.Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression;
- }
- }
- function resolveDecorator(node, candidatesOutArray) {
- var funcType = checkExpression(node.expression);
- var apparentType = getApparentType(funcType);
- if (apparentType === unknownType) {
- return resolveErrorCall(node);
- }
- var callSignatures = getSignaturesOfType(apparentType, 0);
- if (funcType === anyType || (!callSignatures.length && !(funcType.flags & 16384) && isTypeAssignableTo(funcType, globalFunctionType))) {
- return resolveUntypedCall(node);
- }
- var headMessage = getDiagnosticHeadMessageForDecoratorResolution(node);
- if (!callSignatures.length) {
- var errorInfo;
- errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature);
- errorInfo = ts.chainDiagnosticMessages(errorInfo, headMessage);
- diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(node, errorInfo));
- return resolveErrorCall(node);
- }
- return resolveCall(node, callSignatures, candidatesOutArray, headMessage);
- }
- function getResolvedSignature(node, candidatesOutArray) {
- var links = getNodeLinks(node);
- if (!links.resolvedSignature || candidatesOutArray) {
- links.resolvedSignature = anySignature;
- if (node.kind === 168) {
- links.resolvedSignature = resolveCallExpression(node, candidatesOutArray);
- }
- else if (node.kind === 169) {
- links.resolvedSignature = resolveNewExpression(node, candidatesOutArray);
- }
- else if (node.kind === 170) {
- links.resolvedSignature = resolveTaggedTemplateExpression(node, candidatesOutArray);
- }
- else if (node.kind === 139) {
- links.resolvedSignature = resolveDecorator(node, candidatesOutArray);
- }
- else {
- ts.Debug.fail("Branch in 'getResolvedSignature' should be unreachable.");
- }
- }
- return links.resolvedSignature;
- }
- function checkCallExpression(node) {
- checkGrammarTypeArguments(node, node.typeArguments) || checkGrammarArguments(node, node.arguments);
- var signature = getResolvedSignature(node);
- if (node.expression.kind === 95) {
- return voidType;
- }
- if (node.kind === 169) {
- var declaration = signature.declaration;
- if (declaration &&
- declaration.kind !== 144 &&
- declaration.kind !== 148 &&
- declaration.kind !== 153) {
- if (compilerOptions.noImplicitAny) {
- error(node, ts.Diagnostics.new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type);
- }
- return anyType;
- }
- }
- return getReturnTypeOfSignature(signature);
- }
- function checkTaggedTemplateExpression(node) {
- return getReturnTypeOfSignature(getResolvedSignature(node));
- }
- function checkAssertion(node) {
- var exprType = getRegularTypeOfObjectLiteral(checkExpression(node.expression));
- var targetType = getTypeFromTypeNode(node.type);
- if (produceDiagnostics && targetType !== unknownType) {
- var widenedType = getWidenedType(exprType);
- if (!(isTypeAssignableTo(targetType, widenedType))) {
- checkTypeAssignableTo(exprType, targetType, node, ts.Diagnostics.Neither_type_0_nor_type_1_is_assignable_to_the_other);
- }
- }
- return targetType;
- }
- function getTypeAtPosition(signature, pos) {
- return signature.hasRestParameter ?
- pos < signature.parameters.length - 1 ? getTypeOfSymbol(signature.parameters[pos]) : getRestTypeOfSignature(signature) :
- pos < signature.parameters.length ? getTypeOfSymbol(signature.parameters[pos]) : anyType;
- }
- function assignContextualParameterTypes(signature, context, mapper) {
- var len = signature.parameters.length - (signature.hasRestParameter ? 1 : 0);
- for (var i = 0; i < len; i++) {
- var parameter = signature.parameters[i];
- var contextualParameterType = getTypeAtPosition(context, i);
- assignTypeToParameterAndFixTypeParameters(parameter, contextualParameterType, mapper);
- }
- if (signature.hasRestParameter && isRestParameterIndex(context, signature.parameters.length - 1)) {
- var parameter = ts.lastOrUndefined(signature.parameters);
- var contextualParameterType = getTypeOfSymbol(ts.lastOrUndefined(context.parameters));
- assignTypeToParameterAndFixTypeParameters(parameter, contextualParameterType, mapper);
- }
- }
- function assignBindingElementTypes(node) {
- if (ts.isBindingPattern(node.name)) {
- for (var _i = 0, _a = node.name.elements; _i < _a.length; _i++) {
- var element = _a[_i];
- if (element.kind !== 187) {
- if (element.name.kind === 69) {
- getSymbolLinks(getSymbolOfNode(element)).type = getTypeForBindingElement(element);
- }
- assignBindingElementTypes(element);
- }
- }
- }
- }
- function assignTypeToParameterAndFixTypeParameters(parameter, contextualType, mapper) {
- var links = getSymbolLinks(parameter);
- if (!links.type) {
- links.type = instantiateType(contextualType, mapper);
- assignBindingElementTypes(parameter.valueDeclaration);
- }
- else if (isInferentialContext(mapper)) {
- inferTypes(mapper.context, links.type, instantiateType(contextualType, mapper));
- }
- }
- function createPromiseType(promisedType) {
- var globalPromiseType = getGlobalPromiseType();
- if (globalPromiseType !== emptyGenericType) {
- promisedType = getAwaitedType(promisedType);
- return createTypeReference(globalPromiseType, [promisedType]);
- }
- return emptyObjectType;
- }
- function getReturnTypeFromBody(func, contextualMapper) {
- var contextualSignature = getContextualSignatureForFunctionLikeDeclaration(func);
- if (!func.body) {
- return unknownType;
- }
- var isAsync = ts.isAsyncFunctionLike(func);
- var type;
- if (func.body.kind !== 192) {
- type = checkExpressionCached(func.body, contextualMapper);
- if (isAsync) {
- type = checkAwaitedType(type, func, ts.Diagnostics.Return_expression_in_async_function_does_not_have_a_valid_callable_then_member);
- }
- }
- else {
- var types;
- var funcIsGenerator = !!func.asteriskToken;
- if (funcIsGenerator) {
- types = checkAndAggregateYieldOperandTypes(func.body, contextualMapper);
- if (types.length === 0) {
- var iterableIteratorAny = createIterableIteratorType(anyType);
- if (compilerOptions.noImplicitAny) {
- error(func.asteriskToken, ts.Diagnostics.Generator_implicitly_has_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_type, typeToString(iterableIteratorAny));
- }
- return iterableIteratorAny;
- }
- }
- else {
- types = checkAndAggregateReturnExpressionTypes(func.body, contextualMapper, isAsync);
- if (types.length === 0) {
- if (isAsync) {
- var promiseType = createPromiseType(voidType);
- if (promiseType === emptyObjectType) {
- error(func, ts.Diagnostics.An_async_function_or_method_must_have_a_valid_awaitable_return_type);
- return unknownType;
- }
- return promiseType;
- }
- else {
- return voidType;
- }
- }
- }
- type = contextualSignature ? getUnionType(types) : getCommonSupertype(types);
- if (!type) {
- if (funcIsGenerator) {
- error(func, ts.Diagnostics.No_best_common_type_exists_among_yield_expressions);
- return createIterableIteratorType(unknownType);
- }
- else {
- error(func, ts.Diagnostics.No_best_common_type_exists_among_return_expressions);
- return unknownType;
- }
- }
- if (funcIsGenerator) {
- type = createIterableIteratorType(type);
- }
- }
- if (!contextualSignature) {
- reportErrorsFromWidening(func, type);
- }
- var widenedType = getWidenedType(type);
- if (isAsync) {
- var promiseType = createPromiseType(widenedType);
- if (promiseType === emptyObjectType) {
- error(func, ts.Diagnostics.An_async_function_or_method_must_have_a_valid_awaitable_return_type);
- return unknownType;
- }
- return promiseType;
- }
- else {
- return widenedType;
- }
- }
- function checkAndAggregateYieldOperandTypes(body, contextualMapper) {
- var aggregatedTypes = [];
- ts.forEachYieldExpression(body, function (yieldExpression) {
- var expr = yieldExpression.expression;
- if (expr) {
- var type = checkExpressionCached(expr, contextualMapper);
- if (yieldExpression.asteriskToken) {
- type = checkElementTypeOfIterable(type, yieldExpression.expression);
- }
- if (!ts.contains(aggregatedTypes, type)) {
- aggregatedTypes.push(type);
- }
- }
- });
- return aggregatedTypes;
- }
- function checkAndAggregateReturnExpressionTypes(body, contextualMapper, isAsync) {
- var aggregatedTypes = [];
- ts.forEachReturnStatement(body, function (returnStatement) {
- var expr = returnStatement.expression;
- if (expr) {
- var type = checkExpressionCached(expr, contextualMapper);
- if (isAsync) {
- type = checkAwaitedType(type, body.parent, ts.Diagnostics.Return_expression_in_async_function_does_not_have_a_valid_callable_then_member);
- }
- if (!ts.contains(aggregatedTypes, type)) {
- aggregatedTypes.push(type);
- }
- }
- });
- return aggregatedTypes;
- }
- function bodyContainsAReturnStatement(funcBody) {
- return ts.forEachReturnStatement(funcBody, function (returnStatement) {
- return true;
- });
- }
- function bodyContainsSingleThrowStatement(body) {
- return (body.statements.length === 1) && (body.statements[0].kind === 208);
- }
- function checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(func, returnType) {
- if (!produceDiagnostics) {
- return;
- }
- if (returnType === voidType || isTypeAny(returnType)) {
- return;
- }
- if (ts.nodeIsMissing(func.body) || func.body.kind !== 192) {
- return;
- }
- var bodyBlock = func.body;
- if (bodyContainsAReturnStatement(bodyBlock)) {
- return;
- }
- if (bodyContainsSingleThrowStatement(bodyBlock)) {
- return;
- }
- error(func.type, ts.Diagnostics.A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_or_consist_of_a_single_throw_statement);
- }
- function checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper) {
- ts.Debug.assert(node.kind !== 143 || ts.isObjectLiteralMethod(node));
- var hasGrammarError = checkGrammarFunctionLikeDeclaration(node);
- if (!hasGrammarError && node.kind === 173) {
- checkGrammarForGenerator(node);
- }
- if (contextualMapper === identityMapper && isContextSensitive(node)) {
- return anyFunctionType;
- }
- var isAsync = ts.isAsyncFunctionLike(node);
- if (isAsync) {
- emitAwaiter = true;
- }
- var links = getNodeLinks(node);
- var type = getTypeOfSymbol(node.symbol);
- var contextSensitive = isContextSensitive(node);
- var mightFixTypeParameters = contextSensitive && isInferentialContext(contextualMapper);
- if (mightFixTypeParameters || !(links.flags & 1024)) {
- var contextualSignature = getContextualSignature(node);
- var contextChecked = !!(links.flags & 1024);
- if (mightFixTypeParameters || !contextChecked) {
- links.flags |= 1024;
- if (contextualSignature) {
- var signature = getSignaturesOfType(type, 0)[0];
- if (contextSensitive) {
- assignContextualParameterTypes(signature, contextualSignature, contextualMapper || identityMapper);
- }
- if (mightFixTypeParameters || !node.type && !signature.resolvedReturnType) {
- var returnType = getReturnTypeFromBody(node, contextualMapper);
- if (!signature.resolvedReturnType) {
- signature.resolvedReturnType = returnType;
- }
- }
- }
- if (!contextChecked) {
- checkSignatureDeclaration(node);
- }
- }
- }
- if (produceDiagnostics && node.kind !== 143 && node.kind !== 142) {
- checkCollisionWithCapturedSuperVariable(node, node.name);
- checkCollisionWithCapturedThisVariable(node, node.name);
- }
- return type;
- }
- function checkFunctionExpressionOrObjectLiteralMethodBody(node) {
- ts.Debug.assert(node.kind !== 143 || ts.isObjectLiteralMethod(node));
- var isAsync = ts.isAsyncFunctionLike(node);
- if (isAsync) {
- emitAwaiter = true;
- }
- var returnType = node.type && getTypeFromTypeNode(node.type);
- var promisedType;
- if (returnType && isAsync) {
- promisedType = checkAsyncFunctionReturnType(node);
- }
- if (returnType && !node.asteriskToken) {
- checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(node, isAsync ? promisedType : returnType);
- }
- if (node.body) {
- if (!node.type) {
- getReturnTypeOfSignature(getSignatureFromDeclaration(node));
- }
- if (node.body.kind === 192) {
- checkSourceElement(node.body);
- }
- else {
- var exprType = checkExpression(node.body);
- if (returnType) {
- if (isAsync) {
- var awaitedType = checkAwaitedType(exprType, node.body, ts.Diagnostics.Expression_body_for_async_arrow_function_does_not_have_a_valid_callable_then_member);
- checkTypeAssignableTo(awaitedType, promisedType, node.body);
- }
- else {
- checkTypeAssignableTo(exprType, returnType, node.body);
- }
- }
- checkFunctionAndClassExpressionBodies(node.body);
- }
- }
- }
- function checkArithmeticOperandType(operand, type, diagnostic) {
- if (!isTypeAnyOrAllConstituentTypesHaveKind(type, 132)) {
- error(operand, diagnostic);
- return false;
- }
- return true;
- }
- function checkReferenceExpression(n, invalidReferenceMessage, constantVariableMessage) {
- function findSymbol(n) {
- var symbol = getNodeLinks(n).resolvedSymbol;
- return symbol && getExportSymbolOfValueSymbolIfExported(symbol);
- }
- function isReferenceOrErrorExpression(n) {
- switch (n.kind) {
- case 69: {
- var symbol = findSymbol(n);
- return !symbol || symbol === unknownSymbol || symbol === argumentsSymbol || (symbol.flags & 3) !== 0;
- }
- case 166: {
- var symbol = findSymbol(n);
- return !symbol || symbol === unknownSymbol || (symbol.flags & ~8) !== 0;
- }
- case 167:
- return true;
- case 172:
- return isReferenceOrErrorExpression(n.expression);
- default:
- return false;
- }
- }
- function isConstVariableReference(n) {
- switch (n.kind) {
- case 69:
- case 166: {
- var symbol = findSymbol(n);
- return symbol && (symbol.flags & 3) !== 0 && (getDeclarationFlagsFromSymbol(symbol) & 32768) !== 0;
- }
- case 167: {
- var index = n.argumentExpression;
- var symbol = findSymbol(n.expression);
- if (symbol && index && index.kind === 9) {
- var name_12 = index.text;
- var prop = getPropertyOfType(getTypeOfSymbol(symbol), name_12);
- return prop && (prop.flags & 3) !== 0 && (getDeclarationFlagsFromSymbol(prop) & 32768) !== 0;
- }
- return false;
- }
- case 172:
- return isConstVariableReference(n.expression);
- default:
- return false;
- }
- }
- if (!isReferenceOrErrorExpression(n)) {
- error(n, invalidReferenceMessage);
- return false;
- }
- if (isConstVariableReference(n)) {
- error(n, constantVariableMessage);
- return false;
- }
- return true;
- }
- function checkDeleteExpression(node) {
- checkExpression(node.expression);
- return booleanType;
- }
- function checkTypeOfExpression(node) {
- checkExpression(node.expression);
- return stringType;
- }
- function checkVoidExpression(node) {
- checkExpression(node.expression);
- return undefinedType;
- }
- function checkAwaitExpression(node) {
- if (produceDiagnostics) {
- if (!(node.parserContextFlags & 8)) {
- grammarErrorOnFirstToken(node, ts.Diagnostics.await_expression_is_only_allowed_within_an_async_function);
- }
- if (isInParameterInitializerBeforeContainingFunction(node)) {
- error(node, ts.Diagnostics.await_expressions_cannot_be_used_in_a_parameter_initializer);
- }
- }
- var operandType = checkExpression(node.expression);
- return checkAwaitedType(operandType, node);
- }
- function checkPrefixUnaryExpression(node) {
- var operandType = checkExpression(node.operand);
- switch (node.operator) {
- case 35:
- case 36:
- case 50:
- if (someConstituentTypeHasKind(operandType, 16777216)) {
- error(node.operand, ts.Diagnostics.The_0_operator_cannot_be_applied_to_type_symbol, ts.tokenToString(node.operator));
- }
- return numberType;
- case 49:
- return booleanType;
- case 41:
- case 42:
- var ok = checkArithmeticOperandType(node.operand, operandType, ts.Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type);
- if (ok) {
- checkReferenceExpression(node.operand, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_cannot_be_a_constant);
- }
- return numberType;
- }
- return unknownType;
- }
- function checkPostfixUnaryExpression(node) {
- var operandType = checkExpression(node.operand);
- var ok = checkArithmeticOperandType(node.operand, operandType, ts.Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type);
- if (ok) {
- checkReferenceExpression(node.operand, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_cannot_be_a_constant);
- }
- return numberType;
- }
- function someConstituentTypeHasKind(type, kind) {
- if (type.flags & kind) {
- return true;
- }
- if (type.flags & 49152) {
- var types = type.types;
- for (var _i = 0; _i < types.length; _i++) {
- var current = types[_i];
- if (current.flags & kind) {
- return true;
- }
- }
- return false;
- }
- return false;
- }
- function allConstituentTypesHaveKind(type, kind) {
- if (type.flags & kind) {
- return true;
- }
- if (type.flags & 49152) {
- var types = type.types;
- for (var _i = 0; _i < types.length; _i++) {
- var current = types[_i];
- if (!(current.flags & kind)) {
- return false;
- }
- }
- return true;
- }
- return false;
- }
- function isConstEnumObjectType(type) {
- return type.flags & (80896 | 65536) && type.symbol && isConstEnumSymbol(type.symbol);
- }
- function isConstEnumSymbol(symbol) {
- return (symbol.flags & 128) !== 0;
- }
- function checkInstanceOfExpression(left, right, leftType, rightType) {
- if (allConstituentTypesHaveKind(leftType, 16777726)) {
- error(left, ts.Diagnostics.The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter);
- }
- if (!(isTypeAny(rightType) || isTypeSubtypeOf(rightType, globalFunctionType))) {
- error(right, ts.Diagnostics.The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type);
- }
- return booleanType;
- }
- function checkInExpression(left, right, leftType, rightType) {
- if (!isTypeAnyOrAllConstituentTypesHaveKind(leftType, 258 | 132 | 16777216)) {
- error(left, ts.Diagnostics.The_left_hand_side_of_an_in_expression_must_be_of_type_any_string_number_or_symbol);
- }
- if (!isTypeAnyOrAllConstituentTypesHaveKind(rightType, 80896 | 512)) {
- error(right, ts.Diagnostics.The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter);
- }
- return booleanType;
- }
- function checkObjectLiteralAssignment(node, sourceType, contextualMapper) {
- var properties = node.properties;
- for (var _i = 0; _i < properties.length; _i++) {
- var p = properties[_i];
- if (p.kind === 245 || p.kind === 246) {
- var name_13 = p.name;
- var type = isTypeAny(sourceType)
- ? sourceType
- : getTypeOfPropertyOfType(sourceType, name_13.text) ||
- isNumericLiteralName(name_13.text) && getIndexTypeOfType(sourceType, 1) ||
- getIndexTypeOfType(sourceType, 0);
- if (type) {
- if (p.kind === 246) {
- checkDestructuringAssignment(p, type);
- }
- else {
- checkDestructuringAssignment(p.initializer || name_13, type);
- }
- }
- else {
- error(name_13, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(sourceType), ts.declarationNameToString(name_13));
- }
- }
- else {
- error(p, ts.Diagnostics.Property_assignment_expected);
- }
- }
- return sourceType;
- }
- function checkArrayLiteralAssignment(node, sourceType, contextualMapper) {
- var elementType = checkIteratedTypeOrElementType(sourceType, node, false) || unknownType;
- var elements = node.elements;
- for (var i = 0; i < elements.length; i++) {
- var e = elements[i];
- if (e.kind !== 187) {
- if (e.kind !== 185) {
- var propName = "" + i;
- var type = isTypeAny(sourceType)
- ? sourceType
- : isTupleLikeType(sourceType)
- ? getTypeOfPropertyOfType(sourceType, propName)
- : elementType;
- if (type) {
- checkDestructuringAssignment(e, type, contextualMapper);
- }
- else {
- if (isTupleType(sourceType)) {
- error(e, ts.Diagnostics.Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2, typeToString(sourceType), sourceType.elementTypes.length, elements.length);
- }
- else {
- error(e, ts.Diagnostics.Type_0_has_no_property_1, typeToString(sourceType), propName);
- }
- }
- }
- else {
- if (i < elements.length - 1) {
- error(e, ts.Diagnostics.A_rest_element_must_be_last_in_an_array_destructuring_pattern);
- }
- else {
- var restExpression = e.expression;
- if (restExpression.kind === 181 && restExpression.operatorToken.kind === 56) {
- error(restExpression.operatorToken, ts.Diagnostics.A_rest_element_cannot_have_an_initializer);
- }
- else {
- checkDestructuringAssignment(restExpression, createArrayType(elementType), contextualMapper);
- }
- }
- }
- }
- }
- return sourceType;
- }
- function checkDestructuringAssignment(exprOrAssignment, sourceType, contextualMapper) {
- var target;
- if (exprOrAssignment.kind === 246) {
- var prop = exprOrAssignment;
- if (prop.objectAssignmentInitializer) {
- checkBinaryLikeExpression(prop.name, prop.equalsToken, prop.objectAssignmentInitializer, contextualMapper);
- }
- target = exprOrAssignment.name;
- }
- else {
- target = exprOrAssignment;
- }
- if (target.kind === 181 && target.operatorToken.kind === 56) {
- checkBinaryExpression(target, contextualMapper);
- target = target.left;
- }
- if (target.kind === 165) {
- return checkObjectLiteralAssignment(target, sourceType, contextualMapper);
- }
- if (target.kind === 164) {
- return checkArrayLiteralAssignment(target, sourceType, contextualMapper);
- }
- return checkReferenceAssignment(target, sourceType, contextualMapper);
- }
- function checkReferenceAssignment(target, sourceType, contextualMapper) {
- var targetType = checkExpression(target, contextualMapper);
- if (checkReferenceExpression(target, ts.Diagnostics.Invalid_left_hand_side_of_assignment_expression, ts.Diagnostics.Left_hand_side_of_assignment_expression_cannot_be_a_constant)) {
- checkTypeAssignableTo(sourceType, targetType, target, undefined);
- }
- return sourceType;
- }
- function checkBinaryExpression(node, contextualMapper) {
- return checkBinaryLikeExpression(node.left, node.operatorToken, node.right, contextualMapper, node);
- }
- function checkBinaryLikeExpression(left, operatorToken, right, contextualMapper, errorNode) {
- var operator = operatorToken.kind;
- if (operator === 56 && (left.kind === 165 || left.kind === 164)) {
- return checkDestructuringAssignment(left, checkExpression(right, contextualMapper), contextualMapper);
- }
- var leftType = checkExpression(left, contextualMapper);
- var rightType = checkExpression(right, contextualMapper);
- switch (operator) {
- case 37:
- case 38:
- case 59:
- case 60:
- case 39:
- case 61:
- case 40:
- case 62:
- case 36:
- case 58:
- case 43:
- case 63:
- case 44:
- case 64:
- case 45:
- case 65:
- case 47:
- case 67:
- case 48:
- case 68:
- case 46:
- case 66:
- if (leftType.flags & (32 | 64))
- leftType = rightType;
- if (rightType.flags & (32 | 64))
- rightType = leftType;
- var suggestedOperator;
- if ((leftType.flags & 8) &&
- (rightType.flags & 8) &&
- (suggestedOperator = getSuggestedBooleanOperator(operatorToken.kind)) !== undefined) {
- error(errorNode || operatorToken, ts.Diagnostics.The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead, ts.tokenToString(operatorToken.kind), ts.tokenToString(suggestedOperator));
- }
- else {
- var leftOk = checkArithmeticOperandType(left, leftType, ts.Diagnostics.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type);
- var rightOk = checkArithmeticOperandType(right, rightType, ts.Diagnostics.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type);
- if (leftOk && rightOk) {
- checkAssignmentOperator(numberType);
- }
- }
- return numberType;
- case 35:
- case 57:
- if (leftType.flags & (32 | 64))
- leftType = rightType;
- if (rightType.flags & (32 | 64))
- rightType = leftType;
- var resultType;
- if (allConstituentTypesHaveKind(leftType, 132) && allConstituentTypesHaveKind(rightType, 132)) {
- resultType = numberType;
- }
- else {
- if (allConstituentTypesHaveKind(leftType, 258) || allConstituentTypesHaveKind(rightType, 258)) {
- resultType = stringType;
- }
- else if (isTypeAny(leftType) || isTypeAny(rightType)) {
- resultType = leftType === unknownType || rightType === unknownType ? unknownType : anyType;
- }
- if (resultType && !checkForDisallowedESSymbolOperand(operator)) {
- return resultType;
- }
- }
- if (!resultType) {
- reportOperatorError();
- return anyType;
- }
- if (operator === 57) {
- checkAssignmentOperator(resultType);
- }
- return resultType;
- case 25:
- case 27:
- case 28:
- case 29:
- if (!checkForDisallowedESSymbolOperand(operator)) {
- return booleanType;
- }
- case 30:
- case 31:
- case 32:
- case 33:
- if (!isTypeAssignableTo(leftType, rightType) && !isTypeAssignableTo(rightType, leftType)) {
- reportOperatorError();
- }
- return booleanType;
- case 91:
- return checkInstanceOfExpression(left, right, leftType, rightType);
- case 90:
- return checkInExpression(left, right, leftType, rightType);
- case 51:
- return rightType;
- case 52:
- return getUnionType([leftType, rightType]);
- case 56:
- checkAssignmentOperator(rightType);
- return getRegularTypeOfObjectLiteral(rightType);
- case 24:
- return rightType;
- }
- function checkForDisallowedESSymbolOperand(operator) {
- var offendingSymbolOperand = someConstituentTypeHasKind(leftType, 16777216) ? left :
- someConstituentTypeHasKind(rightType, 16777216) ? right :
- undefined;
- if (offendingSymbolOperand) {
- error(offendingSymbolOperand, ts.Diagnostics.The_0_operator_cannot_be_applied_to_type_symbol, ts.tokenToString(operator));
- return false;
- }
- return true;
- }
- function getSuggestedBooleanOperator(operator) {
- switch (operator) {
- case 47:
- case 67:
- return 52;
- case 48:
- case 68:
- return 33;
- case 46:
- case 66:
- return 51;
- default:
- return undefined;
- }
- }
- function checkAssignmentOperator(valueType) {
- if (produceDiagnostics && operator >= 56 && operator <= 68) {
- var ok = checkReferenceExpression(left, ts.Diagnostics.Invalid_left_hand_side_of_assignment_expression, ts.Diagnostics.Left_hand_side_of_assignment_expression_cannot_be_a_constant);
- if (ok) {
- checkTypeAssignableTo(valueType, leftType, left, undefined);
- }
- }
- }
- function reportOperatorError() {
- error(errorNode || operatorToken, ts.Diagnostics.Operator_0_cannot_be_applied_to_types_1_and_2, ts.tokenToString(operatorToken.kind), typeToString(leftType), typeToString(rightType));
- }
- }
- function isYieldExpressionInClass(node) {
- var current = node;
- var parent = node.parent;
- while (parent) {
- if (ts.isFunctionLike(parent) && current === parent.body) {
- return false;
- }
- else if (ts.isClassLike(current)) {
- return true;
- }
- current = parent;
- parent = parent.parent;
- }
- return false;
- }
- function checkYieldExpression(node) {
- if (produceDiagnostics) {
- if (!(node.parserContextFlags & 2) || isYieldExpressionInClass(node)) {
- grammarErrorOnFirstToken(node, ts.Diagnostics.A_yield_expression_is_only_allowed_in_a_generator_body);
- }
- if (isInParameterInitializerBeforeContainingFunction(node)) {
- error(node, ts.Diagnostics.yield_expressions_cannot_be_used_in_a_parameter_initializer);
- }
- }
- if (node.expression) {
- var func = ts.getContainingFunction(node);
- if (func && func.asteriskToken) {
- var expressionType = checkExpressionCached(node.expression, undefined);
- var expressionElementType;
- var nodeIsYieldStar = !!node.asteriskToken;
- if (nodeIsYieldStar) {
- expressionElementType = checkElementTypeOfIterable(expressionType, node.expression);
- }
- if (func.type) {
- var signatureElementType = getElementTypeOfIterableIterator(getTypeFromTypeNode(func.type)) || anyType;
- if (nodeIsYieldStar) {
- checkTypeAssignableTo(expressionElementType, signatureElementType, node.expression, undefined);
- }
- else {
- checkTypeAssignableTo(expressionType, signatureElementType, node.expression, undefined);
- }
- }
- }
- }
- return anyType;
- }
- function checkConditionalExpression(node, contextualMapper) {
- checkExpression(node.condition);
- var type1 = checkExpression(node.whenTrue, contextualMapper);
- var type2 = checkExpression(node.whenFalse, contextualMapper);
- return getUnionType([type1, type2]);
- }
- function checkTemplateExpression(node) {
- ts.forEach(node.templateSpans, function (templateSpan) {
- checkExpression(templateSpan.expression);
- });
- return stringType;
- }
- function checkExpressionWithContextualType(node, contextualType, contextualMapper) {
- var saveContextualType = node.contextualType;
- node.contextualType = contextualType;
- var result = checkExpression(node, contextualMapper);
- node.contextualType = saveContextualType;
- return result;
- }
- function checkExpressionCached(node, contextualMapper) {
- var links = getNodeLinks(node);
- if (!links.resolvedType) {
- links.resolvedType = checkExpression(node, contextualMapper);
- }
- return links.resolvedType;
- }
- function checkPropertyAssignment(node, contextualMapper) {
- if (node.name.kind === 136) {
- checkComputedPropertyName(node.name);
- }
- return checkExpression(node.initializer, contextualMapper);
- }
- function checkObjectLiteralMethod(node, contextualMapper) {
- checkGrammarMethod(node);
- if (node.name.kind === 136) {
- checkComputedPropertyName(node.name);
- }
- var uninstantiatedType = checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper);
- return instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, contextualMapper);
- }
- function instantiateTypeWithSingleGenericCallSignature(node, type, contextualMapper) {
- if (isInferentialContext(contextualMapper)) {
- var signature = getSingleCallSignature(type);
- if (signature && signature.typeParameters) {
- var contextualType = getContextualType(node);
- if (contextualType) {
- var contextualSignature = getSingleCallSignature(contextualType);
- if (contextualSignature && !contextualSignature.typeParameters) {
- return getOrCreateTypeFromSignature(instantiateSignatureInContextOf(signature, contextualSignature, contextualMapper));
- }
- }
- }
- }
- return type;
- }
- function checkExpression(node, contextualMapper) {
- var type;
- if (node.kind === 135) {
- type = checkQualifiedName(node);
- }
- else {
- var uninstantiatedType = checkExpressionWorker(node, contextualMapper);
- type = instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, contextualMapper);
- }
- if (isConstEnumObjectType(type)) {
- var ok = (node.parent.kind === 166 && node.parent.expression === node) ||
- (node.parent.kind === 167 && node.parent.expression === node) ||
- ((node.kind === 69 || node.kind === 135) && isInRightSideOfImportOrExportAssignment(node));
- if (!ok) {
- error(node, ts.Diagnostics.const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment);
- }
- }
- return type;
- }
- function checkNumericLiteral(node) {
- checkGrammarNumericLiteral(node);
- return numberType;
- }
- function checkExpressionWorker(node, contextualMapper) {
- switch (node.kind) {
- case 69:
- return checkIdentifier(node);
- case 97:
- return checkThisExpression(node);
- case 95:
- return checkSuperExpression(node);
- case 93:
- return nullType;
- case 99:
- case 84:
- return booleanType;
- case 8:
- return checkNumericLiteral(node);
- case 183:
- return checkTemplateExpression(node);
- case 9:
- case 11:
- return stringType;
- case 10:
- return globalRegExpType;
- case 164:
- return checkArrayLiteral(node, contextualMapper);
- case 165:
- return checkObjectLiteral(node, contextualMapper);
- case 166:
- return checkPropertyAccessExpression(node);
- case 167:
- return checkIndexedAccess(node);
- case 168:
- case 169:
- return checkCallExpression(node);
- case 170:
- return checkTaggedTemplateExpression(node);
- case 172:
- return checkExpression(node.expression, contextualMapper);
- case 186:
- return checkClassExpression(node);
- case 173:
- case 174:
- return checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper);
- case 176:
- return checkTypeOfExpression(node);
- case 171:
- case 189:
- return checkAssertion(node);
- case 175:
- return checkDeleteExpression(node);
- case 177:
- return checkVoidExpression(node);
- case 178:
- return checkAwaitExpression(node);
- case 179:
- return checkPrefixUnaryExpression(node);
- case 180:
- return checkPostfixUnaryExpression(node);
- case 181:
- return checkBinaryExpression(node, contextualMapper);
- case 182:
- return checkConditionalExpression(node, contextualMapper);
- case 185:
- return checkSpreadElementExpression(node, contextualMapper);
- case 187:
- return undefinedType;
- case 184:
- return checkYieldExpression(node);
- case 240:
- return checkJsxExpression(node);
- case 233:
- return checkJsxElement(node);
- case 234:
- return checkJsxSelfClosingElement(node);
- case 235:
- ts.Debug.fail("Shouldn't ever directly check a JsxOpeningElement");
- }
- return unknownType;
- }
- function checkTypeParameter(node) {
- if (node.expression) {
- grammarErrorOnFirstToken(node.expression, ts.Diagnostics.Type_expected);
- }
- checkSourceElement(node.constraint);
- if (produceDiagnostics) {
- checkTypeParameterHasIllegalReferencesInConstraint(node);
- checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_parameter_name_cannot_be_0);
- }
- }
- function checkParameter(node) {
- checkGrammarDecorators(node) || checkGrammarModifiers(node);
- checkVariableLikeDeclaration(node);
- var func = ts.getContainingFunction(node);
- if (node.flags & 112) {
- func = ts.getContainingFunction(node);
- if (!(func.kind === 144 && ts.nodeIsPresent(func.body))) {
- error(node, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation);
- }
- }
- if (node.questionToken && ts.isBindingPattern(node.name) && func.body) {
- error(node, ts.Diagnostics.A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature);
- }
- if (node.dotDotDotToken && !ts.isBindingPattern(node.name) && !isArrayType(getTypeOfSymbol(node.symbol))) {
- error(node, ts.Diagnostics.A_rest_parameter_must_be_of_an_array_type);
- }
- }
- function isSyntacticallyValidGenerator(node) {
- if (!node.asteriskToken || !node.body) {
- return false;
- }
- return node.kind === 143 ||
- node.kind === 213 ||
- node.kind === 173;
- }
- function getTypePredicateParameterIndex(parameterList, parameter) {
- if (parameterList) {
- for (var i = 0; i < parameterList.length; i++) {
- var param = parameterList[i];
- if (param.name.kind === 69 &&
- param.name.text === parameter.text) {
- return i;
- }
- }
- }
- return -1;
- }
- function isInLegalTypePredicatePosition(node) {
- switch (node.parent.kind) {
- case 174:
- case 147:
- case 213:
- case 173:
- case 152:
- case 143:
- case 142:
- return node === node.parent.type;
- }
- return false;
- }
- function checkSignatureDeclaration(node) {
- if (node.kind === 149) {
- checkGrammarIndexSignature(node);
- }
- else if (node.kind === 152 || node.kind === 213 || node.kind === 153 ||
- node.kind === 147 || node.kind === 144 ||
- node.kind === 148) {
- checkGrammarFunctionLikeDeclaration(node);
- }
- checkTypeParameters(node.typeParameters);
- ts.forEach(node.parameters, checkParameter);
- if (node.type) {
- if (node.type.kind === 150) {
- var typePredicate = getSignatureFromDeclaration(node).typePredicate;
- var typePredicateNode = node.type;
- if (isInLegalTypePredicatePosition(typePredicateNode)) {
- if (typePredicate.parameterIndex >= 0) {
- if (node.parameters[typePredicate.parameterIndex].dotDotDotToken) {
- error(typePredicateNode.parameterName, ts.Diagnostics.A_type_predicate_cannot_reference_a_rest_parameter);
- }
- else {
- checkTypeAssignableTo(typePredicate.type, getTypeOfNode(node.parameters[typePredicate.parameterIndex]), typePredicateNode.type);
- }
- }
- else if (typePredicateNode.parameterName) {
- var hasReportedError = false;
- for (var _i = 0, _a = node.parameters; _i < _a.length; _i++) {
- var param = _a[_i];
- if (hasReportedError) {
- break;
- }
- if (param.name.kind === 161 ||
- param.name.kind === 162) {
- (function checkBindingPattern(pattern) {
- for (var _i = 0, _a = pattern.elements; _i < _a.length; _i++) {
- var element = _a[_i];
- if (element.name.kind === 69 &&
- element.name.text === typePredicate.parameterName) {
- error(typePredicateNode.parameterName, ts.Diagnostics.A_type_predicate_cannot_reference_element_0_in_a_binding_pattern, typePredicate.parameterName);
- hasReportedError = true;
- break;
- }
- else if (element.name.kind === 162 ||
- element.name.kind === 161) {
- checkBindingPattern(element.name);
- }
- }
- })(param.name);
- }
- }
- if (!hasReportedError) {
- error(typePredicateNode.parameterName, ts.Diagnostics.Cannot_find_parameter_0, typePredicate.parameterName);
- }
- }
- }
- else {
- error(typePredicateNode, ts.Diagnostics.A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods);
- }
- }
- else {
- checkSourceElement(node.type);
- }
- }
- if (produceDiagnostics) {
- checkCollisionWithArgumentsInGeneratedCode(node);
- if (compilerOptions.noImplicitAny && !node.type) {
- switch (node.kind) {
- case 148:
- error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);
- break;
- case 147:
- error(node, ts.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);
- break;
- }
- }
- if (node.type) {
- if (languageVersion >= 2 && isSyntacticallyValidGenerator(node)) {
- var returnType = getTypeFromTypeNode(node.type);
- if (returnType === voidType) {
- error(node.type, ts.Diagnostics.A_generator_cannot_have_a_void_type_annotation);
- }
- else {
- var generatorElementType = getElementTypeOfIterableIterator(returnType) || anyType;
- var iterableIteratorInstantiation = createIterableIteratorType(generatorElementType);
- checkTypeAssignableTo(iterableIteratorInstantiation, returnType, node.type);
- }
- }
- }
- }
- checkSpecializedSignatureDeclaration(node);
- }
- function checkTypeForDuplicateIndexSignatures(node) {
- if (node.kind === 215) {
- var nodeSymbol = getSymbolOfNode(node);
- if (nodeSymbol.declarations.length > 0 && nodeSymbol.declarations[0] !== node) {
- return;
- }
- }
- var indexSymbol = getIndexSymbol(getSymbolOfNode(node));
- if (indexSymbol) {
- var seenNumericIndexer = false;
- var seenStringIndexer = false;
- for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
- var decl = _a[_i];
- var declaration = decl;
- if (declaration.parameters.length === 1 && declaration.parameters[0].type) {
- switch (declaration.parameters[0].type.kind) {
- case 130:
- if (!seenStringIndexer) {
- seenStringIndexer = true;
- }
- else {
- error(declaration, ts.Diagnostics.Duplicate_string_index_signature);
- }
- break;
- case 128:
- if (!seenNumericIndexer) {
- seenNumericIndexer = true;
- }
- else {
- error(declaration, ts.Diagnostics.Duplicate_number_index_signature);
- }
- break;
- }
- }
- }
- }
- }
- function checkPropertyDeclaration(node) {
- checkGrammarDecorators(node) || checkGrammarModifiers(node) || checkGrammarProperty(node) || checkGrammarComputedPropertyName(node.name);
- checkVariableLikeDeclaration(node);
- }
- function checkMethodDeclaration(node) {
- checkGrammarMethod(node) || checkGrammarComputedPropertyName(node.name);
- checkFunctionLikeDeclaration(node);
- if (node.flags & 256 && node.body) {
- error(node, ts.Diagnostics.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract, ts.declarationNameToString(node.name));
- }
- }
- function checkConstructorDeclaration(node) {
- checkSignatureDeclaration(node);
- checkGrammarConstructorTypeParameters(node) || checkGrammarConstructorTypeAnnotation(node);
- checkSourceElement(node.body);
- var symbol = getSymbolOfNode(node);
- var firstDeclaration = ts.getDeclarationOfKind(symbol, node.kind);
- if (node === firstDeclaration) {
- checkFunctionOrConstructorSymbol(symbol);
- }
- if (ts.nodeIsMissing(node.body)) {
- return;
- }
- if (!produceDiagnostics) {
- return;
- }
- function isSuperCallExpression(n) {
- return n.kind === 168 && n.expression.kind === 95;
- }
- function containsSuperCallAsComputedPropertyName(n) {
- return n.name && containsSuperCall(n.name);
- }
- function containsSuperCall(n) {
- if (isSuperCallExpression(n)) {
- return true;
- }
- else if (ts.isFunctionLike(n)) {
- return false;
- }
- else if (ts.isClassLike(n)) {
- return ts.forEach(n.members, containsSuperCallAsComputedPropertyName);
- }
- return ts.forEachChild(n, containsSuperCall);
- }
- function markThisReferencesAsErrors(n) {
- if (n.kind === 97) {
- error(n, ts.Diagnostics.this_cannot_be_referenced_in_current_location);
- }
- else if (n.kind !== 173 && n.kind !== 213) {
- ts.forEachChild(n, markThisReferencesAsErrors);
- }
- }
- function isInstancePropertyWithInitializer(n) {
- return n.kind === 141 &&
- !(n.flags & 128) &&
- !!n.initializer;
- }
- var containingClassDecl = node.parent;
- if (ts.getClassExtendsHeritageClauseElement(containingClassDecl)) {
- var containingClassSymbol = getSymbolOfNode(containingClassDecl);
- var containingClassInstanceType = getDeclaredTypeOfSymbol(containingClassSymbol);
- var baseConstructorType = getBaseConstructorTypeOfClass(containingClassInstanceType);
- if (containsSuperCall(node.body)) {
- if (baseConstructorType === nullType) {
- error(node, ts.Diagnostics.A_constructor_cannot_contain_a_super_call_when_its_class_extends_null);
- }
- var superCallShouldBeFirst = ts.forEach(node.parent.members, isInstancePropertyWithInitializer) ||
- ts.forEach(node.parameters, function (p) { return p.flags & (16 | 32 | 64); });
- if (superCallShouldBeFirst) {
- var statements = node.body.statements;
- var superCallStatement;
- for (var _i = 0; _i < statements.length; _i++) {
- var statement = statements[_i];
- if (statement.kind === 195 && isSuperCallExpression(statement.expression)) {
- superCallStatement = statement;
- break;
- }
- if (!ts.isPrologueDirective(statement)) {
- break;
- }
- }
- if (!superCallStatement) {
- error(node, ts.Diagnostics.A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties);
- }
- else {
- markThisReferencesAsErrors(superCallStatement.expression);
- }
- }
- }
- else if (baseConstructorType !== nullType) {
- error(node, ts.Diagnostics.Constructors_for_derived_classes_must_contain_a_super_call);
- }
- }
- }
- function checkAccessorDeclaration(node) {
- if (produceDiagnostics) {
- checkGrammarFunctionLikeDeclaration(node) || checkGrammarAccessor(node) || checkGrammarComputedPropertyName(node.name);
- if (node.kind === 145) {
- if (!ts.isInAmbientContext(node) && ts.nodeIsPresent(node.body) && !(bodyContainsAReturnStatement(node.body) || bodyContainsSingleThrowStatement(node.body))) {
- error(node.name, ts.Diagnostics.A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement);
- }
- }
- if (!ts.hasDynamicName(node)) {
- var otherKind = node.kind === 145 ? 146 : 145;
- var otherAccessor = ts.getDeclarationOfKind(node.symbol, otherKind);
- if (otherAccessor) {
- if (((node.flags & 112) !== (otherAccessor.flags & 112))) {
- error(node.name, ts.Diagnostics.Getter_and_setter_accessors_do_not_agree_in_visibility);
- }
- var currentAccessorType = getAnnotatedAccessorType(node);
- var otherAccessorType = getAnnotatedAccessorType(otherAccessor);
- if (currentAccessorType && otherAccessorType) {
- if (!isTypeIdenticalTo(currentAccessorType, otherAccessorType)) {
- error(node, ts.Diagnostics.get_and_set_accessor_must_have_the_same_type);
- }
- }
- }
- }
- getTypeOfAccessors(getSymbolOfNode(node));
- }
- checkFunctionLikeDeclaration(node);
- }
- function checkMissingDeclaration(node) {
- checkDecorators(node);
- }
- function checkTypeArgumentConstraints(typeParameters, typeArguments) {
- var result = true;
- for (var i = 0; i < typeParameters.length; i++) {
- var constraint = getConstraintOfTypeParameter(typeParameters[i]);
- if (constraint) {
- var typeArgument = typeArguments[i];
- result = result && checkTypeAssignableTo(getTypeFromTypeNode(typeArgument), constraint, typeArgument, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1);
- }
- }
- return result;
- }
- function checkTypeReferenceNode(node) {
- checkGrammarTypeArguments(node, node.typeArguments);
- var type = getTypeFromTypeReference(node);
- if (type !== unknownType && node.typeArguments) {
- ts.forEach(node.typeArguments, checkSourceElement);
- if (produceDiagnostics) {
- var symbol = getNodeLinks(node).resolvedSymbol;
- var typeParameters = symbol.flags & 524288 ? getSymbolLinks(symbol).typeParameters : type.target.localTypeParameters;
- checkTypeArgumentConstraints(typeParameters, node.typeArguments);
- }
- }
- }
- function checkTypeQuery(node) {
- getTypeFromTypeQueryNode(node);
- }
- function checkTypeLiteral(node) {
- ts.forEach(node.members, checkSourceElement);
- if (produceDiagnostics) {
- var type = getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node);
- checkIndexConstraints(type);
- checkTypeForDuplicateIndexSignatures(node);
- }
- }
- function checkArrayType(node) {
- checkSourceElement(node.elementType);
- }
- function checkTupleType(node) {
- var hasErrorFromDisallowedTrailingComma = checkGrammarForDisallowedTrailingComma(node.elementTypes);
- if (!hasErrorFromDisallowedTrailingComma && node.elementTypes.length === 0) {
- grammarErrorOnNode(node, ts.Diagnostics.A_tuple_type_element_list_cannot_be_empty);
- }
- ts.forEach(node.elementTypes, checkSourceElement);
- }
- function checkUnionOrIntersectionType(node) {
- ts.forEach(node.types, checkSourceElement);
- }
- function isPrivateWithinAmbient(node) {
- return (node.flags & 32) && ts.isInAmbientContext(node);
- }
- function checkSpecializedSignatureDeclaration(signatureDeclarationNode) {
- if (!produceDiagnostics) {
- return;
- }
- var signature = getSignatureFromDeclaration(signatureDeclarationNode);
- if (!signature.hasStringLiterals) {
- return;
- }
- if (ts.nodeIsPresent(signatureDeclarationNode.body)) {
- error(signatureDeclarationNode, ts.Diagnostics.A_signature_with_an_implementation_cannot_use_a_string_literal_type);
- return;
- }
- var signaturesToCheck;
- if (!signatureDeclarationNode.name && signatureDeclarationNode.parent && signatureDeclarationNode.parent.kind === 215) {
- ts.Debug.assert(signatureDeclarationNode.kind === 147 || signatureDeclarationNode.kind === 148);
- var signatureKind = signatureDeclarationNode.kind === 147 ? 0 : 1;
- var containingSymbol = getSymbolOfNode(signatureDeclarationNode.parent);
- var containingType = getDeclaredTypeOfSymbol(containingSymbol);
- signaturesToCheck = getSignaturesOfType(containingType, signatureKind);
- }
- else {
- signaturesToCheck = getSignaturesOfSymbol(getSymbolOfNode(signatureDeclarationNode));
- }
- for (var _i = 0; _i < signaturesToCheck.length; _i++) {
- var otherSignature = signaturesToCheck[_i];
- if (!otherSignature.hasStringLiterals && isSignatureAssignableTo(signature, otherSignature)) {
- return;
- }
- }
- error(signatureDeclarationNode, ts.Diagnostics.Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature);
- }
- function getEffectiveDeclarationFlags(n, flagsToCheck) {
- var flags = ts.getCombinedNodeFlags(n);
- if (n.parent.kind !== 215 &&
- n.parent.kind !== 214 &&
- n.parent.kind !== 186 &&
- ts.isInAmbientContext(n)) {
- if (!(flags & 2)) {
- flags |= 1;
- }
- flags |= 2;
- }
- return flags & flagsToCheck;
- }
- function checkFunctionOrConstructorSymbol(symbol) {
- if (!produceDiagnostics) {
- return;
- }
- function getCanonicalOverload(overloads, implementation) {
- var implementationSharesContainerWithFirstOverload = implementation !== undefined && implementation.parent === overloads[0].parent;
- return implementationSharesContainerWithFirstOverload ? implementation : overloads[0];
- }
- function checkFlagAgreementBetweenOverloads(overloads, implementation, flagsToCheck, someOverloadFlags, allOverloadFlags) {
- var someButNotAllOverloadFlags = someOverloadFlags ^ allOverloadFlags;
- if (someButNotAllOverloadFlags !== 0) {
- var canonicalFlags = getEffectiveDeclarationFlags(getCanonicalOverload(overloads, implementation), flagsToCheck);
- ts.forEach(overloads, function (o) {
- var deviation = getEffectiveDeclarationFlags(o, flagsToCheck) ^ canonicalFlags;
- if (deviation & 1) {
- error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_exported_or_not_exported);
- }
- else if (deviation & 2) {
- error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_ambient_or_non_ambient);
- }
- else if (deviation & (32 | 64)) {
- error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_public_private_or_protected);
- }
- else if (deviation & 256) {
- error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_abstract_or_not_abstract);
- }
- });
- }
- }
- function checkQuestionTokenAgreementBetweenOverloads(overloads, implementation, someHaveQuestionToken, allHaveQuestionToken) {
- if (someHaveQuestionToken !== allHaveQuestionToken) {
- var canonicalHasQuestionToken = ts.hasQuestionToken(getCanonicalOverload(overloads, implementation));
- ts.forEach(overloads, function (o) {
- var deviation = ts.hasQuestionToken(o) !== canonicalHasQuestionToken;
- if (deviation) {
- error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_optional_or_required);
- }
- });
- }
- }
- var flagsToCheck = 1 | 2 | 32 | 64 | 256;
- var someNodeFlags = 0;
- var allNodeFlags = flagsToCheck;
- var someHaveQuestionToken = false;
- var allHaveQuestionToken = true;
- var hasOverloads = false;
- var bodyDeclaration;
- var lastSeenNonAmbientDeclaration;
- var previousDeclaration;
- var declarations = symbol.declarations;
- var isConstructor = (symbol.flags & 16384) !== 0;
- function reportImplementationExpectedError(node) {
- if (node.name && ts.nodeIsMissing(node.name)) {
- return;
- }
- var seen = false;
- var subsequentNode = ts.forEachChild(node.parent, function (c) {
- if (seen) {
- return c;
- }
- else {
- seen = c === node;
- }
- });
- if (subsequentNode) {
- if (subsequentNode.kind === node.kind) {
- var errorNode_1 = subsequentNode.name || subsequentNode;
- if (node.name && subsequentNode.name && node.name.text === subsequentNode.name.text) {
- var reportError = (node.kind === 143 || node.kind === 142) &&
- (node.flags & 128) !== (subsequentNode.flags & 128);
- if (reportError) {
- var diagnostic = node.flags & 128 ? ts.Diagnostics.Function_overload_must_be_static : ts.Diagnostics.Function_overload_must_not_be_static;
- error(errorNode_1, diagnostic);
- }
- return;
- }
- else if (ts.nodeIsPresent(subsequentNode.body)) {
- error(errorNode_1, ts.Diagnostics.Function_implementation_name_must_be_0, ts.declarationNameToString(node.name));
- return;
- }
- }
- }
- var errorNode = node.name || node;
- if (isConstructor) {
- error(errorNode, ts.Diagnostics.Constructor_implementation_is_missing);
- }
- else {
- if (node.flags & 256) {
- error(errorNode, ts.Diagnostics.All_declarations_of_an_abstract_method_must_be_consecutive);
- }
- else {
- error(errorNode, ts.Diagnostics.Function_implementation_is_missing_or_not_immediately_following_the_declaration);
- }
- }
- }
- var isExportSymbolInsideModule = symbol.parent && symbol.parent.flags & 1536;
- var duplicateFunctionDeclaration = false;
- var multipleConstructorImplementation = false;
- for (var _i = 0; _i < declarations.length; _i++) {
- var current = declarations[_i];
- var node = current;
- var inAmbientContext = ts.isInAmbientContext(node);
- var inAmbientContextOrInterface = node.parent.kind === 215 || node.parent.kind === 155 || inAmbientContext;
- if (inAmbientContextOrInterface) {
- previousDeclaration = undefined;
- }
- if (node.kind === 213 || node.kind === 143 || node.kind === 142 || node.kind === 144) {
- var currentNodeFlags = getEffectiveDeclarationFlags(node, flagsToCheck);
- someNodeFlags |= currentNodeFlags;
- allNodeFlags &= currentNodeFlags;
- someHaveQuestionToken = someHaveQuestionToken || ts.hasQuestionToken(node);
- allHaveQuestionToken = allHaveQuestionToken && ts.hasQuestionToken(node);
- if (ts.nodeIsPresent(node.body) && bodyDeclaration) {
- if (isConstructor) {
- multipleConstructorImplementation = true;
- }
- else {
- duplicateFunctionDeclaration = true;
- }
- }
- else if (!isExportSymbolInsideModule && previousDeclaration && previousDeclaration.parent === node.parent && previousDeclaration.end !== node.pos) {
- reportImplementationExpectedError(previousDeclaration);
- }
- if (ts.nodeIsPresent(node.body)) {
- if (!bodyDeclaration) {
- bodyDeclaration = node;
- }
- }
- else {
- hasOverloads = true;
- }
- previousDeclaration = node;
- if (!inAmbientContextOrInterface) {
- lastSeenNonAmbientDeclaration = node;
- }
- }
- }
- if (multipleConstructorImplementation) {
- ts.forEach(declarations, function (declaration) {
- error(declaration, ts.Diagnostics.Multiple_constructor_implementations_are_not_allowed);
- });
- }
- if (duplicateFunctionDeclaration) {
- ts.forEach(declarations, function (declaration) {
- error(declaration.name, ts.Diagnostics.Duplicate_function_implementation);
- });
- }
- if (!isExportSymbolInsideModule && lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body &&
- !(lastSeenNonAmbientDeclaration.flags & 256)) {
- reportImplementationExpectedError(lastSeenNonAmbientDeclaration);
- }
- if (hasOverloads) {
- checkFlagAgreementBetweenOverloads(declarations, bodyDeclaration, flagsToCheck, someNodeFlags, allNodeFlags);
- checkQuestionTokenAgreementBetweenOverloads(declarations, bodyDeclaration, someHaveQuestionToken, allHaveQuestionToken);
- if (bodyDeclaration) {
- var signatures = getSignaturesOfSymbol(symbol);
- var bodySignature = getSignatureFromDeclaration(bodyDeclaration);
- if (!bodySignature.hasStringLiterals) {
- for (var _a = 0; _a < signatures.length; _a++) {
- var signature = signatures[_a];
- if (!signature.hasStringLiterals && !isSignatureAssignableTo(bodySignature, signature)) {
- error(signature.declaration, ts.Diagnostics.Overload_signature_is_not_compatible_with_function_implementation);
- break;
- }
- }
- }
- }
- }
- }
- function checkExportsOnMergedDeclarations(node) {
- if (!produceDiagnostics) {
- return;
- }
- var symbol = node.localSymbol;
- if (!symbol) {
- symbol = getSymbolOfNode(node);
- if (!(symbol.flags & 7340032)) {
- return;
- }
- }
- if (ts.getDeclarationOfKind(symbol, node.kind) !== node) {
- return;
- }
- var exportedDeclarationSpaces = 0;
- var nonExportedDeclarationSpaces = 0;
- var defaultExportedDeclarationSpaces = 0;
- for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
- var d = _a[_i];
- var declarationSpaces = getDeclarationSpaces(d);
- var effectiveDeclarationFlags = getEffectiveDeclarationFlags(d, 1 | 1024);
- if (effectiveDeclarationFlags & 1) {
- if (effectiveDeclarationFlags & 1024) {
- defaultExportedDeclarationSpaces |= declarationSpaces;
- }
- else {
- exportedDeclarationSpaces |= declarationSpaces;
- }
- }
- else {
- nonExportedDeclarationSpaces |= declarationSpaces;
- }
- }
- var nonDefaultExportedDeclarationSpaces = exportedDeclarationSpaces | nonExportedDeclarationSpaces;
- var commonDeclarationSpacesForExportsAndLocals = exportedDeclarationSpaces & nonExportedDeclarationSpaces;
- var commonDeclarationSpacesForDefaultAndNonDefault = defaultExportedDeclarationSpaces & nonDefaultExportedDeclarationSpaces;
- if (commonDeclarationSpacesForExportsAndLocals || commonDeclarationSpacesForDefaultAndNonDefault) {
- for (var _b = 0, _c = symbol.declarations; _b < _c.length; _b++) {
- var d = _c[_b];
- var declarationSpaces = getDeclarationSpaces(d);
- if (declarationSpaces & commonDeclarationSpacesForDefaultAndNonDefault) {
- error(d.name, ts.Diagnostics.Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_default_0_declaration_instead, ts.declarationNameToString(d.name));
- }
- else if (declarationSpaces & commonDeclarationSpacesForExportsAndLocals) {
- error(d.name, ts.Diagnostics.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local, ts.declarationNameToString(d.name));
- }
- }
- }
- function getDeclarationSpaces(d) {
- switch (d.kind) {
- case 215:
- return 2097152;
- case 218:
- return d.name.kind === 9 || ts.getModuleInstanceState(d) !== 0
- ? 4194304 | 1048576
- : 4194304;
- case 214:
- case 217:
- return 2097152 | 1048576;
- case 221:
- var result = 0;
- var target = resolveAlias(getSymbolOfNode(d));
- ts.forEach(target.declarations, function (d) { result |= getDeclarationSpaces(d); });
- return result;
- default:
- return 1048576;
- }
- }
- }
- function checkNonThenableType(type, location, message) {
- type = getWidenedType(type);
- if (!isTypeAny(type) && isTypeAssignableTo(type, getGlobalThenableType())) {
- if (location) {
- if (!message) {
- message = ts.Diagnostics.Operand_for_await_does_not_have_a_valid_callable_then_member;
- }
- error(location, message);
- }
- return unknownType;
- }
- return type;
- }
- function getPromisedType(promise) {
- if (promise.flags & 1) {
- return undefined;
- }
- if ((promise.flags & 4096) && promise.target === tryGetGlobalPromiseType()) {
- return promise.typeArguments[0];
- }
- var globalPromiseLikeType = getInstantiatedGlobalPromiseLikeType();
- if (globalPromiseLikeType === emptyObjectType || !isTypeAssignableTo(promise, globalPromiseLikeType)) {
- return undefined;
- }
- var thenFunction = getTypeOfPropertyOfType(promise, "then");
- if (thenFunction && (thenFunction.flags & 1)) {
- return undefined;
- }
- var thenSignatures = thenFunction ? getSignaturesOfType(thenFunction, 0) : emptyArray;
- if (thenSignatures.length === 0) {
- return undefined;
- }
- var onfulfilledParameterType = getUnionType(ts.map(thenSignatures, getTypeOfFirstParameterOfSignature));
- if (onfulfilledParameterType.flags & 1) {
- return undefined;
- }
- var onfulfilledParameterSignatures = getSignaturesOfType(onfulfilledParameterType, 0);
- if (onfulfilledParameterSignatures.length === 0) {
- return undefined;
- }
- var valueParameterType = getUnionType(ts.map(onfulfilledParameterSignatures, getTypeOfFirstParameterOfSignature));
- return valueParameterType;
- }
- function getTypeOfFirstParameterOfSignature(signature) {
- return getTypeAtPosition(signature, 0);
- }
- function getAwaitedType(type) {
- return checkAwaitedType(type, undefined, undefined);
- }
- function checkAwaitedType(type, location, message) {
- return checkAwaitedTypeWorker(type);
- function checkAwaitedTypeWorker(type) {
- if (type.flags & 16384) {
- var types = [];
- for (var _i = 0, _a = type.types; _i < _a.length; _i++) {
- var constituentType = _a[_i];
- types.push(checkAwaitedTypeWorker(constituentType));
- }
- return getUnionType(types);
- }
- else {
- var promisedType = getPromisedType(type);
- if (promisedType === undefined) {
- return checkNonThenableType(type, location, message);
- }
- else {
- if (type.id === promisedType.id || awaitedTypeStack.indexOf(promisedType.id) >= 0) {
- if (location) {
- error(location, ts.Diagnostics._0_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method, symbolToString(type.symbol));
- }
- return unknownType;
- }
- awaitedTypeStack.push(type.id);
- var awaitedType = checkAwaitedTypeWorker(promisedType);
- awaitedTypeStack.pop();
- return awaitedType;
- }
- }
- }
- }
- function checkAsyncFunctionReturnType(node) {
- var globalPromiseConstructorLikeType = getGlobalPromiseConstructorLikeType();
- if (globalPromiseConstructorLikeType === emptyObjectType) {
- return unknownType;
- }
- var promiseType = getTypeFromTypeNode(node.type);
- if (promiseType === unknownType && compilerOptions.isolatedModules) {
- return unknownType;
- }
- var promiseConstructor = getNodeLinks(node.type).resolvedSymbol;
- if (!promiseConstructor || !symbolIsValue(promiseConstructor)) {
- var typeName = promiseConstructor
- ? symbolToString(promiseConstructor)
- : typeToString(promiseType);
- error(node, ts.Diagnostics.Type_0_is_not_a_valid_async_function_return_type, typeName);
- return unknownType;
- }
- var promiseConstructorType = getTypeOfSymbol(promiseConstructor);
- if (!checkTypeAssignableTo(promiseConstructorType, globalPromiseConstructorLikeType, node, ts.Diagnostics.Type_0_is_not_a_valid_async_function_return_type)) {
- return unknownType;
- }
- var promiseName = ts.getEntityNameFromTypeNode(node.type);
- var root = getFirstIdentifier(promiseName);
- var rootSymbol = getSymbol(node.locals, root.text, 107455);
- if (rootSymbol) {
- error(rootSymbol.valueDeclaration, ts.Diagnostics.Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions, root.text, getFullyQualifiedName(promiseConstructor));
- return unknownType;
- }
- return checkAwaitedType(promiseType, node, ts.Diagnostics.An_async_function_or_method_must_have_a_valid_awaitable_return_type);
- }
- function checkDecorator(node) {
- var signature = getResolvedSignature(node);
- var returnType = getReturnTypeOfSignature(signature);
- if (returnType.flags & 1) {
- return;
- }
- var expectedReturnType;
- var headMessage = getDiagnosticHeadMessageForDecoratorResolution(node);
- var errorInfo;
- switch (node.parent.kind) {
- case 214:
- var classSymbol = getSymbolOfNode(node.parent);
- var classConstructorType = getTypeOfSymbol(classSymbol);
- expectedReturnType = getUnionType([classConstructorType, voidType]);
- break;
- case 138:
- expectedReturnType = voidType;
- errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any);
- break;
- case 141:
- expectedReturnType = voidType;
- errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.The_return_type_of_a_property_decorator_function_must_be_either_void_or_any);
- break;
- case 143:
- case 145:
- case 146:
- var methodType = getTypeOfNode(node.parent);
- var descriptorType = createTypedPropertyDescriptorType(methodType);
- expectedReturnType = getUnionType([descriptorType, voidType]);
- break;
- }
- checkTypeAssignableTo(returnType, expectedReturnType, node, headMessage, errorInfo);
- }
- function checkTypeNodeAsExpression(node) {
- if (node && node.kind === 151) {
- var root = getFirstIdentifier(node.typeName);
- var meaning = root.parent.kind === 151 ? 793056 : 1536;
- var rootSymbol = resolveName(root, root.text, meaning | 8388608, undefined, undefined);
- if (rootSymbol && rootSymbol.flags & 8388608) {
- var aliasTarget = resolveAlias(rootSymbol);
- if (aliasTarget.flags & 107455 && !isConstEnumOrConstEnumOnlyModule(resolveAlias(rootSymbol))) {
- markAliasSymbolAsReferenced(rootSymbol);
- }
- }
- }
- }
- function checkTypeAnnotationAsExpression(node) {
- switch (node.kind) {
- case 141:
- checkTypeNodeAsExpression(node.type);
- break;
- case 138:
- checkTypeNodeAsExpression(node.type);
- break;
- case 143:
- checkTypeNodeAsExpression(node.type);
- break;
- case 145:
- checkTypeNodeAsExpression(node.type);
- break;
- case 146:
- checkTypeNodeAsExpression(ts.getSetAccessorTypeAnnotationNode(node));
- break;
- }
- }
- function checkParameterTypeAnnotationsAsExpressions(node) {
- for (var _i = 0, _a = node.parameters; _i < _a.length; _i++) {
- var parameter = _a[_i];
- checkTypeAnnotationAsExpression(parameter);
- }
- }
- function checkDecorators(node) {
- if (!node.decorators) {
- return;
- }
- if (!ts.nodeCanBeDecorated(node)) {
- return;
- }
- if (!compilerOptions.experimentalDecorators) {
- error(node, ts.Diagnostics.Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Specify_experimentalDecorators_to_remove_this_warning);
- }
- if (compilerOptions.emitDecoratorMetadata) {
- switch (node.kind) {
- case 214:
- var constructor = ts.getFirstConstructorWithBody(node);
- if (constructor) {
- checkParameterTypeAnnotationsAsExpressions(constructor);
- }
- break;
- case 143:
- checkParameterTypeAnnotationsAsExpressions(node);
- case 146:
- case 145:
- case 141:
- case 138:
- checkTypeAnnotationAsExpression(node);
- break;
- }
- }
- emitDecorate = true;
- if (node.kind === 138) {
- emitParam = true;
- }
- ts.forEach(node.decorators, checkDecorator);
- }
- function checkFunctionDeclaration(node) {
- if (produceDiagnostics) {
- checkFunctionLikeDeclaration(node) || checkGrammarForGenerator(node);
- checkCollisionWithCapturedSuperVariable(node, node.name);
- checkCollisionWithCapturedThisVariable(node, node.name);
- checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
- }
- }
- function checkFunctionLikeDeclaration(node) {
- checkDecorators(node);
- checkSignatureDeclaration(node);
- var isAsync = ts.isAsyncFunctionLike(node);
- if (isAsync) {
- emitAwaiter = true;
- }
- if (node.name && node.name.kind === 136) {
- checkComputedPropertyName(node.name);
- }
- if (!ts.hasDynamicName(node)) {
- var symbol = getSymbolOfNode(node);
- var localSymbol = node.localSymbol || symbol;
- var firstDeclaration = ts.getDeclarationOfKind(localSymbol, node.kind);
- if (node === firstDeclaration) {
- checkFunctionOrConstructorSymbol(localSymbol);
- }
- if (symbol.parent) {
- if (ts.getDeclarationOfKind(symbol, node.kind) === node) {
- checkFunctionOrConstructorSymbol(symbol);
- }
- }
- }
- checkSourceElement(node.body);
- if (node.type && !isAccessor(node.kind) && !node.asteriskToken) {
- var returnType = getTypeFromTypeNode(node.type);
- var promisedType;
- if (isAsync) {
- promisedType = checkAsyncFunctionReturnType(node);
- }
- checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(node, isAsync ? promisedType : returnType);
- }
- if (produceDiagnostics && !node.type) {
- if (compilerOptions.noImplicitAny && ts.nodeIsMissing(node.body) && !isPrivateWithinAmbient(node)) {
- reportImplicitAnyError(node, anyType);
- }
- if (node.asteriskToken && ts.nodeIsPresent(node.body)) {
- getReturnTypeOfSignature(getSignatureFromDeclaration(node));
- }
- }
- }
- function checkBlock(node) {
- if (node.kind === 192) {
- checkGrammarStatementInAmbientContext(node);
- }
- ts.forEach(node.statements, checkSourceElement);
- if (ts.isFunctionBlock(node) || node.kind === 219) {
- checkFunctionAndClassExpressionBodies(node);
- }
- }
- function checkCollisionWithArgumentsInGeneratedCode(node) {
- if (!ts.hasRestParameter(node) || ts.isInAmbientContext(node) || ts.nodeIsMissing(node.body)) {
- return;
- }
- ts.forEach(node.parameters, function (p) {
- if (p.name && !ts.isBindingPattern(p.name) && p.name.text === argumentsSymbol.name) {
- error(p, ts.Diagnostics.Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters);
- }
- });
- }
- function needCollisionCheckForIdentifier(node, identifier, name) {
- if (!(identifier && identifier.text === name)) {
- return false;
- }
- if (node.kind === 141 ||
- node.kind === 140 ||
- node.kind === 143 ||
- node.kind === 142 ||
- node.kind === 145 ||
- node.kind === 146) {
- return false;
- }
- if (ts.isInAmbientContext(node)) {
- return false;
- }
- var root = ts.getRootDeclaration(node);
- if (root.kind === 138 && ts.nodeIsMissing(root.parent.body)) {
- return false;
- }
- return true;
- }
- function checkCollisionWithCapturedThisVariable(node, name) {
- if (needCollisionCheckForIdentifier(node, name, "_this")) {
- potentialThisCollisions.push(node);
- }
- }
- function checkIfThisIsCapturedInEnclosingScope(node) {
- var current = node;
- while (current) {
- if (getNodeCheckFlags(current) & 4) {
- var isDeclaration_1 = node.kind !== 69;
- if (isDeclaration_1) {
- error(node.name, ts.Diagnostics.Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference);
- }
- else {
- error(node, ts.Diagnostics.Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference);
- }
- return;
- }
- current = current.parent;
- }
- }
- function checkCollisionWithCapturedSuperVariable(node, name) {
- if (!needCollisionCheckForIdentifier(node, name, "_super")) {
- return;
- }
- var enclosingClass = ts.getContainingClass(node);
- if (!enclosingClass || ts.isInAmbientContext(enclosingClass)) {
- return;
- }
- if (ts.getClassExtendsHeritageClauseElement(enclosingClass)) {
- var isDeclaration_2 = node.kind !== 69;
- if (isDeclaration_2) {
- error(node, ts.Diagnostics.Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference);
- }
- else {
- error(node, ts.Diagnostics.Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference);
- }
- }
- }
- function checkCollisionWithRequireExportsInGeneratedCode(node, name) {
- if (!needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) {
- return;
- }
- if (node.kind === 218 && ts.getModuleInstanceState(node) !== 1) {
- return;
- }
- var parent = getDeclarationContainer(node);
- if (parent.kind === 248 && ts.isExternalModule(parent)) {
- error(name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module, ts.declarationNameToString(name), ts.declarationNameToString(name));
- }
- }
- function checkVarDeclaredNamesNotShadowed(node) {
- if ((ts.getCombinedNodeFlags(node) & 49152) !== 0 || ts.isParameterDeclaration(node)) {
- return;
- }
- if (node.kind === 211 && !node.initializer) {
- return;
- }
- var symbol = getSymbolOfNode(node);
- if (symbol.flags & 1) {
- var localDeclarationSymbol = resolveName(node, node.name.text, 3, undefined, undefined);
- if (localDeclarationSymbol &&
- localDeclarationSymbol !== symbol &&
- localDeclarationSymbol.flags & 2) {
- if (getDeclarationFlagsFromSymbol(localDeclarationSymbol) & 49152) {
- var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 212);
- var container = varDeclList.parent.kind === 193 && varDeclList.parent.parent
- ? varDeclList.parent.parent
- : undefined;
- var namesShareScope = container &&
- (container.kind === 192 && ts.isFunctionLike(container.parent) ||
- container.kind === 219 ||
- container.kind === 218 ||
- container.kind === 248);
- if (!namesShareScope) {
- var name_14 = symbolToString(localDeclarationSymbol);
- error(node, ts.Diagnostics.Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1, name_14, name_14);
- }
- }
- }
- }
- }
- function checkParameterInitializer(node) {
- if (ts.getRootDeclaration(node).kind !== 138) {
- return;
- }
- var func = ts.getContainingFunction(node);
- visit(node.initializer);
- function visit(n) {
- if (n.kind === 69) {
- var referencedSymbol = getNodeLinks(n).resolvedSymbol;
- if (referencedSymbol && referencedSymbol !== unknownSymbol && getSymbol(func.locals, referencedSymbol.name, 107455) === referencedSymbol) {
- if (referencedSymbol.valueDeclaration.kind === 138) {
- if (referencedSymbol.valueDeclaration === node) {
- error(n, ts.Diagnostics.Parameter_0_cannot_be_referenced_in_its_initializer, ts.declarationNameToString(node.name));
- return;
- }
- if (referencedSymbol.valueDeclaration.pos < node.pos) {
- return;
- }
- }
- error(n, ts.Diagnostics.Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it, ts.declarationNameToString(node.name), ts.declarationNameToString(n));
- }
- }
- else {
- ts.forEachChild(n, visit);
- }
- }
- }
- function checkVariableLikeDeclaration(node) {
- checkDecorators(node);
- checkSourceElement(node.type);
- if (node.name.kind === 136) {
- checkComputedPropertyName(node.name);
- if (node.initializer) {
- checkExpressionCached(node.initializer);
- }
- }
- if (ts.isBindingPattern(node.name)) {
- ts.forEach(node.name.elements, checkSourceElement);
- }
- if (node.initializer && ts.getRootDeclaration(node).kind === 138 && ts.nodeIsMissing(ts.getContainingFunction(node).body)) {
- error(node, ts.Diagnostics.A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation);
- return;
- }
- if (ts.isBindingPattern(node.name)) {
- if (node.initializer) {
- checkTypeAssignableTo(checkExpressionCached(node.initializer), getWidenedTypeForVariableLikeDeclaration(node), node, undefined);
- checkParameterInitializer(node);
- }
- return;
- }
- var symbol = getSymbolOfNode(node);
- var type = getTypeOfVariableOrParameterOrProperty(symbol);
- if (node === symbol.valueDeclaration) {
- if (node.initializer) {
- checkTypeAssignableTo(checkExpressionCached(node.initializer), type, node, undefined);
- checkParameterInitializer(node);
- }
- }
- else {
- var declarationType = getWidenedTypeForVariableLikeDeclaration(node);
- if (type !== unknownType && declarationType !== unknownType && !isTypeIdenticalTo(type, declarationType)) {
- error(node.name, ts.Diagnostics.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2, ts.declarationNameToString(node.name), typeToString(type), typeToString(declarationType));
- }
- if (node.initializer) {
- checkTypeAssignableTo(checkExpressionCached(node.initializer), declarationType, node, undefined);
- }
- }
- if (node.kind !== 141 && node.kind !== 140) {
- checkExportsOnMergedDeclarations(node);
- if (node.kind === 211 || node.kind === 163) {
- checkVarDeclaredNamesNotShadowed(node);
- }
- checkCollisionWithCapturedSuperVariable(node, node.name);
- checkCollisionWithCapturedThisVariable(node, node.name);
- checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
- }
- }
- function checkVariableDeclaration(node) {
- checkGrammarVariableDeclaration(node);
- return checkVariableLikeDeclaration(node);
- }
- function checkBindingElement(node) {
- checkGrammarBindingElement(node);
- return checkVariableLikeDeclaration(node);
- }
- function checkVariableStatement(node) {
- checkGrammarDecorators(node) || checkGrammarModifiers(node) || checkGrammarVariableDeclarationList(node.declarationList) || checkGrammarForDisallowedLetOrConstStatement(node);
- ts.forEach(node.declarationList.declarations, checkSourceElement);
- }
- function checkGrammarDisallowedModifiersOnObjectLiteralExpressionMethod(node) {
- if (node.modifiers && node.parent.kind === 165) {
- if (ts.isAsyncFunctionLike(node)) {
- if (node.modifiers.length > 1) {
- return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here);
- }
- }
- else {
- return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here);
- }
- }
- }
- function checkExpressionStatement(node) {
- checkGrammarStatementInAmbientContext(node);
- checkExpression(node.expression);
- }
- function checkIfStatement(node) {
- checkGrammarStatementInAmbientContext(node);
- checkExpression(node.expression);
- checkSourceElement(node.thenStatement);
- checkSourceElement(node.elseStatement);
- }
- function checkDoStatement(node) {
- checkGrammarStatementInAmbientContext(node);
- checkSourceElement(node.statement);
- checkExpression(node.expression);
- }
- function checkWhileStatement(node) {
- checkGrammarStatementInAmbientContext(node);
- checkExpression(node.expression);
- checkSourceElement(node.statement);
- }
- function checkForStatement(node) {
- if (!checkGrammarStatementInAmbientContext(node)) {
- if (node.initializer && node.initializer.kind === 212) {
- checkGrammarVariableDeclarationList(node.initializer);
- }
- }
- if (node.initializer) {
- if (node.initializer.kind === 212) {
- ts.forEach(node.initializer.declarations, checkVariableDeclaration);
- }
- else {
- checkExpression(node.initializer);
- }
- }
- if (node.condition)
- checkExpression(node.condition);
- if (node.incrementor)
- checkExpression(node.incrementor);
- checkSourceElement(node.statement);
- }
- function checkForOfStatement(node) {
- checkGrammarForInOrForOfStatement(node);
- if (node.initializer.kind === 212) {
- checkForInOrForOfVariableDeclaration(node);
- }
- else {
- var varExpr = node.initializer;
- var iteratedType = checkRightHandSideOfForOf(node.expression);
- if (varExpr.kind === 164 || varExpr.kind === 165) {
- checkDestructuringAssignment(varExpr, iteratedType || unknownType);
- }
- else {
- var leftType = checkExpression(varExpr);
- checkReferenceExpression(varExpr, ts.Diagnostics.Invalid_left_hand_side_in_for_of_statement, ts.Diagnostics.The_left_hand_side_of_a_for_of_statement_cannot_be_a_previously_defined_constant);
- if (iteratedType) {
- checkTypeAssignableTo(iteratedType, leftType, varExpr, undefined);
- }
- }
- }
- checkSourceElement(node.statement);
- }
- function checkForInStatement(node) {
- checkGrammarForInOrForOfStatement(node);
- if (node.initializer.kind === 212) {
- var variable = node.initializer.declarations[0];
- if (variable && ts.isBindingPattern(variable.name)) {
- error(variable.name, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern);
- }
- checkForInOrForOfVariableDeclaration(node);
- }
- else {
- var varExpr = node.initializer;
- var leftType = checkExpression(varExpr);
- if (varExpr.kind === 164 || varExpr.kind === 165) {
- error(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern);
- }
- else if (!isTypeAnyOrAllConstituentTypesHaveKind(leftType, 258)) {
- error(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any);
- }
- else {
- checkReferenceExpression(varExpr, ts.Diagnostics.Invalid_left_hand_side_in_for_in_statement, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_previously_defined_constant);
- }
- }
- var rightType = checkExpression(node.expression);
- if (!isTypeAnyOrAllConstituentTypesHaveKind(rightType, 80896 | 512)) {
- error(node.expression, ts.Diagnostics.The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter);
- }
- checkSourceElement(node.statement);
- }
- function checkForInOrForOfVariableDeclaration(iterationStatement) {
- var variableDeclarationList = iterationStatement.initializer;
- if (variableDeclarationList.declarations.length >= 1) {
- var decl = variableDeclarationList.declarations[0];
- checkVariableDeclaration(decl);
- }
- }
- function checkRightHandSideOfForOf(rhsExpression) {
- var expressionType = getTypeOfExpression(rhsExpression);
- return checkIteratedTypeOrElementType(expressionType, rhsExpression, true);
- }
- function checkIteratedTypeOrElementType(inputType, errorNode, allowStringInput) {
- if (isTypeAny(inputType)) {
- return inputType;
- }
- if (languageVersion >= 2) {
- return checkElementTypeOfIterable(inputType, errorNode);
- }
- if (allowStringInput) {
- return checkElementTypeOfArrayOrString(inputType, errorNode);
- }
- if (isArrayLikeType(inputType)) {
- var indexType = getIndexTypeOfType(inputType, 1);
- if (indexType) {
- return indexType;
- }
- }
- error(errorNode, ts.Diagnostics.Type_0_is_not_an_array_type, typeToString(inputType));
- return unknownType;
- }
- function checkElementTypeOfIterable(iterable, errorNode) {
- var elementType = getElementTypeOfIterable(iterable, errorNode);
- if (errorNode && elementType) {
- checkTypeAssignableTo(iterable, createIterableType(elementType), errorNode);
- }
- return elementType || anyType;
- }
- function getElementTypeOfIterable(type, errorNode) {
- if (isTypeAny(type)) {
- return undefined;
- }
- var typeAsIterable = type;
- if (!typeAsIterable.iterableElementType) {
- if ((type.flags & 4096) && type.target === globalIterableType) {
- typeAsIterable.iterableElementType = type.typeArguments[0];
- }
- else {
- var iteratorFunction = getTypeOfPropertyOfType(type, ts.getPropertyNameForKnownSymbolName("iterator"));
- if (isTypeAny(iteratorFunction)) {
- return undefined;
- }
- var iteratorFunctionSignatures = iteratorFunction ? getSignaturesOfType(iteratorFunction, 0) : emptyArray;
- if (iteratorFunctionSignatures.length === 0) {
- if (errorNode) {
- error(errorNode, ts.Diagnostics.Type_must_have_a_Symbol_iterator_method_that_returns_an_iterator);
- }
- return undefined;
- }
- typeAsIterable.iterableElementType = getElementTypeOfIterator(getUnionType(ts.map(iteratorFunctionSignatures, getReturnTypeOfSignature)), errorNode);
- }
- }
- return typeAsIterable.iterableElementType;
- }
- function getElementTypeOfIterator(type, errorNode) {
- if (isTypeAny(type)) {
- return undefined;
- }
- var typeAsIterator = type;
- if (!typeAsIterator.iteratorElementType) {
- if ((type.flags & 4096) && type.target === globalIteratorType) {
- typeAsIterator.iteratorElementType = type.typeArguments[0];
- }
- else {
- var iteratorNextFunction = getTypeOfPropertyOfType(type, "next");
- if (isTypeAny(iteratorNextFunction)) {
- return undefined;
- }
- var iteratorNextFunctionSignatures = iteratorNextFunction ? getSignaturesOfType(iteratorNextFunction, 0) : emptyArray;
- if (iteratorNextFunctionSignatures.length === 0) {
- if (errorNode) {
- error(errorNode, ts.Diagnostics.An_iterator_must_have_a_next_method);
- }
- return undefined;
- }
- var iteratorNextResult = getUnionType(ts.map(iteratorNextFunctionSignatures, getReturnTypeOfSignature));
- if (isTypeAny(iteratorNextResult)) {
- return undefined;
- }
- var iteratorNextValue = getTypeOfPropertyOfType(iteratorNextResult, "value");
- if (!iteratorNextValue) {
- if (errorNode) {
- error(errorNode, ts.Diagnostics.The_type_returned_by_the_next_method_of_an_iterator_must_have_a_value_property);
- }
- return undefined;
- }
- typeAsIterator.iteratorElementType = iteratorNextValue;
- }
- }
- return typeAsIterator.iteratorElementType;
- }
- function getElementTypeOfIterableIterator(type) {
- if (isTypeAny(type)) {
- return undefined;
- }
- if ((type.flags & 4096) && type.target === globalIterableIteratorType) {
- return type.typeArguments[0];
- }
- return getElementTypeOfIterable(type, undefined) ||
- getElementTypeOfIterator(type, undefined);
- }
- function checkElementTypeOfArrayOrString(arrayOrStringType, errorNode) {
- ts.Debug.assert(languageVersion < 2);
- var arrayType = removeTypesFromUnionType(arrayOrStringType, 258, true, true);
- var hasStringConstituent = arrayOrStringType !== arrayType;
- var reportedError = false;
- if (hasStringConstituent) {
- if (languageVersion < 1) {
- error(errorNode, ts.Diagnostics.Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher);
- reportedError = true;
- }
- if (arrayType === emptyObjectType) {
- return stringType;
- }
- }
- if (!isArrayLikeType(arrayType)) {
- if (!reportedError) {
- var diagnostic = hasStringConstituent
- ? ts.Diagnostics.Type_0_is_not_an_array_type
- : ts.Diagnostics.Type_0_is_not_an_array_type_or_a_string_type;
- error(errorNode, diagnostic, typeToString(arrayType));
- }
- return hasStringConstituent ? stringType : unknownType;
- }
- var arrayElementType = getIndexTypeOfType(arrayType, 1) || unknownType;
- if (hasStringConstituent) {
- if (arrayElementType.flags & 258) {
- return stringType;
- }
- return getUnionType([arrayElementType, stringType]);
- }
- return arrayElementType;
- }
- function checkBreakOrContinueStatement(node) {
- checkGrammarStatementInAmbientContext(node) || checkGrammarBreakOrContinueStatement(node);
- }
- function isGetAccessorWithAnnotatatedSetAccessor(node) {
- return !!(node.kind === 145 && ts.getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(node.symbol, 146)));
- }
- function checkReturnStatement(node) {
- if (!checkGrammarStatementInAmbientContext(node)) {
- var functionBlock = ts.getContainingFunction(node);
- if (!functionBlock) {
- grammarErrorOnFirstToken(node, ts.Diagnostics.A_return_statement_can_only_be_used_within_a_function_body);
- }
- }
- if (node.expression) {
- var func = ts.getContainingFunction(node);
- if (func) {
- var signature = getSignatureFromDeclaration(func);
- var returnType = getReturnTypeOfSignature(signature);
- var exprType = checkExpressionCached(node.expression);
- if (func.asteriskToken) {
- return;
- }
- if (func.kind === 146) {
- error(node.expression, ts.Diagnostics.Setters_cannot_return_a_value);
- }
- else if (func.kind === 144) {
- if (!isTypeAssignableTo(exprType, returnType)) {
- error(node.expression, ts.Diagnostics.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class);
- }
- }
- else if (func.type || isGetAccessorWithAnnotatatedSetAccessor(func) || signature.typePredicate) {
- if (ts.isAsyncFunctionLike(func)) {
- var promisedType = getPromisedType(returnType);
- var awaitedType = checkAwaitedType(exprType, node.expression, ts.Diagnostics.Return_expression_in_async_function_does_not_have_a_valid_callable_then_member);
- if (promisedType) {
- checkTypeAssignableTo(awaitedType, promisedType, node.expression);
- }
- }
- else {
- checkTypeAssignableTo(exprType, returnType, node.expression);
- }
- }
- }
- }
- }
- function checkWithStatement(node) {
- if (!checkGrammarStatementInAmbientContext(node)) {
- if (node.parserContextFlags & 8) {
- grammarErrorOnFirstToken(node, ts.Diagnostics.with_statements_are_not_allowed_in_an_async_function_block);
- }
- }
- checkExpression(node.expression);
- error(node.expression, ts.Diagnostics.All_symbols_within_a_with_block_will_be_resolved_to_any);
- }
- function checkSwitchStatement(node) {
- checkGrammarStatementInAmbientContext(node);
- var firstDefaultClause;
- var hasDuplicateDefaultClause = false;
- var expressionType = checkExpression(node.expression);
- ts.forEach(node.caseBlock.clauses, function (clause) {
- if (clause.kind === 242 && !hasDuplicateDefaultClause) {
- if (firstDefaultClause === undefined) {
- firstDefaultClause = clause;
- }
- else {
- var sourceFile = ts.getSourceFileOfNode(node);
- var start = ts.skipTrivia(sourceFile.text, clause.pos);
- var end = clause.statements.length > 0 ? clause.statements[0].pos : clause.end;
- grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement);
- hasDuplicateDefaultClause = true;
- }
- }
- if (produceDiagnostics && clause.kind === 241) {
- var caseClause = clause;
- var caseType = checkExpression(caseClause.expression);
- if (!isTypeAssignableTo(expressionType, caseType)) {
- checkTypeAssignableTo(caseType, expressionType, caseClause.expression, undefined);
- }
- }
- ts.forEach(clause.statements, checkSourceElement);
- });
- }
- function checkLabeledStatement(node) {
- if (!checkGrammarStatementInAmbientContext(node)) {
- var current = node.parent;
- while (current) {
- if (ts.isFunctionLike(current)) {
- break;
- }
- if (current.kind === 207 && current.label.text === node.label.text) {
- var sourceFile = ts.getSourceFileOfNode(node);
- grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, ts.getTextOfNodeFromSourceText(sourceFile.text, node.label));
- break;
- }
- current = current.parent;
- }
- }
- checkSourceElement(node.statement);
- }
- function checkThrowStatement(node) {
- if (!checkGrammarStatementInAmbientContext(node)) {
- if (node.expression === undefined) {
- grammarErrorAfterFirstToken(node, ts.Diagnostics.Line_break_not_permitted_here);
- }
- }
- if (node.expression) {
- checkExpression(node.expression);
- }
- }
- function checkTryStatement(node) {
- checkGrammarStatementInAmbientContext(node);
- checkBlock(node.tryBlock);
- var catchClause = node.catchClause;
- if (catchClause) {
- if (catchClause.variableDeclaration) {
- if (catchClause.variableDeclaration.name.kind !== 69) {
- grammarErrorOnFirstToken(catchClause.variableDeclaration.name, ts.Diagnostics.Catch_clause_variable_name_must_be_an_identifier);
- }
- else if (catchClause.variableDeclaration.type) {
- grammarErrorOnFirstToken(catchClause.variableDeclaration.type, ts.Diagnostics.Catch_clause_variable_cannot_have_a_type_annotation);
- }
- else if (catchClause.variableDeclaration.initializer) {
- grammarErrorOnFirstToken(catchClause.variableDeclaration.initializer, ts.Diagnostics.Catch_clause_variable_cannot_have_an_initializer);
- }
- else {
- var identifierName = catchClause.variableDeclaration.name.text;
- var locals = catchClause.block.locals;
- if (locals && ts.hasProperty(locals, identifierName)) {
- var localSymbol = locals[identifierName];
- if (localSymbol && (localSymbol.flags & 2) !== 0) {
- grammarErrorOnNode(localSymbol.valueDeclaration, ts.Diagnostics.Cannot_redeclare_identifier_0_in_catch_clause, identifierName);
- }
- }
- }
- }
- checkBlock(catchClause.block);
- }
- if (node.finallyBlock) {
- checkBlock(node.finallyBlock);
- }
- }
- function checkIndexConstraints(type) {
- var declaredNumberIndexer = getIndexDeclarationOfSymbol(type.symbol, 1);
- var declaredStringIndexer = getIndexDeclarationOfSymbol(type.symbol, 0);
- var stringIndexType = getIndexTypeOfType(type, 0);
- var numberIndexType = getIndexTypeOfType(type, 1);
- if (stringIndexType || numberIndexType) {
- ts.forEach(getPropertiesOfObjectType(type), function (prop) {
- var propType = getTypeOfSymbol(prop);
- checkIndexConstraintForProperty(prop, propType, type, declaredStringIndexer, stringIndexType, 0);
- checkIndexConstraintForProperty(prop, propType, type, declaredNumberIndexer, numberIndexType, 1);
- });
- if (type.flags & 1024 && ts.isClassLike(type.symbol.valueDeclaration)) {
- var classDeclaration = type.symbol.valueDeclaration;
- for (var _i = 0, _a = classDeclaration.members; _i < _a.length; _i++) {
- var member = _a[_i];
- if (!(member.flags & 128) && ts.hasDynamicName(member)) {
- var propType = getTypeOfSymbol(member.symbol);
- checkIndexConstraintForProperty(member.symbol, propType, type, declaredStringIndexer, stringIndexType, 0);
- checkIndexConstraintForProperty(member.symbol, propType, type, declaredNumberIndexer, numberIndexType, 1);
- }
- }
- }
- }
- var errorNode;
- if (stringIndexType && numberIndexType) {
- errorNode = declaredNumberIndexer || declaredStringIndexer;
- if (!errorNode && (type.flags & 2048)) {
- var someBaseTypeHasBothIndexers = ts.forEach(getBaseTypes(type), function (base) { return getIndexTypeOfType(base, 0) && getIndexTypeOfType(base, 1); });
- errorNode = someBaseTypeHasBothIndexers ? undefined : type.symbol.declarations[0];
- }
- }
- if (errorNode && !isTypeAssignableTo(numberIndexType, stringIndexType)) {
- error(errorNode, ts.Diagnostics.Numeric_index_type_0_is_not_assignable_to_string_index_type_1, typeToString(numberIndexType), typeToString(stringIndexType));
- }
- function checkIndexConstraintForProperty(prop, propertyType, containingType, indexDeclaration, indexType, indexKind) {
- if (!indexType) {
- return;
- }
- if (indexKind === 1 && !isNumericName(prop.valueDeclaration.name)) {
- return;
- }
- var errorNode;
- if (prop.valueDeclaration.name.kind === 136 || prop.parent === containingType.symbol) {
- errorNode = prop.valueDeclaration;
- }
- else if (indexDeclaration) {
- errorNode = indexDeclaration;
- }
- else if (containingType.flags & 2048) {
- var someBaseClassHasBothPropertyAndIndexer = ts.forEach(getBaseTypes(containingType), function (base) { return getPropertyOfObjectType(base, prop.name) && getIndexTypeOfType(base, indexKind); });
- errorNode = someBaseClassHasBothPropertyAndIndexer ? undefined : containingType.symbol.declarations[0];
- }
- if (errorNode && !isTypeAssignableTo(propertyType, indexType)) {
- var errorMessage = indexKind === 0
- ? ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_string_index_type_2
- : ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2;
- error(errorNode, errorMessage, symbolToString(prop), typeToString(propertyType), typeToString(indexType));
- }
- }
- }
- function checkTypeNameIsReserved(name, message) {
- switch (name.text) {
- case "any":
- case "number":
- case "boolean":
- case "string":
- case "symbol":
- case "void":
- error(name, message, name.text);
- }
- }
- function checkTypeParameters(typeParameterDeclarations) {
- if (typeParameterDeclarations) {
- for (var i = 0, n = typeParameterDeclarations.length; i < n; i++) {
- var node = typeParameterDeclarations[i];
- checkTypeParameter(node);
- if (produceDiagnostics) {
- for (var j = 0; j < i; j++) {
- if (typeParameterDeclarations[j].symbol === node.symbol) {
- error(node.name, ts.Diagnostics.Duplicate_identifier_0, ts.declarationNameToString(node.name));
- }
- }
- }
- }
- }
- }
- function checkClassExpression(node) {
- checkClassLikeDeclaration(node);
- return getTypeOfSymbol(getSymbolOfNode(node));
- }
- function checkClassDeclaration(node) {
- if (!node.name && !(node.flags & 1024)) {
- grammarErrorOnFirstToken(node, ts.Diagnostics.A_class_declaration_without_the_default_modifier_must_have_a_name);
- }
- checkClassLikeDeclaration(node);
- ts.forEach(node.members, checkSourceElement);
- }
- function checkClassLikeDeclaration(node) {
- checkGrammarClassDeclarationHeritageClauses(node);
- checkDecorators(node);
- if (node.name) {
- checkTypeNameIsReserved(node.name, ts.Diagnostics.Class_name_cannot_be_0);
- checkCollisionWithCapturedThisVariable(node, node.name);
- checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
- }
- checkTypeParameters(node.typeParameters);
- checkExportsOnMergedDeclarations(node);
- var symbol = getSymbolOfNode(node);
- var type = getDeclaredTypeOfSymbol(symbol);
- var typeWithThis = getTypeWithThisArgument(type);
- var staticType = getTypeOfSymbol(symbol);
- var baseTypeNode = ts.getClassExtendsHeritageClauseElement(node);
- if (baseTypeNode) {
- emitExtends = emitExtends || !ts.isInAmbientContext(node);
- var baseTypes = getBaseTypes(type);
- if (baseTypes.length && produceDiagnostics) {
- var baseType = baseTypes[0];
- var staticBaseType = getBaseConstructorTypeOfClass(type);
- checkSourceElement(baseTypeNode.expression);
- if (baseTypeNode.typeArguments) {
- ts.forEach(baseTypeNode.typeArguments, checkSourceElement);
- for (var _i = 0, _a = getConstructorsForTypeArguments(staticBaseType, baseTypeNode.typeArguments); _i < _a.length; _i++) {
- var constructor = _a[_i];
- if (!checkTypeArgumentConstraints(constructor.typeParameters, baseTypeNode.typeArguments)) {
- break;
- }
- }
- }
- checkTypeAssignableTo(typeWithThis, getTypeWithThisArgument(baseType, type.thisType), node.name || node, ts.Diagnostics.Class_0_incorrectly_extends_base_class_1);
- checkTypeAssignableTo(staticType, getTypeWithoutSignatures(staticBaseType), node.name || node, ts.Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1);
- if (!(staticBaseType.symbol && staticBaseType.symbol.flags & 32)) {
- var constructors = getInstantiatedConstructorsForTypeArguments(staticBaseType, baseTypeNode.typeArguments);
- if (ts.forEach(constructors, function (sig) { return getReturnTypeOfSignature(sig) !== baseType; })) {
- error(baseTypeNode.expression, ts.Diagnostics.Base_constructors_must_all_have_the_same_return_type);
- }
- }
- checkKindsOfPropertyMemberOverrides(type, baseType);
- }
- }
- var implementedTypeNodes = ts.getClassImplementsHeritageClauseElements(node);
- if (implementedTypeNodes) {
- for (var _b = 0; _b < implementedTypeNodes.length; _b++) {
- var typeRefNode = implementedTypeNodes[_b];
- if (!ts.isSupportedExpressionWithTypeArguments(typeRefNode)) {
- error(typeRefNode.expression, ts.Diagnostics.A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments);
- }
- checkTypeReferenceNode(typeRefNode);
- if (produceDiagnostics) {
- var t = getTypeFromTypeNode(typeRefNode);
- if (t !== unknownType) {
- var declaredType = (t.flags & 4096) ? t.target : t;
- if (declaredType.flags & (1024 | 2048)) {
- checkTypeAssignableTo(typeWithThis, getTypeWithThisArgument(t, type.thisType), node.name || node, ts.Diagnostics.Class_0_incorrectly_implements_interface_1);
- }
- else {
- error(typeRefNode, ts.Diagnostics.A_class_may_only_implement_another_class_or_interface);
- }
- }
- }
- }
- }
- if (produceDiagnostics) {
- checkIndexConstraints(type);
- checkTypeForDuplicateIndexSignatures(node);
- }
- }
- function getTargetSymbol(s) {
- return s.flags & 16777216 ? getSymbolLinks(s).target : s;
- }
- function getClassLikeDeclarationOfSymbol(symbol) {
- return ts.forEach(symbol.declarations, function (d) { return ts.isClassLike(d) ? d : undefined; });
- }
- function checkKindsOfPropertyMemberOverrides(type, baseType) {
- var baseProperties = getPropertiesOfObjectType(baseType);
- for (var _i = 0; _i < baseProperties.length; _i++) {
- var baseProperty = baseProperties[_i];
- var base = getTargetSymbol(baseProperty);
- if (base.flags & 134217728) {
- continue;
- }
- var derived = getTargetSymbol(getPropertyOfObjectType(type, base.name));
- var baseDeclarationFlags = getDeclarationFlagsFromSymbol(base);
- ts.Debug.assert(!!derived, "derived should point to something, even if it is the base class' declaration.");
- if (derived) {
- if (derived === base) {
- var derivedClassDecl = getClassLikeDeclarationOfSymbol(type.symbol);
- if (baseDeclarationFlags & 256 && (!derivedClassDecl || !(derivedClassDecl.flags & 256))) {
- if (derivedClassDecl.kind === 186) {
- error(derivedClassDecl, ts.Diagnostics.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1, symbolToString(baseProperty), typeToString(baseType));
- }
- else {
- error(derivedClassDecl, ts.Diagnostics.Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2, typeToString(type), symbolToString(baseProperty), typeToString(baseType));
- }
- }
- }
- else {
- var derivedDeclarationFlags = getDeclarationFlagsFromSymbol(derived);
- if ((baseDeclarationFlags & 32) || (derivedDeclarationFlags & 32)) {
- continue;
- }
- if ((baseDeclarationFlags & 128) !== (derivedDeclarationFlags & 128)) {
- continue;
- }
- if ((base.flags & derived.flags & 8192) || ((base.flags & 98308) && (derived.flags & 98308))) {
- continue;
- }
- var errorMessage = void 0;
- if (base.flags & 8192) {
- if (derived.flags & 98304) {
- errorMessage = ts.Diagnostics.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor;
- }
- else {
- ts.Debug.assert((derived.flags & 4) !== 0);
- errorMessage = ts.Diagnostics.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property;
- }
- }
- else if (base.flags & 4) {
- ts.Debug.assert((derived.flags & 8192) !== 0);
- errorMessage = ts.Diagnostics.Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function;
- }
- else {
- ts.Debug.assert((base.flags & 98304) !== 0);
- ts.Debug.assert((derived.flags & 8192) !== 0);
- errorMessage = ts.Diagnostics.Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function;
- }
- error(derived.valueDeclaration.name, errorMessage, typeToString(baseType), symbolToString(base), typeToString(type));
- }
- }
- }
- }
- function isAccessor(kind) {
- return kind === 145 || kind === 146;
- }
- function areTypeParametersIdentical(list1, list2) {
- if (!list1 && !list2) {
- return true;
- }
- if (!list1 || !list2 || list1.length !== list2.length) {
- return false;
- }
- for (var i = 0, len = list1.length; i < len; i++) {
- var tp1 = list1[i];
- var tp2 = list2[i];
- if (tp1.name.text !== tp2.name.text) {
- return false;
- }
- if (!tp1.constraint && !tp2.constraint) {
- continue;
- }
- if (!tp1.constraint || !tp2.constraint) {
- return false;
- }
- if (!isTypeIdenticalTo(getTypeFromTypeNode(tp1.constraint), getTypeFromTypeNode(tp2.constraint))) {
- return false;
- }
- }
- return true;
- }
- function checkInheritedPropertiesAreIdentical(type, typeNode) {
- var baseTypes = getBaseTypes(type);
- if (baseTypes.length < 2) {
- return true;
- }
- var seen = {};
- ts.forEach(resolveDeclaredMembers(type).declaredProperties, function (p) { seen[p.name] = { prop: p, containingType: type }; });
- var ok = true;
- for (var _i = 0; _i < baseTypes.length; _i++) {
- var base = baseTypes[_i];
- var properties = getPropertiesOfObjectType(getTypeWithThisArgument(base, type.thisType));
- for (var _a = 0; _a < properties.length; _a++) {
- var prop = properties[_a];
- if (!ts.hasProperty(seen, prop.name)) {
- seen[prop.name] = { prop: prop, containingType: base };
- }
- else {
- var existing = seen[prop.name];
- var isInheritedProperty = existing.containingType !== type;
- if (isInheritedProperty && !isPropertyIdenticalTo(existing.prop, prop)) {
- ok = false;
- var typeName1 = typeToString(existing.containingType);
- var typeName2 = typeToString(base);
- var errorInfo = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Named_property_0_of_types_1_and_2_are_not_identical, symbolToString(prop), typeName1, typeName2);
- errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Interface_0_cannot_simultaneously_extend_types_1_and_2, typeToString(type), typeName1, typeName2);
- diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(typeNode, errorInfo));
- }
- }
- }
- }
- return ok;
- }
- function checkInterfaceDeclaration(node) {
- checkGrammarDecorators(node) || checkGrammarModifiers(node) || checkGrammarInterfaceDeclaration(node);
- checkTypeParameters(node.typeParameters);
- if (produceDiagnostics) {
- checkTypeNameIsReserved(node.name, ts.Diagnostics.Interface_name_cannot_be_0);
- checkExportsOnMergedDeclarations(node);
- var symbol = getSymbolOfNode(node);
- var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 215);
- if (symbol.declarations.length > 1) {
- if (node !== firstInterfaceDecl && !areTypeParametersIdentical(firstInterfaceDecl.typeParameters, node.typeParameters)) {
- error(node.name, ts.Diagnostics.All_declarations_of_an_interface_must_have_identical_type_parameters);
- }
- }
- if (node === firstInterfaceDecl) {
- var type = getDeclaredTypeOfSymbol(symbol);
- var typeWithThis = getTypeWithThisArgument(type);
- if (checkInheritedPropertiesAreIdentical(type, node.name)) {
- for (var _i = 0, _a = getBaseTypes(type); _i < _a.length; _i++) {
- var baseType = _a[_i];
- checkTypeAssignableTo(typeWithThis, getTypeWithThisArgument(baseType, type.thisType), node.name, ts.Diagnostics.Interface_0_incorrectly_extends_interface_1);
- }
- checkIndexConstraints(type);
- }
- }
- }
- ts.forEach(ts.getInterfaceBaseTypeNodes(node), function (heritageElement) {
- if (!ts.isSupportedExpressionWithTypeArguments(heritageElement)) {
- error(heritageElement.expression, ts.Diagnostics.An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments);
- }
- checkTypeReferenceNode(heritageElement);
- });
- ts.forEach(node.members, checkSourceElement);
- if (produceDiagnostics) {
- checkTypeForDuplicateIndexSignatures(node);
- }
- }
- function checkTypeAliasDeclaration(node) {
- checkGrammarDecorators(node) || checkGrammarModifiers(node);
- checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_alias_name_cannot_be_0);
- checkSourceElement(node.type);
- }
- function computeEnumMemberValues(node) {
- var nodeLinks = getNodeLinks(node);
- if (!(nodeLinks.flags & 8192)) {
- var enumSymbol = getSymbolOfNode(node);
- var enumType = getDeclaredTypeOfSymbol(enumSymbol);
- var autoValue = 0;
- var ambient = ts.isInAmbientContext(node);
- var enumIsConst = ts.isConst(node);
- for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
- var member = _a[_i];
- if (member.name.kind === 136) {
- error(member.name, ts.Diagnostics.Computed_property_names_are_not_allowed_in_enums);
- }
- else if (isNumericLiteralName(member.name.text)) {
- error(member.name, ts.Diagnostics.An_enum_member_cannot_have_a_numeric_name);
- }
- var previousEnumMemberIsNonConstant = autoValue === undefined;
- var initializer = member.initializer;
- if (initializer) {
- autoValue = computeConstantValueForEnumMemberInitializer(initializer, enumType, enumIsConst, ambient);
- }
- else if (ambient && !enumIsConst) {
- autoValue = undefined;
- }
- else if (previousEnumMemberIsNonConstant) {
- error(member.name, ts.Diagnostics.Enum_member_must_have_initializer);
- }
- if (autoValue !== undefined) {
- getNodeLinks(member).enumMemberValue = autoValue++;
- }
- }
- nodeLinks.flags |= 8192;
- }
- function computeConstantValueForEnumMemberInitializer(initializer, enumType, enumIsConst, ambient) {
- var reportError = true;
- var value = evalConstant(initializer);
- if (reportError) {
- if (value === undefined) {
- if (enumIsConst) {
- error(initializer, ts.Diagnostics.In_const_enum_declarations_member_initializer_must_be_constant_expression);
- }
- else if (ambient) {
- error(initializer, ts.Diagnostics.In_ambient_enum_declarations_member_initializer_must_be_constant_expression);
- }
- else {
- checkTypeAssignableTo(checkExpression(initializer), enumType, initializer, undefined);
- }
- }
- else if (enumIsConst) {
- if (isNaN(value)) {
- error(initializer, ts.Diagnostics.const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN);
- }
- else if (!isFinite(value)) {
- error(initializer, ts.Diagnostics.const_enum_member_initializer_was_evaluated_to_a_non_finite_value);
- }
- }
- }
- return value;
- function evalConstant(e) {
- switch (e.kind) {
- case 179:
- var value_1 = evalConstant(e.operand);
- if (value_1 === undefined) {
- return undefined;
- }
- switch (e.operator) {
- case 35: return value_1;
- case 36: return -value_1;
- case 50: return ~value_1;
- }
- return undefined;
- case 181:
- var left = evalConstant(e.left);
- if (left === undefined) {
- return undefined;
- }
- var right = evalConstant(e.right);
- if (right === undefined) {
- return undefined;
- }
- switch (e.operatorToken.kind) {
- case 47: return left | right;
- case 46: return left & right;
- case 44: return left >> right;
- case 45: return left >>> right;
- case 43: return left << right;
- case 48: return left ^ right;
- case 37: return left * right;
- case 39: return left / right;
- case 35: return left + right;
- case 36: return left - right;
- case 40: return left % right;
- }
- return undefined;
- case 8:
- return +e.text;
- case 172:
- return evalConstant(e.expression);
- case 69:
- case 167:
- case 166:
- var member = initializer.parent;
- var currentType = getTypeOfSymbol(getSymbolOfNode(member.parent));
- var enumType_1;
- var propertyName;
- if (e.kind === 69) {
- enumType_1 = currentType;
- propertyName = e.text;
- }
- else {
- var expression;
- if (e.kind === 167) {
- if (e.argumentExpression === undefined ||
- e.argumentExpression.kind !== 9) {
- return undefined;
- }
- expression = e.expression;
- propertyName = e.argumentExpression.text;
- }
- else {
- expression = e.expression;
- propertyName = e.name.text;
- }
- var current = expression;
- while (current) {
- if (current.kind === 69) {
- break;
- }
- else if (current.kind === 166) {
- current = current.expression;
- }
- else {
- return undefined;
- }
- }
- enumType_1 = checkExpression(expression);
- if (!(enumType_1.symbol && (enumType_1.symbol.flags & 384))) {
- return undefined;
- }
- }
- if (propertyName === undefined) {
- return undefined;
- }
- var property = getPropertyOfObjectType(enumType_1, propertyName);
- if (!property || !(property.flags & 8)) {
- return undefined;
- }
- var propertyDecl = property.valueDeclaration;
- if (member === propertyDecl) {
- return undefined;
- }
- if (!isBlockScopedNameDeclaredBeforeUse(propertyDecl, member)) {
- reportError = false;
- error(e, ts.Diagnostics.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums);
- return undefined;
- }
- return getNodeLinks(propertyDecl).enumMemberValue;
- }
- }
- }
- }
- function checkEnumDeclaration(node) {
- if (!produceDiagnostics) {
- return;
- }
- checkGrammarDecorators(node) || checkGrammarModifiers(node);
- checkTypeNameIsReserved(node.name, ts.Diagnostics.Enum_name_cannot_be_0);
- checkCollisionWithCapturedThisVariable(node, node.name);
- checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
- checkExportsOnMergedDeclarations(node);
- computeEnumMemberValues(node);
- var enumIsConst = ts.isConst(node);
- if (compilerOptions.isolatedModules && enumIsConst && ts.isInAmbientContext(node)) {
- error(node.name, ts.Diagnostics.Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided);
- }
- var enumSymbol = getSymbolOfNode(node);
- var firstDeclaration = ts.getDeclarationOfKind(enumSymbol, node.kind);
- if (node === firstDeclaration) {
- if (enumSymbol.declarations.length > 1) {
- ts.forEach(enumSymbol.declarations, function (decl) {
- if (ts.isConstEnumDeclaration(decl) !== enumIsConst) {
- error(decl.name, ts.Diagnostics.Enum_declarations_must_all_be_const_or_non_const);
- }
- });
- }
- var seenEnumMissingInitialInitializer = false;
- ts.forEach(enumSymbol.declarations, function (declaration) {
- if (declaration.kind !== 217) {
- return false;
- }
- var enumDeclaration = declaration;
- if (!enumDeclaration.members.length) {
- return false;
- }
- var firstEnumMember = enumDeclaration.members[0];
- if (!firstEnumMember.initializer) {
- if (seenEnumMissingInitialInitializer) {
- error(firstEnumMember.name, ts.Diagnostics.In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element);
- }
- else {
- seenEnumMissingInitialInitializer = true;
- }
- }
- });
- }
- }
- function getFirstNonAmbientClassOrFunctionDeclaration(symbol) {
- var declarations = symbol.declarations;
- for (var _i = 0; _i < declarations.length; _i++) {
- var declaration = declarations[_i];
- if ((declaration.kind === 214 ||
- (declaration.kind === 213 && ts.nodeIsPresent(declaration.body))) &&
- !ts.isInAmbientContext(declaration)) {
- return declaration;
- }
- }
- return undefined;
- }
- function inSameLexicalScope(node1, node2) {
- var container1 = ts.getEnclosingBlockScopeContainer(node1);
- var container2 = ts.getEnclosingBlockScopeContainer(node2);
- if (isGlobalSourceFile(container1)) {
- return isGlobalSourceFile(container2);
- }
- else if (isGlobalSourceFile(container2)) {
- return false;
- }
- else {
- return container1 === container2;
- }
- }
- function checkModuleDeclaration(node) {
- if (produceDiagnostics) {
- var isAmbientExternalModule = node.name.kind === 9;
- var contextErrorMessage = isAmbientExternalModule
- ? ts.Diagnostics.An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file
- : ts.Diagnostics.A_namespace_declaration_is_only_allowed_in_a_namespace_or_module;
- if (checkGrammarModuleElementContext(node, contextErrorMessage)) {
- return;
- }
- if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node)) {
- if (!ts.isInAmbientContext(node) && node.name.kind === 9) {
- grammarErrorOnNode(node.name, ts.Diagnostics.Only_ambient_modules_can_use_quoted_names);
- }
- }
- checkCollisionWithCapturedThisVariable(node, node.name);
- checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
- checkExportsOnMergedDeclarations(node);
- var symbol = getSymbolOfNode(node);
- if (symbol.flags & 512
- && symbol.declarations.length > 1
- && !ts.isInAmbientContext(node)
- && ts.isInstantiatedModule(node, compilerOptions.preserveConstEnums || compilerOptions.isolatedModules)) {
- var firstNonAmbientClassOrFunc = getFirstNonAmbientClassOrFunctionDeclaration(symbol);
- if (firstNonAmbientClassOrFunc) {
- if (ts.getSourceFileOfNode(node) !== ts.getSourceFileOfNode(firstNonAmbientClassOrFunc)) {
- error(node.name, ts.Diagnostics.A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged);
- }
- else if (node.pos < firstNonAmbientClassOrFunc.pos) {
- error(node.name, ts.Diagnostics.A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged);
- }
- }
- var mergedClass = ts.getDeclarationOfKind(symbol, 214);
- if (mergedClass &&
- inSameLexicalScope(node, mergedClass)) {
- getNodeLinks(node).flags |= 32768;
- }
- }
- if (isAmbientExternalModule) {
- if (!isGlobalSourceFile(node.parent)) {
- error(node.name, ts.Diagnostics.Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces);
- }
- if (ts.isExternalModuleNameRelative(node.name.text)) {
- error(node.name, ts.Diagnostics.Ambient_module_declaration_cannot_specify_relative_module_name);
- }
- }
- }
- checkSourceElement(node.body);
- }
- function getFirstIdentifier(node) {
- while (true) {
- if (node.kind === 135) {
- node = node.left;
- }
- else if (node.kind === 166) {
- node = node.expression;
- }
- else {
- break;
- }
- }
- ts.Debug.assert(node.kind === 69);
- return node;
- }
- function checkExternalImportOrExportDeclaration(node) {
- var moduleName = ts.getExternalModuleName(node);
- if (!ts.nodeIsMissing(moduleName) && moduleName.kind !== 9) {
- error(moduleName, ts.Diagnostics.String_literal_expected);
- return false;
- }
- var inAmbientExternalModule = node.parent.kind === 219 && node.parent.parent.name.kind === 9;
- if (node.parent.kind !== 248 && !inAmbientExternalModule) {
- error(moduleName, node.kind === 228 ?
- ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace :
- ts.Diagnostics.Import_declarations_in_a_namespace_cannot_reference_a_module);
- return false;
- }
- if (inAmbientExternalModule && ts.isExternalModuleNameRelative(moduleName.text)) {
- error(node, ts.Diagnostics.Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relative_module_name);
- return false;
- }
- return true;
- }
- function checkAliasSymbol(node) {
- var symbol = getSymbolOfNode(node);
- var target = resolveAlias(symbol);
- if (target !== unknownSymbol) {
- var excludedMeanings = (symbol.flags & 107455 ? 107455 : 0) |
- (symbol.flags & 793056 ? 793056 : 0) |
- (symbol.flags & 1536 ? 1536 : 0);
- if (target.flags & excludedMeanings) {
- var message = node.kind === 230 ?
- ts.Diagnostics.Export_declaration_conflicts_with_exported_declaration_of_0 :
- ts.Diagnostics.Import_declaration_conflicts_with_local_declaration_of_0;
- error(node, message, symbolToString(symbol));
- }
- }
- }
- function checkImportBinding(node) {
- checkCollisionWithCapturedThisVariable(node, node.name);
- checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
- checkAliasSymbol(node);
- }
- function checkImportDeclaration(node) {
- if (checkGrammarModuleElementContext(node, ts.Diagnostics.An_import_declaration_can_only_be_used_in_a_namespace_or_module)) {
- return;
- }
- if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 2035)) {
- grammarErrorOnFirstToken(node, ts.Diagnostics.An_import_declaration_cannot_have_modifiers);
- }
- if (checkExternalImportOrExportDeclaration(node)) {
- var importClause = node.importClause;
- if (importClause) {
- if (importClause.name) {
- checkImportBinding(importClause);
- }
- if (importClause.namedBindings) {
- if (importClause.namedBindings.kind === 224) {
- checkImportBinding(importClause.namedBindings);
- }
- else {
- ts.forEach(importClause.namedBindings.elements, checkImportBinding);
- }
- }
- }
- }
- }
- function checkImportEqualsDeclaration(node) {
- if (checkGrammarModuleElementContext(node, ts.Diagnostics.An_import_declaration_can_only_be_used_in_a_namespace_or_module)) {
- return;
- }
- checkGrammarDecorators(node) || checkGrammarModifiers(node);
- if (ts.isInternalModuleImportEqualsDeclaration(node) || checkExternalImportOrExportDeclaration(node)) {
- checkImportBinding(node);
- if (node.flags & 1) {
- markExportAsReferenced(node);
- }
- if (ts.isInternalModuleImportEqualsDeclaration(node)) {
- var target = resolveAlias(getSymbolOfNode(node));
- if (target !== unknownSymbol) {
- if (target.flags & 107455) {
- var moduleName = getFirstIdentifier(node.moduleReference);
- if (!(resolveEntityName(moduleName, 107455 | 1536).flags & 1536)) {
- error(moduleName, ts.Diagnostics.Module_0_is_hidden_by_a_local_declaration_with_the_same_name, ts.declarationNameToString(moduleName));
- }
- }
- if (target.flags & 793056) {
- checkTypeNameIsReserved(node.name, ts.Diagnostics.Import_name_cannot_be_0);
- }
- }
- }
- else {
- if (modulekind === 5 && !ts.isInAmbientContext(node)) {
- grammarErrorOnNode(node, ts.Diagnostics.Import_assignment_cannot_be_used_when_targeting_ECMAScript_6_modules_Consider_using_import_Asterisk_as_ns_from_mod_import_a_from_mod_import_d_from_mod_or_another_module_format_instead);
- }
- }
- }
- }
- function checkExportDeclaration(node) {
- if (checkGrammarModuleElementContext(node, ts.Diagnostics.An_export_declaration_can_only_be_used_in_a_module)) {
- return;
- }
- if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 2035)) {
- grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_declaration_cannot_have_modifiers);
- }
- if (!node.moduleSpecifier || checkExternalImportOrExportDeclaration(node)) {
- if (node.exportClause) {
- ts.forEach(node.exportClause.elements, checkExportSpecifier);
- var inAmbientExternalModule = node.parent.kind === 219 && node.parent.parent.name.kind === 9;
- if (node.parent.kind !== 248 && !inAmbientExternalModule) {
- error(node, ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace);
- }
- }
- else {
- var moduleSymbol = resolveExternalModuleName(node, node.moduleSpecifier);
- if (moduleSymbol && moduleSymbol.exports["export="]) {
- error(node.moduleSpecifier, ts.Diagnostics.Module_0_uses_export_and_cannot_be_used_with_export_Asterisk, symbolToString(moduleSymbol));
- }
- }
- }
- }
- function checkGrammarModuleElementContext(node, errorMessage) {
- if (node.parent.kind !== 248 && node.parent.kind !== 219 && node.parent.kind !== 218) {
- return grammarErrorOnFirstToken(node, errorMessage);
- }
- }
- function checkExportSpecifier(node) {
- checkAliasSymbol(node);
- if (!node.parent.parent.moduleSpecifier) {
- markExportAsReferenced(node);
- }
- }
- function checkExportAssignment(node) {
- if (checkGrammarModuleElementContext(node, ts.Diagnostics.An_export_assignment_can_only_be_used_in_a_module)) {
- return;
- }
- var container = node.parent.kind === 248 ? node.parent : node.parent.parent;
- if (container.kind === 218 && container.name.kind === 69) {
- error(node, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_namespace);
- return;
- }
- if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 2035)) {
- grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_assignment_cannot_have_modifiers);
- }
- if (node.expression.kind === 69) {
- markExportAsReferenced(node);
- }
- else {
- checkExpressionCached(node.expression);
- }
- checkExternalModuleExports(container);
- if (node.isExportEquals && !ts.isInAmbientContext(node)) {
- if (modulekind === 5) {
- grammarErrorOnNode(node, ts.Diagnostics.Export_assignment_cannot_be_used_when_targeting_ECMAScript_6_modules_Consider_using_export_default_or_another_module_format_instead);
- }
- else if (modulekind === 4) {
- grammarErrorOnNode(node, ts.Diagnostics.Export_assignment_is_not_supported_when_module_flag_is_system);
- }
- }
- }
- function getModuleStatements(node) {
- if (node.kind === 248) {
- return node.statements;
- }
- if (node.kind === 218 && node.body.kind === 219) {
- return node.body.statements;
- }
- return emptyArray;
- }
- function hasExportedMembers(moduleSymbol) {
- for (var id in moduleSymbol.exports) {
- if (id !== "export=") {
- return true;
- }
- }
- return false;
- }
- function checkExternalModuleExports(node) {
- var moduleSymbol = getSymbolOfNode(node);
- var links = getSymbolLinks(moduleSymbol);
- if (!links.exportsChecked) {
- var exportEqualsSymbol = moduleSymbol.exports["export="];
- if (exportEqualsSymbol && hasExportedMembers(moduleSymbol)) {
- var declaration = getDeclarationOfAliasSymbol(exportEqualsSymbol) || exportEqualsSymbol.valueDeclaration;
- error(declaration, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements);
- }
- links.exportsChecked = true;
- }
- }
- function checkTypePredicate(node) {
- if (!isInLegalTypePredicatePosition(node)) {
- error(node, ts.Diagnostics.A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods);
- }
- }
- function checkSourceElement(node) {
- if (!node) {
- return;
- }
- var kind = node.kind;
- if (cancellationToken) {
- switch (kind) {
- case 218:
- case 214:
- case 215:
- case 213:
- cancellationToken.throwIfCancellationRequested();
- }
- }
- switch (kind) {
- case 137:
- return checkTypeParameter(node);
- case 138:
- return checkParameter(node);
- case 141:
- case 140:
- return checkPropertyDeclaration(node);
- case 152:
- case 153:
- case 147:
- case 148:
- return checkSignatureDeclaration(node);
- case 149:
- return checkSignatureDeclaration(node);
- case 143:
- case 142:
- return checkMethodDeclaration(node);
- case 144:
- return checkConstructorDeclaration(node);
- case 145:
- case 146:
- return checkAccessorDeclaration(node);
- case 151:
- return checkTypeReferenceNode(node);
- case 150:
- return checkTypePredicate(node);
- case 154:
- return checkTypeQuery(node);
- case 155:
- return checkTypeLiteral(node);
- case 156:
- return checkArrayType(node);
- case 157:
- return checkTupleType(node);
- case 158:
- case 159:
- return checkUnionOrIntersectionType(node);
- case 160:
- return checkSourceElement(node.type);
- case 213:
- return checkFunctionDeclaration(node);
- case 192:
- case 219:
- return checkBlock(node);
- case 193:
- return checkVariableStatement(node);
- case 195:
- return checkExpressionStatement(node);
- case 196:
- return checkIfStatement(node);
- case 197:
- return checkDoStatement(node);
- case 198:
- return checkWhileStatement(node);
- case 199:
- return checkForStatement(node);
- case 200:
- return checkForInStatement(node);
- case 201:
- return checkForOfStatement(node);
- case 202:
- case 203:
- return checkBreakOrContinueStatement(node);
- case 204:
- return checkReturnStatement(node);
- case 205:
- return checkWithStatement(node);
- case 206:
- return checkSwitchStatement(node);
- case 207:
- return checkLabeledStatement(node);
- case 208:
- return checkThrowStatement(node);
- case 209:
- return checkTryStatement(node);
- case 211:
- return checkVariableDeclaration(node);
- case 163:
- return checkBindingElement(node);
- case 214:
- return checkClassDeclaration(node);
- case 215:
- return checkInterfaceDeclaration(node);
- case 216:
- return checkTypeAliasDeclaration(node);
- case 217:
- return checkEnumDeclaration(node);
- case 218:
- return checkModuleDeclaration(node);
- case 222:
- return checkImportDeclaration(node);
- case 221:
- return checkImportEqualsDeclaration(node);
- case 228:
- return checkExportDeclaration(node);
- case 227:
- return checkExportAssignment(node);
- case 194:
- checkGrammarStatementInAmbientContext(node);
- return;
- case 210:
- checkGrammarStatementInAmbientContext(node);
- return;
- case 231:
- return checkMissingDeclaration(node);
- }
- }
- function checkFunctionAndClassExpressionBodies(node) {
- switch (node.kind) {
- case 173:
- case 174:
- ts.forEach(node.parameters, checkFunctionAndClassExpressionBodies);
- checkFunctionExpressionOrObjectLiteralMethodBody(node);
- break;
- case 186:
- ts.forEach(node.members, checkSourceElement);
- ts.forEachChild(node, checkFunctionAndClassExpressionBodies);
- break;
- case 143:
- case 142:
- ts.forEach(node.decorators, checkFunctionAndClassExpressionBodies);
- ts.forEach(node.parameters, checkFunctionAndClassExpressionBodies);
- if (ts.isObjectLiteralMethod(node)) {
- checkFunctionExpressionOrObjectLiteralMethodBody(node);
- }
- break;
- case 144:
- case 145:
- case 146:
- case 213:
- ts.forEach(node.parameters, checkFunctionAndClassExpressionBodies);
- break;
- case 205:
- checkFunctionAndClassExpressionBodies(node.expression);
- break;
- case 139:
- case 138:
- case 141:
- case 140:
- case 161:
- case 162:
- case 163:
- case 164:
- case 165:
- case 245:
- case 166:
- case 167:
- case 168:
- case 169:
- case 170:
- case 183:
- case 190:
- case 171:
- case 189:
- case 172:
- case 176:
- case 177:
- case 178:
- case 175:
- case 179:
- case 180:
- case 181:
- case 182:
- case 185:
- case 184:
- case 192:
- case 219:
- case 193:
- case 195:
- case 196:
- case 197:
- case 198:
- case 199:
- case 200:
- case 201:
- case 202:
- case 203:
- case 204:
- case 206:
- case 220:
- case 241:
- case 242:
- case 207:
- case 208:
- case 209:
- case 244:
- case 211:
- case 212:
- case 214:
- case 243:
- case 188:
- case 217:
- case 247:
- case 227:
- case 248:
- case 240:
- case 233:
- case 234:
- case 238:
- case 239:
- case 235:
- ts.forEachChild(node, checkFunctionAndClassExpressionBodies);
- break;
- }
- }
- function checkSourceFile(node) {
- var start = new Date().getTime();
- checkSourceFileWorker(node);
- ts.checkTime += new Date().getTime() - start;
- }
- function checkSourceFileWorker(node) {
- var links = getNodeLinks(node);
- if (!(links.flags & 1)) {
- if (node.isDefaultLib && compilerOptions.skipDefaultLibCheck) {
- return;
- }
- checkGrammarSourceFile(node);
- emitExtends = false;
- emitDecorate = false;
- emitParam = false;
- potentialThisCollisions.length = 0;
- ts.forEach(node.statements, checkSourceElement);
- checkFunctionAndClassExpressionBodies(node);
- if (ts.isExternalModule(node)) {
- checkExternalModuleExports(node);
- }
- if (potentialThisCollisions.length) {
- ts.forEach(potentialThisCollisions, checkIfThisIsCapturedInEnclosingScope);
- potentialThisCollisions.length = 0;
- }
- if (emitExtends) {
- links.flags |= 8;
- }
- if (emitDecorate) {
- links.flags |= 16;
- }
- if (emitParam) {
- links.flags |= 32;
- }
- if (emitAwaiter) {
- links.flags |= 64;
- }
- if (emitGenerator || (emitAwaiter && languageVersion < 2)) {
- links.flags |= 128;
- }
- links.flags |= 1;
- }
- }
- function getDiagnostics(sourceFile, ct) {
- try {
- cancellationToken = ct;
- return getDiagnosticsWorker(sourceFile);
- }
- finally {
- cancellationToken = undefined;
- }
- }
- function getDiagnosticsWorker(sourceFile) {
- throwIfNonDiagnosticsProducing();
- if (sourceFile) {
- checkSourceFile(sourceFile);
- return diagnostics.getDiagnostics(sourceFile.fileName);
- }
- ts.forEach(host.getSourceFiles(), checkSourceFile);
- return diagnostics.getDiagnostics();
- }
- function getGlobalDiagnostics() {
- throwIfNonDiagnosticsProducing();
- return diagnostics.getGlobalDiagnostics();
- }
- function throwIfNonDiagnosticsProducing() {
- if (!produceDiagnostics) {
- throw new Error("Trying to get diagnostics from a type checker that does not produce them.");
- }
- }
- function isInsideWithStatementBody(node) {
- if (node) {
- while (node.parent) {
- if (node.parent.kind === 205 && node.parent.statement === node) {
- return true;
- }
- node = node.parent;
- }
- }
- return false;
- }
- function getSymbolsInScope(location, meaning) {
- var symbols = {};
- var memberFlags = 0;
- if (isInsideWithStatementBody(location)) {
- return [];
- }
- populateSymbols();
- return symbolsToArray(symbols);
- function populateSymbols() {
- while (location) {
- if (location.locals && !isGlobalSourceFile(location)) {
- copySymbols(location.locals, meaning);
- }
- switch (location.kind) {
- case 248:
- if (!ts.isExternalModule(location)) {
- break;
- }
- case 218:
- copySymbols(getSymbolOfNode(location).exports, meaning & 8914931);
- break;
- case 217:
- copySymbols(getSymbolOfNode(location).exports, meaning & 8);
- break;
- case 186:
- var className = location.name;
- if (className) {
- copySymbol(location.symbol, meaning);
- }
- case 214:
- case 215:
- if (!(memberFlags & 128)) {
- copySymbols(getSymbolOfNode(location).members, meaning & 793056);
- }
- break;
- case 173:
- var funcName = location.name;
- if (funcName) {
- copySymbol(location.symbol, meaning);
- }
- break;
- }
- if (ts.introducesArgumentsExoticObject(location)) {
- copySymbol(argumentsSymbol, meaning);
- }
- memberFlags = location.flags;
- location = location.parent;
- }
- copySymbols(globals, meaning);
- }
- function copySymbol(symbol, meaning) {
- if (symbol.flags & meaning) {
- var id = symbol.name;
- if (!ts.hasProperty(symbols, id)) {
- symbols[id] = symbol;
- }
- }
- }
- function copySymbols(source, meaning) {
- if (meaning) {
- for (var id in source) {
- var symbol = source[id];
- copySymbol(symbol, meaning);
- }
- }
- }
- }
- function isTypeDeclarationName(name) {
- return name.kind === 69 &&
- isTypeDeclaration(name.parent) &&
- name.parent.name === name;
- }
- function isTypeDeclaration(node) {
- switch (node.kind) {
- case 137:
- case 214:
- case 215:
- case 216:
- case 217:
- return true;
- }
- }
- function isTypeReferenceIdentifier(entityName) {
- var node = entityName;
- while (node.parent && node.parent.kind === 135) {
- node = node.parent;
- }
- return node.parent && node.parent.kind === 151;
- }
- function isHeritageClauseElementIdentifier(entityName) {
- var node = entityName;
- while (node.parent && node.parent.kind === 166) {
- node = node.parent;
- }
- return node.parent && node.parent.kind === 188;
- }
- function getLeftSideOfImportEqualsOrExportAssignment(nodeOnRightSide) {
- while (nodeOnRightSide.parent.kind === 135) {
- nodeOnRightSide = nodeOnRightSide.parent;
- }
- if (nodeOnRightSide.parent.kind === 221) {
- return nodeOnRightSide.parent.moduleReference === nodeOnRightSide && nodeOnRightSide.parent;
- }
- if (nodeOnRightSide.parent.kind === 227) {
- return nodeOnRightSide.parent.expression === nodeOnRightSide && nodeOnRightSide.parent;
- }
- return undefined;
- }
- function isInRightSideOfImportOrExportAssignment(node) {
- return getLeftSideOfImportEqualsOrExportAssignment(node) !== undefined;
- }
- function getSymbolOfEntityNameOrPropertyAccessExpression(entityName) {
- if (ts.isDeclarationName(entityName)) {
- return getSymbolOfNode(entityName.parent);
- }
- if (entityName.parent.kind === 227) {
- return resolveEntityName(entityName, 107455 | 793056 | 1536 | 8388608);
- }
- if (entityName.kind !== 166) {
- if (isInRightSideOfImportOrExportAssignment(entityName)) {
- return getSymbolOfPartOfRightHandSideOfImportEquals(entityName);
- }
- }
- if (ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) {
- entityName = entityName.parent;
- }
- if (isHeritageClauseElementIdentifier(entityName)) {
- var meaning = 0;
- if (entityName.parent.kind === 188) {
- meaning = 793056;
- if (ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent)) {
- meaning |= 107455;
- }
- }
- else {
- meaning = 1536;
- }
- meaning |= 8388608;
- return resolveEntityName(entityName, meaning);
- }
- else if ((entityName.parent.kind === 235) ||
- (entityName.parent.kind === 234) ||
- (entityName.parent.kind === 237)) {
- return getJsxElementTagSymbol(entityName.parent);
- }
- else if (ts.isExpression(entityName)) {
- if (ts.nodeIsMissing(entityName)) {
- return undefined;
- }
- if (entityName.kind === 69) {
- var meaning = 107455 | 8388608;
- return resolveEntityName(entityName, meaning);
- }
- else if (entityName.kind === 166) {
- var symbol = getNodeLinks(entityName).resolvedSymbol;
- if (!symbol) {
- checkPropertyAccessExpression(entityName);
- }
- return getNodeLinks(entityName).resolvedSymbol;
- }
- else if (entityName.kind === 135) {
- var symbol = getNodeLinks(entityName).resolvedSymbol;
- if (!symbol) {
- checkQualifiedName(entityName);
- }
- return getNodeLinks(entityName).resolvedSymbol;
- }
- }
- else if (isTypeReferenceIdentifier(entityName)) {
- var meaning = entityName.parent.kind === 151 ? 793056 : 1536;
- meaning |= 8388608;
- return resolveEntityName(entityName, meaning);
- }
- else if (entityName.parent.kind === 238) {
- return getJsxAttributePropertySymbol(entityName.parent);
- }
- if (entityName.parent.kind === 150) {
- return resolveEntityName(entityName, 1);
- }
- return undefined;
- }
- function getSymbolAtLocation(node) {
- if (isInsideWithStatementBody(node)) {
- return undefined;
- }
- if (ts.isDeclarationName(node)) {
- return getSymbolOfNode(node.parent);
- }
- if (node.kind === 69) {
- if (isInRightSideOfImportOrExportAssignment(node)) {
- return node.parent.kind === 227
- ? getSymbolOfEntityNameOrPropertyAccessExpression(node)
- : getSymbolOfPartOfRightHandSideOfImportEquals(node);
- }
- else if (node.parent.kind === 163 &&
- node.parent.parent.kind === 161 &&
- node === node.parent.propertyName) {
- var typeOfPattern = getTypeOfNode(node.parent.parent);
- var propertyDeclaration = typeOfPattern && getPropertyOfType(typeOfPattern, node.text);
- if (propertyDeclaration) {
- return propertyDeclaration;
- }
- }
- }
- switch (node.kind) {
- case 69:
- case 166:
- case 135:
- return getSymbolOfEntityNameOrPropertyAccessExpression(node);
- case 97:
- case 95:
- var type = ts.isExpression(node) ? checkExpression(node) : getTypeFromTypeNode(node);
- return type.symbol;
- case 121:
- var constructorDeclaration = node.parent;
- if (constructorDeclaration && constructorDeclaration.kind === 144) {
- return constructorDeclaration.parent.symbol;
- }
- return undefined;
- case 9:
- if ((ts.isExternalModuleImportEqualsDeclaration(node.parent.parent) &&
- ts.getExternalModuleImportEqualsDeclarationExpression(node.parent.parent) === node) ||
- ((node.parent.kind === 222 || node.parent.kind === 228) &&
- node.parent.moduleSpecifier === node)) {
- return resolveExternalModuleName(node, node);
- }
- case 8:
- if (node.parent.kind === 167 && node.parent.argumentExpression === node) {
- var objectType = checkExpression(node.parent.expression);
- if (objectType === unknownType)
- return undefined;
- var apparentType = getApparentType(objectType);
- if (apparentType === unknownType)
- return undefined;
- return getPropertyOfType(apparentType, node.text);
- }
- break;
- }
- return undefined;
- }
- function getShorthandAssignmentValueSymbol(location) {
- if (location && location.kind === 246) {
- return resolveEntityName(location.name, 107455);
- }
- return undefined;
- }
- function getTypeOfNode(node) {
- if (isInsideWithStatementBody(node)) {
- return unknownType;
- }
- if (ts.isTypeNode(node)) {
- return getTypeFromTypeNode(node);
- }
- if (ts.isExpression(node)) {
- return getTypeOfExpression(node);
- }
- if (ts.isExpressionWithTypeArgumentsInClassExtendsClause(node)) {
- return getBaseTypes(getDeclaredTypeOfSymbol(getSymbolOfNode(node.parent.parent)))[0];
- }
- if (isTypeDeclaration(node)) {
- var symbol = getSymbolOfNode(node);
- return getDeclaredTypeOfSymbol(symbol);
- }
- if (isTypeDeclarationName(node)) {
- var symbol = getSymbolAtLocation(node);
- return symbol && getDeclaredTypeOfSymbol(symbol);
- }
- if (ts.isDeclaration(node)) {
- var symbol = getSymbolOfNode(node);
- return getTypeOfSymbol(symbol);
- }
- if (ts.isDeclarationName(node)) {
- var symbol = getSymbolAtLocation(node);
- return symbol && getTypeOfSymbol(symbol);
- }
- if (ts.isBindingPattern(node)) {
- return getTypeForVariableLikeDeclaration(node.parent);
- }
- if (isInRightSideOfImportOrExportAssignment(node)) {
- var symbol = getSymbolAtLocation(node);
- var declaredType = symbol && getDeclaredTypeOfSymbol(symbol);
- return declaredType !== unknownType ? declaredType : getTypeOfSymbol(symbol);
- }
- return unknownType;
- }
- function getTypeOfExpression(expr) {
- if (ts.isRightSideOfQualifiedNameOrPropertyAccess(expr)) {
- expr = expr.parent;
- }
- return checkExpression(expr);
- }
- function getParentTypeOfClassElement(node) {
- var classSymbol = getSymbolOfNode(node.parent);
- return node.flags & 128
- ? getTypeOfSymbol(classSymbol)
- : getDeclaredTypeOfSymbol(classSymbol);
- }
- function getAugmentedPropertiesOfType(type) {
- type = getApparentType(type);
- var propsByName = createSymbolTable(getPropertiesOfType(type));
- if (getSignaturesOfType(type, 0).length || getSignaturesOfType(type, 1).length) {
- ts.forEach(getPropertiesOfType(globalFunctionType), function (p) {
- if (!ts.hasProperty(propsByName, p.name)) {
- propsByName[p.name] = p;
- }
- });
- }
- return getNamedMembers(propsByName);
- }
- function getRootSymbols(symbol) {
- if (symbol.flags & 268435456) {
- var symbols = [];
- var name_15 = symbol.name;
- ts.forEach(getSymbolLinks(symbol).containingType.types, function (t) {
- var symbol = getPropertyOfType(t, name_15);
- if (symbol) {
- symbols.push(symbol);
- }
- });
- return symbols;
- }
- else if (symbol.flags & 67108864) {
- var target = getSymbolLinks(symbol).target;
- if (target) {
- return [target];
- }
- }
- return [symbol];
- }
- function getReferencedExportContainer(node) {
- var symbol = getReferencedValueSymbol(node);
- if (symbol) {
- if (symbol.flags & 1048576) {
- var exportSymbol = getMergedSymbol(symbol.exportSymbol);
- if (exportSymbol.flags & 944) {
- return undefined;
- }
- symbol = exportSymbol;
- }
- var parentSymbol = getParentOfSymbol(symbol);
- if (parentSymbol) {
- if (parentSymbol.flags & 512 && parentSymbol.valueDeclaration.kind === 248) {
- return parentSymbol.valueDeclaration;
- }
- for (var n = node.parent; n; n = n.parent) {
- if ((n.kind === 218 || n.kind === 217) && getSymbolOfNode(n) === parentSymbol) {
- return n;
- }
- }
- }
- }
- }
- function getReferencedImportDeclaration(node) {
- var symbol = getReferencedValueSymbol(node);
- return symbol && symbol.flags & 8388608 ? getDeclarationOfAliasSymbol(symbol) : undefined;
- }
- function isStatementWithLocals(node) {
- switch (node.kind) {
- case 192:
- case 220:
- case 199:
- case 200:
- case 201:
- return true;
- }
- return false;
- }
- function isNestedRedeclarationSymbol(symbol) {
- if (symbol.flags & 418) {
- var links = getSymbolLinks(symbol);
- if (links.isNestedRedeclaration === undefined) {
- var container = ts.getEnclosingBlockScopeContainer(symbol.valueDeclaration);
- links.isNestedRedeclaration = isStatementWithLocals(container) &&
- !!resolveName(container.parent, symbol.name, 107455, undefined, undefined);
- }
- return links.isNestedRedeclaration;
- }
- return false;
- }
- function getReferencedNestedRedeclaration(node) {
- var symbol = getReferencedValueSymbol(node);
- return symbol && isNestedRedeclarationSymbol(symbol) ? symbol.valueDeclaration : undefined;
- }
- function isNestedRedeclaration(node) {
- return isNestedRedeclarationSymbol(getSymbolOfNode(node));
- }
- function isValueAliasDeclaration(node) {
- switch (node.kind) {
- case 221:
- case 223:
- case 224:
- case 226:
- case 230:
- return isAliasResolvedToValue(getSymbolOfNode(node));
- case 228:
- var exportClause = node.exportClause;
- return exportClause && ts.forEach(exportClause.elements, isValueAliasDeclaration);
- case 227:
- return node.expression && node.expression.kind === 69 ? isAliasResolvedToValue(getSymbolOfNode(node)) : true;
- }
- return false;
- }
- function isTopLevelValueImportEqualsWithEntityName(node) {
- if (node.parent.kind !== 248 || !ts.isInternalModuleImportEqualsDeclaration(node)) {
- return false;
- }
- var isValue = isAliasResolvedToValue(getSymbolOfNode(node));
- return isValue && node.moduleReference && !ts.nodeIsMissing(node.moduleReference);
- }
- function isAliasResolvedToValue(symbol) {
- var target = resolveAlias(symbol);
- if (target === unknownSymbol && compilerOptions.isolatedModules) {
- return true;
- }
- return target !== unknownSymbol &&
- target &&
- target.flags & 107455 &&
- (compilerOptions.preserveConstEnums || !isConstEnumOrConstEnumOnlyModule(target));
- }
- function isConstEnumOrConstEnumOnlyModule(s) {
- return isConstEnumSymbol(s) || s.constEnumOnlyModule;
- }
- function isReferencedAliasDeclaration(node, checkChildren) {
- if (ts.isAliasSymbolDeclaration(node)) {
- var symbol = getSymbolOfNode(node);
- if (getSymbolLinks(symbol).referenced) {
- return true;
- }
- }
- if (checkChildren) {
- return ts.forEachChild(node, function (node) { return isReferencedAliasDeclaration(node, checkChildren); });
- }
- return false;
- }
- function isImplementationOfOverload(node) {
- if (ts.nodeIsPresent(node.body)) {
- var symbol = getSymbolOfNode(node);
- var signaturesOfSymbol = getSignaturesOfSymbol(symbol);
- return signaturesOfSymbol.length > 1 ||
- (signaturesOfSymbol.length === 1 && signaturesOfSymbol[0].declaration !== node);
- }
- return false;
- }
- function getNodeCheckFlags(node) {
- return getNodeLinks(node).flags;
- }
- function getEnumMemberValue(node) {
- computeEnumMemberValues(node.parent);
- return getNodeLinks(node).enumMemberValue;
- }
- function getConstantValue(node) {
- if (node.kind === 247) {
- return getEnumMemberValue(node);
- }
- var symbol = getNodeLinks(node).resolvedSymbol;
- if (symbol && (symbol.flags & 8)) {
- if (ts.isConstEnumDeclaration(symbol.valueDeclaration.parent)) {
- return getEnumMemberValue(symbol.valueDeclaration);
- }
- }
- return undefined;
- }
- function isFunctionType(type) {
- return type.flags & 80896 && getSignaturesOfType(type, 0).length > 0;
- }
- function getTypeReferenceSerializationKind(typeName) {
- var valueSymbol = resolveEntityName(typeName, 107455, true);
- var constructorType = valueSymbol ? getTypeOfSymbol(valueSymbol) : undefined;
- if (constructorType && isConstructorType(constructorType)) {
- return ts.TypeReferenceSerializationKind.TypeWithConstructSignatureAndValue;
- }
- var typeSymbol = resolveEntityName(typeName, 793056, true);
- if (!typeSymbol) {
- return ts.TypeReferenceSerializationKind.ObjectType;
- }
- var type = getDeclaredTypeOfSymbol(typeSymbol);
- if (type === unknownType) {
- return ts.TypeReferenceSerializationKind.Unknown;
- }
- else if (type.flags & 1) {
- return ts.TypeReferenceSerializationKind.ObjectType;
- }
- else if (allConstituentTypesHaveKind(type, 16)) {
- return ts.TypeReferenceSerializationKind.VoidType;
- }
- else if (allConstituentTypesHaveKind(type, 8)) {
- return ts.TypeReferenceSerializationKind.BooleanType;
- }
- else if (allConstituentTypesHaveKind(type, 132)) {
- return ts.TypeReferenceSerializationKind.NumberLikeType;
- }
- else if (allConstituentTypesHaveKind(type, 258)) {
- return ts.TypeReferenceSerializationKind.StringLikeType;
- }
- else if (allConstituentTypesHaveKind(type, 8192)) {
- return ts.TypeReferenceSerializationKind.ArrayLikeType;
- }
- else if (allConstituentTypesHaveKind(type, 16777216)) {
- return ts.TypeReferenceSerializationKind.ESSymbolType;
- }
- else if (isFunctionType(type)) {
- return ts.TypeReferenceSerializationKind.TypeWithCallSignature;
- }
- else if (isArrayType(type)) {
- return ts.TypeReferenceSerializationKind.ArrayLikeType;
- }
- else {
- return ts.TypeReferenceSerializationKind.ObjectType;
- }
- }
- function writeTypeOfDeclaration(declaration, enclosingDeclaration, flags, writer) {
- var symbol = getSymbolOfNode(declaration);
- var type = symbol && !(symbol.flags & (2048 | 131072))
- ? getTypeOfSymbol(symbol)
- : unknownType;
- getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags);
- }
- function writeReturnTypeOfSignatureDeclaration(signatureDeclaration, enclosingDeclaration, flags, writer) {
- var signature = getSignatureFromDeclaration(signatureDeclaration);
- getSymbolDisplayBuilder().buildTypeDisplay(getReturnTypeOfSignature(signature), writer, enclosingDeclaration, flags);
- }
- function writeTypeOfExpression(expr, enclosingDeclaration, flags, writer) {
- var type = getTypeOfExpression(expr);
- getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags);
- }
- function hasGlobalName(name) {
- return ts.hasProperty(globals, name);
- }
- function getReferencedValueSymbol(reference) {
- return getNodeLinks(reference).resolvedSymbol ||
- resolveName(reference, reference.text, 107455 | 1048576 | 8388608, undefined, undefined);
- }
- function getReferencedValueDeclaration(reference) {
- ts.Debug.assert(!ts.nodeIsSynthesized(reference));
- var symbol = getReferencedValueSymbol(reference);
- return symbol && getExportSymbolOfValueSymbolIfExported(symbol).valueDeclaration;
- }
- function instantiateSingleCallFunctionType(functionType, typeArguments) {
- if (functionType === unknownType) {
- return unknownType;
- }
- var signature = getSingleCallSignature(functionType);
- if (!signature) {
- return unknownType;
- }
- var instantiatedSignature = getSignatureInstantiation(signature, typeArguments);
- return getOrCreateTypeFromSignature(instantiatedSignature);
- }
- function createResolver() {
- return {
- getReferencedExportContainer: getReferencedExportContainer,
- getReferencedImportDeclaration: getReferencedImportDeclaration,
- getReferencedNestedRedeclaration: getReferencedNestedRedeclaration,
- isNestedRedeclaration: isNestedRedeclaration,
- isValueAliasDeclaration: isValueAliasDeclaration,
- hasGlobalName: hasGlobalName,
- isReferencedAliasDeclaration: isReferencedAliasDeclaration,
- getNodeCheckFlags: getNodeCheckFlags,
- isTopLevelValueImportEqualsWithEntityName: isTopLevelValueImportEqualsWithEntityName,
- isDeclarationVisible: isDeclarationVisible,
- isImplementationOfOverload: isImplementationOfOverload,
- writeTypeOfDeclaration: writeTypeOfDeclaration,
- writeReturnTypeOfSignatureDeclaration: writeReturnTypeOfSignatureDeclaration,
- writeTypeOfExpression: writeTypeOfExpression,
- isSymbolAccessible: isSymbolAccessible,
- isEntityNameVisible: isEntityNameVisible,
- getConstantValue: getConstantValue,
- collectLinkedAliases: collectLinkedAliases,
- getReferencedValueDeclaration: getReferencedValueDeclaration,
- getTypeReferenceSerializationKind: getTypeReferenceSerializationKind,
- isOptionalParameter: isOptionalParameter
- };
- }
- function initializeTypeChecker() {
- ts.forEach(host.getSourceFiles(), function (file) {
- ts.bindSourceFile(file);
- });
- ts.forEach(host.getSourceFiles(), function (file) {
- if (!ts.isExternalModule(file)) {
- mergeSymbolTable(globals, file.locals);
- }
- });
- getSymbolLinks(undefinedSymbol).type = undefinedType;
- getSymbolLinks(argumentsSymbol).type = getGlobalType("IArguments");
- getSymbolLinks(unknownSymbol).type = unknownType;
- globals[undefinedSymbol.name] = undefinedSymbol;
- globalArrayType = getGlobalType("Array", 1);
- globalObjectType = getGlobalType("Object");
- globalFunctionType = getGlobalType("Function");
- globalStringType = getGlobalType("String");
- globalNumberType = getGlobalType("Number");
- globalBooleanType = getGlobalType("Boolean");
- globalRegExpType = getGlobalType("RegExp");
- jsxElementType = getExportedTypeFromNamespace("JSX", JsxNames.Element);
- getGlobalClassDecoratorType = ts.memoize(function () { return getGlobalType("ClassDecorator"); });
- getGlobalPropertyDecoratorType = ts.memoize(function () { return getGlobalType("PropertyDecorator"); });
- getGlobalMethodDecoratorType = ts.memoize(function () { return getGlobalType("MethodDecorator"); });
- getGlobalParameterDecoratorType = ts.memoize(function () { return getGlobalType("ParameterDecorator"); });
- getGlobalTypedPropertyDescriptorType = ts.memoize(function () { return getGlobalType("TypedPropertyDescriptor", 1); });
- getGlobalPromiseType = ts.memoize(function () { return getGlobalType("Promise", 1); });
- tryGetGlobalPromiseType = ts.memoize(function () { return getGlobalSymbol("Promise", 793056, undefined) && getGlobalPromiseType(); });
- getGlobalPromiseLikeType = ts.memoize(function () { return getGlobalType("PromiseLike", 1); });
- getInstantiatedGlobalPromiseLikeType = ts.memoize(createInstantiatedPromiseLikeType);
- getGlobalPromiseConstructorSymbol = ts.memoize(function () { return getGlobalValueSymbol("Promise"); });
- getGlobalPromiseConstructorLikeType = ts.memoize(function () { return getGlobalType("PromiseConstructorLike"); });
- getGlobalThenableType = ts.memoize(createThenableType);
- if (languageVersion >= 2) {
- globalTemplateStringsArrayType = getGlobalType("TemplateStringsArray");
- globalESSymbolType = getGlobalType("Symbol");
- globalESSymbolConstructorSymbol = getGlobalValueSymbol("Symbol");
- globalIterableType = getGlobalType("Iterable", 1);
- globalIteratorType = getGlobalType("Iterator", 1);
- globalIterableIteratorType = getGlobalType("IterableIterator", 1);
- }
- else {
- globalTemplateStringsArrayType = unknownType;
- globalESSymbolType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
- globalESSymbolConstructorSymbol = undefined;
- globalIterableType = emptyGenericType;
- globalIteratorType = emptyGenericType;
- globalIterableIteratorType = emptyGenericType;
- }
- anyArrayType = createArrayType(anyType);
- }
- function createInstantiatedPromiseLikeType() {
- var promiseLikeType = getGlobalPromiseLikeType();
- if (promiseLikeType !== emptyGenericType) {
- return createTypeReference(promiseLikeType, [anyType]);
- }
- return emptyObjectType;
- }
- function createThenableType() {
- var thenPropertySymbol = createSymbol(67108864 | 4, "then");
- getSymbolLinks(thenPropertySymbol).type = globalFunctionType;
- var thenableType = createObjectType(65536);
- thenableType.properties = [thenPropertySymbol];
- thenableType.members = createSymbolTable(thenableType.properties);
- thenableType.callSignatures = [];
- thenableType.constructSignatures = [];
- return thenableType;
- }
- function checkGrammarDecorators(node) {
- if (!node.decorators) {
- return false;
- }
- if (!ts.nodeCanBeDecorated(node)) {
- return grammarErrorOnFirstToken(node, ts.Diagnostics.Decorators_are_not_valid_here);
- }
- else if (node.kind === 145 || node.kind === 146) {
- var accessors = ts.getAllAccessorDeclarations(node.parent.members, node);
- if (accessors.firstAccessor.decorators && node === accessors.secondAccessor) {
- return grammarErrorOnFirstToken(node, ts.Diagnostics.Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name);
- }
- }
- return false;
- }
- function checkGrammarModifiers(node) {
- switch (node.kind) {
- case 145:
- case 146:
- case 144:
- case 141:
- case 140:
- case 143:
- case 142:
- case 149:
- case 218:
- case 222:
- case 221:
- case 228:
- case 227:
- case 138:
- break;
- case 213:
- if (node.modifiers && (node.modifiers.length > 1 || node.modifiers[0].kind !== 118) &&
- node.parent.kind !== 219 && node.parent.kind !== 248) {
- return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here);
- }
- break;
- case 214:
- case 215:
- case 193:
- case 216:
- if (node.modifiers && node.parent.kind !== 219 && node.parent.kind !== 248) {
- return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here);
- }
- break;
- case 217:
- if (node.modifiers && (node.modifiers.length > 1 || node.modifiers[0].kind !== 74) &&
- node.parent.kind !== 219 && node.parent.kind !== 248) {
- return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here);
- }
- break;
- default:
- return false;
- }
- if (!node.modifiers) {
- return;
- }
- var lastStatic, lastPrivate, lastProtected, lastDeclare, lastAsync;
- var flags = 0;
- for (var _i = 0, _a = node.modifiers; _i < _a.length; _i++) {
- var modifier = _a[_i];
- switch (modifier.kind) {
- case 112:
- case 111:
- case 110:
- var text = void 0;
- if (modifier.kind === 112) {
- text = "public";
- }
- else if (modifier.kind === 111) {
- text = "protected";
- lastProtected = modifier;
- }
- else {
- text = "private";
- lastPrivate = modifier;
- }
- if (flags & 112) {
- return grammarErrorOnNode(modifier, ts.Diagnostics.Accessibility_modifier_already_seen);
- }
- else if (flags & 128) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "static");
- }
- else if (flags & 512) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "async");
- }
- else if (node.parent.kind === 219 || node.parent.kind === 248) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, text);
- }
- else if (flags & 256) {
- if (modifier.kind === 110) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_1_modifier, text, "abstract");
- }
- else {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "abstract");
- }
- }
- flags |= ts.modifierToFlag(modifier.kind);
- break;
- case 113:
- if (flags & 128) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "static");
- }
- else if (flags & 512) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "static", "async");
- }
- else if (node.parent.kind === 219 || node.parent.kind === 248) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "static");
- }
- else if (node.kind === 138) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static");
- }
- else if (flags & 256) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "static", "abstract");
- }
- flags |= 128;
- lastStatic = modifier;
- break;
- case 82:
- if (flags & 1) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "export");
- }
- else if (flags & 2) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "declare");
- }
- else if (flags & 256) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "abstract");
- }
- else if (flags & 512) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "async");
- }
- else if (node.parent.kind === 214) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "export");
- }
- else if (node.kind === 138) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export");
- }
- flags |= 1;
- break;
- case 122:
- if (flags & 2) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "declare");
- }
- else if (flags & 512) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context, "async");
- }
- else if (node.parent.kind === 214) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "declare");
- }
- else if (node.kind === 138) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare");
- }
- else if (ts.isInAmbientContext(node.parent) && node.parent.kind === 219) {
- return grammarErrorOnNode(modifier, ts.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context);
- }
- flags |= 2;
- lastDeclare = modifier;
- break;
- case 115:
- if (flags & 256) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "abstract");
- }
- if (node.kind !== 214) {
- if (node.kind !== 143) {
- return grammarErrorOnNode(modifier, ts.Diagnostics.abstract_modifier_can_only_appear_on_a_class_or_method_declaration);
- }
- if (!(node.parent.kind === 214 && node.parent.flags & 256)) {
- return grammarErrorOnNode(modifier, ts.Diagnostics.Abstract_methods_can_only_appear_within_an_abstract_class);
- }
- if (flags & 128) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "static", "abstract");
- }
- if (flags & 32) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "private", "abstract");
- }
- }
- flags |= 256;
- break;
- case 118:
- if (flags & 512) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "async");
- }
- else if (flags & 2 || ts.isInAmbientContext(node.parent)) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context, "async");
- }
- else if (node.kind === 138) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "async");
- }
- flags |= 512;
- lastAsync = modifier;
- break;
- }
- }
- if (node.kind === 144) {
- if (flags & 128) {
- return grammarErrorOnNode(lastStatic, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static");
- }
- if (flags & 256) {
- return grammarErrorOnNode(lastStatic, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "abstract");
- }
- else if (flags & 64) {
- return grammarErrorOnNode(lastProtected, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "protected");
- }
- else if (flags & 32) {
- return grammarErrorOnNode(lastPrivate, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "private");
- }
- else if (flags & 512) {
- return grammarErrorOnNode(lastAsync, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "async");
- }
- return;
- }
- else if ((node.kind === 222 || node.kind === 221) && flags & 2) {
- return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_0_modifier_cannot_be_used_with_an_import_declaration, "declare");
- }
- else if (node.kind === 138 && (flags & 112) && ts.isBindingPattern(node.name)) {
- return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_may_not_be_a_binding_pattern);
- }
- if (flags & 512) {
- return checkGrammarAsyncModifier(node, lastAsync);
- }
- }
- function checkGrammarAsyncModifier(node, asyncModifier) {
- if (languageVersion < 2) {
- return grammarErrorOnNode(asyncModifier, ts.Diagnostics.Async_functions_are_only_available_when_targeting_ECMAScript_6_and_higher);
- }
- switch (node.kind) {
- case 143:
- case 213:
- case 173:
- case 174:
- if (!node.asteriskToken) {
- return false;
- }
- break;
- }
- return grammarErrorOnNode(asyncModifier, ts.Diagnostics._0_modifier_cannot_be_used_here, "async");
- }
- function checkGrammarForDisallowedTrailingComma(list) {
- if (list && list.hasTrailingComma) {
- var start = list.end - ",".length;
- var end = list.end;
- var sourceFile = ts.getSourceFileOfNode(list[0]);
- return grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.Trailing_comma_not_allowed);
- }
- }
- function checkGrammarTypeParameterList(node, typeParameters, file) {
- if (checkGrammarForDisallowedTrailingComma(typeParameters)) {
- return true;
- }
- if (typeParameters && typeParameters.length === 0) {
- var start = typeParameters.pos - "<".length;
- var end = ts.skipTrivia(file.text, typeParameters.end) + ">".length;
- return grammarErrorAtPos(file, start, end - start, ts.Diagnostics.Type_parameter_list_cannot_be_empty);
- }
- }
- function checkGrammarParameterList(parameters) {
- if (checkGrammarForDisallowedTrailingComma(parameters)) {
- return true;
- }
- var seenOptionalParameter = false;
- var parameterCount = parameters.length;
- for (var i = 0; i < parameterCount; i++) {
- var parameter = parameters[i];
- if (parameter.dotDotDotToken) {
- if (i !== (parameterCount - 1)) {
- return grammarErrorOnNode(parameter.dotDotDotToken, ts.Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list);
- }
- if (ts.isBindingPattern(parameter.name)) {
- return grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_element_cannot_contain_a_binding_pattern);
- }
- if (parameter.questionToken) {
- return grammarErrorOnNode(parameter.questionToken, ts.Diagnostics.A_rest_parameter_cannot_be_optional);
- }
- if (parameter.initializer) {
- return grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_cannot_have_an_initializer);
- }
- }
- else if (parameter.questionToken) {
- seenOptionalParameter = true;
- if (parameter.initializer) {
- return grammarErrorOnNode(parameter.name, ts.Diagnostics.Parameter_cannot_have_question_mark_and_initializer);
- }
- }
- else if (seenOptionalParameter && !parameter.initializer) {
- return grammarErrorOnNode(parameter.name, ts.Diagnostics.A_required_parameter_cannot_follow_an_optional_parameter);
- }
- }
- }
- function checkGrammarFunctionLikeDeclaration(node) {
- var file = ts.getSourceFileOfNode(node);
- return checkGrammarDecorators(node) || checkGrammarModifiers(node) || checkGrammarTypeParameterList(node, node.typeParameters, file) ||
- checkGrammarParameterList(node.parameters) || checkGrammarArrowFunction(node, file);
- }
- function checkGrammarArrowFunction(node, file) {
- if (node.kind === 174) {
- var arrowFunction = node;
- var startLine = ts.getLineAndCharacterOfPosition(file, arrowFunction.equalsGreaterThanToken.pos).line;
- var endLine = ts.getLineAndCharacterOfPosition(file, arrowFunction.equalsGreaterThanToken.end).line;
- if (startLine !== endLine) {
- return grammarErrorOnNode(arrowFunction.equalsGreaterThanToken, ts.Diagnostics.Line_terminator_not_permitted_before_arrow);
- }
- }
- return false;
- }
- function checkGrammarIndexSignatureParameters(node) {
- var parameter = node.parameters[0];
- if (node.parameters.length !== 1) {
- if (parameter) {
- return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_must_have_exactly_one_parameter);
- }
- else {
- return grammarErrorOnNode(node, ts.Diagnostics.An_index_signature_must_have_exactly_one_parameter);
- }
- }
- if (parameter.dotDotDotToken) {
- return grammarErrorOnNode(parameter.dotDotDotToken, ts.Diagnostics.An_index_signature_cannot_have_a_rest_parameter);
- }
- if (parameter.flags & 2035) {
- return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_accessibility_modifier);
- }
- if (parameter.questionToken) {
- return grammarErrorOnNode(parameter.questionToken, ts.Diagnostics.An_index_signature_parameter_cannot_have_a_question_mark);
- }
- if (parameter.initializer) {
- return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_initializer);
- }
- if (!parameter.type) {
- return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_must_have_a_type_annotation);
- }
- if (parameter.type.kind !== 130 && parameter.type.kind !== 128) {
- return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_string_or_number);
- }
- if (!node.type) {
- return grammarErrorOnNode(node, ts.Diagnostics.An_index_signature_must_have_a_type_annotation);
- }
- }
- function checkGrammarForIndexSignatureModifier(node) {
- if (node.flags & 2035) {
- grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_not_permitted_on_index_signature_members);
- }
- }
- function checkGrammarIndexSignature(node) {
- return checkGrammarDecorators(node) || checkGrammarModifiers(node) || checkGrammarIndexSignatureParameters(node) || checkGrammarForIndexSignatureModifier(node);
- }
- function checkGrammarForAtLeastOneTypeArgument(node, typeArguments) {
- if (typeArguments && typeArguments.length === 0) {
- var sourceFile = ts.getSourceFileOfNode(node);
- var start = typeArguments.pos - "<".length;
- var end = ts.skipTrivia(sourceFile.text, typeArguments.end) + ">".length;
- return grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.Type_argument_list_cannot_be_empty);
- }
- }
- function checkGrammarTypeArguments(node, typeArguments) {
- return checkGrammarForDisallowedTrailingComma(typeArguments) ||
- checkGrammarForAtLeastOneTypeArgument(node, typeArguments);
- }
- function checkGrammarForOmittedArgument(node, args) {
- if (args) {
- var sourceFile = ts.getSourceFileOfNode(node);
- for (var _i = 0; _i < args.length; _i++) {
- var arg = args[_i];
- if (arg.kind === 187) {
- return grammarErrorAtPos(sourceFile, arg.pos, 0, ts.Diagnostics.Argument_expression_expected);
- }
- }
- }
- }
- function checkGrammarArguments(node, args) {
- return checkGrammarForDisallowedTrailingComma(args) ||
- checkGrammarForOmittedArgument(node, args);
- }
- function checkGrammarHeritageClause(node) {
- var types = node.types;
- if (checkGrammarForDisallowedTrailingComma(types)) {
- return true;
- }
- if (types && types.length === 0) {
- var listType = ts.tokenToString(node.token);
- var sourceFile = ts.getSourceFileOfNode(node);
- return grammarErrorAtPos(sourceFile, types.pos, 0, ts.Diagnostics._0_list_cannot_be_empty, listType);
- }
- }
- function checkGrammarClassDeclarationHeritageClauses(node) {
- var seenExtendsClause = false;
- var seenImplementsClause = false;
- if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && node.heritageClauses) {
- for (var _i = 0, _a = node.heritageClauses; _i < _a.length; _i++) {
- var heritageClause = _a[_i];
- if (heritageClause.token === 83) {
- if (seenExtendsClause) {
- return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen);
- }
- if (seenImplementsClause) {
- return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_must_precede_implements_clause);
- }
- if (heritageClause.types.length > 1) {
- return grammarErrorOnFirstToken(heritageClause.types[1], ts.Diagnostics.Classes_can_only_extend_a_single_class);
- }
- seenExtendsClause = true;
- }
- else {
- ts.Debug.assert(heritageClause.token === 106);
- if (seenImplementsClause) {
- return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.implements_clause_already_seen);
- }
- seenImplementsClause = true;
- }
- checkGrammarHeritageClause(heritageClause);
- }
- }
- }
- function checkGrammarInterfaceDeclaration(node) {
- var seenExtendsClause = false;
- if (node.heritageClauses) {
- for (var _i = 0, _a = node.heritageClauses; _i < _a.length; _i++) {
- var heritageClause = _a[_i];
- if (heritageClause.token === 83) {
- if (seenExtendsClause) {
- return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen);
- }
- seenExtendsClause = true;
- }
- else {
- ts.Debug.assert(heritageClause.token === 106);
- return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.Interface_declaration_cannot_have_implements_clause);
- }
- checkGrammarHeritageClause(heritageClause);
- }
- }
- return false;
- }
- function checkGrammarComputedPropertyName(node) {
- if (node.kind !== 136) {
- return false;
- }
- var computedPropertyName = node;
- if (computedPropertyName.expression.kind === 181 && computedPropertyName.expression.operatorToken.kind === 24) {
- return grammarErrorOnNode(computedPropertyName.expression, ts.Diagnostics.A_comma_expression_is_not_allowed_in_a_computed_property_name);
- }
- }
- function checkGrammarForGenerator(node) {
- if (node.asteriskToken) {
- ts.Debug.assert(node.kind === 213 ||
- node.kind === 173 ||
- node.kind === 143);
- if (ts.isInAmbientContext(node)) {
- return grammarErrorOnNode(node.asteriskToken, ts.Diagnostics.Generators_are_not_allowed_in_an_ambient_context);
- }
- if (!node.body) {
- return grammarErrorOnNode(node.asteriskToken, ts.Diagnostics.An_overload_signature_cannot_be_declared_as_a_generator);
- }
- if (languageVersion < 2) {
- return grammarErrorOnNode(node.asteriskToken, ts.Diagnostics.Generators_are_only_available_when_targeting_ECMAScript_6_or_higher);
- }
- }
- }
- function checkGrammarForInvalidQuestionMark(node, questionToken, message) {
- if (questionToken) {
- return grammarErrorOnNode(questionToken, message);
- }
- }
- function checkGrammarObjectLiteralExpression(node, inDestructuring) {
- var seen = {};
- var Property = 1;
- var GetAccessor = 2;
- var SetAccesor = 4;
- var GetOrSetAccessor = GetAccessor | SetAccesor;
- for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
- var prop = _a[_i];
- var name_16 = prop.name;
- if (prop.kind === 187 ||
- name_16.kind === 136) {
- checkGrammarComputedPropertyName(name_16);
- continue;
- }
- if (prop.kind === 246 && !inDestructuring && prop.objectAssignmentInitializer) {
- return grammarErrorOnNode(prop.equalsToken, ts.Diagnostics.can_only_be_used_in_an_object_literal_property_inside_a_destructuring_assignment);
- }
- var currentKind = void 0;
- if (prop.kind === 245 || prop.kind === 246) {
- checkGrammarForInvalidQuestionMark(prop, prop.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional);
- if (name_16.kind === 8) {
- checkGrammarNumericLiteral(name_16);
- }
- currentKind = Property;
- }
- else if (prop.kind === 143) {
- currentKind = Property;
- }
- else if (prop.kind === 145) {
- currentKind = GetAccessor;
- }
- else if (prop.kind === 146) {
- currentKind = SetAccesor;
- }
- else {
- ts.Debug.fail("Unexpected syntax kind:" + prop.kind);
- }
- if (!ts.hasProperty(seen, name_16.text)) {
- seen[name_16.text] = currentKind;
- }
- else {
- var existingKind = seen[name_16.text];
- if (currentKind === Property && existingKind === Property) {
- continue;
- }
- else if ((currentKind & GetOrSetAccessor) && (existingKind & GetOrSetAccessor)) {
- if (existingKind !== GetOrSetAccessor && currentKind !== existingKind) {
- seen[name_16.text] = currentKind | existingKind;
- }
- else {
- return grammarErrorOnNode(name_16, ts.Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name);
- }
- }
- else {
- return grammarErrorOnNode(name_16, ts.Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name);
- }
- }
- }
- }
- function checkGrammarJsxElement(node) {
- var seen = {};
- for (var _i = 0, _a = node.attributes; _i < _a.length; _i++) {
- var attr = _a[_i];
- if (attr.kind === 239) {
- continue;
- }
- var jsxAttr = attr;
- var name_17 = jsxAttr.name;
- if (!ts.hasProperty(seen, name_17.text)) {
- seen[name_17.text] = true;
- }
- else {
- return grammarErrorOnNode(name_17, ts.Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name);
- }
- var initializer = jsxAttr.initializer;
- if (initializer && initializer.kind === 240 && !initializer.expression) {
- return grammarErrorOnNode(jsxAttr.initializer, ts.Diagnostics.JSX_attributes_must_only_be_assigned_a_non_empty_expression);
- }
- }
- }
- function checkGrammarForInOrForOfStatement(forInOrOfStatement) {
- if (checkGrammarStatementInAmbientContext(forInOrOfStatement)) {
- return true;
- }
- if (forInOrOfStatement.initializer.kind === 212) {
- var variableList = forInOrOfStatement.initializer;
- if (!checkGrammarVariableDeclarationList(variableList)) {
- if (variableList.declarations.length > 1) {
- var diagnostic = forInOrOfStatement.kind === 200
- ? ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement
- : ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement;
- return grammarErrorOnFirstToken(variableList.declarations[1], diagnostic);
- }
- var firstDeclaration = variableList.declarations[0];
- if (firstDeclaration.initializer) {
- var diagnostic = forInOrOfStatement.kind === 200
- ? ts.Diagnostics.The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer
- : ts.Diagnostics.The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer;
- return grammarErrorOnNode(firstDeclaration.name, diagnostic);
- }
- if (firstDeclaration.type) {
- var diagnostic = forInOrOfStatement.kind === 200
- ? ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation
- : ts.Diagnostics.The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation;
- return grammarErrorOnNode(firstDeclaration, diagnostic);
- }
- }
- }
- return false;
- }
- function checkGrammarAccessor(accessor) {
- var kind = accessor.kind;
- if (languageVersion < 1) {
- return grammarErrorOnNode(accessor.name, ts.Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher);
- }
- else if (ts.isInAmbientContext(accessor)) {
- return grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_be_declared_in_an_ambient_context);
- }
- else if (accessor.body === undefined) {
- return grammarErrorAtPos(ts.getSourceFileOfNode(accessor), accessor.end - 1, ";".length, ts.Diagnostics._0_expected, "{");
- }
- else if (accessor.typeParameters) {
- return grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_have_type_parameters);
- }
- else if (kind === 145 && accessor.parameters.length) {
- return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_get_accessor_cannot_have_parameters);
- }
- else if (kind === 146) {
- if (accessor.type) {
- return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation);
- }
- else if (accessor.parameters.length !== 1) {
- return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter);
- }
- else {
- var parameter = accessor.parameters[0];
- if (parameter.dotDotDotToken) {
- return grammarErrorOnNode(parameter.dotDotDotToken, ts.Diagnostics.A_set_accessor_cannot_have_rest_parameter);
- }
- else if (parameter.flags & 2035) {
- return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation);
- }
- else if (parameter.questionToken) {
- return grammarErrorOnNode(parameter.questionToken, ts.Diagnostics.A_set_accessor_cannot_have_an_optional_parameter);
- }
- else if (parameter.initializer) {
- return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_parameter_cannot_have_an_initializer);
- }
- }
- }
- }
- function checkGrammarForNonSymbolComputedProperty(node, message) {
- if (node.kind === 136 && !ts.isWellKnownSymbolSyntactically(node.expression)) {
- return grammarErrorOnNode(node, message);
- }
- }
- function checkGrammarMethod(node) {
- if (checkGrammarDisallowedModifiersOnObjectLiteralExpressionMethod(node) ||
- checkGrammarFunctionLikeDeclaration(node) ||
- checkGrammarForGenerator(node)) {
- return true;
- }
- if (node.parent.kind === 165) {
- if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.A_class_member_cannot_be_declared_optional)) {
- return true;
- }
- else if (node.body === undefined) {
- return grammarErrorAtPos(getSourceFile(node), node.end - 1, ";".length, ts.Diagnostics._0_expected, "{");
- }
- }
- if (ts.isClassLike(node.parent)) {
- if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.A_class_member_cannot_be_declared_optional)) {
- return true;
- }
- if (ts.isInAmbientContext(node)) {
- return checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_an_ambient_context_must_directly_refer_to_a_built_in_symbol);
- }
- else if (!node.body) {
- return checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_method_overload_must_directly_refer_to_a_built_in_symbol);
- }
- }
- else if (node.parent.kind === 215) {
- return checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_an_interface_must_directly_refer_to_a_built_in_symbol);
- }
- else if (node.parent.kind === 155) {
- return checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol);
- }
- }
- function isIterationStatement(node, lookInLabeledStatements) {
- switch (node.kind) {
- case 199:
- case 200:
- case 201:
- case 197:
- case 198:
- return true;
- case 207:
- return lookInLabeledStatements && isIterationStatement(node.statement, lookInLabeledStatements);
- }
- return false;
- }
- function checkGrammarBreakOrContinueStatement(node) {
- var current = node;
- while (current) {
- if (ts.isFunctionLike(current)) {
- return grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary);
- }
- switch (current.kind) {
- case 207:
- if (node.label && current.label.text === node.label.text) {
- var isMisplacedContinueLabel = node.kind === 202
- && !isIterationStatement(current.statement, true);
- if (isMisplacedContinueLabel) {
- return grammarErrorOnNode(node, ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement);
- }
- return false;
- }
- break;
- case 206:
- if (node.kind === 203 && !node.label) {
- return false;
- }
- break;
- default:
- if (isIterationStatement(current, false) && !node.label) {
- return false;
- }
- break;
- }
- current = current.parent;
- }
- if (node.label) {
- var message = node.kind === 203
- ? ts.Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement
- : ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement;
- return grammarErrorOnNode(node, message);
- }
- else {
- var message = node.kind === 203
- ? ts.Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement
- : ts.Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement;
- return grammarErrorOnNode(node, message);
- }
- }
- function checkGrammarBindingElement(node) {
- if (node.dotDotDotToken) {
- var elements = node.parent.elements;
- if (node !== ts.lastOrUndefined(elements)) {
- return grammarErrorOnNode(node, ts.Diagnostics.A_rest_element_must_be_last_in_an_array_destructuring_pattern);
- }
- if (node.name.kind === 162 || node.name.kind === 161) {
- return grammarErrorOnNode(node.name, ts.Diagnostics.A_rest_element_cannot_contain_a_binding_pattern);
- }
- if (node.initializer) {
- return grammarErrorAtPos(ts.getSourceFileOfNode(node), node.initializer.pos - 1, 1, ts.Diagnostics.A_rest_element_cannot_have_an_initializer);
- }
- }
- }
- function checkGrammarVariableDeclaration(node) {
- if (node.parent.parent.kind !== 200 && node.parent.parent.kind !== 201) {
- if (ts.isInAmbientContext(node)) {
- if (node.initializer) {
- var equalsTokenLength = "=".length;
- return grammarErrorAtPos(ts.getSourceFileOfNode(node), node.initializer.pos - equalsTokenLength, equalsTokenLength, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts);
- }
- }
- else if (!node.initializer) {
- if (ts.isBindingPattern(node.name) && !ts.isBindingPattern(node.parent)) {
- return grammarErrorOnNode(node, ts.Diagnostics.A_destructuring_declaration_must_have_an_initializer);
- }
- if (ts.isConst(node)) {
- return grammarErrorOnNode(node, ts.Diagnostics.const_declarations_must_be_initialized);
- }
- }
- }
- var checkLetConstNames = languageVersion >= 2 && (ts.isLet(node) || ts.isConst(node));
- return checkLetConstNames && checkGrammarNameInLetOrConstDeclarations(node.name);
- }
- function checkGrammarNameInLetOrConstDeclarations(name) {
- if (name.kind === 69) {
- if (name.text === "let") {
- return grammarErrorOnNode(name, ts.Diagnostics.let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations);
- }
- }
- else {
- var elements = name.elements;
- for (var _i = 0; _i < elements.length; _i++) {
- var element = elements[_i];
- if (element.kind !== 187) {
- checkGrammarNameInLetOrConstDeclarations(element.name);
- }
- }
- }
- }
- function checkGrammarVariableDeclarationList(declarationList) {
- var declarations = declarationList.declarations;
- if (checkGrammarForDisallowedTrailingComma(declarationList.declarations)) {
- return true;
- }
- if (!declarationList.declarations.length) {
- return grammarErrorAtPos(ts.getSourceFileOfNode(declarationList), declarations.pos, declarations.end - declarations.pos, ts.Diagnostics.Variable_declaration_list_cannot_be_empty);
- }
- }
- function allowLetAndConstDeclarations(parent) {
- switch (parent.kind) {
- case 196:
- case 197:
- case 198:
- case 205:
- case 199:
- case 200:
- case 201:
- return false;
- case 207:
- return allowLetAndConstDeclarations(parent.parent);
- }
- return true;
- }
- function checkGrammarForDisallowedLetOrConstStatement(node) {
- if (!allowLetAndConstDeclarations(node.parent)) {
- if (ts.isLet(node.declarationList)) {
- return grammarErrorOnNode(node, ts.Diagnostics.let_declarations_can_only_be_declared_inside_a_block);
- }
- else if (ts.isConst(node.declarationList)) {
- return grammarErrorOnNode(node, ts.Diagnostics.const_declarations_can_only_be_declared_inside_a_block);
- }
- }
- }
- function isIntegerLiteral(expression) {
- if (expression.kind === 179) {
- var unaryExpression = expression;
- if (unaryExpression.operator === 35 || unaryExpression.operator === 36) {
- expression = unaryExpression.operand;
- }
- }
- if (expression.kind === 8) {
- return /^[0-9]+([eE]\+?[0-9]+)?$/.test(expression.text);
- }
- return false;
- }
- function hasParseDiagnostics(sourceFile) {
- return sourceFile.parseDiagnostics.length > 0;
- }
- function grammarErrorOnFirstToken(node, message, arg0, arg1, arg2) {
- var sourceFile = ts.getSourceFileOfNode(node);
- if (!hasParseDiagnostics(sourceFile)) {
- var span = ts.getSpanOfTokenAtPosition(sourceFile, node.pos);
- diagnostics.add(ts.createFileDiagnostic(sourceFile, span.start, span.length, message, arg0, arg1, arg2));
- return true;
- }
- }
- function grammarErrorAtPos(sourceFile, start, length, message, arg0, arg1, arg2) {
- if (!hasParseDiagnostics(sourceFile)) {
- diagnostics.add(ts.createFileDiagnostic(sourceFile, start, length, message, arg0, arg1, arg2));
- return true;
- }
- }
- function grammarErrorOnNode(node, message, arg0, arg1, arg2) {
- var sourceFile = ts.getSourceFileOfNode(node);
- if (!hasParseDiagnostics(sourceFile)) {
- diagnostics.add(ts.createDiagnosticForNode(node, message, arg0, arg1, arg2));
- return true;
- }
- }
- function isEvalOrArgumentsIdentifier(node) {
- return node.kind === 69 &&
- (node.text === "eval" || node.text === "arguments");
- }
- function checkGrammarConstructorTypeParameters(node) {
- if (node.typeParameters) {
- return grammarErrorAtPos(ts.getSourceFileOfNode(node), node.typeParameters.pos, node.typeParameters.end - node.typeParameters.pos, ts.Diagnostics.Type_parameters_cannot_appear_on_a_constructor_declaration);
- }
- }
- function checkGrammarConstructorTypeAnnotation(node) {
- if (node.type) {
- return grammarErrorOnNode(node.type, ts.Diagnostics.Type_annotation_cannot_appear_on_a_constructor_declaration);
- }
- }
- function checkGrammarProperty(node) {
- if (ts.isClassLike(node.parent)) {
- if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.A_class_member_cannot_be_declared_optional) ||
- checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_class_property_declaration_must_directly_refer_to_a_built_in_symbol)) {
- return true;
- }
- }
- else if (node.parent.kind === 215) {
- if (checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_an_interface_must_directly_refer_to_a_built_in_symbol)) {
- return true;
- }
- }
- else if (node.parent.kind === 155) {
- if (checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol)) {
- return true;
- }
- }
- if (ts.isInAmbientContext(node) && node.initializer) {
- return grammarErrorOnFirstToken(node.initializer, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts);
- }
- }
- function checkGrammarTopLevelElementForRequiredDeclareModifier(node) {
- if (node.kind === 215 ||
- node.kind === 222 ||
- node.kind === 221 ||
- node.kind === 228 ||
- node.kind === 227 ||
- (node.flags & 2) ||
- (node.flags & (1 | 1024))) {
- return false;
- }
- return grammarErrorOnFirstToken(node, ts.Diagnostics.A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file);
- }
- function checkGrammarTopLevelElementsForRequiredDeclareModifier(file) {
- for (var _i = 0, _a = file.statements; _i < _a.length; _i++) {
- var decl = _a[_i];
- if (ts.isDeclaration(decl) || decl.kind === 193) {
- if (checkGrammarTopLevelElementForRequiredDeclareModifier(decl)) {
- return true;
- }
- }
- }
- }
- function checkGrammarSourceFile(node) {
- return ts.isInAmbientContext(node) && checkGrammarTopLevelElementsForRequiredDeclareModifier(node);
- }
- function checkGrammarStatementInAmbientContext(node) {
- if (ts.isInAmbientContext(node)) {
- if (isAccessor(node.parent.kind)) {
- return getNodeLinks(node).hasReportedStatementInAmbientContext = true;
- }
- var links = getNodeLinks(node);
- if (!links.hasReportedStatementInAmbientContext && ts.isFunctionLike(node.parent)) {
- return getNodeLinks(node).hasReportedStatementInAmbientContext = grammarErrorOnFirstToken(node, ts.Diagnostics.An_implementation_cannot_be_declared_in_ambient_contexts);
- }
- if (node.parent.kind === 192 || node.parent.kind === 219 || node.parent.kind === 248) {
- var links_1 = getNodeLinks(node.parent);
- if (!links_1.hasReportedStatementInAmbientContext) {
- return links_1.hasReportedStatementInAmbientContext = grammarErrorOnFirstToken(node, ts.Diagnostics.Statements_are_not_allowed_in_ambient_contexts);
- }
- }
- else {
- }
- }
- }
- function checkGrammarNumericLiteral(node) {
- if (node.flags & 65536 && languageVersion >= 1) {
- return grammarErrorOnNode(node, ts.Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher);
- }
- }
- function grammarErrorAfterFirstToken(node, message, arg0, arg1, arg2) {
- var sourceFile = ts.getSourceFileOfNode(node);
- if (!hasParseDiagnostics(sourceFile)) {
- var span = ts.getSpanOfTokenAtPosition(sourceFile, node.pos);
- diagnostics.add(ts.createFileDiagnostic(sourceFile, ts.textSpanEnd(span), 0, message, arg0, arg1, arg2));
- return true;
- }
- }
- }
- ts.createTypeChecker = createTypeChecker;
- })(ts || (ts = {}));
- var ts;
- (function (ts) {
- function getDeclarationDiagnostics(host, resolver, targetSourceFile) {
- var diagnostics = [];
- var jsFilePath = ts.getOwnEmitOutputFilePath(targetSourceFile, host, ".js");
- emitDeclarations(host, resolver, diagnostics, jsFilePath, targetSourceFile);
- return diagnostics;
- }
- ts.getDeclarationDiagnostics = getDeclarationDiagnostics;
- function emitDeclarations(host, resolver, diagnostics, jsFilePath, root) {
- var newLine = host.getNewLine();
- var compilerOptions = host.getCompilerOptions();
- var write;
- var writeLine;
- var increaseIndent;
- var decreaseIndent;
- var writeTextOfNode;
- var writer = createAndSetNewTextWriterWithSymbolWriter();
- var enclosingDeclaration;
- var currentSourceFile;
- var reportedDeclarationError = false;
- var errorNameNode;
- var emitJsDocComments = compilerOptions.removeComments ? function (declaration) { } : writeJsDocComments;
- var emit = compilerOptions.stripInternal ? stripInternal : emitNode;
- var moduleElementDeclarationEmitInfo = [];
- var asynchronousSubModuleDeclarationEmitInfo;
- var referencePathsOutput = "";
- if (root) {
- if (!compilerOptions.noResolve) {
- var addedGlobalFileReference = false;
- ts.forEach(root.referencedFiles, function (fileReference) {
- var referencedFile = ts.tryResolveScriptReference(host, root, fileReference);
- if (referencedFile && ((referencedFile.flags & 8192) ||
- ts.shouldEmitToOwnFile(referencedFile, compilerOptions) ||
- !addedGlobalFileReference)) {
- writeReferencePath(referencedFile);
- if (!ts.isExternalModuleOrDeclarationFile(referencedFile)) {
- addedGlobalFileReference = true;
- }
- }
- });
- }
- emitSourceFile(root);
- if (moduleElementDeclarationEmitInfo.length) {
- var oldWriter = writer;
- ts.forEach(moduleElementDeclarationEmitInfo, function (aliasEmitInfo) {
- if (aliasEmitInfo.isVisible) {
- ts.Debug.assert(aliasEmitInfo.node.kind === 222);
- createAndSetNewTextWriterWithSymbolWriter();
- ts.Debug.assert(aliasEmitInfo.indent === 0);
- writeImportDeclaration(aliasEmitInfo.node);
- aliasEmitInfo.asynchronousOutput = writer.getText();
- }
- });
- setWriter(oldWriter);
- }
- }
- else {
- var emittedReferencedFiles = [];
- ts.forEach(host.getSourceFiles(), function (sourceFile) {
- if (!ts.isExternalModuleOrDeclarationFile(sourceFile)) {
- if (!compilerOptions.noResolve) {
- ts.forEach(sourceFile.referencedFiles, function (fileReference) {
- var referencedFile = ts.tryResolveScriptReference(host, sourceFile, fileReference);
- if (referencedFile && (ts.isExternalModuleOrDeclarationFile(referencedFile) &&
- !ts.contains(emittedReferencedFiles, referencedFile))) {
- writeReferencePath(referencedFile);
- emittedReferencedFiles.push(referencedFile);
- }
- });
- }
- emitSourceFile(sourceFile);
- }
- });
- }
- return {
- reportedDeclarationError: reportedDeclarationError,
- moduleElementDeclarationEmitInfo: moduleElementDeclarationEmitInfo,
- synchronousDeclarationOutput: writer.getText(),
- referencePathsOutput: referencePathsOutput
- };
- function hasInternalAnnotation(range) {
- var text = currentSourceFile.text;
- var comment = text.substring(range.pos, range.end);
- return comment.indexOf("@internal") >= 0;
- }
- function stripInternal(node) {
- if (node) {
- var leadingCommentRanges = ts.getLeadingCommentRanges(currentSourceFile.text, node.pos);
- if (ts.forEach(leadingCommentRanges, hasInternalAnnotation)) {
- return;
- }
- emitNode(node);
- }
- }
- function createAndSetNewTextWriterWithSymbolWriter() {
- var writer = ts.createTextWriter(newLine);
- writer.trackSymbol = trackSymbol;
- writer.reportInaccessibleThisError = reportInaccessibleThisError;
- writer.writeKeyword = writer.write;
- writer.writeOperator = writer.write;
- writer.writePunctuation = writer.write;
- writer.writeSpace = writer.write;
- writer.writeStringLiteral = writer.writeLiteral;
- writer.writeParameter = writer.write;
- writer.writeSymbol = writer.write;
- setWriter(writer);
- return writer;
- }
- function setWriter(newWriter) {
- writer = newWriter;
- write = newWriter.write;
- writeTextOfNode = newWriter.writeTextOfNode;
- writeLine = newWriter.writeLine;
- increaseIndent = newWriter.increaseIndent;
- decreaseIndent = newWriter.decreaseIndent;
- }
- function writeAsynchronousModuleElements(nodes) {
- var oldWriter = writer;
- ts.forEach(nodes, function (declaration) {
- var nodeToCheck;
- if (declaration.kind === 211) {
- nodeToCheck = declaration.parent.parent;
- }
- else if (declaration.kind === 225 || declaration.kind === 226 || declaration.kind === 223) {
- ts.Debug.fail("We should be getting ImportDeclaration instead to write");
- }
- else {
- nodeToCheck = declaration;
- }
- var moduleElementEmitInfo = ts.forEach(moduleElementDeclarationEmitInfo, function (declEmitInfo) { return declEmitInfo.node === nodeToCheck ? declEmitInfo : undefined; });
- if (!moduleElementEmitInfo && asynchronousSubModuleDeclarationEmitInfo) {
- moduleElementEmitInfo = ts.forEach(asynchronousSubModuleDeclarationEmitInfo, function (declEmitInfo) { return declEmitInfo.node === nodeToCheck ? declEmitInfo : undefined; });
- }
- if (moduleElementEmitInfo) {
- if (moduleElementEmitInfo.node.kind === 222) {
- moduleElementEmitInfo.isVisible = true;
- }
- else {
- createAndSetNewTextWriterWithSymbolWriter();
- for (var declarationIndent = moduleElementEmitInfo.indent; declarationIndent; declarationIndent--) {
- increaseIndent();
- }
- if (nodeToCheck.kind === 218) {
- ts.Debug.assert(asynchronousSubModuleDeclarationEmitInfo === undefined);
- asynchronousSubModuleDeclarationEmitInfo = [];
- }
- writeModuleElement(nodeToCheck);
- if (nodeToCheck.kind === 218) {
- moduleElementEmitInfo.subModuleElementDeclarationEmitInfo = asynchronousSubModuleDeclarationEmitInfo;
- asynchronousSubModuleDeclarationEmitInfo = undefined;
- }
- moduleElementEmitInfo.asynchronousOutput = writer.getText();
- }
- }
- });
- setWriter(oldWriter);
- }
- function handleSymbolAccessibilityError(symbolAccesibilityResult) {
- if (symbolAccesibilityResult.accessibility === 0) {
- if (symbolAccesibilityResult && symbolAccesibilityResult.aliasesToMakeVisible) {
- writeAsynchronousModuleElements(symbolAccesibilityResult.aliasesToMakeVisible);
- }
- }
- else {
- reportedDeclarationError = true;
- var errorInfo = writer.getSymbolAccessibilityDiagnostic(symbolAccesibilityResult);
- if (errorInfo) {
- if (errorInfo.typeName) {
- diagnostics.push(ts.createDiagnosticForNode(symbolAccesibilityResult.errorNode || errorInfo.errorNode, errorInfo.diagnosticMessage, ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, errorInfo.typeName), symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName));
- }
- else {
- diagnostics.push(ts.createDiagnosticForNode(symbolAccesibilityResult.errorNode || errorInfo.errorNode, errorInfo.diagnosticMessage, symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName));
- }
- }
- }
- }
- function trackSymbol(symbol, enclosingDeclaration, meaning) {
- handleSymbolAccessibilityError(resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning));
- }
- function reportInaccessibleThisError() {
- if (errorNameNode) {
- diagnostics.push(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_this_type_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode)));
- }
- }
- function writeTypeOfDeclaration(declaration, type, getSymbolAccessibilityDiagnostic) {
- writer.getSymbolAccessibilityDiagnostic = getSymbolAccessibilityDiagnostic;
- write(": ");
- if (type) {
- emitType(type);
- }
- else {
- errorNameNode = declaration.name;
- resolver.writeTypeOfDeclaration(declaration, enclosingDeclaration, 2, writer);
- errorNameNode = undefined;
- }
- }
- function writeReturnTypeAtSignature(signature, getSymbolAccessibilityDiagnostic) {
- writer.getSymbolAccessibilityDiagnostic = getSymbolAccessibilityDiagnostic;
- write(": ");
- if (signature.type) {
- emitType(signature.type);
- }
- else {
- errorNameNode = signature.name;
- resolver.writeReturnTypeOfSignatureDeclaration(signature, enclosingDeclaration, 2, writer);
- errorNameNode = undefined;
- }
- }
- function emitLines(nodes) {
- for (var _i = 0; _i < nodes.length; _i++) {
- var node = nodes[_i];
- emit(node);
- }
- }
- function emitSeparatedList(nodes, separator, eachNodeEmitFn, canEmitFn) {
- var currentWriterPos = writer.getTextPos();
- for (var _i = 0; _i < nodes.length; _i++) {
- var node = nodes[_i];
- if (!canEmitFn || canEmitFn(node)) {
- if (currentWriterPos !== writer.getTextPos()) {
- write(separator);
- }
- currentWriterPos = writer.getTextPos();
- eachNodeEmitFn(node);
- }
- }
- }
- function emitCommaList(nodes, eachNodeEmitFn, canEmitFn) {
- emitSeparatedList(nodes, ", ", eachNodeEmitFn, canEmitFn);
- }
- function writeJsDocComments(declaration) {
- if (declaration) {
- var jsDocComments = ts.getJsDocComments(declaration, currentSourceFile);
- ts.emitNewLineBeforeLeadingComments(currentSourceFile, writer, declaration, jsDocComments);
- ts.emitComments(currentSourceFile, writer, jsDocComments, true, newLine, ts.writeCommentRange);
- }
- }
- function emitTypeWithNewGetSymbolAccessibilityDiagnostic(type, getSymbolAccessibilityDiagnostic) {
- writer.getSymbolAccessibilityDiagnostic = getSymbolAccessibilityDiagnostic;
- emitType(type);
- }
- function emitType(type) {
- switch (type.kind) {
- case 117:
- case 130:
- case 128:
- case 120:
- case 131:
- case 103:
- case 97:
- case 9:
- return writeTextOfNode(currentSourceFile, type);
- case 188:
- return emitExpressionWithTypeArguments(type);
- case 151:
- return emitTypeReference(type);
- case 154:
- return emitTypeQuery(type);
- case 156:
- return emitArrayType(type);
- case 157:
- return emitTupleType(type);
- case 158:
- return emitUnionType(type);
- case 159:
- return emitIntersectionType(type);
- case 160:
- return emitParenType(type);
- case 152:
- case 153:
- return emitSignatureDeclarationWithJsDocComments(type);
- case 155:
- return emitTypeLiteral(type);
- case 69:
- return emitEntityName(type);
- case 135:
- return emitEntityName(type);
- case 150:
- return emitTypePredicate(type);
- }
- function writeEntityName(entityName) {
- if (entityName.kind === 69) {
- writeTextOfNode(currentSourceFile, entityName);
- }
- else {
- var left = entityName.kind === 135 ? entityName.left : entityName.expression;
- var right = entityName.kind === 135 ? entityName.right : entityName.name;
- writeEntityName(left);
- write(".");
- writeTextOfNode(currentSourceFile, right);
- }
- }
- function emitEntityName(entityName) {
- var visibilityResult = resolver.isEntityNameVisible(entityName, entityName.parent.kind === 221 ? entityName.parent : enclosingDeclaration);
- handleSymbolAccessibilityError(visibilityResult);
- writeEntityName(entityName);
- }
- function emitExpressionWithTypeArguments(node) {
- if (ts.isSupportedExpressionWithTypeArguments(node)) {
- ts.Debug.assert(node.expression.kind === 69 || node.expression.kind === 166);
- emitEntityName(node.expression);
- if (node.typeArguments) {
- write("<");
- emitCommaList(node.typeArguments, emitType);
- write(">");
- }
- }
- }
- function emitTypeReference(type) {
- emitEntityName(type.typeName);
- if (type.typeArguments) {
- write("<");
- emitCommaList(type.typeArguments, emitType);
- write(">");
- }
- }
- function emitTypePredicate(type) {
- writeTextOfNode(currentSourceFile, type.parameterName);
- write(" is ");
- emitType(type.type);
- }
- function emitTypeQuery(type) {
- write("typeof ");
- emitEntityName(type.exprName);
- }
- function emitArrayType(type) {
- emitType(type.elementType);
- write("[]");
- }
- function emitTupleType(type) {
- write("[");
- emitCommaList(type.elementTypes, emitType);
- write("]");
- }
- function emitUnionType(type) {
- emitSeparatedList(type.types, " | ", emitType);
- }
- function emitIntersectionType(type) {
- emitSeparatedList(type.types, " & ", emitType);
- }
- function emitParenType(type) {
- write("(");
- emitType(type.type);
- write(")");
- }
- function emitTypeLiteral(type) {
- write("{");
- if (type.members.length) {
- writeLine();
- increaseIndent();
- emitLines(type.members);
- decreaseIndent();
- }
- write("}");
- }
- }
- function emitSourceFile(node) {
- currentSourceFile = node;
- enclosingDeclaration = node;
- emitLines(node.statements);
- }
- function getExportDefaultTempVariableName() {
- var baseName = "_default";
- if (!ts.hasProperty(currentSourceFile.identifiers, baseName)) {
- return baseName;
- }
- var count = 0;
- while (true) {
- var name_18 = baseName + "_" + (++count);
- if (!ts.hasProperty(currentSourceFile.identifiers, name_18)) {
- return name_18;
- }
- }
- }
- function emitExportAssignment(node) {
- if (node.expression.kind === 69) {
- write(node.isExportEquals ? "export = " : "export default ");
- writeTextOfNode(currentSourceFile, node.expression);
- }
- else {
- var tempVarName = getExportDefaultTempVariableName();
- write("declare var ");
- write(tempVarName);
- write(": ");
- writer.getSymbolAccessibilityDiagnostic = getDefaultExportAccessibilityDiagnostic;
- resolver.writeTypeOfExpression(node.expression, enclosingDeclaration, 2, writer);
- write(";");
- writeLine();
- write(node.isExportEquals ? "export = " : "export default ");
- write(tempVarName);
- }
- write(";");
- writeLine();
- if (node.expression.kind === 69) {
- var nodes = resolver.collectLinkedAliases(node.expression);
- writeAsynchronousModuleElements(nodes);
- }
- function getDefaultExportAccessibilityDiagnostic(diagnostic) {
- return {
- diagnosticMessage: ts.Diagnostics.Default_export_of_the_module_has_or_is_using_private_name_0,
- errorNode: node
- };
- }
- }
- function isModuleElementVisible(node) {
- return resolver.isDeclarationVisible(node);
- }
- function emitModuleElement(node, isModuleElementVisible) {
- if (isModuleElementVisible) {
- writeModuleElement(node);
- }
- else if (node.kind === 221 ||
- (node.parent.kind === 248 && ts.isExternalModule(currentSourceFile))) {
- var isVisible;
- if (asynchronousSubModuleDeclarationEmitInfo && node.parent.kind !== 248) {
- asynchronousSubModuleDeclarationEmitInfo.push({
- node: node,
- outputPos: writer.getTextPos(),
- indent: writer.getIndent(),
- isVisible: isVisible
- });
- }
- else {
- if (node.kind === 222) {
- var importDeclaration = node;
- if (importDeclaration.importClause) {
- isVisible = (importDeclaration.importClause.name && resolver.isDeclarationVisible(importDeclaration.importClause)) ||
- isVisibleNamedBinding(importDeclaration.importClause.namedBindings);
- }
- }
- moduleElementDeclarationEmitInfo.push({
- node: node,
- outputPos: writer.getTextPos(),
- indent: writer.getIndent(),
- isVisible: isVisible
- });
- }
- }
- }
- function writeModuleElement(node) {
- switch (node.kind) {
- case 213:
- return writeFunctionDeclaration(node);
- case 193:
- return writeVariableStatement(node);
- case 215:
- return writeInterfaceDeclaration(node);
- case 214:
- return writeClassDeclaration(node);
- case 216:
- return writeTypeAliasDeclaration(node);
- case 217:
- return writeEnumDeclaration(node);
- case 218:
- return writeModuleDeclaration(node);
- case 221:
- return writeImportEqualsDeclaration(node);
- case 222:
- return writeImportDeclaration(node);
- default:
- ts.Debug.fail("Unknown symbol kind");
- }
- }
- function emitModuleElementDeclarationFlags(node) {
- if (node.parent === currentSourceFile) {
- if (node.flags & 1) {
- write("export ");
- }
- if (node.flags & 1024) {
- write("default ");
- }
- else if (node.kind !== 215) {
- write("declare ");
- }
- }
- }
- function emitClassMemberDeclarationFlags(node) {
- if (node.flags & 32) {
- write("private ");
- }
- else if (node.flags & 64) {
- write("protected ");
- }
- if (node.flags & 128) {
- write("static ");
- }
- if (node.flags & 256) {
- write("abstract ");
- }
- }
- function writeImportEqualsDeclaration(node) {
- emitJsDocComments(node);
- if (node.flags & 1) {
- write("export ");
- }
- write("import ");
- writeTextOfNode(currentSourceFile, node.name);
- write(" = ");
- if (ts.isInternalModuleImportEqualsDeclaration(node)) {
- emitTypeWithNewGetSymbolAccessibilityDiagnostic(node.moduleReference, getImportEntityNameVisibilityError);
- write(";");
- }
- else {
- write("require(");
- writeTextOfNode(currentSourceFile, ts.getExternalModuleImportEqualsDeclarationExpression(node));
- write(");");
- }
- writer.writeLine();
- function getImportEntityNameVisibilityError(symbolAccesibilityResult) {
- return {
- diagnosticMessage: ts.Diagnostics.Import_declaration_0_is_using_private_name_1,
- errorNode: node,
- typeName: node.name
- };
- }
- }
- function isVisibleNamedBinding(namedBindings) {
- if (namedBindings) {
- if (namedBindings.kind === 224) {
- return resolver.isDeclarationVisible(namedBindings);
- }
- else {
- return ts.forEach(namedBindings.elements, function (namedImport) { return resolver.isDeclarationVisible(namedImport); });
- }
- }
- }
- function writeImportDeclaration(node) {
- if (!node.importClause && !(node.flags & 1)) {
- return;
- }
- emitJsDocComments(node);
- if (node.flags & 1) {
- write("export ");
- }
- write("import ");
- if (node.importClause) {
- var currentWriterPos = writer.getTextPos();
- if (node.importClause.name && resolver.isDeclarationVisible(node.importClause)) {
- writeTextOfNode(currentSourceFile, node.importClause.name);
- }
- if (node.importClause.namedBindings && isVisibleNamedBinding(node.importClause.namedBindings)) {
- if (currentWriterPos !== writer.getTextPos()) {
- write(", ");
- }
- if (node.importClause.namedBindings.kind === 224) {
- write("* as ");
- writeTextOfNode(currentSourceFile, node.importClause.namedBindings.name);
- }
- else {
- write("{ ");
- emitCommaList(node.importClause.namedBindings.elements, emitImportOrExportSpecifier, resolver.isDeclarationVisible);
- write(" }");
- }
- }
- write(" from ");
- }
- writeTextOfNode(currentSourceFile, node.moduleSpecifier);
- write(";");
- writer.writeLine();
- }
- function emitImportOrExportSpecifier(node) {
- if (node.propertyName) {
- writeTextOfNode(currentSourceFile, node.propertyName);
- write(" as ");
- }
- writeTextOfNode(currentSourceFile, node.name);
- }
- function emitExportSpecifier(node) {
- emitImportOrExportSpecifier(node);
- var nodes = resolver.collectLinkedAliases(node.propertyName || node.name);
- writeAsynchronousModuleElements(nodes);
- }
- function emitExportDeclaration(node) {
- emitJsDocComments(node);
- write("export ");
- if (node.exportClause) {
- write("{ ");
- emitCommaList(node.exportClause.elements, emitExportSpecifier);
- write(" }");
- }
- else {
- write("*");
- }
- if (node.moduleSpecifier) {
- write(" from ");
- writeTextOfNode(currentSourceFile, node.moduleSpecifier);
- }
- write(";");
- writer.writeLine();
- }
- function writeModuleDeclaration(node) {
- emitJsDocComments(node);
- emitModuleElementDeclarationFlags(node);
- if (node.flags & 131072) {
- write("namespace ");
- }
- else {
- write("module ");
- }
- writeTextOfNode(currentSourceFile, node.name);
- while (node.body.kind !== 219) {
- node = node.body;
- write(".");
- writeTextOfNode(currentSourceFile, node.name);
- }
- var prevEnclosingDeclaration = enclosingDeclaration;
- enclosingDeclaration = node;
- write(" {");
- writeLine();
- increaseIndent();
- emitLines(node.body.statements);
- decreaseIndent();
- write("}");
- writeLine();
- enclosingDeclaration = prevEnclosingDeclaration;
- }
- function writeTypeAliasDeclaration(node) {
- var prevEnclosingDeclaration = enclosingDeclaration;
- enclosingDeclaration = node;
- emitJsDocComments(node);
- emitModuleElementDeclarationFlags(node);
- write("type ");
- writeTextOfNode(currentSourceFile, node.name);
- emitTypeParameters(node.typeParameters);
- write(" = ");
- emitTypeWithNewGetSymbolAccessibilityDiagnostic(node.type, getTypeAliasDeclarationVisibilityError);
- write(";");
- writeLine();
- enclosingDeclaration = prevEnclosingDeclaration;
- function getTypeAliasDeclarationVisibilityError(symbolAccesibilityResult) {
- return {
- diagnosticMessage: ts.Diagnostics.Exported_type_alias_0_has_or_is_using_private_name_1,
- errorNode: node.type,
- typeName: node.name
- };
- }
- }
- function writeEnumDeclaration(node) {
- emitJsDocComments(node);
- emitModuleElementDeclarationFlags(node);
- if (ts.isConst(node)) {
- write("const ");
- }
- write("enum ");
- writeTextOfNode(currentSourceFile, node.name);
- write(" {");
- writeLine();
- increaseIndent();
- emitLines(node.members);
- decreaseIndent();
- write("}");
- writeLine();
- }
- function emitEnumMemberDeclaration(node) {
- emitJsDocComments(node);
- writeTextOfNode(currentSourceFile, node.name);
- var enumMemberValue = resolver.getConstantValue(node);
- if (enumMemberValue !== undefined) {
- write(" = ");
- write(enumMemberValue.toString());
- }
- write(",");
- writeLine();
- }
- function isPrivateMethodTypeParameter(node) {
- return node.parent.kind === 143 && (node.parent.flags & 32);
- }
- function emitTypeParameters(typeParameters) {
- function emitTypeParameter(node) {
- increaseIndent();
- emitJsDocComments(node);
- decreaseIndent();
- writeTextOfNode(currentSourceFile, node.name);
- if (node.constraint && !isPrivateMethodTypeParameter(node)) {
- write(" extends ");
- if (node.parent.kind === 152 ||
- node.parent.kind === 153 ||
- (node.parent.parent && node.parent.parent.kind === 155)) {
- ts.Debug.assert(node.parent.kind === 143 ||
- node.parent.kind === 142 ||
- node.parent.kind === 152 ||
- node.parent.kind === 153 ||
- node.parent.kind === 147 ||
- node.parent.kind === 148);
- emitType(node.constraint);
- }
- else {
- emitTypeWithNewGetSymbolAccessibilityDiagnostic(node.constraint, getTypeParameterConstraintVisibilityError);
- }
- }
- function getTypeParameterConstraintVisibilityError(symbolAccesibilityResult) {
- var diagnosticMessage;
- switch (node.parent.kind) {
- case 214:
- diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1;
- break;
- case 215:
- diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1;
- break;
- case 148:
- diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;
- break;
- case 147:
- diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;
- break;
- case 143:
- case 142:
- if (node.parent.flags & 128) {
- diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1;
- }
- else if (node.parent.parent.kind === 214) {
- diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1;
- }
- else {
- diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;
- }
- break;
- case 213:
- diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1;
- break;
- default:
- ts.Debug.fail("This is unknown parent for type parameter: " + node.parent.kind);
- }
- return {
- diagnosticMessage: diagnosticMessage,
- errorNode: node,
- typeName: node.name
- };
- }
- }
- if (typeParameters) {
- write("<");
- emitCommaList(typeParameters, emitTypeParameter);
- write(">");
- }
- }
- function emitHeritageClause(typeReferences, isImplementsList) {
- if (typeReferences) {
- write(isImplementsList ? " implements " : " extends ");
- emitCommaList(typeReferences, emitTypeOfTypeReference);
- }
- function emitTypeOfTypeReference(node) {
- if (ts.isSupportedExpressionWithTypeArguments(node)) {
- emitTypeWithNewGetSymbolAccessibilityDiagnostic(node, getHeritageClauseVisibilityError);
- }
- else if (!isImplementsList && node.expression.kind === 93) {
- write("null");
- }
- function getHeritageClauseVisibilityError(symbolAccesibilityResult) {
- var diagnosticMessage;
- if (node.parent.parent.kind === 214) {
- diagnosticMessage = isImplementsList ?
- ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 :
- ts.Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_private_name_1;
- }
- else {
- diagnosticMessage = ts.Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1;
- }
- return {
- diagnosticMessage: diagnosticMessage,
- errorNode: node,
- typeName: node.parent.parent.name
- };
- }
- }
- }
- function writeClassDeclaration(node) {
- function emitParameterProperties(constructorDeclaration) {
- if (constructorDeclaration) {
- ts.forEach(constructorDeclaration.parameters, function (param) {
- if (param.flags & 112) {
- emitPropertyDeclaration(param);
- }
- });
- }
- }
- emitJsDocComments(node);
- emitModuleElementDeclarationFlags(node);
- if (node.flags & 256) {
- write("abstract ");
- }
- write("class ");
- writeTextOfNode(currentSourceFile, node.name);
- var prevEnclosingDeclaration = enclosingDeclaration;
- enclosingDeclaration = node;
- emitTypeParameters(node.typeParameters);
- var baseTypeNode = ts.getClassExtendsHeritageClauseElement(node);
- if (baseTypeNode) {
- emitHeritageClause([baseTypeNode], false);
- }
- emitHeritageClause(ts.getClassImplementsHeritageClauseElements(node), true);
- write(" {");
- writeLine();
- increaseIndent();
- emitParameterProperties(ts.getFirstConstructorWithBody(node));
- emitLines(node.members);
- decreaseIndent();
- write("}");
- writeLine();
- enclosingDeclaration = prevEnclosingDeclaration;
- }
- function writeInterfaceDeclaration(node) {
- emitJsDocComments(node);
- emitModuleElementDeclarationFlags(node);
- write("interface ");
- writeTextOfNode(currentSourceFile, node.name);
- var prevEnclosingDeclaration = enclosingDeclaration;
- enclosingDeclaration = node;
- emitTypeParameters(node.typeParameters);
- emitHeritageClause(ts.getInterfaceBaseTypeNodes(node), false);
- write(" {");
- writeLine();
- increaseIndent();
- emitLines(node.members);
- decreaseIndent();
- write("}");
- writeLine();
- enclosingDeclaration = prevEnclosingDeclaration;
- }
- function emitPropertyDeclaration(node) {
- if (ts.hasDynamicName(node)) {
- return;
- }
- emitJsDocComments(node);
- emitClassMemberDeclarationFlags(node);
- emitVariableDeclaration(node);
- write(";");
- writeLine();
- }
- function emitVariableDeclaration(node) {
- if (node.kind !== 211 || resolver.isDeclarationVisible(node)) {
- if (ts.isBindingPattern(node.name)) {
- emitBindingPattern(node.name);
- }
- else {
- writeTextOfNode(currentSourceFile, node.name);
- if ((node.kind === 141 || node.kind === 140) && ts.hasQuestionToken(node)) {
- write("?");
- }
- if ((node.kind === 141 || node.kind === 140) && node.parent.kind === 155) {
- emitTypeOfVariableDeclarationFromTypeLiteral(node);
- }
- else if (!(node.flags & 32)) {
- writeTypeOfDeclaration(node, node.type, getVariableDeclarationTypeVisibilityError);
- }
- }
- }
- function getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccesibilityResult) {
- if (node.kind === 211) {
- return symbolAccesibilityResult.errorModuleName ?
- symbolAccesibilityResult.accessibility === 2 ?
- ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
- ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_private_module_2 :
- ts.Diagnostics.Exported_variable_0_has_or_is_using_private_name_1;
- }
- else if (node.kind === 141 || node.kind === 140) {
- if (node.flags & 128) {
- return symbolAccesibilityResult.errorModuleName ?
- symbolAccesibilityResult.accessibility === 2 ?
- ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
- ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
- ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1;
- }
- else if (node.parent.kind === 214) {
- return symbolAccesibilityResult.errorModuleName ?
- symbolAccesibilityResult.accessibility === 2 ?
- ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
- ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
- ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_private_name_1;
- }
- else {
- return symbolAccesibilityResult.errorModuleName ?
- ts.Diagnostics.Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 :
- ts.Diagnostics.Property_0_of_exported_interface_has_or_is_using_private_name_1;
- }
- }
- }
- function getVariableDeclarationTypeVisibilityError(symbolAccesibilityResult) {
- var diagnosticMessage = getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccesibilityResult);
- return diagnosticMessage !== undefined ? {
- diagnosticMessage: diagnosticMessage,
- errorNode: node,
- typeName: node.name
- } : undefined;
- }
- function emitBindingPattern(bindingPattern) {
- var elements = [];
- for (var _i = 0, _a = bindingPattern.elements; _i < _a.length; _i++) {
- var element = _a[_i];
- if (element.kind !== 187) {
- elements.push(element);
- }
- }
- emitCommaList(elements, emitBindingElement);
- }
- function emitBindingElement(bindingElement) {
- function getBindingElementTypeVisibilityError(symbolAccesibilityResult) {
- var diagnosticMessage = getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccesibilityResult);
- return diagnosticMessage !== undefined ? {
- diagnosticMessage: diagnosticMessage,
- errorNode: bindingElement,
- typeName: bindingElement.name
- } : undefined;
- }
- if (bindingElement.name) {
- if (ts.isBindingPattern(bindingElement.name)) {
- emitBindingPattern(bindingElement.name);
- }
- else {
- writeTextOfNode(currentSourceFile, bindingElement.name);
- writeTypeOfDeclaration(bindingElement, undefined, getBindingElementTypeVisibilityError);
- }
- }
- }
- }
- function emitTypeOfVariableDeclarationFromTypeLiteral(node) {
- if (node.type) {
- write(": ");
- emitType(node.type);
- }
- }
- function isVariableStatementVisible(node) {
- return ts.forEach(node.declarationList.declarations, function (varDeclaration) { return resolver.isDeclarationVisible(varDeclaration); });
- }
- function writeVariableStatement(node) {
- emitJsDocComments(node);
- emitModuleElementDeclarationFlags(node);
- if (ts.isLet(node.declarationList)) {
- write("let ");
- }
- else if (ts.isConst(node.declarationList)) {
- write("const ");
- }
- else {
- write("var ");
- }
- emitCommaList(node.declarationList.declarations, emitVariableDeclaration, resolver.isDeclarationVisible);
- write(";");
- writeLine();
- }
- function emitAccessorDeclaration(node) {
- if (ts.hasDynamicName(node)) {
- return;
- }
- var accessors = ts.getAllAccessorDeclarations(node.parent.members, node);
- var accessorWithTypeAnnotation;
- if (node === accessors.firstAccessor) {
- emitJsDocComments(accessors.getAccessor);
- emitJsDocComments(accessors.setAccessor);
- emitClassMemberDeclarationFlags(node);
- writeTextOfNode(currentSourceFile, node.name);
- if (!(node.flags & 32)) {
- accessorWithTypeAnnotation = node;
- var type = getTypeAnnotationFromAccessor(node);
- if (!type) {
- var anotherAccessor = node.kind === 145 ? accessors.setAccessor : accessors.getAccessor;
- type = getTypeAnnotationFromAccessor(anotherAccessor);
- if (type) {
- accessorWithTypeAnnotation = anotherAccessor;
- }
- }
- writeTypeOfDeclaration(node, type, getAccessorDeclarationTypeVisibilityError);
- }
- write(";");
- writeLine();
- }
- function getTypeAnnotationFromAccessor(accessor) {
- if (accessor) {
- return accessor.kind === 145
- ? accessor.type
- : accessor.parameters.length > 0
- ? accessor.parameters[0].type
- : undefined;
- }
- }
- function getAccessorDeclarationTypeVisibilityError(symbolAccesibilityResult) {
- var diagnosticMessage;
- if (accessorWithTypeAnnotation.kind === 146) {
- if (accessorWithTypeAnnotation.parent.flags & 128) {
- diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
- ts.Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
- ts.Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1;
- }
- else {
- diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
- ts.Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
- ts.Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1;
- }
- return {
- diagnosticMessage: diagnosticMessage,
- errorNode: accessorWithTypeAnnotation.parameters[0],
- typeName: accessorWithTypeAnnotation.name
- };
- }
- else {
- if (accessorWithTypeAnnotation.flags & 128) {
- diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
- symbolAccesibilityResult.accessibility === 2 ?
- ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
- ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 :
- ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0;
- }
- else {
- diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
- symbolAccesibilityResult.accessibility === 2 ?
- ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
- ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 :
- ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0;
- }
- return {
- diagnosticMessage: diagnosticMessage,
- errorNode: accessorWithTypeAnnotation.name,
- typeName: undefined
- };
- }
- }
- }
- function writeFunctionDeclaration(node) {
- if (ts.hasDynamicName(node)) {
- return;
- }
- if (!resolver.isImplementationOfOverload(node)) {
- emitJsDocComments(node);
- if (node.kind === 213) {
- emitModuleElementDeclarationFlags(node);
- }
- else if (node.kind === 143) {
- emitClassMemberDeclarationFlags(node);
- }
- if (node.kind === 213) {
- write("function ");
- writeTextOfNode(currentSourceFile, node.name);
- }
- else if (node.kind === 144) {
- write("constructor");
- }
- else {
- writeTextOfNode(currentSourceFile, node.name);
- if (ts.hasQuestionToken(node)) {
- write("?");
- }
- }
- emitSignatureDeclaration(node);
- }
- }
- function emitSignatureDeclarationWithJsDocComments(node) {
- emitJsDocComments(node);
- emitSignatureDeclaration(node);
- }
- function emitSignatureDeclaration(node) {
- if (node.kind === 148 || node.kind === 153) {
- write("new ");
- }
- emitTypeParameters(node.typeParameters);
- if (node.kind === 149) {
- write("[");
- }
- else {
- write("(");
- }
- var prevEnclosingDeclaration = enclosingDeclaration;
- enclosingDeclaration = node;
- emitCommaList(node.parameters, emitParameterDeclaration);
- if (node.kind === 149) {
- write("]");
- }
- else {
- write(")");
- }
- var isFunctionTypeOrConstructorType = node.kind === 152 || node.kind === 153;
- if (isFunctionTypeOrConstructorType || node.parent.kind === 155) {
- if (node.type) {
- write(isFunctionTypeOrConstructorType ? " => " : ": ");
- emitType(node.type);
- }
- }
- else if (node.kind !== 144 && !(node.flags & 32)) {
- writeReturnTypeAtSignature(node, getReturnTypeVisibilityError);
- }
- enclosingDeclaration = prevEnclosingDeclaration;
- if (!isFunctionTypeOrConstructorType) {
- write(";");
- writeLine();
- }
- function getReturnTypeVisibilityError(symbolAccesibilityResult) {
- var diagnosticMessage;
- switch (node.kind) {
- case 148:
- diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
- ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
- ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0;
- break;
- case 147:
- diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
- ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
- ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0;
- break;
- case 149:
- diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
- ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
- ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0;
- break;
- case 143:
- case 142:
- if (node.flags & 128) {
- diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
- symbolAccesibilityResult.accessibility === 2 ?
- ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
- ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 :
- ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0;
- }
- else if (node.parent.kind === 214) {
- diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
- symbolAccesibilityResult.accessibility === 2 ?
- ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
- ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 :
- ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0;
- }
- else {
- diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
- ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
- ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0;
- }
- break;
- case 213:
- diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
- symbolAccesibilityResult.accessibility === 2 ?
- ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
- ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1 :
- ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_private_name_0;
- break;
- default:
- ts.Debug.fail("This is unknown kind for signature: " + node.kind);
- }
- return {
- diagnosticMessage: diagnosticMessage,
- errorNode: node.name || node
- };
- }
- }
- function emitParameterDeclaration(node) {
- increaseIndent();
- emitJsDocComments(node);
- if (node.dotDotDotToken) {
- write("...");
- }
- if (ts.isBindingPattern(node.name)) {
- emitBindingPattern(node.name);
- }
- else {
- writeTextOfNode(currentSourceFile, node.name);
- }
- if (resolver.isOptionalParameter(node)) {
- write("?");
- }
- decreaseIndent();
- if (node.parent.kind === 152 ||
- node.parent.kind === 153 ||
- node.parent.parent.kind === 155) {
- emitTypeOfVariableDeclarationFromTypeLiteral(node);
- }
- else if (!(node.parent.flags & 32)) {
- writeTypeOfDeclaration(node, node.type, getParameterDeclarationTypeVisibilityError);
- }
- function getParameterDeclarationTypeVisibilityError(symbolAccesibilityResult) {
- var diagnosticMessage = getParameterDeclarationTypeVisibilityDiagnosticMessage(symbolAccesibilityResult);
- return diagnosticMessage !== undefined ? {
- diagnosticMessage: diagnosticMessage,
- errorNode: node,
- typeName: node.name
- } : undefined;
- }
- function getParameterDeclarationTypeVisibilityDiagnosticMessage(symbolAccesibilityResult) {
- switch (node.parent.kind) {
- case 144:
- return symbolAccesibilityResult.errorModuleName ?
- symbolAccesibilityResult.accessibility === 2 ?
- ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
- ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
- ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1;
- case 148:
- return symbolAccesibilityResult.errorModuleName ?
- ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
- ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;
- case 147:
- return symbolAccesibilityResult.errorModuleName ?
- ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
- ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;
- case 143:
- case 142:
- if (node.parent.flags & 128) {
- return symbolAccesibilityResult.errorModuleName ?
- symbolAccesibilityResult.accessibility === 2 ?
- ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
- ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
- ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1;
- }
- else if (node.parent.parent.kind === 214) {
- return symbolAccesibilityResult.errorModuleName ?
- symbolAccesibilityResult.accessibility === 2 ?
- ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
- ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
- ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1;
- }
- else {
- return symbolAccesibilityResult.errorModuleName ?
- ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
- ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;
- }
- case 213:
- return symbolAccesibilityResult.errorModuleName ?
- symbolAccesibilityResult.accessibility === 2 ?
- ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
- ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 :
- ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_private_name_1;
- default:
- ts.Debug.fail("This is unknown parent for parameter: " + node.parent.kind);
- }
- }
- function emitBindingPattern(bindingPattern) {
- if (bindingPattern.kind === 161) {
- write("{");
- emitCommaList(bindingPattern.elements, emitBindingElement);
- write("}");
- }
- else if (bindingPattern.kind === 162) {
- write("[");
- var elements = bindingPattern.elements;
- emitCommaList(elements, emitBindingElement);
- if (elements && elements.hasTrailingComma) {
- write(", ");
- }
- write("]");
- }
- }
- function emitBindingElement(bindingElement) {
- function getBindingElementTypeVisibilityError(symbolAccesibilityResult) {
- var diagnosticMessage = getParameterDeclarationTypeVisibilityDiagnosticMessage(symbolAccesibilityResult);
- return diagnosticMessage !== undefined ? {
- diagnosticMessage: diagnosticMessage,
- errorNode: bindingElement,
- typeName: bindingElement.name
- } : undefined;
- }
- if (bindingElement.kind === 187) {
- write(" ");
- }
- else if (bindingElement.kind === 163) {
- if (bindingElement.propertyName) {
- writeTextOfNode(currentSourceFile, bindingElement.propertyName);
- write(": ");
- }
- if (bindingElement.name) {
- if (ts.isBindingPattern(bindingElement.name)) {
- emitBindingPattern(bindingElement.name);
- }
- else {
- ts.Debug.assert(bindingElement.name.kind === 69);
- if (bindingElement.dotDotDotToken) {
- write("...");
- }
- writeTextOfNode(currentSourceFile, bindingElement.name);
- }
- }
- }
- }
- }
- function emitNode(node) {
- switch (node.kind) {
- case 213:
- case 218:
- case 221:
- case 215:
- case 214:
- case 216:
- case 217:
- return emitModuleElement(node, isModuleElementVisible(node));
- case 193:
- return emitModuleElement(node, isVariableStatementVisible(node));
- case 222:
- return emitModuleElement(node, !node.importClause);
- case 228:
- return emitExportDeclaration(node);
- case 144:
- case 143:
- case 142:
- return writeFunctionDeclaration(node);
- case 148:
- case 147:
- case 149:
- return emitSignatureDeclarationWithJsDocComments(node);
- case 145:
- case 146:
- return emitAccessorDeclaration(node);
- case 141:
- case 140:
- return emitPropertyDeclaration(node);
- case 247:
- return emitEnumMemberDeclaration(node);
- case 227:
- return emitExportAssignment(node);
- case 248:
- return emitSourceFile(node);
- }
- }
- function writeReferencePath(referencedFile) {
- var declFileName = referencedFile.flags & 8192
- ? referencedFile.fileName
- : ts.shouldEmitToOwnFile(referencedFile, compilerOptions)
- ? ts.getOwnEmitOutputFilePath(referencedFile, host, ".d.ts")
- : ts.removeFileExtension(compilerOptions.outFile || compilerOptions.out) + ".d.ts";
- declFileName = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizeSlashes(jsFilePath)), declFileName, host.getCurrentDirectory(), host.getCanonicalFileName, false);
- referencePathsOutput += "/// <reference path=\"" + declFileName + "\" />" + newLine;
- }
- }
- function writeDeclarationFile(jsFilePath, sourceFile, host, resolver, diagnostics) {
- var emitDeclarationResult = emitDeclarations(host, resolver, diagnostics, jsFilePath, sourceFile);
- if (!emitDeclarationResult.reportedDeclarationError) {
- var declarationOutput = emitDeclarationResult.referencePathsOutput
- + getDeclarationOutput(emitDeclarationResult.synchronousDeclarationOutput, emitDeclarationResult.moduleElementDeclarationEmitInfo);
- ts.writeFile(host, diagnostics, ts.removeFileExtension(jsFilePath) + ".d.ts", declarationOutput, host.getCompilerOptions().emitBOM);
- }
- function getDeclarationOutput(synchronousDeclarationOutput, moduleElementDeclarationEmitInfo) {
- var appliedSyncOutputPos = 0;
- var declarationOutput = "";
- ts.forEach(moduleElementDeclarationEmitInfo, function (aliasEmitInfo) {
- if (aliasEmitInfo.asynchronousOutput) {
- declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos, aliasEmitInfo.outputPos);
- declarationOutput += getDeclarationOutput(aliasEmitInfo.asynchronousOutput, aliasEmitInfo.subModuleElementDeclarationEmitInfo);
- appliedSyncOutputPos = aliasEmitInfo.outputPos;
- }
- });
- declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos);
- return declarationOutput;
- }
- }
- ts.writeDeclarationFile = writeDeclarationFile;
- })(ts || (ts = {}));
- var ts;
- (function (ts) {
- function isExternalModuleOrDeclarationFile(sourceFile) {
- return ts.isExternalModule(sourceFile) || ts.isDeclarationFile(sourceFile);
- }
- ts.isExternalModuleOrDeclarationFile = isExternalModuleOrDeclarationFile;
- var entities = {
- "quot": 0x0022,
- "amp": 0x0026,
- "apos": 0x0027,
- "lt": 0x003C,
- "gt": 0x003E,
- "nbsp": 0x00A0,
- "iexcl": 0x00A1,
- "cent": 0x00A2,
- "pound": 0x00A3,
- "curren": 0x00A4,
- "yen": 0x00A5,
- "brvbar": 0x00A6,
- "sect": 0x00A7,
- "uml": 0x00A8,
- "copy": 0x00A9,
- "ordf": 0x00AA,
- "laquo": 0x00AB,
- "not": 0x00AC,
- "shy": 0x00AD,
- "reg": 0x00AE,
- "macr": 0x00AF,
- "deg": 0x00B0,
- "plusmn": 0x00B1,
- "sup2": 0x00B2,
- "sup3": 0x00B3,
- "acute": 0x00B4,
- "micro": 0x00B5,
- "para": 0x00B6,
- "middot": 0x00B7,
- "cedil": 0x00B8,
- "sup1": 0x00B9,
- "ordm": 0x00BA,
- "raquo": 0x00BB,
- "frac14": 0x00BC,
- "frac12": 0x00BD,
- "frac34": 0x00BE,
- "iquest": 0x00BF,
- "Agrave": 0x00C0,
- "Aacute": 0x00C1,
- "Acirc": 0x00C2,
- "Atilde": 0x00C3,
- "Auml": 0x00C4,
- "Aring": 0x00C5,
- "AElig": 0x00C6,
- "Ccedil": 0x00C7,
- "Egrave": 0x00C8,
- "Eacute": 0x00C9,
- "Ecirc": 0x00CA,
- "Euml": 0x00CB,
- "Igrave": 0x00CC,
- "Iacute": 0x00CD,
- "Icirc": 0x00CE,
- "Iuml": 0x00CF,
- "ETH": 0x00D0,
- "Ntilde": 0x00D1,
- "Ograve": 0x00D2,
- "Oacute": 0x00D3,
- "Ocirc": 0x00D4,
- "Otilde": 0x00D5,
- "Ouml": 0x00D6,
- "times": 0x00D7,
- "Oslash": 0x00D8,
- "Ugrave": 0x00D9,
- "Uacute": 0x00DA,
- "Ucirc": 0x00DB,
- "Uuml": 0x00DC,
- "Yacute": 0x00DD,
- "THORN": 0x00DE,
- "szlig": 0x00DF,
- "agrave": 0x00E0,
- "aacute": 0x00E1,
- "acirc": 0x00E2,
- "atilde": 0x00E3,
- "auml": 0x00E4,
- "aring": 0x00E5,
- "aelig": 0x00E6,
- "ccedil": 0x00E7,
- "egrave": 0x00E8,
- "eacute": 0x00E9,
- "ecirc": 0x00EA,
- "euml": 0x00EB,
- "igrave": 0x00EC,
- "iacute": 0x00ED,
- "icirc": 0x00EE,
- "iuml": 0x00EF,
- "eth": 0x00F0,
- "ntilde": 0x00F1,
- "ograve": 0x00F2,
- "oacute": 0x00F3,
- "ocirc": 0x00F4,
- "otilde": 0x00F5,
- "ouml": 0x00F6,
- "divide": 0x00F7,
- "oslash": 0x00F8,
- "ugrave": 0x00F9,
- "uacute": 0x00FA,
- "ucirc": 0x00FB,
- "uuml": 0x00FC,
- "yacute": 0x00FD,
- "thorn": 0x00FE,
- "yuml": 0x00FF,
- "OElig": 0x0152,
- "oelig": 0x0153,
- "Scaron": 0x0160,
- "scaron": 0x0161,
- "Yuml": 0x0178,
- "fnof": 0x0192,
- "circ": 0x02C6,
- "tilde": 0x02DC,
- "Alpha": 0x0391,
- "Beta": 0x0392,
- "Gamma": 0x0393,
- "Delta": 0x0394,
- "Epsilon": 0x0395,
- "Zeta": 0x0396,
- "Eta": 0x0397,
- "Theta": 0x0398,
- "Iota": 0x0399,
- "Kappa": 0x039A,
- "Lambda": 0x039B,
- "Mu": 0x039C,
- "Nu": 0x039D,
- "Xi": 0x039E,
- "Omicron": 0x039F,
- "Pi": 0x03A0,
- "Rho": 0x03A1,
- "Sigma": 0x03A3,
- "Tau": 0x03A4,
- "Upsilon": 0x03A5,
- "Phi": 0x03A6,
- "Chi": 0x03A7,
- "Psi": 0x03A8,
- "Omega": 0x03A9,
- "alpha": 0x03B1,
- "beta": 0x03B2,
- "gamma": 0x03B3,
- "delta": 0x03B4,
- "epsilon": 0x03B5,
- "zeta": 0x03B6,
- "eta": 0x03B7,
- "theta": 0x03B8,
- "iota": 0x03B9,
- "kappa": 0x03BA,
- "lambda": 0x03BB,
- "mu": 0x03BC,
- "nu": 0x03BD,
- "xi": 0x03BE,
- "omicron": 0x03BF,
- "pi": 0x03C0,
- "rho": 0x03C1,
- "sigmaf": 0x03C2,
- "sigma": 0x03C3,
- "tau": 0x03C4,
- "upsilon": 0x03C5,
- "phi": 0x03C6,
- "chi": 0x03C7,
- "psi": 0x03C8,
- "omega": 0x03C9,
- "thetasym": 0x03D1,
- "upsih": 0x03D2,
- "piv": 0x03D6,
- "ensp": 0x2002,
- "emsp": 0x2003,
- "thinsp": 0x2009,
- "zwnj": 0x200C,
- "zwj": 0x200D,
- "lrm": 0x200E,
- "rlm": 0x200F,
- "ndash": 0x2013,
- "mdash": 0x2014,
- "lsquo": 0x2018,
- "rsquo": 0x2019,
- "sbquo": 0x201A,
- "ldquo": 0x201C,
- "rdquo": 0x201D,
- "bdquo": 0x201E,
- "dagger": 0x2020,
- "Dagger": 0x2021,
- "bull": 0x2022,
- "hellip": 0x2026,
- "permil": 0x2030,
- "prime": 0x2032,
- "Prime": 0x2033,
- "lsaquo": 0x2039,
- "rsaquo": 0x203A,
- "oline": 0x203E,
- "frasl": 0x2044,
- "euro": 0x20AC,
- "image": 0x2111,
- "weierp": 0x2118,
- "real": 0x211C,
- "trade": 0x2122,
- "alefsym": 0x2135,
- "larr": 0x2190,
- "uarr": 0x2191,
- "rarr": 0x2192,
- "darr": 0x2193,
- "harr": 0x2194,
- "crarr": 0x21B5,
- "lArr": 0x21D0,
- "uArr": 0x21D1,
- "rArr": 0x21D2,
- "dArr": 0x21D3,
- "hArr": 0x21D4,
- "forall": 0x2200,
- "part": 0x2202,
- "exist": 0x2203,
- "empty": 0x2205,
- "nabla": 0x2207,
- "isin": 0x2208,
- "notin": 0x2209,
- "ni": 0x220B,
- "prod": 0x220F,
- "sum": 0x2211,
- "minus": 0x2212,
- "lowast": 0x2217,
- "radic": 0x221A,
- "prop": 0x221D,
- "infin": 0x221E,
- "ang": 0x2220,
- "and": 0x2227,
- "or": 0x2228,
- "cap": 0x2229,
- "cup": 0x222A,
- "int": 0x222B,
- "there4": 0x2234,
- "sim": 0x223C,
- "cong": 0x2245,
- "asymp": 0x2248,
- "ne": 0x2260,
- "equiv": 0x2261,
- "le": 0x2264,
- "ge": 0x2265,
- "sub": 0x2282,
- "sup": 0x2283,
- "nsub": 0x2284,
- "sube": 0x2286,
- "supe": 0x2287,
- "oplus": 0x2295,
- "otimes": 0x2297,
- "perp": 0x22A5,
- "sdot": 0x22C5,
- "lceil": 0x2308,
- "rceil": 0x2309,
- "lfloor": 0x230A,
- "rfloor": 0x230B,
- "lang": 0x2329,
- "rang": 0x232A,
- "loz": 0x25CA,
- "spades": 0x2660,
- "clubs": 0x2663,
- "hearts": 0x2665,
- "diams": 0x2666
- };
- function emitFiles(resolver, host, targetSourceFile) {
- var extendsHelper = "\nvar __extends = (this && this.__extends) || function (d, b) {\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};";
- var decorateHelper = "\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};";
- var metadataHelper = "\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};";
- var paramHelper = "\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};";
- var awaiterHelper = "\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promise, generator) {\n return new Promise(function (resolve, reject) {\n generator = generator.call(thisArg, _arguments);\n function cast(value) { return value instanceof Promise && value.constructor === Promise ? value : new Promise(function (resolve) { resolve(value); }); }\n function onfulfill(value) { try { step(\"next\", value); } catch (e) { reject(e); } }\n function onreject(value) { try { step(\"throw\", value); } catch (e) { reject(e); } }\n function step(verb, value) {\n var result = generator[verb](value);\n result.done ? resolve(result.value) : cast(result.value).then(onfulfill, onreject);\n }\n step(\"next\", void 0);\n });\n};";
- var compilerOptions = host.getCompilerOptions();
- var languageVersion = compilerOptions.target || 0;
- var modulekind = compilerOptions.module ? compilerOptions.module : languageVersion === 2 ? 5 : 0;
- var sourceMapDataList = compilerOptions.sourceMap || compilerOptions.inlineSourceMap ? [] : undefined;
- var diagnostics = [];
- var newLine = host.getNewLine();
- var jsxDesugaring = host.getCompilerOptions().jsx !== 1;
- var shouldEmitJsx = function (s) { return (s.languageVariant === 1 && !jsxDesugaring); };
- if (targetSourceFile === undefined) {
- ts.forEach(host.getSourceFiles(), function (sourceFile) {
- if (ts.shouldEmitToOwnFile(sourceFile, compilerOptions)) {
- var jsFilePath = ts.getOwnEmitOutputFilePath(sourceFile, host, shouldEmitJsx(sourceFile) ? ".jsx" : ".js");
- emitFile(jsFilePath, sourceFile);
- }
- });
- if (compilerOptions.outFile || compilerOptions.out) {
- emitFile(compilerOptions.outFile || compilerOptions.out);
- }
- }
- else {
- if (ts.shouldEmitToOwnFile(targetSourceFile, compilerOptions)) {
- var jsFilePath = ts.getOwnEmitOutputFilePath(targetSourceFile, host, shouldEmitJsx(targetSourceFile) ? ".jsx" : ".js");
- emitFile(jsFilePath, targetSourceFile);
- }
- else if (!ts.isDeclarationFile(targetSourceFile) && (compilerOptions.outFile || compilerOptions.out)) {
- emitFile(compilerOptions.outFile || compilerOptions.out);
- }
- }
- diagnostics = ts.sortAndDeduplicateDiagnostics(diagnostics);
- return {
- emitSkipped: false,
- diagnostics: diagnostics,
- sourceMaps: sourceMapDataList
- };
- function isUniqueLocalName(name, container) {
- for (var node = container; ts.isNodeDescendentOf(node, container); node = node.nextContainer) {
- if (node.locals && ts.hasProperty(node.locals, name)) {
- if (node.locals[name].flags & (107455 | 1048576 | 8388608)) {
- return false;
- }
- }
- }
- return true;
- }
- function emitJavaScript(jsFilePath, root) {
- var writer = ts.createTextWriter(newLine);
- var write = writer.write, writeTextOfNode = writer.writeTextOfNode, writeLine = writer.writeLine, increaseIndent = writer.increaseIndent, decreaseIndent = writer.decreaseIndent;
- var currentSourceFile;
- var exportFunctionForFile;
- var generatedNameSet = {};
- var nodeToGeneratedName = [];
- var computedPropertyNamesToGeneratedNames;
- var extendsEmitted = false;
- var decorateEmitted = false;
- var paramEmitted = false;
- var awaiterEmitted = false;
- var tempFlags = 0;
- var tempVariables;
- var tempParameters;
- var externalImports;
- var exportSpecifiers;
- var exportEquals;
- var hasExportStars;
- var writeEmittedFiles = writeJavaScriptFile;
- var detachedCommentsInfo;
- var writeComment = ts.writeCommentRange;
- var emit = emitNodeWithCommentsAndWithoutSourcemap;
- var emitStart = function (node) { };
- var emitEnd = function (node) { };
- var emitToken = emitTokenText;
- var scopeEmitStart = function (scopeDeclaration, scopeName) { };
- var scopeEmitEnd = function () { };
- var sourceMapData;
- var emitLeadingCommentsOfPosition = compilerOptions.removeComments ? function (pos) { } : emitLeadingCommentsOfPositionWorker;
- var moduleEmitDelegates = (_a = {},
- _a[5] = emitES6Module,
- _a[2] = emitAMDModule,
- _a[4] = emitSystemModule,
- _a[3] = emitUMDModule,
- _a[1] = emitCommonJSModule,
- _a
- );
- if (compilerOptions.sourceMap || compilerOptions.inlineSourceMap) {
- initializeEmitterWithSourceMaps();
- }
- if (root) {
- emitSourceFile(root);
- }
- else {
- ts.forEach(host.getSourceFiles(), function (sourceFile) {
- if (!isExternalModuleOrDeclarationFile(sourceFile)) {
- emitSourceFile(sourceFile);
- }
- });
- }
- writeLine();
- writeEmittedFiles(writer.getText(), compilerOptions.emitBOM);
- return;
- function emitSourceFile(sourceFile) {
- currentSourceFile = sourceFile;
- exportFunctionForFile = undefined;
- emit(sourceFile);
- }
- function isUniqueName(name) {
- return !resolver.hasGlobalName(name) &&
- !ts.hasProperty(currentSourceFile.identifiers, name) &&
- !ts.hasProperty(generatedNameSet, name);
- }
- function makeTempVariableName(flags) {
- if (flags && !(tempFlags & flags)) {
- var name_19 = flags === 268435456 ? "_i" : "_n";
- if (isUniqueName(name_19)) {
- tempFlags |= flags;
- return name_19;
- }
- }
- while (true) {
- var count = tempFlags & 268435455;
- tempFlags++;
- if (count !== 8 && count !== 13) {
- var name_20 = count < 26 ? "_" + String.fromCharCode(97 + count) : "_" + (count - 26);
- if (isUniqueName(name_20)) {
- return name_20;
- }
- }
- }
- }
- function makeUniqueName(baseName) {
- if (baseName.charCodeAt(baseName.length - 1) !== 95) {
- baseName += "_";
- }
- var i = 1;
- while (true) {
- var generatedName = baseName + i;
- if (isUniqueName(generatedName)) {
- return generatedNameSet[generatedName] = generatedName;
- }
- i++;
- }
- }
- function generateNameForModuleOrEnum(node) {
- var name = node.name.text;
- return isUniqueLocalName(name, node) ? name : makeUniqueName(name);
- }
- function generateNameForImportOrExportDeclaration(node) {
- var expr = ts.getExternalModuleName(node);
- var baseName = expr.kind === 9 ?
- ts.escapeIdentifier(ts.makeIdentifierFromModuleName(expr.text)) : "module";
- return makeUniqueName(baseName);
- }
- function generateNameForExportDefault() {
- return makeUniqueName("default");
- }
- function generateNameForClassExpression() {
- return makeUniqueName("class");
- }
- function generateNameForNode(node) {
- switch (node.kind) {
- case 69:
- return makeUniqueName(node.text);
- case 218:
- case 217:
- return generateNameForModuleOrEnum(node);
- case 222:
- case 228:
- return generateNameForImportOrExportDeclaration(node);
- case 213:
- case 214:
- case 227:
- return generateNameForExportDefault();
- case 186:
- return generateNameForClassExpression();
- }
- }
- function getGeneratedNameForNode(node) {
- var id = ts.getNodeId(node);
- return nodeToGeneratedName[id] || (nodeToGeneratedName[id] = ts.unescapeIdentifier(generateNameForNode(node)));
- }
- function initializeEmitterWithSourceMaps() {
- var sourceMapDir;
- var sourceMapSourceIndex = -1;
- var sourceMapNameIndexMap = {};
- var sourceMapNameIndices = [];
- function getSourceMapNameIndex() {
- return sourceMapNameIndices.length ? ts.lastOrUndefined(sourceMapNameIndices) : -1;
- }
- var lastRecordedSourceMapSpan;
- var lastEncodedSourceMapSpan = {
- emittedLine: 1,
- emittedColumn: 1,
- sourceLine: 1,
- sourceColumn: 1,
- sourceIndex: 0
- };
- var lastEncodedNameIndex = 0;
- function encodeLastRecordedSourceMapSpan() {
- if (!lastRecordedSourceMapSpan || lastRecordedSourceMapSpan === lastEncodedSourceMapSpan) {
- return;
- }
- var prevEncodedEmittedColumn = lastEncodedSourceMapSpan.emittedColumn;
- if (lastEncodedSourceMapSpan.emittedLine === lastRecordedSourceMapSpan.emittedLine) {
- if (sourceMapData.sourceMapMappings) {
- sourceMapData.sourceMapMappings += ",";
- }
- }
- else {
- for (var encodedLine = lastEncodedSourceMapSpan.emittedLine; encodedLine < lastRecordedSourceMapSpan.emittedLine; encodedLine++) {
- sourceMapData.sourceMapMappings += ";";
- }
- prevEncodedEmittedColumn = 1;
- }
- sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.emittedColumn - prevEncodedEmittedColumn);
- sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceIndex - lastEncodedSourceMapSpan.sourceIndex);
- sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceLine - lastEncodedSourceMapSpan.sourceLine);
- sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceColumn - lastEncodedSourceMapSpan.sourceColumn);
- if (lastRecordedSourceMapSpan.nameIndex >= 0) {
- sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.nameIndex - lastEncodedNameIndex);
- lastEncodedNameIndex = lastRecordedSourceMapSpan.nameIndex;
- }
- lastEncodedSourceMapSpan = lastRecordedSourceMapSpan;
- sourceMapData.sourceMapDecodedMappings.push(lastEncodedSourceMapSpan);
- function base64VLQFormatEncode(inValue) {
- function base64FormatEncode(inValue) {
- if (inValue < 64) {
- return "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(inValue);
- }
- throw TypeError(inValue + ": not a 64 based value");
- }
- if (inValue < 0) {
- inValue = ((-inValue) << 1) + 1;
- }
- else {
- inValue = inValue << 1;
- }
- var encodedStr = "";
- do {
- var currentDigit = inValue & 31;
- inValue = inValue >> 5;
- if (inValue > 0) {
- currentDigit = currentDigit | 32;
- }
- encodedStr = encodedStr + base64FormatEncode(currentDigit);
- } while (inValue > 0);
- return encodedStr;
- }
- }
- function recordSourceMapSpan(pos) {
- var sourceLinePos = ts.getLineAndCharacterOfPosition(currentSourceFile, pos);
- sourceLinePos.line++;
- sourceLinePos.character++;
- var emittedLine = writer.getLine();
- var emittedColumn = writer.getColumn();
- if (!lastRecordedSourceMapSpan ||
- lastRecordedSourceMapSpan.emittedLine !== emittedLine ||
- lastRecordedSourceMapSpan.emittedColumn !== emittedColumn ||
- (lastRecordedSourceMapSpan.sourceIndex === sourceMapSourceIndex &&
- (lastRecordedSourceMapSpan.sourceLine > sourceLinePos.line ||
- (lastRecordedSourceMapSpan.sourceLine === sourceLinePos.line && lastRecordedSourceMapSpan.sourceColumn > sourceLinePos.character)))) {
- encodeLastRecordedSourceMapSpan();
- lastRecordedSourceMapSpan = {
- emittedLine: emittedLine,
- emittedColumn: emittedColumn,
- sourceLine: sourceLinePos.line,
- sourceColumn: sourceLinePos.character,
- nameIndex: getSourceMapNameIndex(),
- sourceIndex: sourceMapSourceIndex
- };
- }
- else {
- lastRecordedSourceMapSpan.sourceLine = sourceLinePos.line;
- lastRecordedSourceMapSpan.sourceColumn = sourceLinePos.character;
- lastRecordedSourceMapSpan.sourceIndex = sourceMapSourceIndex;
- }
- }
- function recordEmitNodeStartSpan(node) {
- recordSourceMapSpan(ts.skipTrivia(currentSourceFile.text, node.pos));
- }
- function recordEmitNodeEndSpan(node) {
- recordSourceMapSpan(node.end);
- }
- function writeTextWithSpanRecord(tokenKind, startPos, emitFn) {
- var tokenStartPos = ts.skipTrivia(currentSourceFile.text, startPos);
- recordSourceMapSpan(tokenStartPos);
- var tokenEndPos = emitTokenText(tokenKind, tokenStartPos, emitFn);
- recordSourceMapSpan(tokenEndPos);
- return tokenEndPos;
- }
- function recordNewSourceFileStart(node) {
- var sourcesDirectoryPath = compilerOptions.sourceRoot ? host.getCommonSourceDirectory() : sourceMapDir;
- sourceMapData.sourceMapSources.push(ts.getRelativePathToDirectoryOrUrl(sourcesDirectoryPath, node.fileName, host.getCurrentDirectory(), host.getCanonicalFileName, true));
- sourceMapSourceIndex = sourceMapData.sourceMapSources.length - 1;
- sourceMapData.inputSourceFileNames.push(node.fileName);
- if (compilerOptions.inlineSources) {
- if (!sourceMapData.sourceMapSourcesContent) {
- sourceMapData.sourceMapSourcesContent = [];
- }
- sourceMapData.sourceMapSourcesContent.push(node.text);
- }
- }
- function recordScopeNameOfNode(node, scopeName) {
- function recordScopeNameIndex(scopeNameIndex) {
- sourceMapNameIndices.push(scopeNameIndex);
- }
- function recordScopeNameStart(scopeName) {
- var scopeNameIndex = -1;
- if (scopeName) {
- var parentIndex = getSourceMapNameIndex();
- if (parentIndex !== -1) {
- var name_21 = node.name;
- if (!name_21 || name_21.kind !== 136) {
- scopeName = "." + scopeName;
- }
- scopeName = sourceMapData.sourceMapNames[parentIndex] + scopeName;
- }
- scopeNameIndex = ts.getProperty(sourceMapNameIndexMap, scopeName);
- if (scopeNameIndex === undefined) {
- scopeNameIndex = sourceMapData.sourceMapNames.length;
- sourceMapData.sourceMapNames.push(scopeName);
- sourceMapNameIndexMap[scopeName] = scopeNameIndex;
- }
- }
- recordScopeNameIndex(scopeNameIndex);
- }
- if (scopeName) {
- recordScopeNameStart(scopeName);
- }
- else if (node.kind === 213 ||
- node.kind === 173 ||
- node.kind === 143 ||
- node.kind === 142 ||
- node.kind === 145 ||
- node.kind === 146 ||
- node.kind === 218 ||
- node.kind === 214 ||
- node.kind === 217) {
- if (node.name) {
- var name_22 = node.name;
- scopeName = name_22.kind === 136
- ? ts.getTextOfNode(name_22)
- : node.name.text;
- }
- recordScopeNameStart(scopeName);
- }
- else {
- recordScopeNameIndex(getSourceMapNameIndex());
- }
- }
- function recordScopeNameEnd() {
- sourceMapNameIndices.pop();
- }
- ;
- function writeCommentRangeWithMap(curentSourceFile, writer, comment, newLine) {
- recordSourceMapSpan(comment.pos);
- ts.writeCommentRange(currentSourceFile, writer, comment, newLine);
- recordSourceMapSpan(comment.end);
- }
- function serializeSourceMapContents(version, file, sourceRoot, sources, names, mappings, sourcesContent) {
- if (typeof JSON !== "undefined") {
- var map_1 = {
- version: version,
- file: file,
- sourceRoot: sourceRoot,
- sources: sources,
- names: names,
- mappings: mappings
- };
- if (sourcesContent !== undefined) {
- map_1.sourcesContent = sourcesContent;
- }
- return JSON.stringify(map_1);
- }
- return "{\"version\":" + version + ",\"file\":\"" + ts.escapeString(file) + "\",\"sourceRoot\":\"" + ts.escapeString(sourceRoot) + "\",\"sources\":[" + serializeStringArray(sources) + "],\"names\":[" + serializeStringArray(names) + "],\"mappings\":\"" + ts.escapeString(mappings) + "\" " + (sourcesContent !== undefined ? ",\"sourcesContent\":[" + serializeStringArray(sourcesContent) + "]" : "") + "}";
- function serializeStringArray(list) {
- var output = "";
- for (var i = 0, n = list.length; i < n; i++) {
- if (i) {
- output += ",";
- }
- output += "\"" + ts.escapeString(list[i]) + "\"";
- }
- return output;
- }
- }
- function writeJavaScriptAndSourceMapFile(emitOutput, writeByteOrderMark) {
- encodeLastRecordedSourceMapSpan();
- var sourceMapText = serializeSourceMapContents(3, sourceMapData.sourceMapFile, sourceMapData.sourceMapSourceRoot, sourceMapData.sourceMapSources, sourceMapData.sourceMapNames, sourceMapData.sourceMapMappings, sourceMapData.sourceMapSourcesContent);
- sourceMapDataList.push(sourceMapData);
- var sourceMapUrl;
- if (compilerOptions.inlineSourceMap) {
- var base64SourceMapText = ts.convertToBase64(sourceMapText);
- sourceMapUrl = "//# sourceMappingURL=data:application/json;base64," + base64SourceMapText;
- }
- else {
- ts.writeFile(host, diagnostics, sourceMapData.sourceMapFilePath, sourceMapText, false);
- sourceMapUrl = "//# sourceMappingURL=" + sourceMapData.jsSourceMappingURL;
- }
- writeJavaScriptFile(emitOutput + sourceMapUrl, writeByteOrderMark);
- }
- var sourceMapJsFile = ts.getBaseFileName(ts.normalizeSlashes(jsFilePath));
- sourceMapData = {
- sourceMapFilePath: jsFilePath + ".map",
- jsSourceMappingURL: sourceMapJsFile + ".map",
- sourceMapFile: sourceMapJsFile,
- sourceMapSourceRoot: compilerOptions.sourceRoot || "",
- sourceMapSources: [],
- inputSourceFileNames: [],
- sourceMapNames: [],
- sourceMapMappings: "",
- sourceMapSourcesContent: undefined,
- sourceMapDecodedMappings: []
- };
- sourceMapData.sourceMapSourceRoot = ts.normalizeSlashes(sourceMapData.sourceMapSourceRoot);
- if (sourceMapData.sourceMapSourceRoot.length && sourceMapData.sourceMapSourceRoot.charCodeAt(sourceMapData.sourceMapSourceRoot.length - 1) !== 47) {
- sourceMapData.sourceMapSourceRoot += ts.directorySeparator;
- }
- if (compilerOptions.mapRoot) {
- sourceMapDir = ts.normalizeSlashes(compilerOptions.mapRoot);
- if (root) {
- sourceMapDir = ts.getDirectoryPath(ts.getSourceFilePathInNewDir(root, host, sourceMapDir));
- }
- if (!ts.isRootedDiskPath(sourceMapDir) && !ts.isUrl(sourceMapDir)) {
- sourceMapDir = ts.combinePaths(host.getCommonSourceDirectory(), sourceMapDir);
- sourceMapData.jsSourceMappingURL = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizePath(jsFilePath)), ts.combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL), host.getCurrentDirectory(), host.getCanonicalFileName, true);
- }
- else {
- sourceMapData.jsSourceMappingURL = ts.combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL);
- }
- }
- else {
- sourceMapDir = ts.getDirectoryPath(ts.normalizePath(jsFilePath));
- }
- function emitNodeWithSourceMap(node) {
- if (node) {
- if (ts.nodeIsSynthesized(node)) {
- return emitNodeWithoutSourceMap(node);
- }
- if (node.kind !== 248) {
- recordEmitNodeStartSpan(node);
- emitNodeWithoutSourceMap(node);
- recordEmitNodeEndSpan(node);
- }
- else {
- recordNewSourceFileStart(node);
- emitNodeWithoutSourceMap(node);
- }
- }
- }
- function emitNodeWithCommentsAndWithSourcemap(node) {
- emitNodeConsideringCommentsOption(node, emitNodeWithSourceMap);
- }
- writeEmittedFiles = writeJavaScriptAndSourceMapFile;
- emit = emitNodeWithCommentsAndWithSourcemap;
- emitStart = recordEmitNodeStartSpan;
- emitEnd = recordEmitNodeEndSpan;
- emitToken = writeTextWithSpanRecord;
- scopeEmitStart = recordScopeNameOfNode;
- scopeEmitEnd = recordScopeNameEnd;
- writeComment = writeCommentRangeWithMap;
- }
- function writeJavaScriptFile(emitOutput, writeByteOrderMark) {
- ts.writeFile(host, diagnostics, jsFilePath, emitOutput, writeByteOrderMark);
- }
- function createTempVariable(flags) {
- var result = ts.createSynthesizedNode(69);
- result.text = makeTempVariableName(flags);
- return result;
- }
- function recordTempDeclaration(name) {
- if (!tempVariables) {
- tempVariables = [];
- }
- tempVariables.push(name);
- }
- function createAndRecordTempVariable(flags) {
- var temp = createTempVariable(flags);
- recordTempDeclaration(temp);
- return temp;
- }
- function emitTempDeclarations(newLine) {
- if (tempVariables) {
- if (newLine) {
- writeLine();
- }
- else {
- write(" ");
- }
- write("var ");
- emitCommaList(tempVariables);
- write(";");
- }
- }
- function emitTokenText(tokenKind, startPos, emitFn) {
- var tokenString = ts.tokenToString(tokenKind);
- if (emitFn) {
- emitFn();
- }
- else {
- write(tokenString);
- }
- return startPos + tokenString.length;
- }
- function emitOptional(prefix, node) {
- if (node) {
- write(prefix);
- emit(node);
- }
- }
- function emitParenthesizedIf(node, parenthesized) {
- if (parenthesized) {
- write("(");
- }
- emit(node);
- if (parenthesized) {
- write(")");
- }
- }
- function emitTrailingCommaIfPresent(nodeList) {
- if (nodeList.hasTrailingComma) {
- write(",");
- }
- }
- function emitLinePreservingList(parent, nodes, allowTrailingComma, spacesBetweenBraces) {
- ts.Debug.assert(nodes.length > 0);
- increaseIndent();
- if (nodeStartPositionsAreOnSameLine(parent, nodes[0])) {
- if (spacesBetweenBraces) {
- write(" ");
- }
- }
- else {
- writeLine();
- }
- for (var i = 0, n = nodes.length; i < n; i++) {
- if (i) {
- if (nodeEndIsOnSameLineAsNodeStart(nodes[i - 1], nodes[i])) {
- write(", ");
- }
- else {
- write(",");
- writeLine();
- }
- }
- emit(nodes[i]);
- }
- if (nodes.hasTrailingComma && allowTrailingComma) {
- write(",");
- }
- decreaseIndent();
- if (nodeEndPositionsAreOnSameLine(parent, ts.lastOrUndefined(nodes))) {
- if (spacesBetweenBraces) {
- write(" ");
- }
- }
- else {
- writeLine();
- }
- }
- function emitList(nodes, start, count, multiLine, trailingComma, leadingComma, noTrailingNewLine, emitNode) {
- if (!emitNode) {
- emitNode = emit;
- }
- for (var i = 0; i < count; i++) {
- if (multiLine) {
- if (i || leadingComma) {
- write(",");
- }
- writeLine();
- }
- else {
- if (i || leadingComma) {
- write(", ");
- }
- }
- var node = nodes[start + i];
- emitTrailingCommentsOfPosition(node.pos);
- emitNode(node);
- leadingComma = true;
- }
- if (trailingComma) {
- write(",");
- }
- if (multiLine && !noTrailingNewLine) {
- writeLine();
- }
- return count;
- }
- function emitCommaList(nodes) {
- if (nodes) {
- emitList(nodes, 0, nodes.length, false, false);
- }
- }
- function emitLines(nodes) {
- emitLinesStartingAt(nodes, 0);
- }
- function emitLinesStartingAt(nodes, startIndex) {
- for (var i = startIndex; i < nodes.length; i++) {
- writeLine();
- emit(nodes[i]);
- }
- }
- function isBinaryOrOctalIntegerLiteral(node, text) {
- if (node.kind === 8 && text.length > 1) {
- switch (text.charCodeAt(1)) {
- case 98:
- case 66:
- case 111:
- case 79:
- return true;
- }
- }
- return false;
- }
- function emitLiteral(node) {
- var text = getLiteralText(node);
- if ((compilerOptions.sourceMap || compilerOptions.inlineSourceMap) && (node.kind === 9 || ts.isTemplateLiteralKind(node.kind))) {
- writer.writeLiteral(text);
- }
- else if (languageVersion < 2 && isBinaryOrOctalIntegerLiteral(node, text)) {
- write(node.text);
- }
- else {
- write(text);
- }
- }
- function getLiteralText(node) {
- if (languageVersion < 2 && (ts.isTemplateLiteralKind(node.kind) || node.hasExtendedUnicodeEscape)) {
- return getQuotedEscapedLiteralText("\"", node.text, "\"");
- }
- if (node.parent) {
- return ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, node);
- }
- switch (node.kind) {
- case 9:
- return getQuotedEscapedLiteralText("\"", node.text, "\"");
- case 11:
- return getQuotedEscapedLiteralText("`", node.text, "`");
- case 12:
- return getQuotedEscapedLiteralText("`", node.text, "${");
- case 13:
- return getQuotedEscapedLiteralText("}", node.text, "${");
- case 14:
- return getQuotedEscapedLiteralText("}", node.text, "`");
- case 8:
- return node.text;
- }
- ts.Debug.fail("Literal kind '" + node.kind + "' not accounted for.");
- }
- function getQuotedEscapedLiteralText(leftQuote, text, rightQuote) {
- return leftQuote + ts.escapeNonAsciiCharacters(ts.escapeString(text)) + rightQuote;
- }
- function emitDownlevelRawTemplateLiteral(node) {
- var text = ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, node);
- var isLast = node.kind === 11 || node.kind === 14;
- text = text.substring(1, text.length - (isLast ? 1 : 2));
- text = text.replace(/\r\n?/g, "\n");
- text = ts.escapeString(text);
- write("\"" + text + "\"");
- }
- function emitDownlevelTaggedTemplateArray(node, literalEmitter) {
- write("[");
- if (node.template.kind === 11) {
- literalEmitter(node.template);
- }
- else {
- literalEmitter(node.template.head);
- ts.forEach(node.template.templateSpans, function (child) {
- write(", ");
- literalEmitter(child.literal);
- });
- }
- write("]");
- }
- function emitDownlevelTaggedTemplate(node) {
- var tempVariable = createAndRecordTempVariable(0);
- write("(");
- emit(tempVariable);
- write(" = ");
- emitDownlevelTaggedTemplateArray(node, emit);
- write(", ");
- emit(tempVariable);
- write(".raw = ");
- emitDownlevelTaggedTemplateArray(node, emitDownlevelRawTemplateLiteral);
- write(", ");
- emitParenthesizedIf(node.tag, needsParenthesisForPropertyAccessOrInvocation(node.tag));
- write("(");
- emit(tempVariable);
- if (node.template.kind === 183) {
- ts.forEach(node.template.templateSpans, function (templateSpan) {
- write(", ");
- var needsParens = templateSpan.expression.kind === 181
- && templateSpan.expression.operatorToken.kind === 24;
- emitParenthesizedIf(templateSpan.expression, needsParens);
- });
- }
- write("))");
- }
- function emitTemplateExpression(node) {
- if (languageVersion >= 2) {
- ts.forEachChild(node, emit);
- return;
- }
- var emitOuterParens = ts.isExpression(node.parent)
- && templateNeedsParens(node, node.parent);
- if (emitOuterParens) {
- write("(");
- }
- var headEmitted = false;
- if (shouldEmitTemplateHead()) {
- emitLiteral(node.head);
- headEmitted = true;
- }
- for (var i = 0, n = node.templateSpans.length; i < n; i++) {
- var templateSpan = node.templateSpans[i];
- var needsParens = templateSpan.expression.kind !== 172
- && comparePrecedenceToBinaryPlus(templateSpan.expression) !== 1;
- if (i > 0 || headEmitted) {
- write(" + ");
- }
- emitParenthesizedIf(templateSpan.expression, needsParens);
- if (templateSpan.literal.text.length !== 0) {
- write(" + ");
- emitLiteral(templateSpan.literal);
- }
- }
- if (emitOuterParens) {
- write(")");
- }
- function shouldEmitTemplateHead() {
- ts.Debug.assert(node.templateSpans.length !== 0);
- return node.head.text.length !== 0 || node.templateSpans[0].literal.text.length === 0;
- }
- function templateNeedsParens(template, parent) {
- switch (parent.kind) {
- case 168:
- case 169:
- return parent.expression === template;
- case 170:
- case 172:
- return false;
- default:
- return comparePrecedenceToBinaryPlus(parent) !== -1;
- }
- }
- function comparePrecedenceToBinaryPlus(expression) {
- switch (expression.kind) {
- case 181:
- switch (expression.operatorToken.kind) {
- case 37:
- case 39:
- case 40:
- return 1;
- case 35:
- case 36:
- return 0;
- default:
- return -1;
- }
- case 184:
- case 182:
- return -1;
- default:
- return 1;
- }
- }
- }
- function emitTemplateSpan(span) {
- emit(span.expression);
- emit(span.literal);
- }
- function jsxEmitReact(node) {
- function emitTagName(name) {
- if (name.kind === 69 && ts.isIntrinsicJsxName(name.text)) {
- write("\"");
- emit(name);
- write("\"");
- }
- else {
- emit(name);
- }
- }
- function emitAttributeName(name) {
- if (/[A-Za-z_]+[\w*]/.test(name.text)) {
- write("\"");
- emit(name);
- write("\"");
- }
- else {
- emit(name);
- }
- }
- function emitJsxAttribute(node) {
- emitAttributeName(node.name);
- write(": ");
- if (node.initializer) {
- emit(node.initializer);
- }
- else {
- write("true");
- }
- }
- function emitJsxElement(openingNode, children) {
- var syntheticReactRef = ts.createSynthesizedNode(69);
- syntheticReactRef.text = "React";
- syntheticReactRef.parent = openingNode;
- emitLeadingComments(openingNode);
- emitExpressionIdentifier(syntheticReactRef);
- write(".createElement(");
- emitTagName(openingNode.tagName);
- write(", ");
- if (openingNode.attributes.length === 0) {
- write("null");
- }
- else {
- var attrs = openingNode.attributes;
- if (ts.forEach(attrs, function (attr) { return attr.kind === 239; })) {
- emitExpressionIdentifier(syntheticReactRef);
- write(".__spread(");
- var haveOpenedObjectLiteral = false;
- for (var i_1 = 0; i_1 < attrs.length; i_1++) {
- if (attrs[i_1].kind === 239) {
- if (i_1 === 0) {
- write("{}, ");
- }
- if (haveOpenedObjectLiteral) {
- write("}");
- haveOpenedObjectLiteral = false;
- }
- if (i_1 > 0) {
- write(", ");
- }
- emit(attrs[i_1].expression);
- }
- else {
- ts.Debug.assert(attrs[i_1].kind === 238);
- if (haveOpenedObjectLiteral) {
- write(", ");
- }
- else {
- haveOpenedObjectLiteral = true;
- if (i_1 > 0) {
- write(", ");
- }
- write("{");
- }
- emitJsxAttribute(attrs[i_1]);
- }
- }
- if (haveOpenedObjectLiteral)
- write("}");
- write(")");
- }
- else {
- write("{");
- for (var i = 0; i < attrs.length; i++) {
- if (i > 0) {
- write(", ");
- }
- emitJsxAttribute(attrs[i]);
- }
- write("}");
- }
- }
- if (children) {
- for (var i = 0; i < children.length; i++) {
- if (children[i].kind === 240 && !(children[i].expression)) {
- continue;
- }
- if (children[i].kind === 236) {
- var text = getTextToEmit(children[i]);
- if (text !== undefined) {
- write(", \"");
- write(text);
- write("\"");
- }
- }
- else {
- write(", ");
- emit(children[i]);
- }
- }
- }
- write(")");
- emitTrailingComments(openingNode);
- }
- if (node.kind === 233) {
- emitJsxElement(node.openingElement, node.children);
- }
- else {
- ts.Debug.assert(node.kind === 234);
- emitJsxElement(node);
- }
- }
- function jsxEmitPreserve(node) {
- function emitJsxAttribute(node) {
- emit(node.name);
- if (node.initializer) {
- write("=");
- emit(node.initializer);
- }
- }
- function emitJsxSpreadAttribute(node) {
- write("{...");
- emit(node.expression);
- write("}");
- }
- function emitAttributes(attribs) {
- for (var i = 0, n = attribs.length; i < n; i++) {
- if (i > 0) {
- write(" ");
- }
- if (attribs[i].kind === 239) {
- emitJsxSpreadAttribute(attribs[i]);
- }
- else {
- ts.Debug.assert(attribs[i].kind === 238);
- emitJsxAttribute(attribs[i]);
- }
- }
- }
- function emitJsxOpeningOrSelfClosingElement(node) {
- write("<");
- emit(node.tagName);
- if (node.attributes.length > 0 || (node.kind === 234)) {
- write(" ");
- }
- emitAttributes(node.attributes);
- if (node.kind === 234) {
- write("/>");
- }
- else {
- write(">");
- }
- }
- function emitJsxClosingElement(node) {
- write("</");
- emit(node.tagName);
- write(">");
- }
- function emitJsxElement(node) {
- emitJsxOpeningOrSelfClosingElement(node.openingElement);
- for (var i = 0, n = node.children.length; i < n; i++) {
- emit(node.children[i]);
- }
- emitJsxClosingElement(node.closingElement);
- }
- if (node.kind === 233) {
- emitJsxElement(node);
- }
- else {
- ts.Debug.assert(node.kind === 234);
- emitJsxOpeningOrSelfClosingElement(node);
- }
- }
- function emitExpressionForPropertyName(node) {
- ts.Debug.assert(node.kind !== 163);
- if (node.kind === 9) {
- emitLiteral(node);
- }
- else if (node.kind === 136) {
- if (ts.nodeIsDecorated(node.parent)) {
- if (!computedPropertyNamesToGeneratedNames) {
- computedPropertyNamesToGeneratedNames = [];
- }
- var generatedName = computedPropertyNamesToGeneratedNames[ts.getNodeId(node)];
- if (generatedName) {
- write(generatedName);
- return;
- }
- generatedName = createAndRecordTempVariable(0).text;
- computedPropertyNamesToGeneratedNames[ts.getNodeId(node)] = generatedName;
- write(generatedName);
- write(" = ");
- }
- emit(node.expression);
- }
- else {
- write("\"");
- if (node.kind === 8) {
- write(node.text);
- }
- else {
- writeTextOfNode(currentSourceFile, node);
- }
- write("\"");
- }
- }
- function isExpressionIdentifier(node) {
- var parent = node.parent;
- switch (parent.kind) {
- case 164:
- case 189:
- case 181:
- case 168:
- case 241:
- case 136:
- case 182:
- case 139:
- case 175:
- case 197:
- case 167:
- case 227:
- case 195:
- case 188:
- case 199:
- case 200:
- case 201:
- case 196:
- case 234:
- case 235:
- case 239:
- case 240:
- case 169:
- case 172:
- case 180:
- case 179:
- case 204:
- case 246:
- case 185:
- case 206:
- case 170:
- case 190:
- case 208:
- case 171:
- case 176:
- case 177:
- case 198:
- case 205:
- case 184:
- return true;
- case 163:
- case 247:
- case 138:
- case 245:
- case 141:
- case 211:
- return parent.initializer === node;
- case 166:
- return parent.expression === node;
- case 174:
- case 173:
- return parent.body === node;
- case 221:
- return parent.moduleReference === node;
- case 135:
- return parent.left === node;
- }
- return false;
- }
- function emitExpressionIdentifier(node) {
- if (resolver.getNodeCheckFlags(node) & 2048) {
- write("_arguments");
- return;
- }
- var container = resolver.getReferencedExportContainer(node);
- if (container) {
- if (container.kind === 248) {
- if (modulekind !== 5 && modulekind !== 4) {
- write("exports.");
- }
- }
- else {
- write(getGeneratedNameForNode(container));
- write(".");
- }
- }
- else {
- if (modulekind !== 5) {
- var declaration = resolver.getReferencedImportDeclaration(node);
- if (declaration) {
- if (declaration.kind === 223) {
- write(getGeneratedNameForNode(declaration.parent));
- write(languageVersion === 0 ? "[\"default\"]" : ".default");
- return;
- }
- else if (declaration.kind === 226) {
- write(getGeneratedNameForNode(declaration.parent.parent.parent));
- var name_23 = declaration.propertyName || declaration.name;
- var identifier = ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, name_23);
- if (languageVersion === 0 && identifier === "default") {
- write("[\"default\"]");
- }
- else {
- write(".");
- write(identifier);
- }
- return;
- }
- }
- }
- if (languageVersion !== 2) {
- var declaration = resolver.getReferencedNestedRedeclaration(node);
- if (declaration) {
- write(getGeneratedNameForNode(declaration.name));
- return;
- }
- }
- }
- if (ts.nodeIsSynthesized(node)) {
- write(node.text);
- }
- else {
- writeTextOfNode(currentSourceFile, node);
- }
- }
- function isNameOfNestedRedeclaration(node) {
- if (languageVersion < 2) {
- var parent_6 = node.parent;
- switch (parent_6.kind) {
- case 163:
- case 214:
- case 217:
- case 211:
- return parent_6.name === node && resolver.isNestedRedeclaration(parent_6);
- }
- }
- return false;
- }
- function emitIdentifier(node) {
- if (!node.parent) {
- write(node.text);
- }
- else if (isExpressionIdentifier(node)) {
- emitExpressionIdentifier(node);
- }
- else if (isNameOfNestedRedeclaration(node)) {
- write(getGeneratedNameForNode(node));
- }
- else if (ts.nodeIsSynthesized(node)) {
- write(node.text);
- }
- else {
- writeTextOfNode(currentSourceFile, node);
- }
- }
- function emitThis(node) {
- if (resolver.getNodeCheckFlags(node) & 2) {
- write("_this");
- }
- else {
- write("this");
- }
- }
- function emitSuper(node) {
- if (languageVersion >= 2) {
- write("super");
- }
- else {
- var flags = resolver.getNodeCheckFlags(node);
- if (flags & 256) {
- write("_super.prototype");
- }
- else {
- write("_super");
- }
- }
- }
- function emitObjectBindingPattern(node) {
- write("{ ");
- var elements = node.elements;
- emitList(elements, 0, elements.length, false, elements.hasTrailingComma);
- write(" }");
- }
- function emitArrayBindingPattern(node) {
- write("[");
- var elements = node.elements;
- emitList(elements, 0, elements.length, false, elements.hasTrailingComma);
- write("]");
- }
- function emitBindingElement(node) {
- if (node.propertyName) {
- emit(node.propertyName);
- write(": ");
- }
- if (node.dotDotDotToken) {
- write("...");
- }
- if (ts.isBindingPattern(node.name)) {
- emit(node.name);
- }
- else {
- emitModuleMemberName(node);
- }
- emitOptional(" = ", node.initializer);
- }
- function emitSpreadElementExpression(node) {
- write("...");
- emit(node.expression);
- }
- function emitYieldExpression(node) {
- write(ts.tokenToString(114));
- if (node.asteriskToken) {
- write("*");
- }
- if (node.expression) {
- write(" ");
- emit(node.expression);
- }
- }
- function emitAwaitExpression(node) {
- var needsParenthesis = needsParenthesisForAwaitExpressionAsYield(node);
- if (needsParenthesis) {
- write("(");
- }
- write(ts.tokenToString(114));
- write(" ");
- emit(node.expression);
- if (needsParenthesis) {
- write(")");
- }
- }
- function needsParenthesisForAwaitExpressionAsYield(node) {
- if (node.parent.kind === 181 && !ts.isAssignmentOperator(node.parent.operatorToken.kind)) {
- return true;
- }
- else if (node.parent.kind === 182 && node.parent.condition === node) {
- return true;
- }
- return false;
- }
- function needsParenthesisForPropertyAccessOrInvocation(node) {
- switch (node.kind) {
- case 69:
- case 164:
- case 166:
- case 167:
- case 168:
- case 172:
- return false;
- }
- return true;
- }
- function emitListWithSpread(elements, needsUniqueCopy, multiLine, trailingComma, useConcat) {
- var pos = 0;
- var group = 0;
- var length = elements.length;
- while (pos < length) {
- if (group === 1 && useConcat) {
- write(".concat(");
- }
- else if (group > 0) {
- write(", ");
- }
- var e = elements[pos];
- if (e.kind === 185) {
- e = e.expression;
- emitParenthesizedIf(e, group === 0 && needsParenthesisForPropertyAccessOrInvocation(e));
- pos++;
- if (pos === length && group === 0 && needsUniqueCopy && e.kind !== 164) {
- write(".slice()");
- }
- }
- else {
- var i = pos;
- while (i < length && elements[i].kind !== 185) {
- i++;
- }
- write("[");
- if (multiLine) {
- increaseIndent();
- }
- emitList(elements, pos, i - pos, multiLine, trailingComma && i === length);
- if (multiLine) {
- decreaseIndent();
- }
- write("]");
- pos = i;
- }
- group++;
- }
- if (group > 1) {
- if (useConcat) {
- write(")");
- }
- }
- }
- function isSpreadElementExpression(node) {
- return node.kind === 185;
- }
- function emitArrayLiteral(node) {
- var elements = node.elements;
- if (elements.length === 0) {
- write("[]");
- }
- else if (languageVersion >= 2 || !ts.forEach(elements, isSpreadElementExpression)) {
- write("[");
- emitLinePreservingList(node, node.elements, elements.hasTrailingComma, false);
- write("]");
- }
- else {
- emitListWithSpread(elements, true, (node.flags & 2048) !== 0, elements.hasTrailingComma, true);
- }
- }
- function emitObjectLiteralBody(node, numElements) {
- if (numElements === 0) {
- write("{}");
- return;
- }
- write("{");
- if (numElements > 0) {
- var properties = node.properties;
- if (numElements === properties.length) {
- emitLinePreservingList(node, properties, languageVersion >= 1, true);
- }
- else {
- var multiLine = (node.flags & 2048) !== 0;
- if (!multiLine) {
- write(" ");
- }
- else {
- increaseIndent();
- }
- emitList(properties, 0, numElements, multiLine, false);
- if (!multiLine) {
- write(" ");
- }
- else {
- decreaseIndent();
- }
- }
- }
- write("}");
- }
- function emitDownlevelObjectLiteralWithComputedProperties(node, firstComputedPropertyIndex) {
- var multiLine = (node.flags & 2048) !== 0;
- var properties = node.properties;
- write("(");
- if (multiLine) {
- increaseIndent();
- }
- var tempVar = createAndRecordTempVariable(0);
- emit(tempVar);
- write(" = ");
- emitObjectLiteralBody(node, firstComputedPropertyIndex);
- for (var i = firstComputedPropertyIndex, n = properties.length; i < n; i++) {
- writeComma();
- var property = properties[i];
- emitStart(property);
- if (property.kind === 145 || property.kind === 146) {
- var accessors = ts.getAllAccessorDeclarations(node.properties, property);
- if (property !== accessors.firstAccessor) {
- continue;
- }
- write("Object.defineProperty(");
- emit(tempVar);
- write(", ");
- emitStart(node.name);
- emitExpressionForPropertyName(property.name);
- emitEnd(property.name);
- write(", {");
- increaseIndent();
- if (accessors.getAccessor) {
- writeLine();
- emitLeadingComments(accessors.getAccessor);
- write("get: ");
- emitStart(accessors.getAccessor);
- write("function ");
- emitSignatureAndBody(accessors.getAccessor);
- emitEnd(accessors.getAccessor);
- emitTrailingComments(accessors.getAccessor);
- write(",");
- }
- if (accessors.setAccessor) {
- writeLine();
- emitLeadingComments(accessors.setAccessor);
- write("set: ");
- emitStart(accessors.setAccessor);
- write("function ");
- emitSignatureAndBody(accessors.setAccessor);
- emitEnd(accessors.setAccessor);
- emitTrailingComments(accessors.setAccessor);
- write(",");
- }
- writeLine();
- write("enumerable: true,");
- writeLine();
- write("configurable: true");
- decreaseIndent();
- writeLine();
- write("})");
- emitEnd(property);
- }
- else {
- emitLeadingComments(property);
- emitStart(property.name);
- emit(tempVar);
- emitMemberAccessForPropertyName(property.name);
- emitEnd(property.name);
- write(" = ");
- if (property.kind === 245) {
- emit(property.initializer);
- }
- else if (property.kind === 246) {
- emitExpressionIdentifier(property.name);
- }
- else if (property.kind === 143) {
- emitFunctionDeclaration(property);
- }
- else {
- ts.Debug.fail("ObjectLiteralElement type not accounted for: " + property.kind);
- }
- }
- emitEnd(property);
- }
- writeComma();
- emit(tempVar);
- if (multiLine) {
- decreaseIndent();
- writeLine();
- }
- write(")");
- function writeComma() {
- if (multiLine) {
- write(",");
- writeLine();
- }
- else {
- write(", ");
- }
- }
- }
- function emitObjectLiteral(node) {
- var properties = node.properties;
- if (languageVersion < 2) {
- var numProperties = properties.length;
- var numInitialNonComputedProperties = numProperties;
- for (var i = 0, n = properties.length; i < n; i++) {
- if (properties[i].name.kind === 136) {
- numInitialNonComputedProperties = i;
- break;
- }
- }
- var hasComputedProperty = numInitialNonComputedProperties !== properties.length;
- if (hasComputedProperty) {
- emitDownlevelObjectLiteralWithComputedProperties(node, numInitialNonComputedProperties);
- return;
- }
- }
- emitObjectLiteralBody(node, properties.length);
- }
- function createBinaryExpression(left, operator, right, startsOnNewLine) {
- var result = ts.createSynthesizedNode(181, startsOnNewLine);
- result.operatorToken = ts.createSynthesizedNode(operator);
- result.left = left;
- result.right = right;
- return result;
- }
- function createPropertyAccessExpression(expression, name) {
- var result = ts.createSynthesizedNode(166);
- result.expression = parenthesizeForAccess(expression);
- result.dotToken = ts.createSynthesizedNode(21);
- result.name = name;
- return result;
- }
- function createElementAccessExpression(expression, argumentExpression) {
- var result = ts.createSynthesizedNode(167);
- result.expression = parenthesizeForAccess(expression);
- result.argumentExpression = argumentExpression;
- return result;
- }
- function parenthesizeForAccess(expr) {
- while (expr.kind === 171 || expr.kind === 189) {
- expr = expr.expression;
- }
- if (ts.isLeftHandSideExpression(expr) &&
- expr.kind !== 169 &&
- expr.kind !== 8) {
- return expr;
- }
- var node = ts.createSynthesizedNode(172);
- node.expression = expr;
- return node;
- }
- function emitComputedPropertyName(node) {
- write("[");
- emitExpressionForPropertyName(node);
- write("]");
- }
- function emitMethod(node) {
- if (languageVersion >= 2 && node.asteriskToken) {
- write("*");
- }
- emit(node.name);
- if (languageVersion < 2) {
- write(": function ");
- }
- emitSignatureAndBody(node);
- }
- function emitPropertyAssignment(node) {
- emit(node.name);
- write(": ");
- emitTrailingCommentsOfPosition(node.initializer.pos);
- emit(node.initializer);
- }
- function isNamespaceExportReference(node) {
- var container = resolver.getReferencedExportContainer(node);
- return container && container.kind !== 248;
- }
- function emitShorthandPropertyAssignment(node) {
- writeTextOfNode(currentSourceFile, node.name);
- if (languageVersion < 2 || isNamespaceExportReference(node.name)) {
- write(": ");
- emit(node.name);
- }
- if (languageVersion >= 2 && node.objectAssignmentInitializer) {
- write(" = ");
- emit(node.objectAssignmentInitializer);
- }
- }
- function tryEmitConstantValue(node) {
- var constantValue = tryGetConstEnumValue(node);
- if (constantValue !== undefined) {
- write(constantValue.toString());
- if (!compilerOptions.removeComments) {
- var propertyName = node.kind === 166 ? ts.declarationNameToString(node.name) : ts.getTextOfNode(node.argumentExpression);
- write(" /* " + propertyName + " */");
- }
- return true;
- }
- return false;
- }
- function tryGetConstEnumValue(node) {
- if (compilerOptions.isolatedModules) {
- return undefined;
- }
- return node.kind === 166 || node.kind === 167
- ? resolver.getConstantValue(node)
- : undefined;
- }
- function indentIfOnDifferentLines(parent, node1, node2, valueToWriteWhenNotIndenting) {
- var realNodesAreOnDifferentLines = !ts.nodeIsSynthesized(parent) && !nodeEndIsOnSameLineAsNodeStart(node1, node2);
- var synthesizedNodeIsOnDifferentLine = synthesizedNodeStartsOnNewLine(node2);
- if (realNodesAreOnDifferentLines || synthesizedNodeIsOnDifferentLine) {
- increaseIndent();
- writeLine();
- return true;
- }
- else {
- if (valueToWriteWhenNotIndenting) {
- write(valueToWriteWhenNotIndenting);
- }
- return false;
- }
- }
- function emitPropertyAccess(node) {
- if (tryEmitConstantValue(node)) {
- return;
- }
- emit(node.expression);
- var indentedBeforeDot = indentIfOnDifferentLines(node, node.expression, node.dotToken);
- var shouldEmitSpace;
- if (!indentedBeforeDot) {
- if (node.expression.kind === 8) {
- var text = ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, node.expression);
- shouldEmitSpace = text.indexOf(ts.tokenToString(21)) < 0;
- }
- else {
- var constantValue = tryGetConstEnumValue(node.expression);
- shouldEmitSpace = isFinite(constantValue) && Math.floor(constantValue) === constantValue;
- }
- }
- if (shouldEmitSpace) {
- write(" .");
- }
- else {
- write(".");
- }
- var indentedAfterDot = indentIfOnDifferentLines(node, node.dotToken, node.name);
- emit(node.name);
- decreaseIndentIf(indentedBeforeDot, indentedAfterDot);
- }
- function emitQualifiedName(node) {
- emit(node.left);
- write(".");
- emit(node.right);
- }
- function emitQualifiedNameAsExpression(node, useFallback) {
- if (node.left.kind === 69) {
- emitEntityNameAsExpression(node.left, useFallback);
- }
- else if (useFallback) {
- var temp = createAndRecordTempVariable(0);
- write("(");
- emitNodeWithoutSourceMap(temp);
- write(" = ");
- emitEntityNameAsExpression(node.left, true);
- write(") && ");
- emitNodeWithoutSourceMap(temp);
- }
- else {
- emitEntityNameAsExpression(node.left, false);
- }
- write(".");
- emit(node.right);
- }
- function emitEntityNameAsExpression(node, useFallback) {
- switch (node.kind) {
- case 69:
- if (useFallback) {
- write("typeof ");
- emitExpressionIdentifier(node);
- write(" !== 'undefined' && ");
- }
- emitExpressionIdentifier(node);
- break;
- case 135:
- emitQualifiedNameAsExpression(node, useFallback);
- break;
- }
- }
- function emitIndexedAccess(node) {
- if (tryEmitConstantValue(node)) {
- return;
- }
- emit(node.expression);
- write("[");
- emit(node.argumentExpression);
- write("]");
- }
- function hasSpreadElement(elements) {
- return ts.forEach(elements, function (e) { return e.kind === 185; });
- }
- function skipParentheses(node) {
- while (node.kind === 172 || node.kind === 171 || node.kind === 189) {
- node = node.expression;
- }
- return node;
- }
- function emitCallTarget(node) {
- if (node.kind === 69 || node.kind === 97 || node.kind === 95) {
- emit(node);
- return node;
- }
- var temp = createAndRecordTempVariable(0);
- write("(");
- emit(temp);
- write(" = ");
- emit(node);
- write(")");
- return temp;
- }
- function emitCallWithSpread(node) {
- var target;
- var expr = skipParentheses(node.expression);
- if (expr.kind === 166) {
- target = emitCallTarget(expr.expression);
- write(".");
- emit(expr.name);
- }
- else if (expr.kind === 167) {
- target = emitCallTarget(expr.expression);
- write("[");
- emit(expr.argumentExpression);
- write("]");
- }
- else if (expr.kind === 95) {
- target = expr;
- write("_super");
- }
- else {
- emit(node.expression);
- }
- write(".apply(");
- if (target) {
- if (target.kind === 95) {
- emitThis(target);
- }
- else {
- emit(target);
- }
- }
- else {
- write("void 0");
- }
- write(", ");
- emitListWithSpread(node.arguments, false, false, false, true);
- write(")");
- }
- function emitCallExpression(node) {
- if (languageVersion < 2 && hasSpreadElement(node.arguments)) {
- emitCallWithSpread(node);
- return;
- }
- var superCall = false;
- if (node.expression.kind === 95) {
- emitSuper(node.expression);
- superCall = true;
- }
- else {
- emit(node.expression);
- superCall = node.expression.kind === 166 && node.expression.expression.kind === 95;
- }
- if (superCall && languageVersion < 2) {
- write(".call(");
- emitThis(node.expression);
- if (node.arguments.length) {
- write(", ");
- emitCommaList(node.arguments);
- }
- write(")");
- }
- else {
- write("(");
- emitCommaList(node.arguments);
- write(")");
- }
- }
- function emitNewExpression(node) {
- write("new ");
- if (languageVersion === 1 &&
- node.arguments &&
- hasSpreadElement(node.arguments)) {
- write("(");
- var target = emitCallTarget(node.expression);
- write(".bind.apply(");
- emit(target);
- write(", [void 0].concat(");
- emitListWithSpread(node.arguments, false, false, false, false);
- write(")))");
- write("()");
- }
- else {
- emit(node.expression);
- if (node.arguments) {
- write("(");
- emitCommaList(node.arguments);
- write(")");
- }
- }
- }
- function emitTaggedTemplateExpression(node) {
- if (languageVersion >= 2) {
- emit(node.tag);
- write(" ");
- emit(node.template);
- }
- else {
- emitDownlevelTaggedTemplate(node);
- }
- }
- function emitParenExpression(node) {
- if (!ts.nodeIsSynthesized(node) && node.parent.kind !== 174) {
- if (node.expression.kind === 171 || node.expression.kind === 189) {
- var operand = node.expression.expression;
- while (operand.kind === 171 || operand.kind === 189) {
- operand = operand.expression;
- }
- if (operand.kind !== 179 &&
- operand.kind !== 177 &&
- operand.kind !== 176 &&
- operand.kind !== 175 &&
- operand.kind !== 180 &&
- operand.kind !== 169 &&
- !(operand.kind === 168 && node.parent.kind === 169) &&
- !(operand.kind === 173 && node.parent.kind === 168) &&
- !(operand.kind === 8 && node.parent.kind === 166)) {
- emit(operand);
- return;
- }
- }
- }
- write("(");
- emit(node.expression);
- write(")");
- }
- function emitDeleteExpression(node) {
- write(ts.tokenToString(78));
- write(" ");
- emit(node.expression);
- }
- function emitVoidExpression(node) {
- write(ts.tokenToString(103));
- write(" ");
- emit(node.expression);
- }
- function emitTypeOfExpression(node) {
- write(ts.tokenToString(101));
- write(" ");
- emit(node.expression);
- }
- function isNameOfExportedSourceLevelDeclarationInSystemExternalModule(node) {
- if (!isCurrentFileSystemExternalModule() || node.kind !== 69 || ts.nodeIsSynthesized(node)) {
- return false;
- }
- var isVariableDeclarationOrBindingElement = node.parent && (node.parent.kind === 211 || node.parent.kind === 163);
- var targetDeclaration = isVariableDeclarationOrBindingElement
- ? node.parent
- : resolver.getReferencedValueDeclaration(node);
- return isSourceFileLevelDeclarationInSystemJsModule(targetDeclaration, true);
- }
- function emitPrefixUnaryExpression(node) {
- var exportChanged = isNameOfExportedSourceLevelDeclarationInSystemExternalModule(node.operand);
- if (exportChanged) {
- write(exportFunctionForFile + "(\"");
- emitNodeWithoutSourceMap(node.operand);
- write("\", ");
- }
- write(ts.tokenToString(node.operator));
- if (node.operand.kind === 179) {
- var operand = node.operand;
- if (node.operator === 35 && (operand.operator === 35 || operand.operator === 41)) {
- write(" ");
- }
- else if (node.operator === 36 && (operand.operator === 36 || operand.operator === 42)) {
- write(" ");
- }
- }
- emit(node.operand);
- if (exportChanged) {
- write(")");
- }
- }
- function emitPostfixUnaryExpression(node) {
- var exportChanged = isNameOfExportedSourceLevelDeclarationInSystemExternalModule(node.operand);
- if (exportChanged) {
- write("(" + exportFunctionForFile + "(\"");
- emitNodeWithoutSourceMap(node.operand);
- write("\", ");
- write(ts.tokenToString(node.operator));
- emit(node.operand);
- if (node.operator === 41) {
- write(") - 1)");
- }
- else {
- write(") + 1)");
- }
- }
- else {
- emit(node.operand);
- write(ts.tokenToString(node.operator));
- }
- }
- function shouldHoistDeclarationInSystemJsModule(node) {
- return isSourceFileLevelDeclarationInSystemJsModule(node, false);
- }
- function isSourceFileLevelDeclarationInSystemJsModule(node, isExported) {
- if (!node || languageVersion >= 2 || !isCurrentFileSystemExternalModule()) {
- return false;
- }
- var current = node;
- while (current) {
- if (current.kind === 248) {
- return !isExported || ((ts.getCombinedNodeFlags(node) & 1) !== 0);
- }
- else if (ts.isFunctionLike(current) || current.kind === 219) {
- return false;
- }
- else {
- current = current.parent;
- }
- }
- }
- function emitExponentiationOperator(node) {
- var leftHandSideExpression = node.left;
- if (node.operatorToken.kind === 60) {
- var synthesizedLHS;
- var shouldEmitParentheses = false;
- if (ts.isElementAccessExpression(leftHandSideExpression)) {
- shouldEmitParentheses = true;
- write("(");
- synthesizedLHS = ts.createSynthesizedNode(167, false);
- var identifier = emitTempVariableAssignment(leftHandSideExpression.expression, false, false);
- synthesizedLHS.expression = identifier;
- if (leftHandSideExpression.argumentExpression.kind !== 8 &&
- leftHandSideExpression.argumentExpression.kind !== 9) {
- var tempArgumentExpression = createAndRecordTempVariable(268435456);
- synthesizedLHS.argumentExpression = tempArgumentExpression;
- emitAssignment(tempArgumentExpression, leftHandSideExpression.argumentExpression, true);
- }
- else {
- synthesizedLHS.argumentExpression = leftHandSideExpression.argumentExpression;
- }
- write(", ");
- }
- else if (ts.isPropertyAccessExpression(leftHandSideExpression)) {
- shouldEmitParentheses = true;
- write("(");
- synthesizedLHS = ts.createSynthesizedNode(166, false);
- var identifier = emitTempVariableAssignment(leftHandSideExpression.expression, false, false);
- synthesizedLHS.expression = identifier;
- synthesizedLHS.dotToken = leftHandSideExpression.dotToken;
- synthesizedLHS.name = leftHandSideExpression.name;
- write(", ");
- }
- emit(synthesizedLHS || leftHandSideExpression);
- write(" = ");
- write("Math.pow(");
- emit(synthesizedLHS || leftHandSideExpression);
- write(", ");
- emit(node.right);
- write(")");
- if (shouldEmitParentheses) {
- write(")");
- }
- }
- else {
- write("Math.pow(");
- emit(leftHandSideExpression);
- write(", ");
- emit(node.right);
- write(")");
- }
- }
- function emitBinaryExpression(node) {
- if (languageVersion < 2 && node.operatorToken.kind === 56 &&
- (node.left.kind === 165 || node.left.kind === 164)) {
- emitDestructuring(node, node.parent.kind === 195);
- }
- else {
- var exportChanged = node.operatorToken.kind >= 56 &&
- node.operatorToken.kind <= 68 &&
- isNameOfExportedSourceLevelDeclarationInSystemExternalModule(node.left);
- if (exportChanged) {
- write(exportFunctionForFile + "(\"");
- emitNodeWithoutSourceMap(node.left);
- write("\", ");
- }
- if (node.operatorToken.kind === 38 || node.operatorToken.kind === 60) {
- emitExponentiationOperator(node);
- }
- else {
- emit(node.left);
- var indentedBeforeOperator = indentIfOnDifferentLines(node, node.left, node.operatorToken, node.operatorToken.kind !== 24 ? " " : undefined);
- write(ts.tokenToString(node.operatorToken.kind));
- var indentedAfterOperator = indentIfOnDifferentLines(node, node.operatorToken, node.right, " ");
- emit(node.right);
- decreaseIndentIf(indentedBeforeOperator, indentedAfterOperator);
- }
- if (exportChanged) {
- write(")");
- }
- }
- }
- function synthesizedNodeStartsOnNewLine(node) {
- return ts.nodeIsSynthesized(node) && node.startsOnNewLine;
- }
- function emitConditionalExpression(node) {
- emit(node.condition);
- var indentedBeforeQuestion = indentIfOnDifferentLines(node, node.condition, node.questionToken, " ");
- write("?");
- var indentedAfterQuestion = indentIfOnDifferentLines(node, node.questionToken, node.whenTrue, " ");
- emit(node.whenTrue);
- decreaseIndentIf(indentedBeforeQuestion, indentedAfterQuestion);
- var indentedBeforeColon = indentIfOnDifferentLines(node, node.whenTrue, node.colonToken, " ");
- write(":");
- var indentedAfterColon = indentIfOnDifferentLines(node, node.colonToken, node.whenFalse, " ");
- emit(node.whenFalse);
- decreaseIndentIf(indentedBeforeColon, indentedAfterColon);
- }
- function decreaseIndentIf(value1, value2) {
- if (value1) {
- decreaseIndent();
- }
- if (value2) {
- decreaseIndent();
- }
- }
- function isSingleLineEmptyBlock(node) {
- if (node && node.kind === 192) {
- var block = node;
- return block.statements.length === 0 && nodeEndIsOnSameLineAsNodeStart(block, block);
- }
- }
- function emitBlock(node) {
- if (isSingleLineEmptyBlock(node)) {
- emitToken(15, node.pos);
- write(" ");
- emitToken(16, node.statements.end);
- return;
- }
- emitToken(15, node.pos);
- increaseIndent();
- scopeEmitStart(node.parent);
- if (node.kind === 219) {
- ts.Debug.assert(node.parent.kind === 218);
- emitCaptureThisForNodeIfNecessary(node.parent);
- }
- emitLines(node.statements);
- if (node.kind === 219) {
- emitTempDeclarations(true);
- }
- decreaseIndent();
- writeLine();
- emitToken(16, node.statements.end);
- scopeEmitEnd();
- }
- function emitEmbeddedStatement(node) {
- if (node.kind === 192) {
- write(" ");
- emit(node);
- }
- else {
- increaseIndent();
- writeLine();
- emit(node);
- decreaseIndent();
- }
- }
- function emitExpressionStatement(node) {
- emitParenthesizedIf(node.expression, node.expression.kind === 174);
- write(";");
- }
- function emitIfStatement(node) {
- var endPos = emitToken(88, node.pos);
- write(" ");
- endPos = emitToken(17, endPos);
- emit(node.expression);
- emitToken(18, node.expression.end);
- emitEmbeddedStatement(node.thenStatement);
- if (node.elseStatement) {
- writeLine();
- emitToken(80, node.thenStatement.end);
- if (node.elseStatement.kind === 196) {
- write(" ");
- emit(node.elseStatement);
- }
- else {
- emitEmbeddedStatement(node.elseStatement);
- }
- }
- }
- function emitDoStatement(node) {
- write("do");
- emitEmbeddedStatement(node.statement);
- if (node.statement.kind === 192) {
- write(" ");
- }
- else {
- writeLine();
- }
- write("while (");
- emit(node.expression);
- write(");");
- }
- function emitWhileStatement(node) {
- write("while (");
- emit(node.expression);
- write(")");
- emitEmbeddedStatement(node.statement);
- }
- function tryEmitStartOfVariableDeclarationList(decl, startPos) {
- if (shouldHoistVariable(decl, true)) {
- return false;
- }
- var tokenKind = 102;
- if (decl && languageVersion >= 2) {
- if (ts.isLet(decl)) {
- tokenKind = 108;
- }
- else if (ts.isConst(decl)) {
- tokenKind = 74;
- }
- }
- if (startPos !== undefined) {
- emitToken(tokenKind, startPos);
- write(" ");
- }
- else {
- switch (tokenKind) {
- case 102:
- write("var ");
- break;
- case 108:
- write("let ");
- break;
- case 74:
- write("const ");
- break;
- }
- }
- return true;
- }
- function emitVariableDeclarationListSkippingUninitializedEntries(list) {
- var started = false;
- for (var _a = 0, _b = list.declarations; _a < _b.length; _a++) {
- var decl = _b[_a];
- if (!decl.initializer) {
- continue;
- }
- if (!started) {
- started = true;
- }
- else {
- write(", ");
- }
- emit(decl);
- }
- return started;
- }
- function emitForStatement(node) {
- var endPos = emitToken(86, node.pos);
- write(" ");
- endPos = emitToken(17, endPos);
- if (node.initializer && node.initializer.kind === 212) {
- var variableDeclarationList = node.initializer;
- var startIsEmitted = tryEmitStartOfVariableDeclarationList(variableDeclarationList, endPos);
- if (startIsEmitted) {
- emitCommaList(variableDeclarationList.declarations);
- }
- else {
- emitVariableDeclarationListSkippingUninitializedEntries(variableDeclarationList);
- }
- }
- else if (node.initializer) {
- emit(node.initializer);
- }
- write(";");
- emitOptional(" ", node.condition);
- write(";");
- emitOptional(" ", node.incrementor);
- write(")");
- emitEmbeddedStatement(node.statement);
- }
- function emitForInOrForOfStatement(node) {
- if (languageVersion < 2 && node.kind === 201) {
- return emitDownLevelForOfStatement(node);
- }
- var endPos = emitToken(86, node.pos);
- write(" ");
- endPos = emitToken(17, endPos);
- if (node.initializer.kind === 212) {
- var variableDeclarationList = node.initializer;
- if (variableDeclarationList.declarations.length >= 1) {
- tryEmitStartOfVariableDeclarationList(variableDeclarationList, endPos);
- emit(variableDeclarationList.declarations[0]);
- }
- }
- else {
- emit(node.initializer);
- }
- if (node.kind === 200) {
- write(" in ");
- }
- else {
- write(" of ");
- }
- emit(node.expression);
- emitToken(18, node.expression.end);
- emitEmbeddedStatement(node.statement);
- }
- function emitDownLevelForOfStatement(node) {
- var endPos = emitToken(86, node.pos);
- write(" ");
- endPos = emitToken(17, endPos);
- var rhsIsIdentifier = node.expression.kind === 69;
- var counter = createTempVariable(268435456);
- var rhsReference = rhsIsIdentifier ? node.expression : createTempVariable(0);
- emitStart(node.expression);
- write("var ");
- emitNodeWithoutSourceMap(counter);
- write(" = 0");
- emitEnd(node.expression);
- if (!rhsIsIdentifier) {
- write(", ");
- emitStart(node.expression);
- emitNodeWithoutSourceMap(rhsReference);
- write(" = ");
- emitNodeWithoutSourceMap(node.expression);
- emitEnd(node.expression);
- }
- write("; ");
- emitStart(node.initializer);
- emitNodeWithoutSourceMap(counter);
- write(" < ");
- emitNodeWithCommentsAndWithoutSourcemap(rhsReference);
- write(".length");
- emitEnd(node.initializer);
- write("; ");
- emitStart(node.initializer);
- emitNodeWithoutSourceMap(counter);
- write("++");
- emitEnd(node.initializer);
- emitToken(18, node.expression.end);
- write(" {");
- writeLine();
- increaseIndent();
- var rhsIterationValue = createElementAccessExpression(rhsReference, counter);
- emitStart(node.initializer);
- if (node.initializer.kind === 212) {
- write("var ");
- var variableDeclarationList = node.initializer;
- if (variableDeclarationList.declarations.length > 0) {
- var declaration = variableDeclarationList.declarations[0];
- if (ts.isBindingPattern(declaration.name)) {
- emitDestructuring(declaration, false, rhsIterationValue);
- }
- else {
- emitNodeWithCommentsAndWithoutSourcemap(declaration);
- write(" = ");
- emitNodeWithoutSourceMap(rhsIterationValue);
- }
- }
- else {
- emitNodeWithoutSourceMap(createTempVariable(0));
- write(" = ");
- emitNodeWithoutSourceMap(rhsIterationValue);
- }
- }
- else {
- var assignmentExpression = createBinaryExpression(node.initializer, 56, rhsIterationValue, false);
- if (node.initializer.kind === 164 || node.initializer.kind === 165) {
- emitDestructuring(assignmentExpression, true, undefined);
- }
- else {
- emitNodeWithCommentsAndWithoutSourcemap(assignmentExpression);
- }
- }
- emitEnd(node.initializer);
- write(";");
- if (node.statement.kind === 192) {
- emitLines(node.statement.statements);
- }
- else {
- writeLine();
- emit(node.statement);
- }
- writeLine();
- decreaseIndent();
- write("}");
- }
- function emitBreakOrContinueStatement(node) {
- emitToken(node.kind === 203 ? 70 : 75, node.pos);
- emitOptional(" ", node.label);
- write(";");
- }
- function emitReturnStatement(node) {
- emitToken(94, node.pos);
- emitOptional(" ", node.expression);
- write(";");
- }
- function emitWithStatement(node) {
- write("with (");
- emit(node.expression);
- write(")");
- emitEmbeddedStatement(node.statement);
- }
- function emitSwitchStatement(node) {
- var endPos = emitToken(96, node.pos);
- write(" ");
- emitToken(17, endPos);
- emit(node.expression);
- endPos = emitToken(18, node.expression.end);
- write(" ");
- emitCaseBlock(node.caseBlock, endPos);
- }
- function emitCaseBlock(node, startPos) {
- emitToken(15, startPos);
- increaseIndent();
- emitLines(node.clauses);
- decreaseIndent();
- writeLine();
- emitToken(16, node.clauses.end);
- }
- function nodeStartPositionsAreOnSameLine(node1, node2) {
- return ts.getLineOfLocalPosition(currentSourceFile, ts.skipTrivia(currentSourceFile.text, node1.pos)) ===
- ts.getLineOfLocalPosition(currentSourceFile, ts.skipTrivia(currentSourceFile.text, node2.pos));
- }
- function nodeEndPositionsAreOnSameLine(node1, node2) {
- return ts.getLineOfLocalPosition(currentSourceFile, node1.end) ===
- ts.getLineOfLocalPosition(currentSourceFile, node2.end);
- }
- function nodeEndIsOnSameLineAsNodeStart(node1, node2) {
- return ts.getLineOfLocalPosition(currentSourceFile, node1.end) ===
- ts.getLineOfLocalPosition(currentSourceFile, ts.skipTrivia(currentSourceFile.text, node2.pos));
- }
- function emitCaseOrDefaultClause(node) {
- if (node.kind === 241) {
- write("case ");
- emit(node.expression);
- write(":");
- }
- else {
- write("default:");
- }
- if (node.statements.length === 1 && nodeStartPositionsAreOnSameLine(node, node.statements[0])) {
- write(" ");
- emit(node.statements[0]);
- }
- else {
- increaseIndent();
- emitLines(node.statements);
- decreaseIndent();
- }
- }
- function emitThrowStatement(node) {
- write("throw ");
- emit(node.expression);
- write(";");
- }
- function emitTryStatement(node) {
- write("try ");
- emit(node.tryBlock);
- emit(node.catchClause);
- if (node.finallyBlock) {
- writeLine();
- write("finally ");
- emit(node.finallyBlock);
- }
- }
- function emitCatchClause(node) {
- writeLine();
- var endPos = emitToken(72, node.pos);
- write(" ");
- emitToken(17, endPos);
- emit(node.variableDeclaration);
- emitToken(18, node.variableDeclaration ? node.variableDeclaration.end : endPos);
- write(" ");
- emitBlock(node.block);
- }
- function emitDebuggerStatement(node) {
- emitToken(76, node.pos);
- write(";");
- }
- function emitLabelledStatement(node) {
- emit(node.label);
- write(": ");
- emit(node.statement);
- }
- function getContainingModule(node) {
- do {
- node = node.parent;
- } while (node && node.kind !== 218);
- return node;
- }
- function emitContainingModuleName(node) {
- var container = getContainingModule(node);
- write(container ? getGeneratedNameForNode(container) : "exports");
- }
- function emitModuleMemberName(node) {
- emitStart(node.name);
- if (ts.getCombinedNodeFlags(node) & 1) {
- var container = getContainingModule(node);
- if (container) {
- write(getGeneratedNameForNode(container));
- write(".");
- }
- else if (modulekind !== 5 && modulekind !== 4) {
- write("exports.");
- }
- }
- emitNodeWithCommentsAndWithoutSourcemap(node.name);
- emitEnd(node.name);
- }
- function createVoidZero() {
- var zero = ts.createSynthesizedNode(8);
- zero.text = "0";
- var result = ts.createSynthesizedNode(177);
- result.expression = zero;
- return result;
- }
- function emitEs6ExportDefaultCompat(node) {
- if (node.parent.kind === 248) {
- ts.Debug.assert(!!(node.flags & 1024) || node.kind === 227);
- if (modulekind === 1 || modulekind === 2 || modulekind === 3) {
- if (!currentSourceFile.symbol.exports["___esModule"]) {
- if (languageVersion === 1) {
- write("Object.defineProperty(exports, \"__esModule\", { value: true });");
- writeLine();
- }
- else if (languageVersion === 0) {
- write("exports.__esModule = true;");
- writeLine();
- }
- }
- }
- }
- }
- function emitExportMemberAssignment(node) {
- if (node.flags & 1) {
- writeLine();
- emitStart(node);
- if (modulekind === 4 && node.parent === currentSourceFile) {
- write(exportFunctionForFile + "(\"");
- if (node.flags & 1024) {
- write("default");
- }
- else {
- emitNodeWithCommentsAndWithoutSourcemap(node.name);
- }
- write("\", ");
- emitDeclarationName(node);
- write(")");
- }
- else {
- if (node.flags & 1024) {
- emitEs6ExportDefaultCompat(node);
- if (languageVersion === 0) {
- write("exports[\"default\"]");
- }
- else {
- write("exports.default");
- }
- }
- else {
- emitModuleMemberName(node);
- }
- write(" = ");
- emitDeclarationName(node);
- }
- emitEnd(node);
- write(";");
- }
- }
- function emitExportMemberAssignments(name) {
- if (modulekind === 4) {
- return;
- }
- if (!exportEquals && exportSpecifiers && ts.hasProperty(exportSpecifiers, name.text)) {
- for (var _a = 0, _b = exportSpecifiers[name.text]; _a < _b.length; _a++) {
- var specifier = _b[_a];
- writeLine();
- emitStart(specifier.name);
- emitContainingModuleName(specifier);
- write(".");
- emitNodeWithCommentsAndWithoutSourcemap(specifier.name);
- emitEnd(specifier.name);
- write(" = ");
- emitExpressionIdentifier(name);
- write(";");
- }
- }
- }
- function emitExportSpecifierInSystemModule(specifier) {
- ts.Debug.assert(modulekind === 4);
- if (!resolver.getReferencedValueDeclaration(specifier.propertyName || specifier.name) && !resolver.isValueAliasDeclaration(specifier)) {
- return;
- }
- writeLine();
- emitStart(specifier.name);
- write(exportFunctionForFile + "(\"");
- emitNodeWithCommentsAndWithoutSourcemap(specifier.name);
- write("\", ");
- emitExpressionIdentifier(specifier.propertyName || specifier.name);
- write(")");
- emitEnd(specifier.name);
- write(";");
- }
- function emitAssignment(name, value, shouldEmitCommaBeforeAssignment) {
- if (shouldEmitCommaBeforeAssignment) {
- write(", ");
- }
- var exportChanged = isNameOfExportedSourceLevelDeclarationInSystemExternalModule(name);
- if (exportChanged) {
- write(exportFunctionForFile + "(\"");
- emitNodeWithCommentsAndWithoutSourcemap(name);
- write("\", ");
- }
- var isVariableDeclarationOrBindingElement = name.parent && (name.parent.kind === 211 || name.parent.kind === 163);
- if (isVariableDeclarationOrBindingElement) {
- emitModuleMemberName(name.parent);
- }
- else {
- emit(name);
- }
- write(" = ");
- emit(value);
- if (exportChanged) {
- write(")");
- }
- }
- function emitTempVariableAssignment(expression, canDefineTempVariablesInPlace, shouldEmitCommaBeforeAssignment) {
- var identifier = createTempVariable(0);
- if (!canDefineTempVariablesInPlace) {
- recordTempDeclaration(identifier);
- }
- emitAssignment(identifier, expression, shouldEmitCommaBeforeAssignment);
- return identifier;
- }
- function emitDestructuring(root, isAssignmentExpressionStatement, value) {
- var emitCount = 0;
- var canDefineTempVariablesInPlace = false;
- if (root.kind === 211) {
- var isExported = ts.getCombinedNodeFlags(root) & 1;
- var isSourceLevelForSystemModuleKind = shouldHoistDeclarationInSystemJsModule(root);
- canDefineTempVariablesInPlace = !isExported && !isSourceLevelForSystemModuleKind;
- }
- else if (root.kind === 138) {
- canDefineTempVariablesInPlace = true;
- }
- if (root.kind === 181) {
- emitAssignmentExpression(root);
- }
- else {
- ts.Debug.assert(!isAssignmentExpressionStatement);
- emitBindingElement(root, value);
- }
- function ensureIdentifier(expr, reuseIdentifierExpressions) {
- if (expr.kind === 69 && reuseIdentifierExpressions) {
- return expr;
- }
- var identifier = emitTempVariableAssignment(expr, canDefineTempVariablesInPlace, emitCount > 0);
- emitCount++;
- return identifier;
- }
- function createDefaultValueCheck(value, defaultValue) {
- value = ensureIdentifier(value, true);
- var equals = ts.createSynthesizedNode(181);
- equals.left = value;
- equals.operatorToken = ts.createSynthesizedNode(32);
- equals.right = createVoidZero();
- return createConditionalExpression(equals, defaultValue, value);
- }
- function createConditionalExpression(condition, whenTrue, whenFalse) {
- var cond = ts.createSynthesizedNode(182);
- cond.condition = condition;
- cond.questionToken = ts.createSynthesizedNode(53);
- cond.whenTrue = whenTrue;
- cond.colonToken = ts.createSynthesizedNode(54);
- cond.whenFalse = whenFalse;
- return cond;
- }
- function createNumericLiteral(value) {
- var node = ts.createSynthesizedNode(8);
- node.text = "" + value;
- return node;
- }
- function createPropertyAccessForDestructuringProperty(object, propName) {
- var syntheticName = ts.createSynthesizedNode(propName.kind);
- syntheticName.text = propName.text;
- if (syntheticName.kind !== 69) {
- return createElementAccessExpression(object, syntheticName);
- }
- return createPropertyAccessExpression(object, syntheticName);
- }
- function createSliceCall(value, sliceIndex) {
- var call = ts.createSynthesizedNode(168);
- var sliceIdentifier = ts.createSynthesizedNode(69);
- sliceIdentifier.text = "slice";
- call.expression = createPropertyAccessExpression(value, sliceIdentifier);
- call.arguments = ts.createSynthesizedNodeArray();
- call.arguments[0] = createNumericLiteral(sliceIndex);
- return call;
- }
- function emitObjectLiteralAssignment(target, value) {
- var properties = target.properties;
- if (properties.length !== 1) {
- value = ensureIdentifier(value, true);
- }
- for (var _a = 0; _a < properties.length; _a++) {
- var p = properties[_a];
- if (p.kind === 245 || p.kind === 246) {
- var propName = p.name;
- var target_1 = p.kind === 246 ? p : p.initializer || propName;
- emitDestructuringAssignment(target_1, createPropertyAccessForDestructuringProperty(value, propName));
- }
- }
- }
- function emitArrayLiteralAssignment(target, value) {
- var elements = target.elements;
- if (elements.length !== 1) {
- value = ensureIdentifier(value, true);
- }
- for (var i = 0; i < elements.length; i++) {
- var e = elements[i];
- if (e.kind !== 187) {
- if (e.kind !== 185) {
- emitDestructuringAssignment(e, createElementAccessExpression(value, createNumericLiteral(i)));
- }
- else if (i === elements.length - 1) {
- emitDestructuringAssignment(e.expression, createSliceCall(value, i));
- }
- }
- }
- }
- function emitDestructuringAssignment(target, value) {
- if (target.kind === 246) {
- if (target.objectAssignmentInitializer) {
- value = createDefaultValueCheck(value, target.objectAssignmentInitializer);
- }
- target = target.name;
- }
- else if (target.kind === 181 && target.operatorToken.kind === 56) {
- value = createDefaultValueCheck(value, target.right);
- target = target.left;
- }
- if (target.kind === 165) {
- emitObjectLiteralAssignment(target, value);
- }
- else if (target.kind === 164) {
- emitArrayLiteralAssignment(target, value);
- }
- else {
- emitAssignment(target, value, emitCount > 0);
- emitCount++;
- }
- }
- function emitAssignmentExpression(root) {
- var target = root.left;
- var value = root.right;
- if (ts.isEmptyObjectLiteralOrArrayLiteral(target)) {
- emit(value);
- }
- else if (isAssignmentExpressionStatement) {
- emitDestructuringAssignment(target, value);
- }
- else {
- if (root.parent.kind !== 172) {
- write("(");
- }
- value = ensureIdentifier(value, true);
- emitDestructuringAssignment(target, value);
- write(", ");
- emit(value);
- if (root.parent.kind !== 172) {
- write(")");
- }
- }
- }
- function emitBindingElement(target, value) {
- if (target.initializer) {
- value = value ? createDefaultValueCheck(value, target.initializer) : target.initializer;
- }
- else if (!value) {
- value = createVoidZero();
- }
- if (ts.isBindingPattern(target.name)) {
- var pattern = target.name;
- var elements = pattern.elements;
- var numElements = elements.length;
- if (numElements !== 1) {
- value = ensureIdentifier(value, numElements !== 0);
- }
- for (var i = 0; i < numElements; i++) {
- var element = elements[i];
- if (pattern.kind === 161) {
- var propName = element.propertyName || element.name;
- emitBindingElement(element, createPropertyAccessForDestructuringProperty(value, propName));
- }
- else if (element.kind !== 187) {
- if (!element.dotDotDotToken) {
- emitBindingElement(element, createElementAccessExpression(value, createNumericLiteral(i)));
- }
- else if (i === numElements - 1) {
- emitBindingElement(element, createSliceCall(value, i));
- }
- }
- }
- }
- else {
- emitAssignment(target.name, value, emitCount > 0);
- emitCount++;
- }
- }
- }
- function emitVariableDeclaration(node) {
- if (ts.isBindingPattern(node.name)) {
- if (languageVersion < 2) {
- emitDestructuring(node, false);
- }
- else {
- emit(node.name);
- emitOptional(" = ", node.initializer);
- }
- }
- else {
- var initializer = node.initializer;
- if (!initializer && languageVersion < 2) {
- var isUninitializedLet = (resolver.getNodeCheckFlags(node) & 16384) &&
- (getCombinedFlagsForIdentifier(node.name) & 16384);
- if (isUninitializedLet &&
- node.parent.parent.kind !== 200 &&
- node.parent.parent.kind !== 201) {
- initializer = createVoidZero();
- }
- }
- var exportChanged = isNameOfExportedSourceLevelDeclarationInSystemExternalModule(node.name);
- if (exportChanged) {
- write(exportFunctionForFile + "(\"");
- emitNodeWithCommentsAndWithoutSourcemap(node.name);
- write("\", ");
- }
- emitModuleMemberName(node);
- emitOptional(" = ", initializer);
- if (exportChanged) {
- write(")");
- }
- }
- }
- function emitExportVariableAssignments(node) {
- if (node.kind === 187) {
- return;
- }
- var name = node.name;
- if (name.kind === 69) {
- emitExportMemberAssignments(name);
- }
- else if (ts.isBindingPattern(name)) {
- ts.forEach(name.elements, emitExportVariableAssignments);
- }
- }
- function getCombinedFlagsForIdentifier(node) {
- if (!node.parent || (node.parent.kind !== 211 && node.parent.kind !== 163)) {
- return 0;
- }
- return ts.getCombinedNodeFlags(node.parent);
- }
- function isES6ExportedDeclaration(node) {
- return !!(node.flags & 1) &&
- modulekind === 5 &&
- node.parent.kind === 248;
- }
- function emitVariableStatement(node) {
- var startIsEmitted = false;
- if (node.flags & 1) {
- if (isES6ExportedDeclaration(node)) {
- write("export ");
- startIsEmitted = tryEmitStartOfVariableDeclarationList(node.declarationList);
- }
- }
- else {
- startIsEmitted = tryEmitStartOfVariableDeclarationList(node.declarationList);
- }
- if (startIsEmitted) {
- emitCommaList(node.declarationList.declarations);
- write(";");
- }
- else {
- var atLeastOneItem = emitVariableDeclarationListSkippingUninitializedEntries(node.declarationList);
- if (atLeastOneItem) {
- write(";");
- }
- }
- if (modulekind !== 5 && node.parent === currentSourceFile) {
- ts.forEach(node.declarationList.declarations, emitExportVariableAssignments);
- }
- }
- function shouldEmitLeadingAndTrailingCommentsForVariableStatement(node) {
- if (!(node.flags & 1)) {
- return true;
- }
- if (isES6ExportedDeclaration(node)) {
- return true;
- }
- for (var _a = 0, _b = node.declarationList.declarations; _a < _b.length; _a++) {
- var declaration = _b[_a];
- if (declaration.initializer) {
- return true;
- }
- }
- return false;
- }
- function emitParameter(node) {
- if (languageVersion < 2) {
- if (ts.isBindingPattern(node.name)) {
- var name_24 = createTempVariable(0);
- if (!tempParameters) {
- tempParameters = [];
- }
- tempParameters.push(name_24);
- emit(name_24);
- }
- else {
- emit(node.name);
- }
- }
- else {
- if (node.dotDotDotToken) {
- write("...");
- }
- emit(node.name);
- emitOptional(" = ", node.initializer);
- }
- }
- function emitDefaultValueAssignments(node) {
- if (languageVersion < 2) {
- var tempIndex = 0;
- ts.forEach(node.parameters, function (parameter) {
- if (parameter.dotDotDotToken) {
- return;
- }
- var paramName = parameter.name, initializer = parameter.initializer;
- if (ts.isBindingPattern(paramName)) {
- var hasBindingElements = paramName.elements.length > 0;
- if (hasBindingElements || initializer) {
- writeLine();
- write("var ");
- if (hasBindingElements) {
- emitDestructuring(parameter, false, tempParameters[tempIndex]);
- }
- else {
- emit(tempParameters[tempIndex]);
- write(" = ");
- emit(initializer);
- }
- write(";");
- tempIndex++;
- }
- }
- else if (initializer) {
- writeLine();
- emitStart(parameter);
- write("if (");
- emitNodeWithoutSourceMap(paramName);
- write(" === void 0)");
- emitEnd(parameter);
- write(" { ");
- emitStart(parameter);
- emitNodeWithCommentsAndWithoutSourcemap(paramName);
- write(" = ");
- emitNodeWithCommentsAndWithoutSourcemap(initializer);
- emitEnd(parameter);
- write("; }");
- }
- });
- }
- }
- function emitRestParameter(node) {
- if (languageVersion < 2 && ts.hasRestParameter(node)) {
- var restIndex = node.parameters.length - 1;
- var restParam = node.parameters[restIndex];
- if (ts.isBindingPattern(restParam.name)) {
- return;
- }
- var tempName = createTempVariable(268435456).text;
- writeLine();
- emitLeadingComments(restParam);
- emitStart(restParam);
- write("var ");
- emitNodeWithCommentsAndWithoutSourcemap(restParam.name);
- write(" = [];");
- emitEnd(restParam);
- emitTrailingComments(restParam);
- writeLine();
- write("for (");
- emitStart(restParam);
- write("var " + tempName + " = " + restIndex + ";");
- emitEnd(restParam);
- write(" ");
- emitStart(restParam);
- write(tempName + " < arguments.length;");
- emitEnd(restParam);
- write(" ");
- emitStart(restParam);
- write(tempName + "++");
- emitEnd(restParam);
- write(") {");
- increaseIndent();
- writeLine();
- emitStart(restParam);
- emitNodeWithCommentsAndWithoutSourcemap(restParam.name);
- write("[" + tempName + " - " + restIndex + "] = arguments[" + tempName + "];");
- emitEnd(restParam);
- decreaseIndent();
- writeLine();
- write("}");
- }
- }
- function emitAccessor(node) {
- write(node.kind === 145 ? "get " : "set ");
- emit(node.name);
- emitSignatureAndBody(node);
- }
- function shouldEmitAsArrowFunction(node) {
- return node.kind === 174 && languageVersion >= 2;
- }
- function emitDeclarationName(node) {
- if (node.name) {
- emitNodeWithCommentsAndWithoutSourcemap(node.name);
- }
- else {
- write(getGeneratedNameForNode(node));
- }
- }
- function shouldEmitFunctionName(node) {
- if (node.kind === 173) {
- return !!node.name;
- }
- if (node.kind === 213) {
- return !!node.name || languageVersion < 2;
- }
- }
- function emitFunctionDeclaration(node) {
- if (ts.nodeIsMissing(node.body)) {
- return emitCommentsOnNotEmittedNode(node);
- }
- if (node.kind !== 143 && node.kind !== 142 &&
- node.parent && node.parent.kind !== 245 &&
- node.parent.kind !== 168) {
- emitLeadingComments(node);
- }
- emitStart(node);
- if (!shouldEmitAsArrowFunction(node)) {
- if (isES6ExportedDeclaration(node)) {
- write("export ");
- if (node.flags & 1024) {
- write("default ");
- }
- }
- write("function");
- if (languageVersion >= 2 && node.asteriskToken) {
- write("*");
- }
- write(" ");
- }
- if (shouldEmitFunctionName(node)) {
- emitDeclarationName(node);
- }
- emitSignatureAndBody(node);
- if (modulekind !== 5 && node.kind === 213 && node.parent === currentSourceFile && node.name) {
- emitExportMemberAssignments(node.name);
- }
- emitEnd(node);
- if (node.kind !== 143 && node.kind !== 142) {
- emitTrailingComments(node);
- }
- }
- function emitCaptureThisForNodeIfNecessary(node) {
- if (resolver.getNodeCheckFlags(node) & 4) {
- writeLine();
- emitStart(node);
- write("var _this = this;");
- emitEnd(node);
- }
- }
- function emitSignatureParameters(node) {
- increaseIndent();
- write("(");
- if (node) {
- var parameters = node.parameters;
- var omitCount = languageVersion < 2 && ts.hasRestParameter(node) ? 1 : 0;
- emitList(parameters, 0, parameters.length - omitCount, false, false);
- }
- write(")");
- decreaseIndent();
- }
- function emitSignatureParametersForArrow(node) {
- if (node.parameters.length === 1 && node.pos === node.parameters[0].pos) {
- emit(node.parameters[0]);
- return;
- }
- emitSignatureParameters(node);
- }
- function emitAsyncFunctionBodyForES6(node) {
- var promiseConstructor = ts.getEntityNameFromTypeNode(node.type);
- var isArrowFunction = node.kind === 174;
- var hasLexicalArguments = (resolver.getNodeCheckFlags(node) & 4096) !== 0;
- var args;
- if (!isArrowFunction) {
- write(" {");
- increaseIndent();
- writeLine();
- write("return");
- }
- write(" __awaiter(this");
- if (hasLexicalArguments) {
- write(", arguments");
- }
- else {
- write(", void 0");
- }
- if (promiseConstructor) {
- write(", ");
- emitNodeWithoutSourceMap(promiseConstructor);
- }
- else {
- write(", Promise");
- }
- if (hasLexicalArguments) {
- write(", function* (_arguments)");
- }
- else {
- write(", function* ()");
- }
- emitFunctionBody(node);
- write(")");
- if (!isArrowFunction) {
- write(";");
- decreaseIndent();
- writeLine();
- write("}");
- }
- }
- function emitFunctionBody(node) {
- if (!node.body) {
- write(" { }");
- }
- else {
- if (node.body.kind === 192) {
- emitBlockFunctionBody(node, node.body);
- }
- else {
- emitExpressionFunctionBody(node, node.body);
- }
- }
- }
- function emitSignatureAndBody(node) {
- var saveTempFlags = tempFlags;
- var saveTempVariables = tempVariables;
- var saveTempParameters = tempParameters;
- tempFlags = 0;
- tempVariables = undefined;
- tempParameters = undefined;
- if (shouldEmitAsArrowFunction(node)) {
- emitSignatureParametersForArrow(node);
- write(" =>");
- }
- else {
- emitSignatureParameters(node);
- }
- var isAsync = ts.isAsyncFunctionLike(node);
- if (isAsync && languageVersion === 2) {
- emitAsyncFunctionBodyForES6(node);
- }
- else {
- emitFunctionBody(node);
- }
- if (!isES6ExportedDeclaration(node)) {
- emitExportMemberAssignment(node);
- }
- tempFlags = saveTempFlags;
- tempVariables = saveTempVariables;
- tempParameters = saveTempParameters;
- }
- function emitFunctionBodyPreamble(node) {
- emitCaptureThisForNodeIfNecessary(node);
- emitDefaultValueAssignments(node);
- emitRestParameter(node);
- }
- function emitExpressionFunctionBody(node, body) {
- if (languageVersion < 2 || node.flags & 512) {
- emitDownLevelExpressionFunctionBody(node, body);
- return;
- }
- write(" ");
- var current = body;
- while (current.kind === 171) {
- current = current.expression;
- }
- emitParenthesizedIf(body, current.kind === 165);
- }
- function emitDownLevelExpressionFunctionBody(node, body) {
- write(" {");
- scopeEmitStart(node);
- increaseIndent();
- var outPos = writer.getTextPos();
- emitDetachedComments(node.body);
- emitFunctionBodyPreamble(node);
- var preambleEmitted = writer.getTextPos() !== outPos;
- decreaseIndent();
- if (!preambleEmitted && nodeStartPositionsAreOnSameLine(node, body)) {
- write(" ");
- emitStart(body);
- write("return ");
- emit(body);
- emitEnd(body);
- write(";");
- emitTempDeclarations(false);
- write(" ");
- }
- else {
- increaseIndent();
- writeLine();
- emitLeadingComments(node.body);
- write("return ");
- emit(body);
- write(";");
- emitTrailingComments(node.body);
- emitTempDeclarations(true);
- decreaseIndent();
- writeLine();
- }
- emitStart(node.body);
- write("}");
- emitEnd(node.body);
- scopeEmitEnd();
- }
- function emitBlockFunctionBody(node, body) {
- write(" {");
- scopeEmitStart(node);
- var initialTextPos = writer.getTextPos();
- increaseIndent();
- emitDetachedComments(body.statements);
- var startIndex = emitDirectivePrologues(body.statements, true);
- emitFunctionBodyPreamble(node);
- decreaseIndent();
- var preambleEmitted = writer.getTextPos() !== initialTextPos;
- if (!preambleEmitted && nodeEndIsOnSameLineAsNodeStart(body, body)) {
- for (var _a = 0, _b = body.statements; _a < _b.length; _a++) {
- var statement = _b[_a];
- write(" ");
- emit(statement);
- }
- emitTempDeclarations(false);
- write(" ");
- emitLeadingCommentsOfPosition(body.statements.end);
- }
- else {
- increaseIndent();
- emitLinesStartingAt(body.statements, startIndex);
- emitTempDeclarations(true);
- writeLine();
- emitLeadingCommentsOfPosition(body.statements.end);
- decreaseIndent();
- }
- emitToken(16, body.statements.end);
- scopeEmitEnd();
- }
- function findInitialSuperCall(ctor) {
- if (ctor.body) {
- var statement = ctor.body.statements[0];
- if (statement && statement.kind === 195) {
- var expr = statement.expression;
- if (expr && expr.kind === 168) {
- var func = expr.expression;
- if (func && func.kind === 95) {
- return statement;
- }
- }
- }
- }
- }
- function emitParameterPropertyAssignments(node) {
- ts.forEach(node.parameters, function (param) {
- if (param.flags & 112) {
- writeLine();
- emitStart(param);
- emitStart(param.name);
- write("this.");
- emitNodeWithoutSourceMap(param.name);
- emitEnd(param.name);
- write(" = ");
- emit(param.name);
- write(";");
- emitEnd(param);
- }
- });
- }
- function emitMemberAccessForPropertyName(memberName) {
- if (memberName.kind === 9 || memberName.kind === 8) {
- write("[");
- emitNodeWithCommentsAndWithoutSourcemap(memberName);
- write("]");
- }
- else if (memberName.kind === 136) {
- emitComputedPropertyName(memberName);
- }
- else {
- write(".");
- emitNodeWithCommentsAndWithoutSourcemap(memberName);
- }
- }
- function getInitializedProperties(node, isStatic) {
- var properties = [];
- for (var _a = 0, _b = node.members; _a < _b.length; _a++) {
- var member = _b[_a];
- if (member.kind === 141 && isStatic === ((member.flags & 128) !== 0) && member.initializer) {
- properties.push(member);
- }
- }
- return properties;
- }
- function emitPropertyDeclarations(node, properties) {
- for (var _a = 0; _a < properties.length; _a++) {
- var property = properties[_a];
- emitPropertyDeclaration(node, property);
- }
- }
- function emitPropertyDeclaration(node, property, receiver, isExpression) {
- writeLine();
- emitLeadingComments(property);
- emitStart(property);
- emitStart(property.name);
- if (receiver) {
- emit(receiver);
- }
- else {
- if (property.flags & 128) {
- emitDeclarationName(node);
- }
- else {
- write("this");
- }
- }
- emitMemberAccessForPropertyName(property.name);
- emitEnd(property.name);
- write(" = ");
- emit(property.initializer);
- if (!isExpression) {
- write(";");
- }
- emitEnd(property);
- emitTrailingComments(property);
- }
- function emitMemberFunctionsForES5AndLower(node) {
- ts.forEach(node.members, function (member) {
- if (member.kind === 191) {
- writeLine();
- write(";");
- }
- else if (member.kind === 143 || node.kind === 142) {
- if (!member.body) {
- return emitCommentsOnNotEmittedNode(member);
- }
- writeLine();
- emitLeadingComments(member);
- emitStart(member);
- emitStart(member.name);
- emitClassMemberPrefix(node, member);
- emitMemberAccessForPropertyName(member.name);
- emitEnd(member.name);
- write(" = ");
- emitFunctionDeclaration(member);
- emitEnd(member);
- write(";");
- emitTrailingComments(member);
- }
- else if (member.kind === 145 || member.kind === 146) {
- var accessors = ts.getAllAccessorDeclarations(node.members, member);
- if (member === accessors.firstAccessor) {
- writeLine();
- emitStart(member);
- write("Object.defineProperty(");
- emitStart(member.name);
- emitClassMemberPrefix(node, member);
- write(", ");
- emitExpressionForPropertyName(member.name);
- emitEnd(member.name);
- write(", {");
- increaseIndent();
- if (accessors.getAccessor) {
- writeLine();
- emitLeadingComments(accessors.getAccessor);
- write("get: ");
- emitStart(accessors.getAccessor);
- write("function ");
- emitSignatureAndBody(accessors.getAccessor);
- emitEnd(accessors.getAccessor);
- emitTrailingComments(accessors.getAccessor);
- write(",");
- }
- if (accessors.setAccessor) {
- writeLine();
- emitLeadingComments(accessors.setAccessor);
- write("set: ");
- emitStart(accessors.setAccessor);
- write("function ");
- emitSignatureAndBody(accessors.setAccessor);
- emitEnd(accessors.setAccessor);
- emitTrailingComments(accessors.setAccessor);
- write(",");
- }
- writeLine();
- write("enumerable: true,");
- writeLine();
- write("configurable: true");
- decreaseIndent();
- writeLine();
- write("});");
- emitEnd(member);
- }
- }
- });
- }
- function emitMemberFunctionsForES6AndHigher(node) {
- for (var _a = 0, _b = node.members; _a < _b.length; _a++) {
- var member = _b[_a];
- if ((member.kind === 143 || node.kind === 142) && !member.body) {
- emitCommentsOnNotEmittedNode(member);
- }
- else if (member.kind === 143 ||
- member.kind === 145 ||
- member.kind === 146) {
- writeLine();
- emitLeadingComments(member);
- emitStart(member);
- if (member.flags & 128) {
- write("static ");
- }
- if (member.kind === 145) {
- write("get ");
- }
- else if (member.kind === 146) {
- write("set ");
- }
- if (member.asteriskToken) {
- write("*");
- }
- emit(member.name);
- emitSignatureAndBody(member);
- emitEnd(member);
- emitTrailingComments(member);
- }
- else if (member.kind === 191) {
- writeLine();
- write(";");
- }
- }
- }
- function emitConstructor(node, baseTypeElement) {
- var saveTempFlags = tempFlags;
- var saveTempVariables = tempVariables;
- var saveTempParameters = tempParameters;
- tempFlags = 0;
- tempVariables = undefined;
- tempParameters = undefined;
- emitConstructorWorker(node, baseTypeElement);
- tempFlags = saveTempFlags;
- tempVariables = saveTempVariables;
- tempParameters = saveTempParameters;
- }
- function emitConstructorWorker(node, baseTypeElement) {
- var hasInstancePropertyWithInitializer = false;
- ts.forEach(node.members, function (member) {
- if (member.kind === 144 && !member.body) {
- emitCommentsOnNotEmittedNode(member);
- }
- if (member.kind === 141 && member.initializer && (member.flags & 128) === 0) {
- hasInstancePropertyWithInitializer = true;
- }
- });
- var ctor = ts.getFirstConstructorWithBody(node);
- if (languageVersion >= 2 && !ctor && !hasInstancePropertyWithInitializer) {
- return;
- }
- if (ctor) {
- emitLeadingComments(ctor);
- }
- emitStart(ctor || node);
- if (languageVersion < 2) {
- write("function ");
- emitDeclarationName(node);
- emitSignatureParameters(ctor);
- }
- else {
- write("constructor");
- if (ctor) {
- emitSignatureParameters(ctor);
- }
- else {
- if (baseTypeElement) {
- write("(...args)");
- }
- else {
- write("()");
- }
- }
- }
- var startIndex = 0;
- write(" {");
- scopeEmitStart(node, "constructor");
- increaseIndent();
- if (ctor) {
- startIndex = emitDirectivePrologues(ctor.body.statements, true);
- emitDetachedComments(ctor.body.statements);
- }
- emitCaptureThisForNodeIfNecessary(node);
- var superCall;
- if (ctor) {
- emitDefaultValueAssignments(ctor);
- emitRestParameter(ctor);
- if (baseTypeElement) {
- superCall = findInitialSuperCall(ctor);
- if (superCall) {
- writeLine();
- emit(superCall);
- }
- }
- emitParameterPropertyAssignments(ctor);
- }
- else {
- if (baseTypeElement) {
- writeLine();
- emitStart(baseTypeElement);
- if (languageVersion < 2) {
- write("_super.apply(this, arguments);");
- }
- else {
- write("super(...args);");
- }
- emitEnd(baseTypeElement);
- }
- }
- emitPropertyDeclarations(node, getInitializedProperties(node, false));
- if (ctor) {
- var statements = ctor.body.statements;
- if (superCall) {
- statements = statements.slice(1);
- }
- emitLinesStartingAt(statements, startIndex);
- }
- emitTempDeclarations(true);
- writeLine();
- if (ctor) {
- emitLeadingCommentsOfPosition(ctor.body.statements.end);
- }
- decreaseIndent();
- emitToken(16, ctor ? ctor.body.statements.end : node.members.end);
- scopeEmitEnd();
- emitEnd(ctor || node);
- if (ctor) {
- emitTrailingComments(ctor);
- }
- }
- function emitClassExpression(node) {
- return emitClassLikeDeclaration(node);
- }
- function emitClassDeclaration(node) {
- return emitClassLikeDeclaration(node);
- }
- function emitClassLikeDeclaration(node) {
- if (languageVersion < 2) {
- emitClassLikeDeclarationBelowES6(node);
- }
- else {
- emitClassLikeDeclarationForES6AndHigher(node);
- }
- if (modulekind !== 5 && node.parent === currentSourceFile && node.name) {
- emitExportMemberAssignments(node.name);
- }
- }
- function emitClassLikeDeclarationForES6AndHigher(node) {
- var thisNodeIsDecorated = ts.nodeIsDecorated(node);
- if (node.kind === 214) {
- if (thisNodeIsDecorated) {
- if (isES6ExportedDeclaration(node) && !(node.flags & 1024)) {
- write("export ");
- }
- write("let ");
- emitDeclarationName(node);
- write(" = ");
- }
- else if (isES6ExportedDeclaration(node)) {
- write("export ");
- if (node.flags & 1024) {
- write("default ");
- }
- }
- }
- var staticProperties = getInitializedProperties(node, true);
- var isClassExpressionWithStaticProperties = staticProperties.length > 0 && node.kind === 186;
- var tempVariable;
- if (isClassExpressionWithStaticProperties) {
- tempVariable = createAndRecordTempVariable(0);
- write("(");
- increaseIndent();
- emit(tempVariable);
- write(" = ");
- }
- write("class");
- if ((node.name || (node.flags & 1024 && staticProperties.length > 0)) && !thisNodeIsDecorated) {
- write(" ");
- emitDeclarationName(node);
- }
- var baseTypeNode = ts.getClassExtendsHeritageClauseElement(node);
- if (baseTypeNode) {
- write(" extends ");
- emit(baseTypeNode.expression);
- }
- write(" {");
- increaseIndent();
- scopeEmitStart(node);
- writeLine();
- emitConstructor(node, baseTypeNode);
- emitMemberFunctionsForES6AndHigher(node);
- decreaseIndent();
- writeLine();
- emitToken(16, node.members.end);
- scopeEmitEnd();
- if (thisNodeIsDecorated) {
- write(";");
- }
- if (isClassExpressionWithStaticProperties) {
- for (var _a = 0; _a < staticProperties.length; _a++) {
- var property = staticProperties[_a];
- write(",");
- writeLine();
- emitPropertyDeclaration(node, property, tempVariable, true);
- }
- write(",");
- writeLine();
- emit(tempVariable);
- decreaseIndent();
- write(")");
- }
- else {
- writeLine();
- emitPropertyDeclarations(node, staticProperties);
- emitDecoratorsOfClass(node);
- }
- if (!isES6ExportedDeclaration(node) && (node.flags & 1)) {
- writeLine();
- emitStart(node);
- emitModuleMemberName(node);
- write(" = ");
- emitDeclarationName(node);
- emitEnd(node);
- write(";");
- }
- else if (isES6ExportedDeclaration(node) && (node.flags & 1024) && thisNodeIsDecorated) {
- writeLine();
- write("export default ");
- emitDeclarationName(node);
- write(";");
- }
- }
- function emitClassLikeDeclarationBelowES6(node) {
- if (node.kind === 214) {
- if (!shouldHoistDeclarationInSystemJsModule(node)) {
- write("var ");
- }
- emitDeclarationName(node);
- write(" = ");
- }
- write("(function (");
- var baseTypeNode = ts.getClassExtendsHeritageClauseElement(node);
- if (baseTypeNode) {
- write("_super");
- }
- write(") {");
- var saveTempFlags = tempFlags;
- var saveTempVariables = tempVariables;
- var saveTempParameters = tempParameters;
- var saveComputedPropertyNamesToGeneratedNames = computedPropertyNamesToGeneratedNames;
- tempFlags = 0;
- tempVariables = undefined;
- tempParameters = undefined;
- computedPropertyNamesToGeneratedNames = undefined;
- increaseIndent();
- scopeEmitStart(node);
- if (baseTypeNode) {
- writeLine();
- emitStart(baseTypeNode);
- write("__extends(");
- emitDeclarationName(node);
- write(", _super);");
- emitEnd(baseTypeNode);
- }
- writeLine();
- emitConstructor(node, baseTypeNode);
- emitMemberFunctionsForES5AndLower(node);
- emitPropertyDeclarations(node, getInitializedProperties(node, true));
- writeLine();
- emitDecoratorsOfClass(node);
- writeLine();
- emitToken(16, node.members.end, function () {
- write("return ");
- emitDeclarationName(node);
- });
- write(";");
- emitTempDeclarations(true);
- tempFlags = saveTempFlags;
- tempVariables = saveTempVariables;
- tempParameters = saveTempParameters;
- computedPropertyNamesToGeneratedNames = saveComputedPropertyNamesToGeneratedNames;
- decreaseIndent();
- writeLine();
- emitToken(16, node.members.end);
- scopeEmitEnd();
- emitStart(node);
- write(")(");
- if (baseTypeNode) {
- emit(baseTypeNode.expression);
- }
- write(")");
- if (node.kind === 214) {
- write(";");
- }
- emitEnd(node);
- if (node.kind === 214) {
- emitExportMemberAssignment(node);
- }
- }
- function emitClassMemberPrefix(node, member) {
- emitDeclarationName(node);
- if (!(member.flags & 128)) {
- write(".prototype");
- }
- }
- function emitDecoratorsOfClass(node) {
- emitDecoratorsOfMembers(node, 0);
- emitDecoratorsOfMembers(node, 128);
- emitDecoratorsOfConstructor(node);
- }
- function emitDecoratorsOfConstructor(node) {
- var decorators = node.decorators;
- var constructor = ts.getFirstConstructorWithBody(node);
- var hasDecoratedParameters = constructor && ts.forEach(constructor.parameters, ts.nodeIsDecorated);
- if (!decorators && !hasDecoratedParameters) {
- return;
- }
- writeLine();
- emitStart(node);
- emitDeclarationName(node);
- write(" = __decorate([");
- increaseIndent();
- writeLine();
- var decoratorCount = decorators ? decorators.length : 0;
- var argumentsWritten = emitList(decorators, 0, decoratorCount, true, false, false, true, function (decorator) {
- emitStart(decorator);
- emit(decorator.expression);
- emitEnd(decorator);
- });
- argumentsWritten += emitDecoratorsOfParameters(constructor, argumentsWritten > 0);
- emitSerializedTypeMetadata(node, argumentsWritten >= 0);
- decreaseIndent();
- writeLine();
- write("], ");
- emitDeclarationName(node);
- write(");");
- emitEnd(node);
- writeLine();
- }
- function emitDecoratorsOfMembers(node, staticFlag) {
- for (var _a = 0, _b = node.members; _a < _b.length; _a++) {
- var member = _b[_a];
- if ((member.flags & 128) !== staticFlag) {
- continue;
- }
- if (!ts.nodeCanBeDecorated(member)) {
- continue;
- }
- if (!ts.nodeOrChildIsDecorated(member)) {
- continue;
- }
- var decorators = void 0;
- var functionLikeMember = void 0;
- if (ts.isAccessor(member)) {
- var accessors = ts.getAllAccessorDeclarations(node.members, member);
- if (member !== accessors.firstAccessor) {
- continue;
- }
- decorators = accessors.firstAccessor.decorators;
- if (!decorators && accessors.secondAccessor) {
- decorators = accessors.secondAccessor.decorators;
- }
- functionLikeMember = accessors.setAccessor;
- }
- else {
- decorators = member.decorators;
- if (member.kind === 143) {
- functionLikeMember = member;
- }
- }
- writeLine();
- emitStart(member);
- write("__decorate([");
- increaseIndent();
- writeLine();
- var decoratorCount = decorators ? decorators.length : 0;
- var argumentsWritten = emitList(decorators, 0, decoratorCount, true, false, false, true, function (decorator) {
- emitStart(decorator);
- emit(decorator.expression);
- emitEnd(decorator);
- });
- argumentsWritten += emitDecoratorsOfParameters(functionLikeMember, argumentsWritten > 0);
- emitSerializedTypeMetadata(member, argumentsWritten > 0);
- decreaseIndent();
- writeLine();
- write("], ");
- emitStart(member.name);
- emitClassMemberPrefix(node, member);
- write(", ");
- emitExpressionForPropertyName(member.name);
- emitEnd(member.name);
- if (languageVersion > 0) {
- if (member.kind !== 141) {
- write(", null");
- }
- else {
- write(", void 0");
- }
- }
- write(");");
- emitEnd(member);
- writeLine();
- }
- }
- function emitDecoratorsOfParameters(node, leadingComma) {
- var argumentsWritten = 0;
- if (node) {
- var parameterIndex = 0;
- for (var _a = 0, _b = node.parameters; _a < _b.length; _a++) {
- var parameter = _b[_a];
- if (ts.nodeIsDecorated(parameter)) {
- var decorators = parameter.decorators;
- argumentsWritten += emitList(decorators, 0, decorators.length, true, false, leadingComma, true, function (decorator) {
- emitStart(decorator);
- write("__param(" + parameterIndex + ", ");
- emit(decorator.expression);
- write(")");
- emitEnd(decorator);
- });
- leadingComma = true;
- }
- ++parameterIndex;
- }
- }
- return argumentsWritten;
- }
- function shouldEmitTypeMetadata(node) {
- switch (node.kind) {
- case 143:
- case 145:
- case 146:
- case 141:
- return true;
- }
- return false;
- }
- function shouldEmitReturnTypeMetadata(node) {
- switch (node.kind) {
- case 143:
- return true;
- }
- return false;
- }
- function shouldEmitParamTypesMetadata(node) {
- switch (node.kind) {
- case 214:
- case 143:
- case 146:
- return true;
- }
- return false;
- }
- function emitSerializedTypeOfNode(node) {
- switch (node.kind) {
- case 214:
- write("Function");
- return;
- case 141:
- emitSerializedTypeNode(node.type);
- return;
- case 138:
- emitSerializedTypeNode(node.type);
- return;
- case 145:
- emitSerializedTypeNode(node.type);
- return;
- case 146:
- emitSerializedTypeNode(ts.getSetAccessorTypeAnnotationNode(node));
- return;
- }
- if (ts.isFunctionLike(node)) {
- write("Function");
- return;
- }
- write("void 0");
- }
- function emitSerializedTypeNode(node) {
- if (node) {
- switch (node.kind) {
- case 103:
- write("void 0");
- return;
- case 160:
- emitSerializedTypeNode(node.type);
- return;
- case 152:
- case 153:
- write("Function");
- return;
- case 156:
- case 157:
- write("Array");
- return;
- case 150:
- case 120:
- write("Boolean");
- return;
- case 130:
- case 9:
- write("String");
- return;
- case 128:
- write("Number");
- return;
- case 131:
- write("Symbol");
- return;
- case 151:
- emitSerializedTypeReferenceNode(node);
- return;
- case 154:
- case 155:
- case 158:
- case 159:
- case 117:
- break;
- default:
- ts.Debug.fail("Cannot serialize unexpected type node.");
- break;
- }
- }
- write("Object");
- }
- function emitSerializedTypeReferenceNode(node) {
- var location = node.parent;
- while (ts.isDeclaration(location) || ts.isTypeNode(location)) {
- location = location.parent;
- }
- var typeName = ts.cloneEntityName(node.typeName);
- typeName.parent = location;
- var result = resolver.getTypeReferenceSerializationKind(typeName);
- switch (result) {
- case ts.TypeReferenceSerializationKind.Unknown:
- var temp = createAndRecordTempVariable(0);
- write("(typeof (");
- emitNodeWithoutSourceMap(temp);
- write(" = ");
- emitEntityNameAsExpression(typeName, true);
- write(") === 'function' && ");
- emitNodeWithoutSourceMap(temp);
- write(") || Object");
- break;
- case ts.TypeReferenceSerializationKind.TypeWithConstructSignatureAndValue:
- emitEntityNameAsExpression(typeName, false);
- break;
- case ts.TypeReferenceSerializationKind.VoidType:
- write("void 0");
- break;
- case ts.TypeReferenceSerializationKind.BooleanType:
- write("Boolean");
- break;
- case ts.TypeReferenceSerializationKind.NumberLikeType:
- write("Number");
- break;
- case ts.TypeReferenceSerializationKind.StringLikeType:
- write("String");
- break;
- case ts.TypeReferenceSerializationKind.ArrayLikeType:
- write("Array");
- break;
- case ts.TypeReferenceSerializationKind.ESSymbolType:
- if (languageVersion < 2) {
- write("typeof Symbol === 'function' ? Symbol : Object");
- }
- else {
- write("Symbol");
- }
- break;
- case ts.TypeReferenceSerializationKind.TypeWithCallSignature:
- write("Function");
- break;
- case ts.TypeReferenceSerializationKind.ObjectType:
- write("Object");
- break;
- }
- }
- function emitSerializedParameterTypesOfNode(node) {
- if (node) {
- var valueDeclaration;
- if (node.kind === 214) {
- valueDeclaration = ts.getFirstConstructorWithBody(node);
- }
- else if (ts.isFunctionLike(node) && ts.nodeIsPresent(node.body)) {
- valueDeclaration = node;
- }
- if (valueDeclaration) {
- var parameters = valueDeclaration.parameters;
- var parameterCount = parameters.length;
- if (parameterCount > 0) {
- for (var i = 0; i < parameterCount; i++) {
- if (i > 0) {
- write(", ");
- }
- if (parameters[i].dotDotDotToken) {
- var parameterType = parameters[i].type;
- if (parameterType.kind === 156) {
- parameterType = parameterType.elementType;
- }
- else if (parameterType.kind === 151 && parameterType.typeArguments && parameterType.typeArguments.length === 1) {
- parameterType = parameterType.typeArguments[0];
- }
- else {
- parameterType = undefined;
- }
- emitSerializedTypeNode(parameterType);
- }
- else {
- emitSerializedTypeOfNode(parameters[i]);
- }
- }
- }
- }
- }
- }
- function emitSerializedReturnTypeOfNode(node) {
- if (node && ts.isFunctionLike(node) && node.type) {
- emitSerializedTypeNode(node.type);
- return;
- }
- write("void 0");
- }
- function emitSerializedTypeMetadata(node, writeComma) {
- var argumentsWritten = 0;
- if (compilerOptions.emitDecoratorMetadata) {
- if (shouldEmitTypeMetadata(node)) {
- if (writeComma) {
- write(", ");
- }
- writeLine();
- write("__metadata('design:type', ");
- emitSerializedTypeOfNode(node);
- write(")");
- argumentsWritten++;
- }
- if (shouldEmitParamTypesMetadata(node)) {
- if (writeComma || argumentsWritten) {
- write(", ");
- }
- writeLine();
- write("__metadata('design:paramtypes', [");
- emitSerializedParameterTypesOfNode(node);
- write("])");
- argumentsWritten++;
- }
- if (shouldEmitReturnTypeMetadata(node)) {
- if (writeComma || argumentsWritten) {
- write(", ");
- }
- writeLine();
- write("__metadata('design:returntype', ");
- emitSerializedReturnTypeOfNode(node);
- write(")");
- argumentsWritten++;
- }
- }
- return argumentsWritten;
- }
- function emitInterfaceDeclaration(node) {
- emitCommentsOnNotEmittedNode(node);
- }
- function shouldEmitEnumDeclaration(node) {
- var isConstEnum = ts.isConst(node);
- return !isConstEnum || compilerOptions.preserveConstEnums || compilerOptions.isolatedModules;
- }
- function emitEnumDeclaration(node) {
- if (!shouldEmitEnumDeclaration(node)) {
- return;
- }
- if (!shouldHoistDeclarationInSystemJsModule(node)) {
- if (!(node.flags & 1) || isES6ExportedDeclaration(node)) {
- emitStart(node);
- if (isES6ExportedDeclaration(node)) {
- write("export ");
- }
- write("var ");
- emit(node.name);
- emitEnd(node);
- write(";");
- }
- }
- writeLine();
- emitStart(node);
- write("(function (");
- emitStart(node.name);
- write(getGeneratedNameForNode(node));
- emitEnd(node.name);
- write(") {");
- increaseIndent();
- scopeEmitStart(node);
- emitLines(node.members);
- decreaseIndent();
- writeLine();
- emitToken(16, node.members.end);
- scopeEmitEnd();
- write(")(");
- emitModuleMemberName(node);
- write(" || (");
- emitModuleMemberName(node);
- write(" = {}));");
- emitEnd(node);
- if (!isES6ExportedDeclaration(node) && node.flags & 1 && !shouldHoistDeclarationInSystemJsModule(node)) {
- writeLine();
- emitStart(node);
- write("var ");
- emit(node.name);
- write(" = ");
- emitModuleMemberName(node);
- emitEnd(node);
- write(";");
- }
- if (modulekind !== 5 && node.parent === currentSourceFile) {
- if (modulekind === 4 && (node.flags & 1)) {
- writeLine();
- write(exportFunctionForFile + "(\"");
- emitDeclarationName(node);
- write("\", ");
- emitDeclarationName(node);
- write(");");
- }
- emitExportMemberAssignments(node.name);
- }
- }
- function emitEnumMember(node) {
- var enumParent = node.parent;
- emitStart(node);
- write(getGeneratedNameForNode(enumParent));
- write("[");
- write(getGeneratedNameForNode(enumParent));
- write("[");
- emitExpressionForPropertyName(node.name);
- write("] = ");
- writeEnumMemberDeclarationValue(node);
- write("] = ");
- emitExpressionForPropertyName(node.name);
- emitEnd(node);
- write(";");
- }
- function writeEnumMemberDeclarationValue(member) {
- var value = resolver.getConstantValue(member);
- if (value !== undefined) {
- write(value.toString());
- return;
- }
- else if (member.initializer) {
- emit(member.initializer);
- }
- else {
- write("undefined");
- }
- }
- function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) {
- if (moduleDeclaration.body.kind === 218) {
- var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body);
- return recursiveInnerModule || moduleDeclaration.body;
- }
- }
- function shouldEmitModuleDeclaration(node) {
- return ts.isInstantiatedModule(node, compilerOptions.preserveConstEnums || compilerOptions.isolatedModules);
- }
- function isModuleMergedWithES6Class(node) {
- return languageVersion === 2 && !!(resolver.getNodeCheckFlags(node) & 32768);
- }
- function emitModuleDeclaration(node) {
- var shouldEmit = shouldEmitModuleDeclaration(node);
- if (!shouldEmit) {
- return emitCommentsOnNotEmittedNode(node);
- }
- var hoistedInDeclarationScope = shouldHoistDeclarationInSystemJsModule(node);
- var emitVarForModule = !hoistedInDeclarationScope && !isModuleMergedWithES6Class(node);
- if (emitVarForModule) {
- emitStart(node);
- if (isES6ExportedDeclaration(node)) {
- write("export ");
- }
- write("var ");
- emit(node.name);
- write(";");
- emitEnd(node);
- writeLine();
- }
- emitStart(node);
- write("(function (");
- emitStart(node.name);
- write(getGeneratedNameForNode(node));
- emitEnd(node.name);
- write(") ");
- if (node.body.kind === 219) {
- var saveTempFlags = tempFlags;
- var saveTempVariables = tempVariables;
- tempFlags = 0;
- tempVariables = undefined;
- emit(node.body);
- tempFlags = saveTempFlags;
- tempVariables = saveTempVariables;
- }
- else {
- write("{");
- increaseIndent();
- scopeEmitStart(node);
- emitCaptureThisForNodeIfNecessary(node);
- writeLine();
- emit(node.body);
- decreaseIndent();
- writeLine();
- var moduleBlock = getInnerMostModuleDeclarationFromDottedModule(node).body;
- emitToken(16, moduleBlock.statements.end);
- scopeEmitEnd();
- }
- write(")(");
- if ((node.flags & 1) && !isES6ExportedDeclaration(node)) {
- emit(node.name);
- write(" = ");
- }
- emitModuleMemberName(node);
- write(" || (");
- emitModuleMemberName(node);
- write(" = {}));");
- emitEnd(node);
- if (!isES6ExportedDeclaration(node) && node.name.kind === 69 && node.parent === currentSourceFile) {
- if (modulekind === 4 && (node.flags & 1)) {
- writeLine();
- write(exportFunctionForFile + "(\"");
- emitDeclarationName(node);
- write("\", ");
- emitDeclarationName(node);
- write(");");
- }
- emitExportMemberAssignments(node.name);
- }
- }
- function tryRenameExternalModule(moduleName) {
- if (currentSourceFile.renamedDependencies && ts.hasProperty(currentSourceFile.renamedDependencies, moduleName.text)) {
- return "\"" + currentSourceFile.renamedDependencies[moduleName.text] + "\"";
- }
- return undefined;
- }
- function emitRequire(moduleName) {
- if (moduleName.kind === 9) {
- write("require(");
- var text = tryRenameExternalModule(moduleName);
- if (text) {
- write(text);
- }
- else {
- emitStart(moduleName);
- emitLiteral(moduleName);
- emitEnd(moduleName);
- }
- emitToken(18, moduleName.end);
- }
- else {
- write("require()");
- }
- }
- function getNamespaceDeclarationNode(node) {
- if (node.kind === 221) {
- return node;
- }
- var importClause = node.importClause;
- if (importClause && importClause.namedBindings && importClause.namedBindings.kind === 224) {
- return importClause.namedBindings;
- }
- }
- function isDefaultImport(node) {
- return node.kind === 222 && node.importClause && !!node.importClause.name;
- }
- function emitExportImportAssignments(node) {
- if (ts.isAliasSymbolDeclaration(node) && resolver.isValueAliasDeclaration(node)) {
- emitExportMemberAssignments(node.name);
- }
- ts.forEachChild(node, emitExportImportAssignments);
- }
- function emitImportDeclaration(node) {
- if (modulekind !== 5) {
- return emitExternalImportDeclaration(node);
- }
- if (node.importClause) {
- var shouldEmitDefaultBindings = resolver.isReferencedAliasDeclaration(node.importClause);
- var shouldEmitNamedBindings = node.importClause.namedBindings && resolver.isReferencedAliasDeclaration(node.importClause.namedBindings, true);
- if (shouldEmitDefaultBindings || shouldEmitNamedBindings) {
- write("import ");
- emitStart(node.importClause);
- if (shouldEmitDefaultBindings) {
- emit(node.importClause.name);
- if (shouldEmitNamedBindings) {
- write(", ");
- }
- }
- if (shouldEmitNamedBindings) {
- emitLeadingComments(node.importClause.namedBindings);
- emitStart(node.importClause.namedBindings);
- if (node.importClause.namedBindings.kind === 224) {
- write("* as ");
- emit(node.importClause.namedBindings.name);
- }
- else {
- write("{ ");
- emitExportOrImportSpecifierList(node.importClause.namedBindings.elements, resolver.isReferencedAliasDeclaration);
- write(" }");
- }
- emitEnd(node.importClause.namedBindings);
- emitTrailingComments(node.importClause.namedBindings);
- }
- emitEnd(node.importClause);
- write(" from ");
- emit(node.moduleSpecifier);
- write(";");
- }
- }
- else {
- write("import ");
- emit(node.moduleSpecifier);
- write(";");
- }
- }
- function emitExternalImportDeclaration(node) {
- if (ts.contains(externalImports, node)) {
- var isExportedImport = node.kind === 221 && (node.flags & 1) !== 0;
- var namespaceDeclaration = getNamespaceDeclarationNode(node);
- if (modulekind !== 2) {
- emitLeadingComments(node);
- emitStart(node);
- if (namespaceDeclaration && !isDefaultImport(node)) {
- if (!isExportedImport)
- write("var ");
- emitModuleMemberName(namespaceDeclaration);
- write(" = ");
- }
- else {
- var isNakedImport = 222 && !node.importClause;
- if (!isNakedImport) {
- write("var ");
- write(getGeneratedNameForNode(node));
- write(" = ");
- }
- }
- emitRequire(ts.getExternalModuleName(node));
- if (namespaceDeclaration && isDefaultImport(node)) {
- write(", ");
- emitModuleMemberName(namespaceDeclaration);
- write(" = ");
- write(getGeneratedNameForNode(node));
- }
- write(";");
- emitEnd(node);
- emitExportImportAssignments(node);
- emitTrailingComments(node);
- }
- else {
- if (isExportedImport) {
- emitModuleMemberName(namespaceDeclaration);
- write(" = ");
- emit(namespaceDeclaration.name);
- write(";");
- }
- else if (namespaceDeclaration && isDefaultImport(node)) {
- write("var ");
- emitModuleMemberName(namespaceDeclaration);
- write(" = ");
- write(getGeneratedNameForNode(node));
- write(";");
- }
- emitExportImportAssignments(node);
- }
- }
- }
- function emitImportEqualsDeclaration(node) {
- if (ts.isExternalModuleImportEqualsDeclaration(node)) {
- emitExternalImportDeclaration(node);
- return;
- }
- if (resolver.isReferencedAliasDeclaration(node) ||
- (!ts.isExternalModule(currentSourceFile) && resolver.isTopLevelValueImportEqualsWithEntityName(node))) {
- emitLeadingComments(node);
- emitStart(node);
- var variableDeclarationIsHoisted = shouldHoistVariable(node, true);
- var isExported = isSourceFileLevelDeclarationInSystemJsModule(node, true);
- if (!variableDeclarationIsHoisted) {
- ts.Debug.assert(!isExported);
- if (isES6ExportedDeclaration(node)) {
- write("export ");
- write("var ");
- }
- else if (!(node.flags & 1)) {
- write("var ");
- }
- }
- if (isExported) {
- write(exportFunctionForFile + "(\"");
- emitNodeWithoutSourceMap(node.name);
- write("\", ");
- }
- emitModuleMemberName(node);
- write(" = ");
- emit(node.moduleReference);
- if (isExported) {
- write(")");
- }
- write(";");
- emitEnd(node);
- emitExportImportAssignments(node);
- emitTrailingComments(node);
- }
- }
- function emitExportDeclaration(node) {
- ts.Debug.assert(modulekind !== 4);
- if (modulekind !== 5) {
- if (node.moduleSpecifier && (!node.exportClause || resolver.isValueAliasDeclaration(node))) {
- emitStart(node);
- var generatedName = getGeneratedNameForNode(node);
- if (node.exportClause) {
- if (modulekind !== 2) {
- write("var ");
- write(generatedName);
- write(" = ");
- emitRequire(ts.getExternalModuleName(node));
- write(";");
- }
- for (var _a = 0, _b = node.exportClause.elements; _a < _b.length; _a++) {
- var specifier = _b[_a];
- if (resolver.isValueAliasDeclaration(specifier)) {
- writeLine();
- emitStart(specifier);
- emitContainingModuleName(specifier);
- write(".");
- emitNodeWithCommentsAndWithoutSourcemap(specifier.name);
- write(" = ");
- write(generatedName);
- write(".");
- emitNodeWithCommentsAndWithoutSourcemap(specifier.propertyName || specifier.name);
- write(";");
- emitEnd(specifier);
- }
- }
- }
- else {
- writeLine();
- write("__export(");
- if (modulekind !== 2) {
- emitRequire(ts.getExternalModuleName(node));
- }
- else {
- write(generatedName);
- }
- write(");");
- }
- emitEnd(node);
- }
- }
- else {
- if (!node.exportClause || resolver.isValueAliasDeclaration(node)) {
- write("export ");
- if (node.exportClause) {
- write("{ ");
- emitExportOrImportSpecifierList(node.exportClause.elements, resolver.isValueAliasDeclaration);
- write(" }");
- }
- else {
- write("*");
- }
- if (node.moduleSpecifier) {
- write(" from ");
- emit(node.moduleSpecifier);
- }
- write(";");
- }
- }
- }
- function emitExportOrImportSpecifierList(specifiers, shouldEmit) {
- ts.Debug.assert(modulekind === 5);
- var needsComma = false;
- for (var _a = 0; _a < specifiers.length; _a++) {
- var specifier = specifiers[_a];
- if (shouldEmit(specifier)) {
- if (needsComma) {
- write(", ");
- }
- if (specifier.propertyName) {
- emit(specifier.propertyName);
- write(" as ");
- }
- emit(specifier.name);
- needsComma = true;
- }
- }
- }
- function emitExportAssignment(node) {
- if (!node.isExportEquals && resolver.isValueAliasDeclaration(node)) {
- if (modulekind === 5) {
- writeLine();
- emitStart(node);
- write("export default ");
- var expression = node.expression;
- emit(expression);
- if (expression.kind !== 213 &&
- expression.kind !== 214) {
- write(";");
- }
- emitEnd(node);
- }
- else {
- writeLine();
- emitStart(node);
- if (modulekind === 4) {
- write(exportFunctionForFile + "(\"default\",");
- emit(node.expression);
- write(")");
- }
- else {
- emitEs6ExportDefaultCompat(node);
- emitContainingModuleName(node);
- if (languageVersion === 0) {
- write("[\"default\"] = ");
- }
- else {
- write(".default = ");
- }
- emit(node.expression);
- }
- write(";");
- emitEnd(node);
- }
- }
- }
- function collectExternalModuleInfo(sourceFile) {
- externalImports = [];
- exportSpecifiers = {};
- exportEquals = undefined;
- hasExportStars = false;
- for (var _a = 0, _b = sourceFile.statements; _a < _b.length; _a++) {
- var node = _b[_a];
- switch (node.kind) {
- case 222:
- if (!node.importClause ||
- resolver.isReferencedAliasDeclaration(node.importClause, true)) {
- externalImports.push(node);
- }
- break;
- case 221:
- if (node.moduleReference.kind === 232 && resolver.isReferencedAliasDeclaration(node)) {
- externalImports.push(node);
- }
- break;
- case 228:
- if (node.moduleSpecifier) {
- if (!node.exportClause) {
- externalImports.push(node);
- hasExportStars = true;
- }
- else if (resolver.isValueAliasDeclaration(node)) {
- externalImports.push(node);
- }
- }
- else {
- for (var _c = 0, _d = node.exportClause.elements; _c < _d.length; _c++) {
- var specifier = _d[_c];
- var name_25 = (specifier.propertyName || specifier.name).text;
- (exportSpecifiers[name_25] || (exportSpecifiers[name_25] = [])).push(specifier);
- }
- }
- break;
- case 227:
- if (node.isExportEquals && !exportEquals) {
- exportEquals = node;
- }
- break;
- }
- }
- }
- function emitExportStarHelper() {
- if (hasExportStars) {
- writeLine();
- write("function __export(m) {");
- increaseIndent();
- writeLine();
- write("for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];");
- decreaseIndent();
- writeLine();
- write("}");
- }
- }
- function getLocalNameForExternalImport(node) {
- var namespaceDeclaration = getNamespaceDeclarationNode(node);
- if (namespaceDeclaration && !isDefaultImport(node)) {
- return ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, namespaceDeclaration.name);
- }
- if (node.kind === 222 && node.importClause) {
- return getGeneratedNameForNode(node);
- }
- if (node.kind === 228 && node.moduleSpecifier) {
- return getGeneratedNameForNode(node);
- }
- }
- function getExternalModuleNameText(importNode) {
- var moduleName = ts.getExternalModuleName(importNode);
- if (moduleName.kind === 9) {
- return tryRenameExternalModule(moduleName) || getLiteralText(moduleName);
- }
- return undefined;
- }
- function emitVariableDeclarationsForImports() {
- if (externalImports.length === 0) {
- return;
- }
- writeLine();
- var started = false;
- for (var _a = 0; _a < externalImports.length; _a++) {
- var importNode = externalImports[_a];
- var skipNode = importNode.kind === 228 ||
- (importNode.kind === 222 && !importNode.importClause);
- if (skipNode) {
- continue;
- }
- if (!started) {
- write("var ");
- started = true;
- }
- else {
- write(", ");
- }
- write(getLocalNameForExternalImport(importNode));
- }
- if (started) {
- write(";");
- }
- }
- function emitLocalStorageForExportedNamesIfNecessary(exportedDeclarations) {
- if (!hasExportStars) {
- return undefined;
- }
- if (!exportedDeclarations && ts.isEmpty(exportSpecifiers)) {
- var hasExportDeclarationWithExportClause = false;
- for (var _a = 0; _a < externalImports.length; _a++) {
- var externalImport = externalImports[_a];
- if (externalImport.kind === 228 && externalImport.exportClause) {
- hasExportDeclarationWithExportClause = true;
- break;
- }
- }
- if (!hasExportDeclarationWithExportClause) {
- return emitExportStarFunction(undefined);
- }
- }
- var exportedNamesStorageRef = makeUniqueName("exportedNames");
- writeLine();
- write("var " + exportedNamesStorageRef + " = {");
- increaseIndent();
- var started = false;
- if (exportedDeclarations) {
- for (var i = 0; i < exportedDeclarations.length; ++i) {
- writeExportedName(exportedDeclarations[i]);
- }
- }
- if (exportSpecifiers) {
- for (var n in exportSpecifiers) {
- for (var _b = 0, _c = exportSpecifiers[n]; _b < _c.length; _b++) {
- var specifier = _c[_b];
- writeExportedName(specifier.name);
- }
- }
- }
- for (var _d = 0; _d < externalImports.length; _d++) {
- var externalImport = externalImports[_d];
- if (externalImport.kind !== 228) {
- continue;
- }
- var exportDecl = externalImport;
- if (!exportDecl.exportClause) {
- continue;
- }
- for (var _e = 0, _f = exportDecl.exportClause.elements; _e < _f.length; _e++) {
- var element = _f[_e];
- writeExportedName(element.name || element.propertyName);
- }
- }
- decreaseIndent();
- writeLine();
- write("};");
- return emitExportStarFunction(exportedNamesStorageRef);
- function emitExportStarFunction(localNames) {
- var exportStarFunction = makeUniqueName("exportStar");
- writeLine();
- write("function " + exportStarFunction + "(m) {");
- increaseIndent();
- writeLine();
- write("var exports = {};");
- writeLine();
- write("for(var n in m) {");
- increaseIndent();
- writeLine();
- write("if (n !== \"default\"");
- if (localNames) {
- write("&& !" + localNames + ".hasOwnProperty(n)");
- }
- write(") exports[n] = m[n];");
- decreaseIndent();
- writeLine();
- write("}");
- writeLine();
- write(exportFunctionForFile + "(exports);");
- decreaseIndent();
- writeLine();
- write("}");
- return exportStarFunction;
- }
- function writeExportedName(node) {
- if (node.kind !== 69 && node.flags & 1024) {
- return;
- }
- if (started) {
- write(",");
- }
- else {
- started = true;
- }
- writeLine();
- write("'");
- if (node.kind === 69) {
- emitNodeWithCommentsAndWithoutSourcemap(node);
- }
- else {
- emitDeclarationName(node);
- }
- write("': true");
- }
- }
- function processTopLevelVariableAndFunctionDeclarations(node) {
- var hoistedVars;
- var hoistedFunctionDeclarations;
- var exportedDeclarations;
- visit(node);
- if (hoistedVars) {
- writeLine();
- write("var ");
- var seen = {};
- for (var i = 0; i < hoistedVars.length; ++i) {
- var local = hoistedVars[i];
- var name_26 = local.kind === 69
- ? local
- : local.name;
- if (name_26) {
- var text = ts.unescapeIdentifier(name_26.text);
- if (ts.hasProperty(seen, text)) {
- continue;
- }
- else {
- seen[text] = text;
- }
- }
- if (i !== 0) {
- write(", ");
- }
- if (local.kind === 214 || local.kind === 218 || local.kind === 217) {
- emitDeclarationName(local);
- }
- else {
- emit(local);
- }
- var flags = ts.getCombinedNodeFlags(local.kind === 69 ? local.parent : local);
- if (flags & 1) {
- if (!exportedDeclarations) {
- exportedDeclarations = [];
- }
- exportedDeclarations.push(local);
- }
- }
- write(";");
- }
- if (hoistedFunctionDeclarations) {
- for (var _a = 0; _a < hoistedFunctionDeclarations.length; _a++) {
- var f = hoistedFunctionDeclarations[_a];
- writeLine();
- emit(f);
- if (f.flags & 1) {
- if (!exportedDeclarations) {
- exportedDeclarations = [];
- }
- exportedDeclarations.push(f);
- }
- }
- }
- return exportedDeclarations;
- function visit(node) {
- if (node.flags & 2) {
- return;
- }
- if (node.kind === 213) {
- if (!hoistedFunctionDeclarations) {
- hoistedFunctionDeclarations = [];
- }
- hoistedFunctionDeclarations.push(node);
- return;
- }
- if (node.kind === 214) {
- if (!hoistedVars) {
- hoistedVars = [];
- }
- hoistedVars.push(node);
- return;
- }
- if (node.kind === 217) {
- if (shouldEmitEnumDeclaration(node)) {
- if (!hoistedVars) {
- hoistedVars = [];
- }
- hoistedVars.push(node);
- }
- return;
- }
- if (node.kind === 218) {
- if (shouldEmitModuleDeclaration(node)) {
- if (!hoistedVars) {
- hoistedVars = [];
- }
- hoistedVars.push(node);
- }
- return;
- }
- if (node.kind === 211 || node.kind === 163) {
- if (shouldHoistVariable(node, false)) {
- var name_27 = node.name;
- if (name_27.kind === 69) {
- if (!hoistedVars) {
- hoistedVars = [];
- }
- hoistedVars.push(name_27);
- }
- else {
- ts.forEachChild(name_27, visit);
- }
- }
- return;
- }
- if (ts.isInternalModuleImportEqualsDeclaration(node) && resolver.isValueAliasDeclaration(node)) {
- if (!hoistedVars) {
- hoistedVars = [];
- }
- hoistedVars.push(node.name);
- return;
- }
- if (ts.isBindingPattern(node)) {
- ts.forEach(node.elements, visit);
- return;
- }
- if (!ts.isDeclaration(node)) {
- ts.forEachChild(node, visit);
- }
- }
- }
- function shouldHoistVariable(node, checkIfSourceFileLevelDecl) {
- if (checkIfSourceFileLevelDecl && !shouldHoistDeclarationInSystemJsModule(node)) {
- return false;
- }
- return (ts.getCombinedNodeFlags(node) & 49152) === 0 ||
- ts.getEnclosingBlockScopeContainer(node).kind === 248;
- }
- function isCurrentFileSystemExternalModule() {
- return modulekind === 4 && ts.isExternalModule(currentSourceFile);
- }
- function emitSystemModuleBody(node, dependencyGroups, startIndex) {
- emitVariableDeclarationsForImports();
- writeLine();
- var exportedDeclarations = processTopLevelVariableAndFunctionDeclarations(node);
- var exportStarFunction = emitLocalStorageForExportedNamesIfNecessary(exportedDeclarations);
- writeLine();
- write("return {");
- increaseIndent();
- writeLine();
- emitSetters(exportStarFunction, dependencyGroups);
- writeLine();
- emitExecute(node, startIndex);
- decreaseIndent();
- writeLine();
- write("}");
- emitTempDeclarations(true);
- }
- function emitSetters(exportStarFunction, dependencyGroups) {
- write("setters:[");
- for (var i = 0; i < dependencyGroups.length; ++i) {
- if (i !== 0) {
- write(",");
- }
- writeLine();
- increaseIndent();
- var group = dependencyGroups[i];
- var parameterName = makeUniqueName(ts.forEach(group, getLocalNameForExternalImport) || "");
- write("function (" + parameterName + ") {");
- increaseIndent();
- for (var _a = 0; _a < group.length; _a++) {
- var entry = group[_a];
- var importVariableName = getLocalNameForExternalImport(entry) || "";
- switch (entry.kind) {
- case 222:
- if (!entry.importClause) {
- break;
- }
- case 221:
- ts.Debug.assert(importVariableName !== "");
- writeLine();
- write(importVariableName + " = " + parameterName + ";");
- writeLine();
- break;
- case 228:
- ts.Debug.assert(importVariableName !== "");
- if (entry.exportClause) {
- writeLine();
- write(exportFunctionForFile + "({");
- writeLine();
- increaseIndent();
- for (var i_2 = 0, len = entry.exportClause.elements.length; i_2 < len; ++i_2) {
- if (i_2 !== 0) {
- write(",");
- writeLine();
- }
- var e = entry.exportClause.elements[i_2];
- write("\"");
- emitNodeWithCommentsAndWithoutSourcemap(e.name);
- write("\": " + parameterName + "[\"");
- emitNodeWithCommentsAndWithoutSourcemap(e.propertyName || e.name);
- write("\"]");
- }
- decreaseIndent();
- writeLine();
- write("});");
- }
- else {
- writeLine();
- write(exportStarFunction + "(" + parameterName + ");");
- }
- writeLine();
- break;
- }
- }
- decreaseIndent();
- write("}");
- decreaseIndent();
- }
- write("],");
- }
- function emitExecute(node, startIndex) {
- write("execute: function() {");
- increaseIndent();
- writeLine();
- for (var i = startIndex; i < node.statements.length; ++i) {
- var statement = node.statements[i];
- switch (statement.kind) {
- case 213:
- case 222:
- continue;
- case 228:
- if (!statement.moduleSpecifier) {
- for (var _a = 0, _b = statement.exportClause.elements; _a < _b.length; _a++) {
- var element = _b[_a];
- emitExportSpecifierInSystemModule(element);
- }
- }
- continue;
- case 221:
- if (!ts.isInternalModuleImportEqualsDeclaration(statement)) {
- continue;
- }
- default:
- writeLine();
- emit(statement);
- }
- }
- decreaseIndent();
- writeLine();
- write("}");
- }
- function emitSystemModule(node) {
- collectExternalModuleInfo(node);
- ts.Debug.assert(!exportFunctionForFile);
- exportFunctionForFile = makeUniqueName("exports");
- writeLine();
- write("System.register(");
- if (node.moduleName) {
- write("\"" + node.moduleName + "\", ");
- }
- write("[");
- var groupIndices = {};
- var dependencyGroups = [];
- for (var i = 0; i < externalImports.length; ++i) {
- var text = getExternalModuleNameText(externalImports[i]);
- if (ts.hasProperty(groupIndices, text)) {
- var groupIndex = groupIndices[text];
- dependencyGroups[groupIndex].push(externalImports[i]);
- continue;
- }
- else {
- groupIndices[text] = dependencyGroups.length;
- dependencyGroups.push([externalImports[i]]);
- }
- if (i !== 0) {
- write(", ");
- }
- write(text);
- }
- write("], function(" + exportFunctionForFile + ") {");
- writeLine();
- increaseIndent();
- var startIndex = emitDirectivePrologues(node.statements, true);
- emitEmitHelpers(node);
- emitCaptureThisForNodeIfNecessary(node);
- emitSystemModuleBody(node, dependencyGroups, startIndex);
- decreaseIndent();
- writeLine();
- write("});");
- }
- function getAMDDependencyNames(node, includeNonAmdDependencies) {
- var aliasedModuleNames = [];
- var unaliasedModuleNames = [];
- var importAliasNames = [];
- for (var _a = 0, _b = node.amdDependencies; _a < _b.length; _a++) {
- var amdDependency = _b[_a];
- if (amdDependency.name) {
- aliasedModuleNames.push("\"" + amdDependency.path + "\"");
- importAliasNames.push(amdDependency.name);
- }
- else {
- unaliasedModuleNames.push("\"" + amdDependency.path + "\"");
- }
- }
- for (var _c = 0; _c < externalImports.length; _c++) {
- var importNode = externalImports[_c];
- var externalModuleName = getExternalModuleNameText(importNode);
- var importAliasName = getLocalNameForExternalImport(importNode);
- if (includeNonAmdDependencies && importAliasName) {
- aliasedModuleNames.push(externalModuleName);
- importAliasNames.push(importAliasName);
- }
- else {
- unaliasedModuleNames.push(externalModuleName);
- }
- }
- return { aliasedModuleNames: aliasedModuleNames, unaliasedModuleNames: unaliasedModuleNames, importAliasNames: importAliasNames };
- }
- function emitAMDDependencies(node, includeNonAmdDependencies) {
- var dependencyNames = getAMDDependencyNames(node, includeNonAmdDependencies);
- emitAMDDependencyList(dependencyNames);
- write(", ");
- emitAMDFactoryHeader(dependencyNames);
- }
- function emitAMDDependencyList(_a) {
- var aliasedModuleNames = _a.aliasedModuleNames, unaliasedModuleNames = _a.unaliasedModuleNames;
- write("[\"require\", \"exports\"");
- if (aliasedModuleNames.length) {
- write(", ");
- write(aliasedModuleNames.join(", "));
- }
- if (unaliasedModuleNames.length) {
- write(", ");
- write(unaliasedModuleNames.join(", "));
- }
- write("]");
- }
- function emitAMDFactoryHeader(_a) {
- var importAliasNames = _a.importAliasNames;
- write("function (require, exports");
- if (importAliasNames.length) {
- write(", ");
- write(importAliasNames.join(", "));
- }
- write(") {");
- }
- function emitAMDModule(node) {
- emitEmitHelpers(node);
- collectExternalModuleInfo(node);
- writeLine();
- write("define(");
- if (node.moduleName) {
- write("\"" + node.moduleName + "\", ");
- }
- emitAMDDependencies(node, true);
- increaseIndent();
- var startIndex = emitDirectivePrologues(node.statements, true);
- emitExportStarHelper();
- emitCaptureThisForNodeIfNecessary(node);
- emitLinesStartingAt(node.statements, startIndex);
- emitTempDeclarations(true);
- emitExportEquals(true);
- decreaseIndent();
- writeLine();
- write("});");
- }
- function emitCommonJSModule(node) {
- var startIndex = emitDirectivePrologues(node.statements, false);
- emitEmitHelpers(node);
- collectExternalModuleInfo(node);
- emitExportStarHelper();
- emitCaptureThisForNodeIfNecessary(node);
- emitLinesStartingAt(node.statements, startIndex);
- emitTempDeclarations(true);
- emitExportEquals(false);
- }
- function emitUMDModule(node) {
- emitEmitHelpers(node);
- collectExternalModuleInfo(node);
- var dependencyNames = getAMDDependencyNames(node, false);
- writeLines("(function (factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n var v = factory(require, exports); if (v !== undefined) module.exports = v;\n }\n else if (typeof define === 'function' && define.amd) {\n define(");
- emitAMDDependencyList(dependencyNames);
- write(", factory);");
- writeLines(" }\n})(");
- emitAMDFactoryHeader(dependencyNames);
- increaseIndent();
- var startIndex = emitDirectivePrologues(node.statements, true);
- emitExportStarHelper();
- emitCaptureThisForNodeIfNecessary(node);
- emitLinesStartingAt(node.statements, startIndex);
- emitTempDeclarations(true);
- emitExportEquals(true);
- decreaseIndent();
- writeLine();
- write("});");
- }
- function emitES6Module(node) {
- externalImports = undefined;
- exportSpecifiers = undefined;
- exportEquals = undefined;
- hasExportStars = false;
- var startIndex = emitDirectivePrologues(node.statements, false);
- emitEmitHelpers(node);
- emitCaptureThisForNodeIfNecessary(node);
- emitLinesStartingAt(node.statements, startIndex);
- emitTempDeclarations(true);
- }
- function emitExportEquals(emitAsReturn) {
- if (exportEquals && resolver.isValueAliasDeclaration(exportEquals)) {
- writeLine();
- emitStart(exportEquals);
- write(emitAsReturn ? "return " : "module.exports = ");
- emit(exportEquals.expression);
- write(";");
- emitEnd(exportEquals);
- }
- }
- function emitJsxElement(node) {
- switch (compilerOptions.jsx) {
- case 2:
- jsxEmitReact(node);
- break;
- case 1:
- default:
- jsxEmitPreserve(node);
- break;
- }
- }
- function trimReactWhitespaceAndApplyEntities(node) {
- var result = undefined;
- var text = ts.getTextOfNode(node, true);
- var firstNonWhitespace = 0;
- var lastNonWhitespace = -1;
- for (var i = 0; i < text.length; i++) {
- var c = text.charCodeAt(i);
- if (ts.isLineBreak(c)) {
- if (firstNonWhitespace !== -1 && (lastNonWhitespace - firstNonWhitespace + 1 > 0)) {
- var part = text.substr(firstNonWhitespace, lastNonWhitespace - firstNonWhitespace + 1);
- result = (result ? result + "\" + ' ' + \"" : "") + ts.escapeString(part);
- }
- firstNonWhitespace = -1;
- }
- else if (!ts.isWhiteSpace(c)) {
- lastNonWhitespace = i;
- if (firstNonWhitespace === -1) {
- firstNonWhitespace = i;
- }
- }
- }
- if (firstNonWhitespace !== -1) {
- var part = text.substr(firstNonWhitespace);
- result = (result ? result + "\" + ' ' + \"" : "") + ts.escapeString(part);
- }
- if (result) {
- result = result.replace(/&(\w+);/g, function (s, m) {
- if (entities[m] !== undefined) {
- return String.fromCharCode(entities[m]);
- }
- else {
- return s;
- }
- });
- }
- return result;
- }
- function getTextToEmit(node) {
- switch (compilerOptions.jsx) {
- case 2:
- var text = trimReactWhitespaceAndApplyEntities(node);
- if (text === undefined || text.length === 0) {
- return undefined;
- }
- else {
- return text;
- }
- case 1:
- default:
- return ts.getTextOfNode(node, true);
- }
- }
- function emitJsxText(node) {
- switch (compilerOptions.jsx) {
- case 2:
- write("\"");
- write(trimReactWhitespaceAndApplyEntities(node));
- write("\"");
- break;
- case 1:
- default:
- writer.writeLiteral(ts.getTextOfNode(node, true));
- break;
- }
- }
- function emitJsxExpression(node) {
- if (node.expression) {
- switch (compilerOptions.jsx) {
- case 1:
- default:
- write("{");
- emit(node.expression);
- write("}");
- break;
- case 2:
- emit(node.expression);
- break;
- }
- }
- }
- function emitDirectivePrologues(statements, startWithNewLine) {
- for (var i = 0; i < statements.length; ++i) {
- if (ts.isPrologueDirective(statements[i])) {
- if (startWithNewLine || i > 0) {
- writeLine();
- }
- emit(statements[i]);
- }
- else {
- return i;
- }
- }
- return statements.length;
- }
- function writeLines(text) {
- var lines = text.split(/\r\n|\r|\n/g);
- for (var i = 0; i < lines.length; ++i) {
- var line = lines[i];
- if (line.length) {
- writeLine();
- write(line);
- }
- }
- }
- function emitEmitHelpers(node) {
- if (!compilerOptions.noEmitHelpers) {
- if ((languageVersion < 2) && (!extendsEmitted && resolver.getNodeCheckFlags(node) & 8)) {
- writeLines(extendsHelper);
- extendsEmitted = true;
- }
- if (!decorateEmitted && resolver.getNodeCheckFlags(node) & 16) {
- writeLines(decorateHelper);
- if (compilerOptions.emitDecoratorMetadata) {
- writeLines(metadataHelper);
- }
- decorateEmitted = true;
- }
- if (!paramEmitted && resolver.getNodeCheckFlags(node) & 32) {
- writeLines(paramHelper);
- paramEmitted = true;
- }
- if (!awaiterEmitted && resolver.getNodeCheckFlags(node) & 64) {
- writeLines(awaiterHelper);
- awaiterEmitted = true;
- }
- }
- }
- function emitSourceFileNode(node) {
- writeLine();
- emitShebang();
- emitDetachedComments(node);
- if (ts.isExternalModule(node) || compilerOptions.isolatedModules) {
- var emitModule = moduleEmitDelegates[modulekind] || moduleEmitDelegates[1];
- emitModule(node);
- }
- else {
- var startIndex = emitDirectivePrologues(node.statements, false);
- externalImports = undefined;
- exportSpecifiers = undefined;
- exportEquals = undefined;
- hasExportStars = false;
- emitEmitHelpers(node);
- emitCaptureThisForNodeIfNecessary(node);
- emitLinesStartingAt(node.statements, startIndex);
- emitTempDeclarations(true);
- }
- emitLeadingComments(node.endOfFileToken);
- }
- function emitNodeWithCommentsAndWithoutSourcemap(node) {
- emitNodeConsideringCommentsOption(node, emitNodeWithoutSourceMap);
- }
- function emitNodeConsideringCommentsOption(node, emitNodeConsideringSourcemap) {
- if (node) {
- if (node.flags & 2) {
- return emitCommentsOnNotEmittedNode(node);
- }
- if (isSpecializedCommentHandling(node)) {
- return emitNodeWithoutSourceMap(node);
- }
- var emitComments_1 = shouldEmitLeadingAndTrailingComments(node);
- if (emitComments_1) {
- emitLeadingComments(node);
- }
- emitNodeConsideringSourcemap(node);
- if (emitComments_1) {
- emitTrailingComments(node);
- }
- }
- }
- function emitNodeWithoutSourceMap(node) {
- if (node) {
- emitJavaScriptWorker(node);
- }
- }
- function isSpecializedCommentHandling(node) {
- switch (node.kind) {
- case 215:
- case 213:
- case 222:
- case 221:
- case 216:
- case 227:
- return true;
- }
- }
- function shouldEmitLeadingAndTrailingComments(node) {
- switch (node.kind) {
- case 193:
- return shouldEmitLeadingAndTrailingCommentsForVariableStatement(node);
- case 218:
- return shouldEmitModuleDeclaration(node);
- case 217:
- return shouldEmitEnumDeclaration(node);
- }
- ts.Debug.assert(!isSpecializedCommentHandling(node));
- if (node.kind !== 192 &&
- node.parent &&
- node.parent.kind === 174 &&
- node.parent.body === node &&
- compilerOptions.target <= 1) {
- return false;
- }
- return true;
- }
- function emitJavaScriptWorker(node) {
- switch (node.kind) {
- case 69:
- return emitIdentifier(node);
- case 138:
- return emitParameter(node);
- case 143:
- case 142:
- return emitMethod(node);
- case 145:
- case 146:
- return emitAccessor(node);
- case 97:
- return emitThis(node);
- case 95:
- return emitSuper(node);
- case 93:
- return write("null");
- case 99:
- return write("true");
- case 84:
- return write("false");
- case 8:
- case 9:
- case 10:
- case 11:
- case 12:
- case 13:
- case 14:
- return emitLiteral(node);
- case 183:
- return emitTemplateExpression(node);
- case 190:
- return emitTemplateSpan(node);
- case 233:
- case 234:
- return emitJsxElement(node);
- case 236:
- return emitJsxText(node);
- case 240:
- return emitJsxExpression(node);
- case 135:
- return emitQualifiedName(node);
- case 161:
- return emitObjectBindingPattern(node);
- case 162:
- return emitArrayBindingPattern(node);
- case 163:
- return emitBindingElement(node);
- case 164:
- return emitArrayLiteral(node);
- case 165:
- return emitObjectLiteral(node);
- case 245:
- return emitPropertyAssignment(node);
- case 246:
- return emitShorthandPropertyAssignment(node);
- case 136:
- return emitComputedPropertyName(node);
- case 166:
- return emitPropertyAccess(node);
- case 167:
- return emitIndexedAccess(node);
- case 168:
- return emitCallExpression(node);
- case 169:
- return emitNewExpression(node);
- case 170:
- return emitTaggedTemplateExpression(node);
- case 171:
- return emit(node.expression);
- case 189:
- return emit(node.expression);
- case 172:
- return emitParenExpression(node);
- case 213:
- case 173:
- case 174:
- return emitFunctionDeclaration(node);
- case 175:
- return emitDeleteExpression(node);
- case 176:
- return emitTypeOfExpression(node);
- case 177:
- return emitVoidExpression(node);
- case 178:
- return emitAwaitExpression(node);
- case 179:
- return emitPrefixUnaryExpression(node);
- case 180:
- return emitPostfixUnaryExpression(node);
- case 181:
- return emitBinaryExpression(node);
- case 182:
- return emitConditionalExpression(node);
- case 185:
- return emitSpreadElementExpression(node);
- case 184:
- return emitYieldExpression(node);
- case 187:
- return;
- case 192:
- case 219:
- return emitBlock(node);
- case 193:
- return emitVariableStatement(node);
- case 194:
- return write(";");
- case 195:
- return emitExpressionStatement(node);
- case 196:
- return emitIfStatement(node);
- case 197:
- return emitDoStatement(node);
- case 198:
- return emitWhileStatement(node);
- case 199:
- return emitForStatement(node);
- case 201:
- case 200:
- return emitForInOrForOfStatement(node);
- case 202:
- case 203:
- return emitBreakOrContinueStatement(node);
- case 204:
- return emitReturnStatement(node);
- case 205:
- return emitWithStatement(node);
- case 206:
- return emitSwitchStatement(node);
- case 241:
- case 242:
- return emitCaseOrDefaultClause(node);
- case 207:
- return emitLabelledStatement(node);
- case 208:
- return emitThrowStatement(node);
- case 209:
- return emitTryStatement(node);
- case 244:
- return emitCatchClause(node);
- case 210:
- return emitDebuggerStatement(node);
- case 211:
- return emitVariableDeclaration(node);
- case 186:
- return emitClassExpression(node);
- case 214:
- return emitClassDeclaration(node);
- case 215:
- return emitInterfaceDeclaration(node);
- case 217:
- return emitEnumDeclaration(node);
- case 247:
- return emitEnumMember(node);
- case 218:
- return emitModuleDeclaration(node);
- case 222:
- return emitImportDeclaration(node);
- case 221:
- return emitImportEqualsDeclaration(node);
- case 228:
- return emitExportDeclaration(node);
- case 227:
- return emitExportAssignment(node);
- case 248:
- return emitSourceFileNode(node);
- }
- }
- function hasDetachedComments(pos) {
- return detachedCommentsInfo !== undefined && ts.lastOrUndefined(detachedCommentsInfo).nodePos === pos;
- }
- function getLeadingCommentsWithoutDetachedComments() {
- var leadingComments = ts.getLeadingCommentRanges(currentSourceFile.text, ts.lastOrUndefined(detachedCommentsInfo).detachedCommentEndPos);
- if (detachedCommentsInfo.length - 1) {
- detachedCommentsInfo.pop();
- }
- else {
- detachedCommentsInfo = undefined;
- }
- return leadingComments;
- }
- function isPinnedComments(comment) {
- return currentSourceFile.text.charCodeAt(comment.pos + 1) === 42 &&
- currentSourceFile.text.charCodeAt(comment.pos + 2) === 33;
- }
- function isTripleSlashComment(comment) {
- if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 47 &&
- comment.pos + 2 < comment.end &&
- currentSourceFile.text.charCodeAt(comment.pos + 2) === 47) {
- var textSubStr = currentSourceFile.text.substring(comment.pos, comment.end);
- return textSubStr.match(ts.fullTripleSlashReferencePathRegEx) ||
- textSubStr.match(ts.fullTripleSlashAMDReferencePathRegEx) ?
- true : false;
- }
- return false;
- }
- function getLeadingCommentsToEmit(node) {
- if (node.parent) {
- if (node.parent.kind === 248 || node.pos !== node.parent.pos) {
- if (hasDetachedComments(node.pos)) {
- return getLeadingCommentsWithoutDetachedComments();
- }
- else {
- return ts.getLeadingCommentRangesOfNode(node, currentSourceFile);
- }
- }
- }
- }
- function getTrailingCommentsToEmit(node) {
- if (node.parent) {
- if (node.parent.kind === 248 || node.end !== node.parent.end) {
- return ts.getTrailingCommentRanges(currentSourceFile.text, node.end);
- }
- }
- }
- function emitCommentsOnNotEmittedNode(node) {
- emitLeadingCommentsWorker(node, false);
- }
- function emitLeadingComments(node) {
- return emitLeadingCommentsWorker(node, true);
- }
- function emitLeadingCommentsWorker(node, isEmittedNode) {
- if (compilerOptions.removeComments) {
- return;
- }
- var leadingComments;
- if (isEmittedNode) {
- leadingComments = getLeadingCommentsToEmit(node);
- }
- else {
- if (node.pos === 0) {
- leadingComments = ts.filter(getLeadingCommentsToEmit(node), isTripleSlashComment);
- }
- }
- ts.emitNewLineBeforeLeadingComments(currentSourceFile, writer, node, leadingComments);
- ts.emitComments(currentSourceFile, writer, leadingComments, true, newLine, writeComment);
- }
- function emitTrailingComments(node) {
- if (compilerOptions.removeComments) {
- return;
- }
- var trailingComments = getTrailingCommentsToEmit(node);
- ts.emitComments(currentSourceFile, writer, trailingComments, false, newLine, writeComment);
- }
- function emitTrailingCommentsOfPosition(pos) {
- if (compilerOptions.removeComments) {
- return;
- }
- var trailingComments = ts.getTrailingCommentRanges(currentSourceFile.text, pos);
- ts.emitComments(currentSourceFile, writer, trailingComments, true, newLine, writeComment);
- }
- function emitLeadingCommentsOfPositionWorker(pos) {
- if (compilerOptions.removeComments) {
- return;
- }
- var leadingComments;
- if (hasDetachedComments(pos)) {
- leadingComments = getLeadingCommentsWithoutDetachedComments();
- }
- else {
- leadingComments = ts.getLeadingCommentRanges(currentSourceFile.text, pos);
- }
- ts.emitNewLineBeforeLeadingComments(currentSourceFile, writer, { pos: pos, end: pos }, leadingComments);
- ts.emitComments(currentSourceFile, writer, leadingComments, true, newLine, writeComment);
- }
- function emitDetachedComments(node) {
- var leadingComments;
- if (compilerOptions.removeComments) {
- if (node.pos === 0) {
- leadingComments = ts.filter(ts.getLeadingCommentRanges(currentSourceFile.text, node.pos), isPinnedComments);
- }
- }
- else {
- leadingComments = ts.getLeadingCommentRanges(currentSourceFile.text, node.pos);
- }
- if (leadingComments) {
- var detachedComments = [];
- var lastComment;
- ts.forEach(leadingComments, function (comment) {
- if (lastComment) {
- var lastCommentLine = ts.getLineOfLocalPosition(currentSourceFile, lastComment.end);
- var commentLine = ts.getLineOfLocalPosition(currentSourceFile, comment.pos);
- if (commentLine >= lastCommentLine + 2) {
- return detachedComments;
- }
- }
- detachedComments.push(comment);
- lastComment = comment;
- });
- if (detachedComments.length) {
- var lastCommentLine = ts.getLineOfLocalPosition(currentSourceFile, ts.lastOrUndefined(detachedComments).end);
- var nodeLine = ts.getLineOfLocalPosition(currentSourceFile, ts.skipTrivia(currentSourceFile.text, node.pos));
- if (nodeLine >= lastCommentLine + 2) {
- ts.emitNewLineBeforeLeadingComments(currentSourceFile, writer, node, leadingComments);
- ts.emitComments(currentSourceFile, writer, detachedComments, true, newLine, writeComment);
- var currentDetachedCommentInfo = { nodePos: node.pos, detachedCommentEndPos: ts.lastOrUndefined(detachedComments).end };
- if (detachedCommentsInfo) {
- detachedCommentsInfo.push(currentDetachedCommentInfo);
- }
- else {
- detachedCommentsInfo = [currentDetachedCommentInfo];
- }
- }
- }
- }
- }
- function emitShebang() {
- var shebang = ts.getShebang(currentSourceFile.text);
- if (shebang) {
- write(shebang);
- }
- }
- var _a;
- }
- function emitFile(jsFilePath, sourceFile) {
- emitJavaScript(jsFilePath, sourceFile);
- if (compilerOptions.declaration) {
- ts.writeDeclarationFile(jsFilePath, sourceFile, host, resolver, diagnostics);
- }
- }
- }
- ts.emitFiles = emitFiles;
- })(ts || (ts = {}));
- var ts;
- (function (ts) {
- ts.programTime = 0;
- ts.emitTime = 0;
- ts.ioReadTime = 0;
- ts.ioWriteTime = 0;
- var emptyArray = [];
- ts.version = "1.7.3";
- function findConfigFile(searchPath) {
- var fileName = "tsconfig.json";
- while (true) {
- if (ts.sys.fileExists(fileName)) {
- return fileName;
- }
- var parentPath = ts.getDirectoryPath(searchPath);
- if (parentPath === searchPath) {
- break;
- }
- searchPath = parentPath;
- fileName = "../" + fileName;
- }
- return undefined;
- }
- ts.findConfigFile = findConfigFile;
- function resolveTripleslashReference(moduleName, containingFile) {
- var basePath = ts.getDirectoryPath(containingFile);
- var referencedFileName = ts.isRootedDiskPath(moduleName) ? moduleName : ts.combinePaths(basePath, moduleName);
- return ts.normalizePath(referencedFileName);
- }
- ts.resolveTripleslashReference = resolveTripleslashReference;
- function resolveModuleName(moduleName, containingFile, compilerOptions, host) {
- var moduleResolution = compilerOptions.moduleResolution !== undefined
- ? compilerOptions.moduleResolution
- : compilerOptions.module === 1 ? 2 : 1;
- switch (moduleResolution) {
- case 2: return nodeModuleNameResolver(moduleName, containingFile, host);
- case 1: return classicNameResolver(moduleName, containingFile, compilerOptions, host);
- }
- }
- ts.resolveModuleName = resolveModuleName;
- function nodeModuleNameResolver(moduleName, containingFile, host) {
- var containingDirectory = ts.getDirectoryPath(containingFile);
- if (ts.getRootLength(moduleName) !== 0 || nameStartsWithDotSlashOrDotDotSlash(moduleName)) {
- var failedLookupLocations = [];
- var candidate = ts.normalizePath(ts.combinePaths(containingDirectory, moduleName));
- var resolvedFileName = loadNodeModuleFromFile(candidate, failedLookupLocations, host);
- if (resolvedFileName) {
- return { resolvedModule: { resolvedFileName: resolvedFileName }, failedLookupLocations: failedLookupLocations };
- }
- resolvedFileName = loadNodeModuleFromDirectory(candidate, failedLookupLocations, host);
- return resolvedFileName
- ? { resolvedModule: { resolvedFileName: resolvedFileName }, failedLookupLocations: failedLookupLocations }
- : { resolvedModule: undefined, failedLookupLocations: failedLookupLocations };
- }
- else {
- return loadModuleFromNodeModules(moduleName, containingDirectory, host);
- }
- }
- ts.nodeModuleNameResolver = nodeModuleNameResolver;
- function loadNodeModuleFromFile(candidate, failedLookupLocation, host) {
- return ts.forEach(ts.moduleFileExtensions, tryLoad);
- function tryLoad(ext) {
- var fileName = ts.fileExtensionIs(candidate, ext) ? candidate : candidate + ext;
- if (host.fileExists(fileName)) {
- return fileName;
- }
- else {
- failedLookupLocation.push(fileName);
- return undefined;
- }
- }
- }
- function loadNodeModuleFromDirectory(candidate, failedLookupLocation, host) {
- var packageJsonPath = ts.combinePaths(candidate, "package.json");
- if (host.fileExists(packageJsonPath)) {
- var jsonContent;
- try {
- var jsonText = host.readFile(packageJsonPath);
- jsonContent = jsonText ? JSON.parse(jsonText) : { typings: undefined };
- }
- catch (e) {
- jsonContent = { typings: undefined };
- }
- if (jsonContent.typings) {
- var result = loadNodeModuleFromFile(ts.normalizePath(ts.combinePaths(candidate, jsonContent.typings)), failedLookupLocation, host);
- if (result) {
- return result;
- }
- }
- }
- else {
- failedLookupLocation.push(packageJsonPath);
- }
- return loadNodeModuleFromFile(ts.combinePaths(candidate, "index"), failedLookupLocation, host);
- }
- function loadModuleFromNodeModules(moduleName, directory, host) {
- var failedLookupLocations = [];
- directory = ts.normalizeSlashes(directory);
- while (true) {
- var baseName = ts.getBaseFileName(directory);
- if (baseName !== "node_modules") {
- var nodeModulesFolder = ts.combinePaths(directory, "node_modules");
- var candidate = ts.normalizePath(ts.combinePaths(nodeModulesFolder, moduleName));
- var result = loadNodeModuleFromFile(candidate, failedLookupLocations, host);
- if (result) {
- return { resolvedModule: { resolvedFileName: result, isExternalLibraryImport: true }, failedLookupLocations: failedLookupLocations };
- }
- result = loadNodeModuleFromDirectory(candidate, failedLookupLocations, host);
- if (result) {
- return { resolvedModule: { resolvedFileName: result, isExternalLibraryImport: true }, failedLookupLocations: failedLookupLocations };
- }
- }
- var parentPath = ts.getDirectoryPath(directory);
- if (parentPath === directory) {
- break;
- }
- directory = parentPath;
- }
- return { resolvedModule: undefined, failedLookupLocations: failedLookupLocations };
- }
- function nameStartsWithDotSlashOrDotDotSlash(name) {
- var i = name.lastIndexOf("./", 1);
- return i === 0 || (i === 1 && name.charCodeAt(0) === 46);
- }
- function classicNameResolver(moduleName, containingFile, compilerOptions, host) {
- if (moduleName.indexOf("!") != -1) {
- return { resolvedModule: undefined, failedLookupLocations: [] };
- }
- var searchPath = ts.getDirectoryPath(containingFile);
- var searchName;
- var failedLookupLocations = [];
- var referencedSourceFile;
- while (true) {
- searchName = ts.normalizePath(ts.combinePaths(searchPath, moduleName));
- referencedSourceFile = ts.forEach(ts.supportedExtensions, function (extension) {
- if (extension === ".tsx" && !compilerOptions.jsx) {
- return undefined;
- }
- var candidate = searchName + extension;
- if (host.fileExists(candidate)) {
- return candidate;
- }
- else {
- failedLookupLocations.push(candidate);
- }
- });
- if (referencedSourceFile) {
- break;
- }
- var parentPath = ts.getDirectoryPath(searchPath);
- if (parentPath === searchPath) {
- break;
- }
- searchPath = parentPath;
- }
- return referencedSourceFile
- ? { resolvedModule: { resolvedFileName: referencedSourceFile }, failedLookupLocations: failedLookupLocations }
- : { resolvedModule: undefined, failedLookupLocations: failedLookupLocations };
- }
- ts.classicNameResolver = classicNameResolver;
- ts.defaultInitCompilerOptions = {
- module: 1,
- target: 0,
- noImplicitAny: false,
- outDir: "built",
- rootDir: ".",
- sourceMap: false
- };
- function createCompilerHost(options, setParentNodes) {
- var currentDirectory;
- var existingDirectories = {};
- function getCanonicalFileName(fileName) {
- return ts.sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase();
- }
- var unsupportedFileEncodingErrorCode = -2147024809;
- function getSourceFile(fileName, languageVersion, onError) {
- var text;
- try {
- var start = new Date().getTime();
- text = ts.sys.readFile(fileName, options.charset);
- ts.ioReadTime += new Date().getTime() - start;
- }
- catch (e) {
- if (onError) {
- onError(e.number === unsupportedFileEncodingErrorCode
- ? ts.createCompilerDiagnostic(ts.Diagnostics.Unsupported_file_encoding).messageText
- : e.message);
- }
- text = "";
- }
- return text !== undefined ? ts.createSourceFile(fileName, text, languageVersion, setParentNodes) : undefined;
- }
- function directoryExists(directoryPath) {
- if (ts.hasProperty(existingDirectories, directoryPath)) {
- return true;
- }
- if (ts.sys.directoryExists(directoryPath)) {
- existingDirectories[directoryPath] = true;
- return true;
- }
- return false;
- }
- function ensureDirectoriesExist(directoryPath) {
- if (directoryPath.length > ts.getRootLength(directoryPath) && !directoryExists(directoryPath)) {
- var parentDirectory = ts.getDirectoryPath(directoryPath);
- ensureDirectoriesExist(parentDirectory);
- ts.sys.createDirectory(directoryPath);
- }
- }
- function writeFile(fileName, data, writeByteOrderMark, onError) {
- try {
- var start = new Date().getTime();
- ensureDirectoriesExist(ts.getDirectoryPath(ts.normalizePath(fileName)));
- ts.sys.writeFile(fileName, data, writeByteOrderMark);
- ts.ioWriteTime += new Date().getTime() - start;
- }
- catch (e) {
- if (onError) {
- onError(e.message);
- }
- }
- }
- var newLine = ts.getNewLineCharacter(options);
- return {
- getSourceFile: getSourceFile,
- getDefaultLibFileName: function (options) { return ts.combinePaths(ts.getDirectoryPath(ts.normalizePath(ts.sys.getExecutingFilePath())), ts.getDefaultLibFileName(options)); },
- writeFile: writeFile,
- getCurrentDirectory: function () { return currentDirectory || (currentDirectory = ts.sys.getCurrentDirectory()); },
- useCaseSensitiveFileNames: function () { return ts.sys.useCaseSensitiveFileNames; },
- getCanonicalFileName: getCanonicalFileName,
- getNewLine: function () { return newLine; },
- fileExists: function (fileName) { return ts.sys.fileExists(fileName); },
- readFile: function (fileName) { return ts.sys.readFile(fileName); }
- };
- }
- ts.createCompilerHost = createCompilerHost;
- function getPreEmitDiagnostics(program, sourceFile, cancellationToken) {
- var diagnostics = program.getOptionsDiagnostics(cancellationToken).concat(program.getSyntacticDiagnostics(sourceFile, cancellationToken), program.getGlobalDiagnostics(cancellationToken), program.getSemanticDiagnostics(sourceFile, cancellationToken));
- if (program.getCompilerOptions().declaration) {
- diagnostics.concat(program.getDeclarationDiagnostics(sourceFile, cancellationToken));
- }
- return ts.sortAndDeduplicateDiagnostics(diagnostics);
- }
- ts.getPreEmitDiagnostics = getPreEmitDiagnostics;
- function flattenDiagnosticMessageText(messageText, newLine) {
- if (typeof messageText === "string") {
- return messageText;
- }
- else {
- var diagnosticChain = messageText;
- var result = "";
- var indent = 0;
- while (diagnosticChain) {
- if (indent) {
- result += newLine;
- for (var i = 0; i < indent; i++) {
- result += " ";
- }
- }
- result += diagnosticChain.messageText;
- indent++;
- diagnosticChain = diagnosticChain.next;
- }
- return result;
- }
- }
- ts.flattenDiagnosticMessageText = flattenDiagnosticMessageText;
- function createProgram(rootNames, options, host, oldProgram) {
- var program;
- var files = [];
- var fileProcessingDiagnostics = ts.createDiagnosticCollection();
- var programDiagnostics = ts.createDiagnosticCollection();
- var commonSourceDirectory;
- var diagnosticsProducingTypeChecker;
- var noDiagnosticsTypeChecker;
- var classifiableNames;
- var skipDefaultLib = options.noLib;
- var start = new Date().getTime();
- host = host || createCompilerHost(options);
- var resolveModuleNamesWorker = host.resolveModuleNames
- ? (function (moduleNames, containingFile) { return host.resolveModuleNames(moduleNames, containingFile); })
- : (function (moduleNames, containingFile) { return ts.map(moduleNames, function (moduleName) { return resolveModuleName(moduleName, containingFile, options, host).resolvedModule; }); });
- var filesByName = ts.createFileMap(function (fileName) { return host.getCanonicalFileName(fileName); });
- if (oldProgram) {
- var oldOptions = oldProgram.getCompilerOptions();
- if ((oldOptions.module !== options.module) ||
- (oldOptions.noResolve !== options.noResolve) ||
- (oldOptions.target !== options.target) ||
- (oldOptions.noLib !== options.noLib) ||
- (oldOptions.jsx !== options.jsx)) {
- oldProgram = undefined;
- }
- }
- if (!tryReuseStructureFromOldProgram()) {
- ts.forEach(rootNames, function (name) { return processRootFile(name, false); });
- if (!skipDefaultLib) {
- processRootFile(host.getDefaultLibFileName(options), true);
- }
- }
- verifyCompilerOptions();
- oldProgram = undefined;
- ts.programTime += new Date().getTime() - start;
- program = {
- getRootFileNames: function () { return rootNames; },
- getSourceFile: getSourceFile,
- getSourceFiles: function () { return files; },
- getCompilerOptions: function () { return options; },
- getSyntacticDiagnostics: getSyntacticDiagnostics,
- getOptionsDiagnostics: getOptionsDiagnostics,
- getGlobalDiagnostics: getGlobalDiagnostics,
- getSemanticDiagnostics: getSemanticDiagnostics,
- getDeclarationDiagnostics: getDeclarationDiagnostics,
- getTypeChecker: getTypeChecker,
- getClassifiableNames: getClassifiableNames,
- getDiagnosticsProducingTypeChecker: getDiagnosticsProducingTypeChecker,
- getCommonSourceDirectory: function () { return commonSourceDirectory; },
- emit: emit,
- getCurrentDirectory: function () { return host.getCurrentDirectory(); },
- getNodeCount: function () { return getDiagnosticsProducingTypeChecker().getNodeCount(); },
- getIdentifierCount: function () { return getDiagnosticsProducingTypeChecker().getIdentifierCount(); },
- getSymbolCount: function () { return getDiagnosticsProducingTypeChecker().getSymbolCount(); },
- getTypeCount: function () { return getDiagnosticsProducingTypeChecker().getTypeCount(); },
- getFileProcessingDiagnostics: function () { return fileProcessingDiagnostics; }
- };
- return program;
- function getClassifiableNames() {
- if (!classifiableNames) {
- getTypeChecker();
- classifiableNames = {};
- for (var _i = 0; _i < files.length; _i++) {
- var sourceFile = files[_i];
- ts.copyMap(sourceFile.classifiableNames, classifiableNames);
- }
- }
- return classifiableNames;
- }
- function tryReuseStructureFromOldProgram() {
- if (!oldProgram) {
- return false;
- }
- ts.Debug.assert(!oldProgram.structureIsReused);
- var oldRootNames = oldProgram.getRootFileNames();
- if (!ts.arrayIsEqualTo(oldRootNames, rootNames)) {
- return false;
- }
- var newSourceFiles = [];
- var modifiedSourceFiles = [];
- for (var _i = 0, _a = oldProgram.getSourceFiles(); _i < _a.length; _i++) {
- var oldSourceFile = _a[_i];
- var newSourceFile = host.getSourceFile(oldSourceFile.fileName, options.target);
- if (!newSourceFile) {
- return false;
- }
- if (oldSourceFile !== newSourceFile) {
- if (oldSourceFile.hasNoDefaultLib !== newSourceFile.hasNoDefaultLib) {
- return false;
- }
- if (!ts.arrayIsEqualTo(oldSourceFile.referencedFiles, newSourceFile.referencedFiles, fileReferenceIsEqualTo)) {
- return false;
- }
- collectExternalModuleReferences(newSourceFile);
- if (!ts.arrayIsEqualTo(oldSourceFile.imports, newSourceFile.imports, moduleNameIsEqualTo)) {
- return false;
- }
- if (resolveModuleNamesWorker) {
- var moduleNames = ts.map(newSourceFile.imports, function (name) { return name.text; });
- var resolutions = resolveModuleNamesWorker(moduleNames, newSourceFile.fileName);
- for (var i = 0; i < moduleNames.length; ++i) {
- var newResolution = resolutions[i];
- var oldResolution = ts.getResolvedModule(oldSourceFile, moduleNames[i]);
- var resolutionChanged = oldResolution
- ? !newResolution ||
- oldResolution.resolvedFileName !== newResolution.resolvedFileName ||
- !!oldResolution.isExternalLibraryImport !== !!newResolution.isExternalLibraryImport
- : newResolution;
- if (resolutionChanged) {
- return false;
- }
- }
- }
- newSourceFile.resolvedModules = oldSourceFile.resolvedModules;
- modifiedSourceFiles.push(newSourceFile);
- }
- else {
- newSourceFile = oldSourceFile;
- }
- newSourceFiles.push(newSourceFile);
- }
- for (var _b = 0; _b < newSourceFiles.length; _b++) {
- var file = newSourceFiles[_b];
- filesByName.set(file.fileName, file);
- }
- files = newSourceFiles;
- fileProcessingDiagnostics = oldProgram.getFileProcessingDiagnostics();
- for (var _c = 0; _c < modifiedSourceFiles.length; _c++) {
- var modifiedFile = modifiedSourceFiles[_c];
- fileProcessingDiagnostics.reattachFileDiagnostics(modifiedFile);
- }
- oldProgram.structureIsReused = true;
- return true;
- }
- function getEmitHost(writeFileCallback) {
- return {
- getCanonicalFileName: function (fileName) { return host.getCanonicalFileName(fileName); },
- getCommonSourceDirectory: program.getCommonSourceDirectory,
- getCompilerOptions: program.getCompilerOptions,
- getCurrentDirectory: function () { return host.getCurrentDirectory(); },
- getNewLine: function () { return host.getNewLine(); },
- getSourceFile: program.getSourceFile,
- getSourceFiles: program.getSourceFiles,
- writeFile: writeFileCallback || (function (fileName, data, writeByteOrderMark, onError) { return host.writeFile(fileName, data, writeByteOrderMark, onError); })
- };
- }
- function getDiagnosticsProducingTypeChecker() {
- return diagnosticsProducingTypeChecker || (diagnosticsProducingTypeChecker = ts.createTypeChecker(program, true));
- }
- function getTypeChecker() {
- return noDiagnosticsTypeChecker || (noDiagnosticsTypeChecker = ts.createTypeChecker(program, false));
- }
- function emit(sourceFile, writeFileCallback, cancellationToken) {
- var _this = this;
- return runWithCancellationToken(function () { return emitWorker(_this, sourceFile, writeFileCallback, cancellationToken); });
- }
- function emitWorker(program, sourceFile, writeFileCallback, cancellationToken) {
- if (options.noEmitOnError && getPreEmitDiagnostics(program, undefined, cancellationToken).length > 0) {
- return { diagnostics: [], sourceMaps: undefined, emitSkipped: true };
- }
- var emitResolver = getDiagnosticsProducingTypeChecker().getEmitResolver((options.outFile || options.out) ? undefined : sourceFile);
- var start = new Date().getTime();
- var emitResult = ts.emitFiles(emitResolver, getEmitHost(writeFileCallback), sourceFile);
- ts.emitTime += new Date().getTime() - start;
- return emitResult;
- }
- function getSourceFile(fileName) {
- return filesByName.get(fileName) || filesByName.get(ts.getNormalizedAbsolutePath(fileName, host.getCurrentDirectory()));
- }
- function getDiagnosticsHelper(sourceFile, getDiagnostics, cancellationToken) {
- if (sourceFile) {
- return getDiagnostics(sourceFile, cancellationToken);
- }
- var allDiagnostics = [];
- ts.forEach(program.getSourceFiles(), function (sourceFile) {
- if (cancellationToken) {
- cancellationToken.throwIfCancellationRequested();
- }
- ts.addRange(allDiagnostics, getDiagnostics(sourceFile, cancellationToken));
- });
- return ts.sortAndDeduplicateDiagnostics(allDiagnostics);
- }
- function getSyntacticDiagnostics(sourceFile, cancellationToken) {
- return getDiagnosticsHelper(sourceFile, getSyntacticDiagnosticsForFile, cancellationToken);
- }
- function getSemanticDiagnostics(sourceFile, cancellationToken) {
- return getDiagnosticsHelper(sourceFile, getSemanticDiagnosticsForFile, cancellationToken);
- }
- function getDeclarationDiagnostics(sourceFile, cancellationToken) {
- return getDiagnosticsHelper(sourceFile, getDeclarationDiagnosticsForFile, cancellationToken);
- }
- function getSyntacticDiagnosticsForFile(sourceFile, cancellationToken) {
- return sourceFile.parseDiagnostics;
- }
- function runWithCancellationToken(func) {
- try {
- return func();
- }
- catch (e) {
- if (e instanceof ts.OperationCanceledException) {
- noDiagnosticsTypeChecker = undefined;
- diagnosticsProducingTypeChecker = undefined;
- }
- throw e;
- }
- }
- function getSemanticDiagnosticsForFile(sourceFile, cancellationToken) {
- return runWithCancellationToken(function () {
- var typeChecker = getDiagnosticsProducingTypeChecker();
- ts.Debug.assert(!!sourceFile.bindDiagnostics);
- var bindDiagnostics = sourceFile.bindDiagnostics;
- var checkDiagnostics = typeChecker.getDiagnostics(sourceFile, cancellationToken);
- var fileProcessingDiagnosticsInFile = fileProcessingDiagnostics.getDiagnostics(sourceFile.fileName);
- var programDiagnosticsInFile = programDiagnostics.getDiagnostics(sourceFile.fileName);
- return bindDiagnostics.concat(checkDiagnostics).concat(fileProcessingDiagnosticsInFile).concat(programDiagnosticsInFile);
- });
- }
- function getDeclarationDiagnosticsForFile(sourceFile, cancellationToken) {
- return runWithCancellationToken(function () {
- if (!ts.isDeclarationFile(sourceFile)) {
- var resolver = getDiagnosticsProducingTypeChecker().getEmitResolver(sourceFile, cancellationToken);
- var writeFile_1 = function () { };
- return ts.getDeclarationDiagnostics(getEmitHost(writeFile_1), resolver, sourceFile);
- }
- });
- }
- function getOptionsDiagnostics() {
- var allDiagnostics = [];
- ts.addRange(allDiagnostics, fileProcessingDiagnostics.getGlobalDiagnostics());
- ts.addRange(allDiagnostics, programDiagnostics.getGlobalDiagnostics());
- return ts.sortAndDeduplicateDiagnostics(allDiagnostics);
- }
- function getGlobalDiagnostics() {
- var allDiagnostics = [];
- ts.addRange(allDiagnostics, getDiagnosticsProducingTypeChecker().getGlobalDiagnostics());
- return ts.sortAndDeduplicateDiagnostics(allDiagnostics);
- }
- function hasExtension(fileName) {
- return ts.getBaseFileName(fileName).indexOf(".") >= 0;
- }
- function processRootFile(fileName, isDefaultLib) {
- processSourceFile(ts.normalizePath(fileName), isDefaultLib);
- }
- function fileReferenceIsEqualTo(a, b) {
- return a.fileName === b.fileName;
- }
- function moduleNameIsEqualTo(a, b) {
- return a.text === b.text;
- }
- function collectExternalModuleReferences(file) {
- if (file.imports) {
- return;
- }
- var imports;
- for (var _i = 0, _a = file.statements; _i < _a.length; _i++) {
- var node = _a[_i];
- collect(node, true);
- }
- file.imports = imports || emptyArray;
- function collect(node, allowRelativeModuleNames) {
- switch (node.kind) {
- case 222:
- case 221:
- case 228:
- var moduleNameExpr = ts.getExternalModuleName(node);
- if (!moduleNameExpr || moduleNameExpr.kind !== 9) {
- break;
- }
- if (!moduleNameExpr.text) {
- break;
- }
- if (allowRelativeModuleNames || !ts.isExternalModuleNameRelative(moduleNameExpr.text)) {
- (imports || (imports = [])).push(moduleNameExpr);
- }
- break;
- case 218:
- if (node.name.kind === 9 && (node.flags & 2 || ts.isDeclarationFile(file))) {
- ts.forEachChild(node.body, function (node) {
- collect(node, false);
- });
- }
- break;
- }
- }
- }
- function processSourceFile(fileName, isDefaultLib, refFile, refPos, refEnd) {
- var diagnosticArgument;
- var diagnostic;
- if (hasExtension(fileName)) {
- if (!options.allowNonTsExtensions && !ts.forEach(ts.supportedExtensions, function (extension) { return ts.fileExtensionIs(host.getCanonicalFileName(fileName), extension); })) {
- diagnostic = ts.Diagnostics.File_0_has_unsupported_extension_The_only_supported_extensions_are_1;
- diagnosticArgument = [fileName, "'" + ts.supportedExtensions.join("', '") + "'"];
- }
- else if (!findSourceFile(fileName, isDefaultLib, refFile, refPos, refEnd)) {
- diagnostic = ts.Diagnostics.File_0_not_found;
- diagnosticArgument = [fileName];
- }
- else if (refFile && host.getCanonicalFileName(fileName) === host.getCanonicalFileName(refFile.fileName)) {
- diagnostic = ts.Diagnostics.A_file_cannot_have_a_reference_to_itself;
- diagnosticArgument = [fileName];
- }
- }
- else {
- var nonTsFile = options.allowNonTsExtensions && findSourceFile(fileName, isDefaultLib, refFile, refPos, refEnd);
- if (!nonTsFile) {
- if (options.allowNonTsExtensions) {
- diagnostic = ts.Diagnostics.File_0_not_found;
- diagnosticArgument = [fileName];
- }
- else if (!ts.forEach(ts.supportedExtensions, function (extension) { return findSourceFile(fileName + extension, isDefaultLib, refFile, refPos, refEnd); })) {
- diagnostic = ts.Diagnostics.File_0_not_found;
- fileName += ".ts";
- diagnosticArgument = [fileName];
- }
- }
- }
- if (diagnostic) {
- if (refFile !== undefined && refEnd !== undefined && refPos !== undefined) {
- fileProcessingDiagnostics.add(ts.createFileDiagnostic.apply(void 0, [refFile, refPos, refEnd - refPos, diagnostic].concat(diagnosticArgument)));
- }
- else {
- fileProcessingDiagnostics.add(ts.createCompilerDiagnostic.apply(void 0, [diagnostic].concat(diagnosticArgument)));
- }
- }
- }
- function findSourceFile(fileName, isDefaultLib, refFile, refPos, refEnd) {
- if (filesByName.contains(fileName)) {
- return getSourceFileFromCache(fileName, false);
- }
- var normalizedAbsolutePath = ts.getNormalizedAbsolutePath(fileName, host.getCurrentDirectory());
- if (filesByName.contains(normalizedAbsolutePath)) {
- var file_1 = getSourceFileFromCache(normalizedAbsolutePath, true);
- filesByName.set(fileName, file_1);
- return file_1;
- }
- var file = host.getSourceFile(fileName, options.target, function (hostErrorMessage) {
- if (refFile !== undefined && refPos !== undefined && refEnd !== undefined) {
- fileProcessingDiagnostics.add(ts.createFileDiagnostic(refFile, refPos, refEnd - refPos, ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage));
- }
- else {
- fileProcessingDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage));
- }
- });
- filesByName.set(fileName, file);
- if (file) {
- skipDefaultLib = skipDefaultLib || file.hasNoDefaultLib;
- filesByName.set(normalizedAbsolutePath, file);
- var basePath = ts.getDirectoryPath(fileName);
- if (!options.noResolve) {
- processReferencedFiles(file, basePath);
- }
- processImportedModules(file, basePath);
- if (isDefaultLib) {
- file.isDefaultLib = true;
- files.unshift(file);
- }
- else {
- files.push(file);
- }
- }
- return file;
- function getSourceFileFromCache(fileName, useAbsolutePath) {
- var file = filesByName.get(fileName);
- if (file && host.useCaseSensitiveFileNames()) {
- var sourceFileName = useAbsolutePath ? ts.getNormalizedAbsolutePath(file.fileName, host.getCurrentDirectory()) : file.fileName;
- if (ts.normalizeSlashes(fileName) !== ts.normalizeSlashes(sourceFileName)) {
- if (refFile !== undefined && refPos !== undefined && refEnd !== undefined) {
- fileProcessingDiagnostics.add(ts.createFileDiagnostic(refFile, refPos, refEnd - refPos, ts.Diagnostics.File_name_0_differs_from_already_included_file_name_1_only_in_casing, fileName, sourceFileName));
- }
- else {
- fileProcessingDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.File_name_0_differs_from_already_included_file_name_1_only_in_casing, fileName, sourceFileName));
- }
- }
- }
- return file;
- }
- }
- function processReferencedFiles(file, basePath) {
- ts.forEach(file.referencedFiles, function (ref) {
- var referencedFileName = resolveTripleslashReference(ref.fileName, file.fileName);
- processSourceFile(referencedFileName, false, file, ref.pos, ref.end);
- });
- }
- function processImportedModules(file, basePath) {
- collectExternalModuleReferences(file);
- if (file.imports.length) {
- file.resolvedModules = {};
- var moduleNames = ts.map(file.imports, function (name) { return name.text; });
- var resolutions = resolveModuleNamesWorker(moduleNames, file.fileName);
- for (var i = 0; i < file.imports.length; ++i) {
- var resolution = resolutions[i];
- ts.setResolvedModule(file, moduleNames[i], resolution);
- if (resolution && !options.noResolve) {
- var importedFile = findModuleSourceFile(resolution.resolvedFileName, file.imports[i]);
- if (importedFile && resolution.isExternalLibraryImport) {
- if (!ts.isExternalModule(importedFile)) {
- var start_2 = ts.getTokenPosOfNode(file.imports[i], file);
- fileProcessingDiagnostics.add(ts.createFileDiagnostic(file, start_2, file.imports[i].end - start_2, ts.Diagnostics.Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_the_package_definition, importedFile.fileName));
- }
- else if (importedFile.referencedFiles.length) {
- var firstRef = importedFile.referencedFiles[0];
- fileProcessingDiagnostics.add(ts.createFileDiagnostic(importedFile, firstRef.pos, firstRef.end - firstRef.pos, ts.Diagnostics.Exported_external_package_typings_file_cannot_contain_tripleslash_references_Please_contact_the_package_author_to_update_the_package_definition));
- }
- }
- }
- }
- }
- else {
- file.resolvedModules = undefined;
- }
- return;
- function findModuleSourceFile(fileName, nameLiteral) {
- return findSourceFile(fileName, false, file, ts.skipTrivia(file.text, nameLiteral.pos), nameLiteral.end);
- }
- }
- function computeCommonSourceDirectory(sourceFiles) {
- var commonPathComponents;
- var currentDirectory = host.getCurrentDirectory();
- ts.forEach(files, function (sourceFile) {
- if (ts.isDeclarationFile(sourceFile)) {
- return;
- }
- var sourcePathComponents = ts.getNormalizedPathComponents(sourceFile.fileName, currentDirectory);
- sourcePathComponents.pop();
- if (!commonPathComponents) {
- commonPathComponents = sourcePathComponents;
- return;
- }
- for (var i = 0, n = Math.min(commonPathComponents.length, sourcePathComponents.length); i < n; i++) {
- if (commonPathComponents[i] !== sourcePathComponents[i]) {
- if (i === 0) {
- programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_find_the_common_subdirectory_path_for_the_input_files));
- return;
- }
- commonPathComponents.length = i;
- break;
- }
- }
- if (sourcePathComponents.length < commonPathComponents.length) {
- commonPathComponents.length = sourcePathComponents.length;
- }
- });
- return ts.getNormalizedPathFromPathComponents(commonPathComponents);
- }
- function checkSourceFilesBelongToPath(sourceFiles, rootDirectory) {
- var allFilesBelongToPath = true;
- if (sourceFiles) {
- var currentDirectory = host.getCurrentDirectory();
- var absoluteRootDirectoryPath = host.getCanonicalFileName(ts.getNormalizedAbsolutePath(rootDirectory, currentDirectory));
- for (var _i = 0; _i < sourceFiles.length; _i++) {
- var sourceFile = sourceFiles[_i];
- if (!ts.isDeclarationFile(sourceFile)) {
- var absoluteSourceFilePath = host.getCanonicalFileName(ts.getNormalizedAbsolutePath(sourceFile.fileName, currentDirectory));
- if (absoluteSourceFilePath.indexOf(absoluteRootDirectoryPath) !== 0) {
- programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files, sourceFile.fileName, options.rootDir));
- allFilesBelongToPath = false;
- }
- }
- }
- }
- return allFilesBelongToPath;
- }
- function verifyCompilerOptions() {
- if (options.isolatedModules) {
- if (options.declaration) {
- programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "declaration", "isolatedModules"));
- }
- if (options.noEmitOnError) {
- programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "noEmitOnError", "isolatedModules"));
- }
- if (options.out) {
- programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "out", "isolatedModules"));
- }
- if (options.outFile) {
- programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "outFile", "isolatedModules"));
- }
- }
- if (options.inlineSourceMap) {
- if (options.sourceMap) {
- programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "sourceMap", "inlineSourceMap"));
- }
- if (options.mapRoot) {
- programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "mapRoot", "inlineSourceMap"));
- }
- if (options.sourceRoot) {
- programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "sourceRoot", "inlineSourceMap"));
- }
- }
- if (options.inlineSources) {
- if (!options.sourceMap && !options.inlineSourceMap) {
- programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_inlineSources_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided));
- }
- }
- if (options.out && options.outFile) {
- programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "out", "outFile"));
- }
- if (!options.sourceMap && (options.mapRoot || options.sourceRoot)) {
- if (options.mapRoot) {
- programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "mapRoot", "sourceMap"));
- }
- if (options.sourceRoot) {
- programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "sourceRoot", "sourceMap"));
- }
- return;
- }
- var languageVersion = options.target || 0;
- var outFile = options.outFile || options.out;
- var firstExternalModuleSourceFile = ts.forEach(files, function (f) { return ts.isExternalModule(f) ? f : undefined; });
- if (options.isolatedModules) {
- if (!options.module && languageVersion < 2) {
- programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES6_or_higher));
- }
- var firstNonExternalModuleSourceFile = ts.forEach(files, function (f) { return !ts.isExternalModule(f) && !ts.isDeclarationFile(f) ? f : undefined; });
- if (firstNonExternalModuleSourceFile) {
- var span = ts.getErrorSpanForNode(firstNonExternalModuleSourceFile, firstNonExternalModuleSourceFile);
- programDiagnostics.add(ts.createFileDiagnostic(firstNonExternalModuleSourceFile, span.start, span.length, ts.Diagnostics.Cannot_compile_namespaces_when_the_isolatedModules_flag_is_provided));
- }
- }
- else if (firstExternalModuleSourceFile && languageVersion < 2 && !options.module) {
- var span = ts.getErrorSpanForNode(firstExternalModuleSourceFile, firstExternalModuleSourceFile.externalModuleIndicator);
- programDiagnostics.add(ts.createFileDiagnostic(firstExternalModuleSourceFile, span.start, span.length, ts.Diagnostics.Cannot_compile_modules_unless_the_module_flag_is_provided));
- }
- if (options.module === 5 && languageVersion < 2) {
- programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_compile_modules_into_es6_when_targeting_ES5_or_lower));
- }
- if (options.outDir ||
- options.sourceRoot ||
- (options.mapRoot &&
- (!outFile || firstExternalModuleSourceFile !== undefined))) {
- if (options.rootDir && checkSourceFilesBelongToPath(files, options.rootDir)) {
- commonSourceDirectory = ts.getNormalizedAbsolutePath(options.rootDir, host.getCurrentDirectory());
- }
- else {
- commonSourceDirectory = computeCommonSourceDirectory(files);
- }
- if (commonSourceDirectory && commonSourceDirectory[commonSourceDirectory.length - 1] !== ts.directorySeparator) {
- commonSourceDirectory += ts.directorySeparator;
- }
- }
- if (options.noEmit) {
- if (options.out) {
- programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "noEmit", "out"));
- }
- if (options.outFile) {
- programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "noEmit", "outFile"));
- }
- if (options.outDir) {
- programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "noEmit", "outDir"));
- }
- if (options.declaration) {
- programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "noEmit", "declaration"));
- }
- }
- if (options.emitDecoratorMetadata &&
- !options.experimentalDecorators) {
- programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "emitDecoratorMetadata", "experimentalDecorators"));
- }
- }
- }
- ts.createProgram = createProgram;
- })(ts || (ts = {}));
- var ts;
- (function (ts) {
- ts.optionDeclarations = [
- {
- name: "charset",
- type: "string"
- },
- {
- name: "declaration",
- shortName: "d",
- type: "boolean",
- description: ts.Diagnostics.Generates_corresponding_d_ts_file
- },
- {
- name: "diagnostics",
- type: "boolean"
- },
- {
- name: "emitBOM",
- type: "boolean"
- },
- {
- name: "help",
- shortName: "h",
- type: "boolean",
- description: ts.Diagnostics.Print_this_message
- },
- {
- name: "init",
- type: "boolean",
- description: ts.Diagnostics.Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file
- },
- {
- name: "inlineSourceMap",
- type: "boolean"
- },
- {
- name: "inlineSources",
- type: "boolean"
- },
- {
- name: "jsx",
- type: {
- "preserve": 1,
- "react": 2
- },
- paramType: ts.Diagnostics.KIND,
- description: ts.Diagnostics.Specify_JSX_code_generation_Colon_preserve_or_react,
- error: ts.Diagnostics.Argument_for_jsx_must_be_preserve_or_react
- },
- {
- name: "listFiles",
- type: "boolean"
- },
- {
- name: "locale",
- type: "string"
- },
- {
- name: "mapRoot",
- type: "string",
- isFilePath: true,
- description: ts.Diagnostics.Specifies_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations,
- paramType: ts.Diagnostics.LOCATION
- },
- {
- name: "module",
- shortName: "m",
- type: {
- "commonjs": 1,
- "amd": 2,
- "system": 4,
- "umd": 3,
- "es6": 5,
- "es2015": 5
- },
- description: ts.Diagnostics.Specify_module_code_generation_Colon_commonjs_amd_system_umd_or_es6,
- paramType: ts.Diagnostics.KIND,
- error: ts.Diagnostics.Argument_for_module_option_must_be_commonjs_amd_system_umd_or_es6
- },
- {
- name: "newLine",
- type: {
- "crlf": 0,
- "lf": 1
- },
- description: ts.Diagnostics.Specifies_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix,
- paramType: ts.Diagnostics.NEWLINE,
- error: ts.Diagnostics.Argument_for_newLine_option_must_be_CRLF_or_LF
- },
- {
- name: "noEmit",
- type: "boolean",
- description: ts.Diagnostics.Do_not_emit_outputs
- },
- {
- name: "noEmitHelpers",
- type: "boolean"
- },
- {
- name: "noEmitOnError",
- type: "boolean",
- description: ts.Diagnostics.Do_not_emit_outputs_if_any_errors_were_reported
- },
- {
- name: "noImplicitAny",
- type: "boolean",
- description: ts.Diagnostics.Raise_error_on_expressions_and_declarations_with_an_implied_any_type
- },
- {
- name: "noLib",
- type: "boolean"
- },
- {
- name: "noResolve",
- type: "boolean"
- },
- {
- name: "skipDefaultLibCheck",
- type: "boolean"
- },
- {
- name: "out",
- type: "string",
- isFilePath: false,
- paramType: ts.Diagnostics.FILE
- },
- {
- name: "outFile",
- type: "string",
- isFilePath: true,
- description: ts.Diagnostics.Concatenate_and_emit_output_to_single_file,
- paramType: ts.Diagnostics.FILE
- },
- {
- name: "outDir",
- type: "string",
- isFilePath: true,
- description: ts.Diagnostics.Redirect_output_structure_to_the_directory,
- paramType: ts.Diagnostics.DIRECTORY
- },
- {
- name: "preserveConstEnums",
- type: "boolean",
- description: ts.Diagnostics.Do_not_erase_const_enum_declarations_in_generated_code
- },
- {
- name: "project",
- shortName: "p",
- type: "string",
- isFilePath: true,
- description: ts.Diagnostics.Compile_the_project_in_the_given_directory,
- paramType: ts.Diagnostics.DIRECTORY
- },
- {
- name: "removeComments",
- type: "boolean",
- description: ts.Diagnostics.Do_not_emit_comments_to_output
- },
- {
- name: "rootDir",
- type: "string",
- isFilePath: true,
- description: ts.Diagnostics.Specifies_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir,
- paramType: ts.Diagnostics.LOCATION
- },
- {
- name: "isolatedModules",
- type: "boolean"
- },
- {
- name: "sourceMap",
- type: "boolean",
- description: ts.Diagnostics.Generates_corresponding_map_file
- },
- {
- name: "sourceRoot",
- type: "string",
- isFilePath: true,
- description: ts.Diagnostics.Specifies_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations,
- paramType: ts.Diagnostics.LOCATION
- },
- {
- name: "suppressExcessPropertyErrors",
- type: "boolean",
- description: ts.Diagnostics.Suppress_excess_property_checks_for_object_literals,
- experimental: true
- },
- {
- name: "suppressImplicitAnyIndexErrors",
- type: "boolean",
- description: ts.Diagnostics.Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures
- },
- {
- name: "stripInternal",
- type: "boolean",
- description: ts.Diagnostics.Do_not_emit_declarations_for_code_that_has_an_internal_annotation,
- experimental: true
- },
- {
- name: "target",
- shortName: "t",
- type: {
- "es3": 0,
- "es5": 1,
- "es6": 2,
- "es2015": 2
- },
- description: ts.Diagnostics.Specify_ECMAScript_target_version_Colon_ES3_default_ES5_or_ES6_experimental,
- paramType: ts.Diagnostics.VERSION,
- error: ts.Diagnostics.Argument_for_target_option_must_be_ES3_ES5_or_ES6
- },
- {
- name: "version",
- shortName: "v",
- type: "boolean",
- description: ts.Diagnostics.Print_the_compiler_s_version
- },
- {
- name: "watch",
- shortName: "w",
- type: "boolean",
- description: ts.Diagnostics.Watch_input_files
- },
- {
- name: "experimentalDecorators",
- type: "boolean",
- description: ts.Diagnostics.Enables_experimental_support_for_ES7_decorators
- },
- {
- name: "emitDecoratorMetadata",
- type: "boolean",
- experimental: true,
- description: ts.Diagnostics.Enables_experimental_support_for_emitting_type_metadata_for_decorators
- },
- {
- name: "moduleResolution",
- type: {
- "node": 2,
- "classic": 1
- },
- description: ts.Diagnostics.Specifies_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6,
- error: ts.Diagnostics.Argument_for_moduleResolution_option_must_be_node_or_classic
- }
- ];
- var optionNameMapCache;
- function getOptionNameMap() {
- if (optionNameMapCache) {
- return optionNameMapCache;
- }
- var optionNameMap = {};
- var shortOptionNames = {};
- ts.forEach(ts.optionDeclarations, function (option) {
- optionNameMap[option.name.toLowerCase()] = option;
- if (option.shortName) {
- shortOptionNames[option.shortName] = option.name;
- }
- });
- optionNameMapCache = { optionNameMap: optionNameMap, shortOptionNames: shortOptionNames };
- return optionNameMapCache;
- }
- ts.getOptionNameMap = getOptionNameMap;
- function parseCommandLine(commandLine, readFile) {
- var options = {};
- var fileNames = [];
- var errors = [];
- var _a = getOptionNameMap(), optionNameMap = _a.optionNameMap, shortOptionNames = _a.shortOptionNames;
- parseStrings(commandLine);
- return {
- options: options,
- fileNames: fileNames,
- errors: errors
- };
- function parseStrings(args) {
- var i = 0;
- while (i < args.length) {
- var s = args[i++];
- if (s.charCodeAt(0) === 64) {
- parseResponseFile(s.slice(1));
- }
- else if (s.charCodeAt(0) === 45) {
- s = s.slice(s.charCodeAt(1) === 45 ? 2 : 1).toLowerCase();
- if (ts.hasProperty(shortOptionNames, s)) {
- s = shortOptionNames[s];
- }
- if (ts.hasProperty(optionNameMap, s)) {
- var opt = optionNameMap[s];
- if (!args[i] && opt.type !== "boolean") {
- errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_expects_an_argument, opt.name));
- }
- switch (opt.type) {
- case "number":
- options[opt.name] = parseInt(args[i++]);
- break;
- case "boolean":
- options[opt.name] = true;
- break;
- case "string":
- options[opt.name] = args[i++] || "";
- break;
- default:
- var map_2 = opt.type;
- var key = (args[i++] || "").toLowerCase();
- if (ts.hasProperty(map_2, key)) {
- options[opt.name] = map_2[key];
- }
- else {
- errors.push(ts.createCompilerDiagnostic(opt.error));
- }
- }
- }
- else {
- errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unknown_compiler_option_0, s));
- }
- }
- else {
- fileNames.push(s);
- }
- }
- }
- function parseResponseFile(fileName) {
- var text = readFile ? readFile(fileName) : ts.sys.readFile(fileName);
- if (!text) {
- errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.File_0_not_found, fileName));
- return;
- }
- var args = [];
- var pos = 0;
- while (true) {
- while (pos < text.length && text.charCodeAt(pos) <= 32)
- pos++;
- if (pos >= text.length)
- break;
- var start = pos;
- if (text.charCodeAt(start) === 34) {
- pos++;
- while (pos < text.length && text.charCodeAt(pos) !== 34)
- pos++;
- if (pos < text.length) {
- args.push(text.substring(start + 1, pos));
- pos++;
- }
- else {
- errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unterminated_quoted_string_in_response_file_0, fileName));
- }
- }
- else {
- while (text.charCodeAt(pos) > 32)
- pos++;
- args.push(text.substring(start, pos));
- }
- }
- parseStrings(args);
- }
- }
- ts.parseCommandLine = parseCommandLine;
- function readConfigFile(fileName, readFile) {
- var text = "";
- try {
- text = readFile(fileName);
- }
- catch (e) {
- return { error: ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, e.message) };
- }
- return parseConfigFileTextToJson(fileName, text);
- }
- ts.readConfigFile = readConfigFile;
- function parseConfigFileTextToJson(fileName, jsonText) {
- try {
- return { config: /\S/.test(jsonText) ? JSON.parse(jsonText) : {} };
- }
- catch (e) {
- return { error: ts.createCompilerDiagnostic(ts.Diagnostics.Failed_to_parse_file_0_Colon_1, fileName, e.message) };
- }
- }
- ts.parseConfigFileTextToJson = parseConfigFileTextToJson;
- function parseJsonConfigFileContent(json, host, basePath) {
- var errors = [];
- return {
- options: getCompilerOptions(),
- fileNames: getFileNames(),
- errors: errors
- };
- function getCompilerOptions() {
- var options = {};
- var optionNameMap = {};
- ts.forEach(ts.optionDeclarations, function (option) {
- optionNameMap[option.name] = option;
- });
- var jsonOptions = json["compilerOptions"];
- if (jsonOptions) {
- for (var id in jsonOptions) {
- if (ts.hasProperty(optionNameMap, id)) {
- var opt = optionNameMap[id];
- var optType = opt.type;
- var value = jsonOptions[id];
- var expectedType = typeof optType === "string" ? optType : "string";
- if (typeof value === expectedType) {
- if (typeof optType !== "string") {
- var key = value.toLowerCase();
- if (ts.hasProperty(optType, key)) {
- value = optType[key];
- }
- else {
- errors.push(ts.createCompilerDiagnostic(opt.error));
- value = 0;
- }
- }
- if (opt.isFilePath) {
- value = ts.normalizePath(ts.combinePaths(basePath, value));
- if (value === "") {
- value = ".";
- }
- }
- options[opt.name] = value;
- }
- else {
- errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, id, expectedType));
- }
- }
- else {
- errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unknown_compiler_option_0, id));
- }
- }
- }
- return options;
- }
- function getFileNames() {
- var fileNames = [];
- if (ts.hasProperty(json, "files")) {
- if (json["files"] instanceof Array) {
- fileNames = ts.map(json["files"], function (s) { return ts.combinePaths(basePath, s); });
- }
- else {
- errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "files", "Array"));
- }
- }
- else {
- var exclude = json["exclude"] instanceof Array ? ts.map(json["exclude"], ts.normalizeSlashes) : undefined;
- var sysFiles = host.readDirectory(basePath, ".ts", exclude).concat(host.readDirectory(basePath, ".tsx", exclude));
- for (var i = 0; i < sysFiles.length; i++) {
- var name_28 = sysFiles[i];
- if (ts.fileExtensionIs(name_28, ".d.ts")) {
- var baseName = name_28.substr(0, name_28.length - ".d.ts".length);
- if (!ts.contains(sysFiles, baseName + ".tsx") && !ts.contains(sysFiles, baseName + ".ts")) {
- fileNames.push(name_28);
- }
- }
- else if (ts.fileExtensionIs(name_28, ".ts")) {
- if (!ts.contains(sysFiles, name_28 + "x")) {
- fileNames.push(name_28);
- }
- }
- else {
- fileNames.push(name_28);
- }
- }
- }
- return fileNames;
- }
- }
- ts.parseJsonConfigFileContent = parseJsonConfigFileContent;
- })(ts || (ts = {}));
- var ts;
- (function (ts) {
- function validateLocaleAndSetLanguage(locale, errors) {
- var matchResult = /^([a-z]+)([_\-]([a-z]+))?$/.exec(locale.toLowerCase());
- if (!matchResult) {
- errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1, "en", "ja-jp"));
- return false;
- }
- var language = matchResult[1];
- var territory = matchResult[3];
- if (!trySetLanguageAndTerritory(language, territory, errors) &&
- !trySetLanguageAndTerritory(language, undefined, errors)) {
- errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unsupported_locale_0, locale));
- return false;
- }
- return true;
- }
- function trySetLanguageAndTerritory(language, territory, errors) {
- var compilerFilePath = ts.normalizePath(ts.sys.getExecutingFilePath());
- var containingDirectoryPath = ts.getDirectoryPath(compilerFilePath);
- var filePath = ts.combinePaths(containingDirectoryPath, language);
- if (territory) {
- filePath = filePath + "-" + territory;
- }
- filePath = ts.sys.resolvePath(ts.combinePaths(filePath, "diagnosticMessages.generated.json"));
- if (!ts.sys.fileExists(filePath)) {
- return false;
- }
- var fileContents = "";
- try {
- fileContents = ts.sys.readFile(filePath);
- }
- catch (e) {
- errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unable_to_open_file_0, filePath));
- return false;
- }
- try {
- ts.localizedDiagnosticMessages = JSON.parse(fileContents);
- }
- catch (e) {
- errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Corrupted_locale_file_0, filePath));
- return false;
- }
- return true;
- }
- function countLines(program) {
- var count = 0;
- ts.forEach(program.getSourceFiles(), function (file) {
- count += ts.getLineStarts(file).length;
- });
- return count;
- }
- function getDiagnosticText(message) {
- var args = [];
- for (var _i = 1; _i < arguments.length; _i++) {
- args[_i - 1] = arguments[_i];
- }
- var diagnostic = ts.createCompilerDiagnostic.apply(undefined, arguments);
- return diagnostic.messageText;
- }
- function reportDiagnostic(diagnostic) {
- var output = "";
- if (diagnostic.file) {
- var loc = ts.getLineAndCharacterOfPosition(diagnostic.file, diagnostic.start);
- output += diagnostic.file.fileName + "(" + (loc.line + 1) + "," + (loc.character + 1) + "): ";
- }
- var category = ts.DiagnosticCategory[diagnostic.category].toLowerCase();
- output += category + " TS" + diagnostic.code + ": " + ts.flattenDiagnosticMessageText(diagnostic.messageText, ts.sys.newLine) + ts.sys.newLine;
- ts.sys.write(output);
- }
- function reportDiagnostics(diagnostics) {
- for (var i = 0; i < diagnostics.length; i++) {
- reportDiagnostic(diagnostics[i]);
- }
- }
- function reportWatchDiagnostic(diagnostic) {
- var output = new Date().toLocaleTimeString() + " - ";
- if (diagnostic.file) {
- var loc = ts.getLineAndCharacterOfPosition(diagnostic.file, diagnostic.start);
- output += diagnostic.file.fileName + "(" + (loc.line + 1) + "," + (loc.character + 1) + "): ";
- }
- output += "" + ts.flattenDiagnosticMessageText(diagnostic.messageText, ts.sys.newLine) + ts.sys.newLine;
- ts.sys.write(output);
- }
- function padLeft(s, length) {
- while (s.length < length) {
- s = " " + s;
- }
- return s;
- }
- function padRight(s, length) {
- while (s.length < length) {
- s = s + " ";
- }
- return s;
- }
- function reportStatisticalValue(name, value) {
- ts.sys.write(padRight(name + ":", 12) + padLeft(value.toString(), 10) + ts.sys.newLine);
- }
- function reportCountStatistic(name, count) {
- reportStatisticalValue(name, "" + count);
- }
- function reportTimeStatistic(name, time) {
- reportStatisticalValue(name, (time / 1000).toFixed(2) + "s");
- }
- function isJSONSupported() {
- return typeof JSON === "object" && typeof JSON.parse === "function";
- }
- function executeCommandLine(args) {
- var commandLine = ts.parseCommandLine(args);
- var configFileName;
- var cachedConfigFileText;
- var configFileWatcher;
- var directoryWatcher;
- var cachedProgram;
- var rootFileNames;
- var compilerOptions;
- var compilerHost;
- var hostGetSourceFile;
- var timerHandleForRecompilation;
- var timerHandleForDirectoryChanges;
- if (commandLine.options.locale) {
- if (!isJSONSupported()) {
- reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.The_current_host_does_not_support_the_0_option, "--locale"));
- return ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
- }
- validateLocaleAndSetLanguage(commandLine.options.locale, commandLine.errors);
- }
- if (commandLine.errors.length > 0) {
- reportDiagnostics(commandLine.errors);
- return ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
- }
- if (commandLine.options.init) {
- writeConfigFile(commandLine.options, commandLine.fileNames);
- return ts.sys.exit(ts.ExitStatus.Success);
- }
- if (commandLine.options.version) {
- reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.Version_0, ts.version));
- return ts.sys.exit(ts.ExitStatus.Success);
- }
- if (commandLine.options.help) {
- printVersion();
- printHelp();
- return ts.sys.exit(ts.ExitStatus.Success);
- }
- if (commandLine.options.project) {
- if (!isJSONSupported()) {
- reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.The_current_host_does_not_support_the_0_option, "--project"));
- return ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
- }
- configFileName = ts.normalizePath(ts.combinePaths(commandLine.options.project, "tsconfig.json"));
- if (commandLine.fileNames.length !== 0) {
- reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.Option_project_cannot_be_mixed_with_source_files_on_a_command_line));
- return ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
- }
- }
- else if (commandLine.fileNames.length === 0 && isJSONSupported()) {
- var searchPath = ts.normalizePath(ts.sys.getCurrentDirectory());
- configFileName = ts.findConfigFile(searchPath);
- }
- if (commandLine.fileNames.length === 0 && !configFileName) {
- printVersion();
- printHelp();
- return ts.sys.exit(ts.ExitStatus.Success);
- }
- if (commandLine.options.watch && commandLine.options.hasOwnProperty("watch")) {
- if (!ts.sys.watchFile) {
- reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.The_current_host_does_not_support_the_0_option, "--watch"));
- return ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
- }
- if (configFileName) {
- configFileWatcher = ts.sys.watchFile(configFileName, configFileChanged);
- }
- if (ts.sys.watchDirectory && configFileName) {
- var directory = ts.getDirectoryPath(configFileName);
- directoryWatcher = ts.sys.watchDirectory(directory == "" ? "." : directory, watchedDirectoryChanged, true);
- }
- }
- performCompilation();
- function parseConfigFile() {
- if (!cachedConfigFileText) {
- try {
- cachedConfigFileText = ts.sys.readFile(configFileName);
- }
- catch (e) {
- var error = ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_read_file_0_Colon_1, configFileName, e.message);
- reportWatchDiagnostic(error);
- ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
- return;
- }
- }
- var result = ts.parseConfigFileTextToJson(configFileName, cachedConfigFileText);
- var configObject = result.config;
- var configParseResult = ts.parseJsonConfigFileContent(configObject, ts.sys, ts.getDirectoryPath(configFileName));
- if (configParseResult.errors.length > 0) {
- reportDiagnostics(configParseResult.errors);
- ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
- return;
- }
- return configParseResult;
- }
- function performCompilation() {
- if (!cachedProgram) {
- if (configFileName) {
- var configParseResult = parseConfigFile();
- rootFileNames = configParseResult.fileNames;
- compilerOptions = ts.extend(commandLine.options, configParseResult.options);
- }
- else {
- rootFileNames = commandLine.fileNames;
- compilerOptions = commandLine.options;
- }
- compilerHost = ts.createCompilerHost(compilerOptions);
- hostGetSourceFile = compilerHost.getSourceFile;
- compilerHost.getSourceFile = getSourceFile;
- }
- var compileResult = compile(rootFileNames, compilerOptions, compilerHost);
- if (!compilerOptions.watch) {
- return ts.sys.exit(compileResult.exitStatus);
- }
- setCachedProgram(compileResult.program);
- reportWatchDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.Compilation_complete_Watching_for_file_changes));
- }
- function getSourceFile(fileName, languageVersion, onError) {
- if (cachedProgram) {
- var sourceFile_1 = cachedProgram.getSourceFile(fileName);
- if (sourceFile_1 && sourceFile_1.fileWatcher) {
- return sourceFile_1;
- }
- }
- var sourceFile = hostGetSourceFile(fileName, languageVersion, onError);
- if (sourceFile && compilerOptions.watch) {
- sourceFile.fileWatcher = ts.sys.watchFile(sourceFile.fileName, function (fileName, removed) { return sourceFileChanged(sourceFile, removed); });
- }
- return sourceFile;
- }
- function setCachedProgram(program) {
- if (cachedProgram) {
- var newSourceFiles = program ? program.getSourceFiles() : undefined;
- ts.forEach(cachedProgram.getSourceFiles(), function (sourceFile) {
- if (!(newSourceFiles && ts.contains(newSourceFiles, sourceFile))) {
- if (sourceFile.fileWatcher) {
- sourceFile.fileWatcher.close();
- sourceFile.fileWatcher = undefined;
- }
- }
- });
- }
- cachedProgram = program;
- }
- function sourceFileChanged(sourceFile, removed) {
- sourceFile.fileWatcher.close();
- sourceFile.fileWatcher = undefined;
- if (removed) {
- var index = rootFileNames.indexOf(sourceFile.fileName);
- if (index >= 0) {
- rootFileNames.splice(index, 1);
- }
- }
- startTimerForRecompilation();
- }
- function configFileChanged() {
- setCachedProgram(undefined);
- cachedConfigFileText = undefined;
- startTimerForRecompilation();
- }
- function watchedDirectoryChanged(fileName) {
- if (fileName && !ts.isSupportedSourceFileName(fileName)) {
- return;
- }
- startTimerForHandlingDirectoryChanges();
- }
- function startTimerForHandlingDirectoryChanges() {
- if (timerHandleForDirectoryChanges) {
- clearTimeout(timerHandleForDirectoryChanges);
- }
- timerHandleForDirectoryChanges = setTimeout(directoryChangeHandler, 250);
- }
- function directoryChangeHandler() {
- var parsedCommandLine = parseConfigFile();
- var newFileNames = ts.map(parsedCommandLine.fileNames, compilerHost.getCanonicalFileName);
- var canonicalRootFileNames = ts.map(rootFileNames, compilerHost.getCanonicalFileName);
- if (!ts.arrayStructurallyIsEqualTo(newFileNames, canonicalRootFileNames)) {
- setCachedProgram(undefined);
- startTimerForRecompilation();
- }
- }
- function startTimerForRecompilation() {
- if (timerHandleForRecompilation) {
- clearTimeout(timerHandleForRecompilation);
- }
- timerHandleForRecompilation = setTimeout(recompile, 250);
- }
- function recompile() {
- timerHandleForRecompilation = undefined;
- reportWatchDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.File_change_detected_Starting_incremental_compilation));
- performCompilation();
- }
- }
- ts.executeCommandLine = executeCommandLine;
- function compile(fileNames, compilerOptions, compilerHost) {
- ts.ioReadTime = 0;
- ts.ioWriteTime = 0;
- ts.programTime = 0;
- ts.bindTime = 0;
- ts.checkTime = 0;
- ts.emitTime = 0;
- var program = ts.createProgram(fileNames, compilerOptions, compilerHost);
- var exitStatus = compileProgram();
- if (compilerOptions.listFiles) {
- ts.forEach(program.getSourceFiles(), function (file) {
- ts.sys.write(file.fileName + ts.sys.newLine);
- });
- }
- if (compilerOptions.diagnostics) {
- var memoryUsed = ts.sys.getMemoryUsage ? ts.sys.getMemoryUsage() : -1;
- reportCountStatistic("Files", program.getSourceFiles().length);
- reportCountStatistic("Lines", countLines(program));
- reportCountStatistic("Nodes", program.getNodeCount());
- reportCountStatistic("Identifiers", program.getIdentifierCount());
- reportCountStatistic("Symbols", program.getSymbolCount());
- reportCountStatistic("Types", program.getTypeCount());
- if (memoryUsed >= 0) {
- reportStatisticalValue("Memory used", Math.round(memoryUsed / 1000) + "K");
- }
- reportTimeStatistic("I/O read", ts.ioReadTime);
- reportTimeStatistic("I/O write", ts.ioWriteTime);
- reportTimeStatistic("Parse time", ts.programTime);
- reportTimeStatistic("Bind time", ts.bindTime);
- reportTimeStatistic("Check time", ts.checkTime);
- reportTimeStatistic("Emit time", ts.emitTime);
- reportTimeStatistic("Total time", ts.programTime + ts.bindTime + ts.checkTime + ts.emitTime);
- }
- return { program: program, exitStatus: exitStatus };
- function compileProgram() {
- var diagnostics;
- diagnostics = program.getSyntacticDiagnostics();
- if (diagnostics.length === 0) {
- diagnostics = program.getOptionsDiagnostics().concat(program.getGlobalDiagnostics());
- if (diagnostics.length === 0) {
- diagnostics = program.getSemanticDiagnostics();
- }
- }
- reportDiagnostics(diagnostics);
- if (compilerOptions.noEmit) {
- return diagnostics.length
- ? ts.ExitStatus.DiagnosticsPresent_OutputsSkipped
- : ts.ExitStatus.Success;
- }
- var emitOutput = program.emit();
- reportDiagnostics(emitOutput.diagnostics);
- if (emitOutput.emitSkipped) {
- return ts.ExitStatus.DiagnosticsPresent_OutputsSkipped;
- }
- if (diagnostics.length > 0 || emitOutput.diagnostics.length > 0) {
- return ts.ExitStatus.DiagnosticsPresent_OutputsGenerated;
- }
- return ts.ExitStatus.Success;
- }
- }
- function printVersion() {
- ts.sys.write(getDiagnosticText(ts.Diagnostics.Version_0, ts.version) + ts.sys.newLine);
- }
- function printHelp() {
- var output = "";
- var syntaxLength = getDiagnosticText(ts.Diagnostics.Syntax_Colon_0, "").length;
- var examplesLength = getDiagnosticText(ts.Diagnostics.Examples_Colon_0, "").length;
- var marginLength = Math.max(syntaxLength, examplesLength);
- var syntax = makePadding(marginLength - syntaxLength);
- syntax += "tsc [" + getDiagnosticText(ts.Diagnostics.options) + "] [" + getDiagnosticText(ts.Diagnostics.file) + " ...]";
- output += getDiagnosticText(ts.Diagnostics.Syntax_Colon_0, syntax);
- output += ts.sys.newLine + ts.sys.newLine;
- var padding = makePadding(marginLength);
- output += getDiagnosticText(ts.Diagnostics.Examples_Colon_0, makePadding(marginLength - examplesLength) + "tsc hello.ts") + ts.sys.newLine;
- output += padding + "tsc --out file.js file.ts" + ts.sys.newLine;
- output += padding + "tsc @args.txt" + ts.sys.newLine;
- output += ts.sys.newLine;
- output += getDiagnosticText(ts.Diagnostics.Options_Colon) + ts.sys.newLine;
- var optsList = ts.filter(ts.optionDeclarations.slice(), function (v) { return !v.experimental; });
- optsList.sort(function (a, b) { return ts.compareValues(a.name.toLowerCase(), b.name.toLowerCase()); });
- marginLength = 0;
- var usageColumn = [];
- var descriptionColumn = [];
- for (var i = 0; i < optsList.length; i++) {
- var option = optsList[i];
- if (!option.description) {
- continue;
- }
- var usageText_1 = " ";
- if (option.shortName) {
- usageText_1 += "-" + option.shortName;
- usageText_1 += getParamType(option);
- usageText_1 += ", ";
- }
- usageText_1 += "--" + option.name;
- usageText_1 += getParamType(option);
- usageColumn.push(usageText_1);
- descriptionColumn.push(getDiagnosticText(option.description));
- marginLength = Math.max(usageText_1.length, marginLength);
- }
- var usageText = " @<" + getDiagnosticText(ts.Diagnostics.file) + ">";
- usageColumn.push(usageText);
- descriptionColumn.push(getDiagnosticText(ts.Diagnostics.Insert_command_line_options_and_files_from_a_file));
- marginLength = Math.max(usageText.length, marginLength);
- for (var i = 0; i < usageColumn.length; i++) {
- var usage = usageColumn[i];
- var description = descriptionColumn[i];
- output += usage + makePadding(marginLength - usage.length + 2) + description + ts.sys.newLine;
- }
- ts.sys.write(output);
- return;
- function getParamType(option) {
- if (option.paramType !== undefined) {
- return " " + getDiagnosticText(option.paramType);
- }
- return "";
- }
- function makePadding(paddingLength) {
- return Array(paddingLength + 1).join(" ");
- }
- }
- function writeConfigFile(options, fileNames) {
- var currentDirectory = ts.sys.getCurrentDirectory();
- var file = ts.combinePaths(currentDirectory, "tsconfig.json");
- if (ts.sys.fileExists(file)) {
- reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.A_tsconfig_json_file_is_already_defined_at_Colon_0, file));
- }
- else {
- var compilerOptions = ts.extend(options, ts.defaultInitCompilerOptions);
- var configurations = {
- compilerOptions: serializeCompilerOptions(compilerOptions),
- exclude: ["node_modules"]
- };
- if (fileNames && fileNames.length) {
- configurations.files = fileNames;
- }
- ts.sys.writeFile(file, JSON.stringify(configurations, undefined, 4));
- reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.Successfully_created_a_tsconfig_json_file));
- }
- return;
- function serializeCompilerOptions(options) {
- var result = {};
- var optionsNameMap = ts.getOptionNameMap().optionNameMap;
- for (var name_29 in options) {
- if (ts.hasProperty(options, name_29)) {
- var value = options[name_29];
- switch (name_29) {
- case "init":
- case "watch":
- case "version":
- case "help":
- case "project":
- break;
- default:
- var optionDefinition = optionsNameMap[name_29.toLowerCase()];
- if (optionDefinition) {
- if (typeof optionDefinition.type === "string") {
- result[name_29] = value;
- }
- else {
- var typeMap = optionDefinition.type;
- for (var key in typeMap) {
- if (ts.hasProperty(typeMap, key)) {
- if (typeMap[key] === value)
- result[name_29] = key;
- }
- }
- }
- }
- break;
- }
- }
- }
- return result;
- }
- }
- })(ts || (ts = {}));
- ts.executeCommandLine(ts.sys.args);
|