| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525185261852718528185291853018531185321853318534185351853618537185381853918540185411854218543185441854518546185471854818549185501855118552185531855418555185561855718558185591856018561185621856318564185651856618567185681856918570185711857218573185741857518576185771857818579185801858118582185831858418585185861858718588185891859018591185921859318594185951859618597185981859918600186011860218603186041860518606186071860818609186101861118612186131861418615186161861718618186191862018621186221862318624186251862618627186281862918630186311863218633186341863518636186371863818639186401864118642186431864418645186461864718648186491865018651186521865318654186551865618657186581865918660186611866218663186641866518666186671866818669186701867118672186731867418675186761867718678186791868018681186821868318684186851868618687186881868918690186911869218693186941869518696186971869818699187001870118702187031870418705187061870718708187091871018711187121871318714187151871618717187181871918720187211872218723187241872518726187271872818729187301873118732187331873418735187361873718738187391874018741187421874318744187451874618747187481874918750187511875218753187541875518756187571875818759187601876118762187631876418765187661876718768187691877018771187721877318774187751877618777187781877918780187811878218783187841878518786187871878818789187901879118792187931879418795187961879718798187991880018801188021880318804188051880618807188081880918810188111881218813188141881518816188171881818819188201882118822188231882418825188261882718828188291883018831188321883318834188351883618837188381883918840188411884218843188441884518846188471884818849188501885118852188531885418855188561885718858188591886018861188621886318864188651886618867188681886918870188711887218873188741887518876188771887818879188801888118882188831888418885188861888718888188891889018891188921889318894188951889618897188981889918900189011890218903189041890518906189071890818909189101891118912189131891418915189161891718918189191892018921189221892318924189251892618927189281892918930189311893218933189341893518936189371893818939189401894118942189431894418945189461894718948189491895018951189521895318954189551895618957189581895918960189611896218963189641896518966189671896818969189701897118972189731897418975189761897718978189791898018981189821898318984189851898618987189881898918990189911899218993189941899518996189971899818999190001900119002190031900419005190061900719008190091901019011190121901319014190151901619017190181901919020190211902219023190241902519026190271902819029190301903119032190331903419035190361903719038190391904019041190421904319044190451904619047190481904919050190511905219053190541905519056190571905819059190601906119062190631906419065190661906719068190691907019071190721907319074190751907619077190781907919080190811908219083190841908519086190871908819089190901909119092190931909419095190961909719098190991910019101191021910319104191051910619107191081910919110191111911219113191141911519116191171911819119191201912119122191231912419125191261912719128191291913019131191321913319134191351913619137191381913919140191411914219143191441914519146191471914819149191501915119152191531915419155191561915719158191591916019161191621916319164191651916619167191681916919170191711917219173191741917519176191771917819179191801918119182191831918419185191861918719188191891919019191191921919319194191951919619197191981919919200192011920219203192041920519206192071920819209192101921119212192131921419215192161921719218192191922019221192221922319224192251922619227192281922919230192311923219233192341923519236192371923819239192401924119242192431924419245192461924719248192491925019251192521925319254192551925619257192581925919260192611926219263192641926519266192671926819269192701927119272192731927419275192761927719278192791928019281192821928319284192851928619287192881928919290192911929219293192941929519296192971929819299193001930119302193031930419305193061930719308193091931019311193121931319314193151931619317193181931919320193211932219323193241932519326193271932819329193301933119332193331933419335193361933719338193391934019341193421934319344193451934619347193481934919350193511935219353193541935519356193571935819359193601936119362193631936419365193661936719368193691937019371193721937319374193751937619377193781937919380193811938219383193841938519386193871938819389193901939119392193931939419395193961939719398193991940019401194021940319404194051940619407194081940919410194111941219413194141941519416194171941819419194201942119422194231942419425194261942719428194291943019431194321943319434194351943619437194381943919440194411944219443194441944519446194471944819449194501945119452194531945419455194561945719458194591946019461194621946319464194651946619467194681946919470194711947219473194741947519476194771947819479194801948119482194831948419485194861948719488194891949019491194921949319494194951949619497194981949919500195011950219503195041950519506195071950819509195101951119512195131951419515195161951719518195191952019521195221952319524195251952619527195281952919530195311953219533195341953519536195371953819539195401954119542195431954419545195461954719548195491955019551195521955319554195551955619557195581955919560195611956219563195641956519566195671956819569195701957119572195731957419575195761957719578195791958019581195821958319584195851958619587195881958919590195911959219593195941959519596195971959819599196001960119602196031960419605196061960719608196091961019611196121961319614196151961619617196181961919620196211962219623196241962519626196271962819629196301963119632196331963419635196361963719638196391964019641196421964319644196451964619647196481964919650196511965219653196541965519656196571965819659196601966119662196631966419665196661966719668196691967019671196721967319674196751967619677196781967919680196811968219683196841968519686196871968819689196901969119692196931969419695196961969719698196991970019701197021970319704197051970619707197081970919710197111971219713197141971519716197171971819719197201972119722197231972419725197261972719728197291973019731197321973319734197351973619737197381973919740197411974219743197441974519746197471974819749197501975119752197531975419755197561975719758197591976019761197621976319764197651976619767197681976919770197711977219773197741977519776197771977819779197801978119782197831978419785197861978719788197891979019791197921979319794197951979619797197981979919800198011980219803198041980519806198071980819809198101981119812198131981419815198161981719818198191982019821198221982319824198251982619827198281982919830198311983219833198341983519836198371983819839198401984119842198431984419845198461984719848198491985019851198521985319854198551985619857198581985919860198611986219863198641986519866198671986819869198701987119872198731987419875198761987719878198791988019881198821988319884198851988619887198881988919890198911989219893198941989519896198971989819899199001990119902199031990419905199061990719908199091991019911199121991319914199151991619917199181991919920199211992219923199241992519926199271992819929199301993119932199331993419935199361993719938199391994019941199421994319944199451994619947199481994919950199511995219953199541995519956199571995819959199601996119962199631996419965199661996719968199691997019971199721997319974199751997619977199781997919980199811998219983199841998519986199871998819989199901999119992199931999419995199961999719998199992000020001200022000320004200052000620007200082000920010200112001220013200142001520016200172001820019200202002120022200232002420025200262002720028200292003020031200322003320034200352003620037200382003920040200412004220043200442004520046200472004820049200502005120052200532005420055200562005720058200592006020061200622006320064200652006620067200682006920070200712007220073200742007520076200772007820079200802008120082200832008420085200862008720088200892009020091200922009320094200952009620097200982009920100201012010220103201042010520106201072010820109201102011120112201132011420115201162011720118201192012020121201222012320124201252012620127201282012920130201312013220133201342013520136201372013820139201402014120142201432014420145201462014720148201492015020151201522015320154201552015620157201582015920160201612016220163201642016520166201672016820169201702017120172201732017420175201762017720178201792018020181201822018320184201852018620187201882018920190201912019220193201942019520196201972019820199202002020120202202032020420205202062020720208202092021020211202122021320214202152021620217202182021920220202212022220223202242022520226202272022820229202302023120232202332023420235202362023720238202392024020241202422024320244202452024620247202482024920250202512025220253202542025520256202572025820259202602026120262202632026420265202662026720268202692027020271202722027320274202752027620277202782027920280202812028220283202842028520286202872028820289202902029120292202932029420295202962029720298202992030020301203022030320304203052030620307203082030920310203112031220313203142031520316203172031820319203202032120322203232032420325203262032720328203292033020331203322033320334203352033620337203382033920340203412034220343203442034520346203472034820349203502035120352203532035420355203562035720358203592036020361203622036320364203652036620367203682036920370203712037220373203742037520376203772037820379203802038120382203832038420385203862038720388203892039020391203922039320394203952039620397203982039920400204012040220403204042040520406204072040820409204102041120412204132041420415204162041720418204192042020421204222042320424204252042620427204282042920430204312043220433204342043520436204372043820439204402044120442204432044420445204462044720448204492045020451204522045320454204552045620457204582045920460204612046220463204642046520466204672046820469204702047120472204732047420475204762047720478204792048020481204822048320484204852048620487204882048920490204912049220493204942049520496204972049820499205002050120502205032050420505205062050720508205092051020511205122051320514205152051620517205182051920520205212052220523205242052520526205272052820529205302053120532205332053420535205362053720538205392054020541205422054320544205452054620547205482054920550205512055220553205542055520556205572055820559205602056120562205632056420565205662056720568205692057020571205722057320574205752057620577205782057920580205812058220583205842058520586205872058820589205902059120592205932059420595205962059720598205992060020601206022060320604206052060620607206082060920610206112061220613206142061520616206172061820619206202062120622206232062420625206262062720628206292063020631206322063320634206352063620637206382063920640206412064220643206442064520646206472064820649206502065120652206532065420655206562065720658206592066020661206622066320664206652066620667206682066920670206712067220673206742067520676206772067820679206802068120682206832068420685206862068720688206892069020691206922069320694206952069620697206982069920700207012070220703207042070520706207072070820709207102071120712207132071420715207162071720718207192072020721207222072320724207252072620727207282072920730207312073220733207342073520736207372073820739207402074120742207432074420745207462074720748207492075020751207522075320754207552075620757207582075920760207612076220763207642076520766207672076820769207702077120772207732077420775207762077720778207792078020781207822078320784207852078620787207882078920790207912079220793207942079520796207972079820799208002080120802208032080420805208062080720808208092081020811208122081320814208152081620817208182081920820208212082220823208242082520826208272082820829208302083120832208332083420835208362083720838208392084020841208422084320844208452084620847208482084920850208512085220853208542085520856208572085820859208602086120862208632086420865208662086720868208692087020871208722087320874208752087620877208782087920880208812088220883208842088520886208872088820889208902089120892208932089420895208962089720898208992090020901209022090320904209052090620907209082090920910209112091220913209142091520916209172091820919209202092120922209232092420925209262092720928209292093020931209322093320934209352093620937209382093920940209412094220943209442094520946209472094820949209502095120952209532095420955209562095720958209592096020961209622096320964209652096620967209682096920970209712097220973209742097520976209772097820979209802098120982209832098420985209862098720988209892099020991209922099320994209952099620997209982099921000210012100221003210042100521006210072100821009210102101121012210132101421015210162101721018210192102021021210222102321024210252102621027210282102921030210312103221033210342103521036210372103821039210402104121042210432104421045210462104721048210492105021051210522105321054210552105621057210582105921060210612106221063210642106521066210672106821069210702107121072210732107421075210762107721078210792108021081210822108321084210852108621087210882108921090210912109221093210942109521096210972109821099211002110121102211032110421105211062110721108211092111021111211122111321114211152111621117211182111921120211212112221123211242112521126211272112821129211302113121132211332113421135211362113721138211392114021141211422114321144211452114621147211482114921150211512115221153211542115521156211572115821159211602116121162211632116421165211662116721168211692117021171211722117321174211752117621177211782117921180211812118221183211842118521186211872118821189211902119121192211932119421195211962119721198211992120021201212022120321204212052120621207212082120921210212112121221213212142121521216212172121821219212202122121222212232122421225212262122721228212292123021231212322123321234212352123621237212382123921240212412124221243212442124521246212472124821249212502125121252212532125421255212562125721258212592126021261212622126321264212652126621267212682126921270212712127221273212742127521276212772127821279212802128121282212832128421285212862128721288212892129021291212922129321294212952129621297212982129921300213012130221303213042130521306213072130821309213102131121312213132131421315213162131721318213192132021321213222132321324213252132621327213282132921330213312133221333213342133521336213372133821339213402134121342213432134421345213462134721348213492135021351213522135321354213552135621357213582135921360213612136221363213642136521366213672136821369213702137121372213732137421375213762137721378213792138021381213822138321384213852138621387213882138921390213912139221393213942139521396213972139821399214002140121402214032140421405214062140721408214092141021411214122141321414214152141621417214182141921420214212142221423214242142521426214272142821429214302143121432214332143421435214362143721438214392144021441214422144321444214452144621447214482144921450214512145221453214542145521456214572145821459214602146121462214632146421465214662146721468214692147021471214722147321474214752147621477214782147921480214812148221483214842148521486214872148821489214902149121492214932149421495214962149721498214992150021501215022150321504215052150621507215082150921510215112151221513215142151521516215172151821519215202152121522215232152421525215262152721528215292153021531215322153321534215352153621537215382153921540215412154221543215442154521546215472154821549215502155121552215532155421555215562155721558215592156021561215622156321564215652156621567215682156921570215712157221573215742157521576215772157821579215802158121582215832158421585215862158721588215892159021591215922159321594215952159621597215982159921600216012160221603216042160521606216072160821609216102161121612216132161421615216162161721618216192162021621216222162321624216252162621627216282162921630216312163221633216342163521636216372163821639216402164121642216432164421645216462164721648216492165021651216522165321654216552165621657216582165921660216612166221663216642166521666216672166821669216702167121672216732167421675216762167721678216792168021681216822168321684216852168621687216882168921690216912169221693216942169521696216972169821699217002170121702217032170421705217062170721708217092171021711217122171321714217152171621717217182171921720217212172221723217242172521726217272172821729217302173121732217332173421735217362173721738217392174021741217422174321744217452174621747217482174921750217512175221753217542175521756217572175821759217602176121762217632176421765217662176721768217692177021771217722177321774217752177621777217782177921780217812178221783217842178521786217872178821789217902179121792217932179421795217962179721798217992180021801218022180321804218052180621807218082180921810218112181221813218142181521816218172181821819218202182121822218232182421825218262182721828218292183021831218322183321834218352183621837218382183921840218412184221843218442184521846218472184821849218502185121852218532185421855218562185721858218592186021861218622186321864218652186621867218682186921870218712187221873218742187521876218772187821879218802188121882218832188421885218862188721888218892189021891218922189321894218952189621897218982189921900219012190221903219042190521906219072190821909219102191121912219132191421915219162191721918219192192021921219222192321924219252192621927219282192921930219312193221933219342193521936219372193821939219402194121942219432194421945219462194721948219492195021951219522195321954219552195621957219582195921960219612196221963219642196521966219672196821969219702197121972219732197421975219762197721978219792198021981219822198321984219852198621987219882198921990219912199221993219942199521996219972199821999220002200122002220032200422005220062200722008220092201022011220122201322014220152201622017220182201922020220212202222023220242202522026220272202822029220302203122032220332203422035220362203722038220392204022041220422204322044220452204622047220482204922050220512205222053220542205522056220572205822059220602206122062220632206422065220662206722068220692207022071220722207322074220752207622077220782207922080220812208222083220842208522086220872208822089220902209122092220932209422095220962209722098220992210022101221022210322104221052210622107221082210922110221112211222113221142211522116221172211822119221202212122122221232212422125221262212722128221292213022131221322213322134221352213622137221382213922140221412214222143221442214522146221472214822149221502215122152221532215422155221562215722158221592216022161221622216322164221652216622167221682216922170221712217222173221742217522176221772217822179221802218122182221832218422185221862218722188221892219022191221922219322194221952219622197221982219922200222012220222203222042220522206222072220822209222102221122212222132221422215222162221722218222192222022221222222222322224222252222622227222282222922230222312223222233222342223522236222372223822239222402224122242222432224422245222462224722248222492225022251222522225322254222552225622257222582225922260222612226222263222642226522266222672226822269222702227122272222732227422275222762227722278222792228022281222822228322284222852228622287222882228922290222912229222293222942229522296222972229822299223002230122302223032230422305223062230722308223092231022311223122231322314223152231622317223182231922320223212232222323223242232522326223272232822329223302233122332223332233422335223362233722338223392234022341223422234322344223452234622347223482234922350223512235222353223542235522356223572235822359223602236122362223632236422365223662236722368223692237022371223722237322374223752237622377223782237922380223812238222383223842238522386223872238822389223902239122392223932239422395223962239722398223992240022401224022240322404224052240622407224082240922410224112241222413224142241522416224172241822419224202242122422224232242422425224262242722428224292243022431224322243322434224352243622437224382243922440224412244222443224442244522446224472244822449224502245122452224532245422455224562245722458224592246022461224622246322464224652246622467224682246922470224712247222473224742247522476224772247822479224802248122482224832248422485224862248722488224892249022491224922249322494224952249622497224982249922500225012250222503225042250522506225072250822509225102251122512225132251422515225162251722518225192252022521225222252322524225252252622527225282252922530225312253222533225342253522536225372253822539225402254122542225432254422545225462254722548225492255022551225522255322554225552255622557225582255922560225612256222563225642256522566225672256822569225702257122572225732257422575225762257722578225792258022581225822258322584225852258622587225882258922590225912259222593225942259522596225972259822599226002260122602226032260422605226062260722608226092261022611226122261322614226152261622617226182261922620226212262222623226242262522626226272262822629226302263122632226332263422635226362263722638226392264022641226422264322644226452264622647226482264922650226512265222653226542265522656226572265822659226602266122662226632266422665226662266722668226692267022671226722267322674226752267622677226782267922680226812268222683226842268522686226872268822689226902269122692226932269422695226962269722698226992270022701227022270322704227052270622707227082270922710227112271222713227142271522716227172271822719227202272122722227232272422725227262272722728227292273022731227322273322734227352273622737227382273922740227412274222743227442274522746227472274822749227502275122752227532275422755227562275722758227592276022761227622276322764227652276622767227682276922770227712277222773227742277522776227772277822779227802278122782227832278422785227862278722788227892279022791227922279322794227952279622797227982279922800228012280222803228042280522806228072280822809228102281122812228132281422815228162281722818228192282022821228222282322824228252282622827228282282922830228312283222833228342283522836228372283822839228402284122842228432284422845228462284722848228492285022851228522285322854228552285622857228582285922860228612286222863228642286522866228672286822869228702287122872228732287422875228762287722878228792288022881228822288322884228852288622887228882288922890228912289222893228942289522896228972289822899229002290122902229032290422905229062290722908229092291022911229122291322914229152291622917229182291922920229212292222923229242292522926229272292822929229302293122932229332293422935229362293722938229392294022941229422294322944229452294622947229482294922950229512295222953229542295522956229572295822959229602296122962229632296422965229662296722968229692297022971229722297322974229752297622977229782297922980229812298222983229842298522986229872298822989229902299122992229932299422995229962299722998229992300023001230022300323004230052300623007230082300923010230112301223013230142301523016230172301823019230202302123022230232302423025230262302723028230292303023031230322303323034230352303623037230382303923040230412304223043230442304523046230472304823049230502305123052230532305423055230562305723058230592306023061230622306323064230652306623067230682306923070230712307223073230742307523076230772307823079230802308123082230832308423085230862308723088230892309023091230922309323094230952309623097230982309923100231012310223103231042310523106231072310823109231102311123112231132311423115231162311723118231192312023121231222312323124231252312623127231282312923130231312313223133231342313523136231372313823139231402314123142231432314423145231462314723148231492315023151231522315323154231552315623157231582315923160231612316223163231642316523166231672316823169231702317123172231732317423175231762317723178231792318023181231822318323184231852318623187231882318923190231912319223193231942319523196231972319823199232002320123202232032320423205232062320723208232092321023211232122321323214232152321623217232182321923220232212322223223232242322523226232272322823229232302323123232232332323423235232362323723238232392324023241232422324323244232452324623247232482324923250232512325223253232542325523256232572325823259232602326123262232632326423265232662326723268232692327023271232722327323274232752327623277232782327923280232812328223283232842328523286232872328823289232902329123292232932329423295232962329723298232992330023301233022330323304233052330623307233082330923310233112331223313233142331523316233172331823319233202332123322233232332423325233262332723328233292333023331233322333323334233352333623337233382333923340233412334223343233442334523346233472334823349233502335123352233532335423355233562335723358233592336023361233622336323364233652336623367233682336923370233712337223373233742337523376233772337823379233802338123382233832338423385233862338723388233892339023391233922339323394233952339623397233982339923400234012340223403234042340523406234072340823409234102341123412234132341423415234162341723418234192342023421234222342323424234252342623427234282342923430234312343223433234342343523436234372343823439234402344123442234432344423445234462344723448234492345023451234522345323454234552345623457234582345923460234612346223463234642346523466234672346823469234702347123472234732347423475234762347723478234792348023481234822348323484234852348623487234882348923490234912349223493234942349523496234972349823499235002350123502235032350423505235062350723508235092351023511235122351323514235152351623517235182351923520235212352223523235242352523526235272352823529235302353123532235332353423535235362353723538235392354023541235422354323544235452354623547235482354923550235512355223553235542355523556235572355823559235602356123562235632356423565235662356723568235692357023571235722357323574235752357623577235782357923580235812358223583235842358523586235872358823589235902359123592235932359423595235962359723598235992360023601236022360323604236052360623607236082360923610236112361223613236142361523616236172361823619236202362123622236232362423625236262362723628236292363023631236322363323634236352363623637236382363923640236412364223643236442364523646236472364823649236502365123652236532365423655236562365723658236592366023661236622366323664236652366623667236682366923670236712367223673236742367523676236772367823679236802368123682236832368423685236862368723688236892369023691236922369323694236952369623697236982369923700237012370223703237042370523706237072370823709237102371123712237132371423715237162371723718237192372023721237222372323724237252372623727237282372923730237312373223733237342373523736237372373823739237402374123742237432374423745237462374723748237492375023751237522375323754237552375623757237582375923760237612376223763237642376523766237672376823769237702377123772237732377423775237762377723778237792378023781237822378323784237852378623787237882378923790237912379223793237942379523796237972379823799238002380123802238032380423805238062380723808238092381023811238122381323814238152381623817238182381923820238212382223823238242382523826238272382823829238302383123832238332383423835238362383723838238392384023841238422384323844238452384623847238482384923850238512385223853238542385523856238572385823859238602386123862238632386423865238662386723868238692387023871238722387323874238752387623877238782387923880238812388223883238842388523886238872388823889238902389123892238932389423895238962389723898238992390023901239022390323904239052390623907239082390923910239112391223913239142391523916239172391823919239202392123922239232392423925239262392723928239292393023931239322393323934239352393623937239382393923940239412394223943239442394523946239472394823949239502395123952239532395423955239562395723958239592396023961239622396323964239652396623967239682396923970239712397223973239742397523976239772397823979239802398123982239832398423985239862398723988239892399023991239922399323994239952399623997239982399924000240012400224003240042400524006240072400824009240102401124012240132401424015240162401724018240192402024021240222402324024240252402624027240282402924030240312403224033240342403524036240372403824039240402404124042240432404424045240462404724048240492405024051240522405324054240552405624057240582405924060240612406224063240642406524066240672406824069240702407124072240732407424075240762407724078240792408024081240822408324084240852408624087240882408924090240912409224093240942409524096240972409824099241002410124102241032410424105241062410724108241092411024111241122411324114241152411624117241182411924120241212412224123241242412524126241272412824129241302413124132241332413424135241362413724138241392414024141241422414324144241452414624147241482414924150241512415224153241542415524156241572415824159241602416124162241632416424165241662416724168241692417024171241722417324174241752417624177241782417924180241812418224183241842418524186241872418824189241902419124192241932419424195241962419724198241992420024201242022420324204242052420624207242082420924210242112421224213242142421524216242172421824219242202422124222242232422424225242262422724228242292423024231242322423324234242352423624237242382423924240242412424224243242442424524246242472424824249242502425124252242532425424255242562425724258242592426024261242622426324264242652426624267242682426924270242712427224273242742427524276242772427824279242802428124282242832428424285242862428724288242892429024291242922429324294242952429624297242982429924300243012430224303243042430524306243072430824309243102431124312243132431424315243162431724318243192432024321243222432324324243252432624327243282432924330243312433224333243342433524336243372433824339243402434124342243432434424345243462434724348243492435024351243522435324354243552435624357243582435924360243612436224363243642436524366243672436824369243702437124372243732437424375243762437724378243792438024381243822438324384243852438624387243882438924390243912439224393243942439524396243972439824399244002440124402244032440424405244062440724408244092441024411244122441324414244152441624417244182441924420244212442224423244242442524426244272442824429244302443124432244332443424435244362443724438244392444024441244422444324444244452444624447244482444924450244512445224453244542445524456244572445824459244602446124462244632446424465244662446724468244692447024471244722447324474244752447624477244782447924480244812448224483244842448524486244872448824489244902449124492244932449424495244962449724498244992450024501245022450324504245052450624507245082450924510245112451224513245142451524516245172451824519245202452124522245232452424525245262452724528245292453024531245322453324534245352453624537245382453924540245412454224543245442454524546245472454824549245502455124552245532455424555245562455724558245592456024561245622456324564245652456624567245682456924570245712457224573245742457524576245772457824579245802458124582245832458424585245862458724588245892459024591245922459324594245952459624597245982459924600246012460224603246042460524606246072460824609246102461124612246132461424615246162461724618246192462024621246222462324624246252462624627246282462924630246312463224633246342463524636246372463824639246402464124642246432464424645246462464724648246492465024651246522465324654246552465624657246582465924660246612466224663246642466524666246672466824669246702467124672246732467424675246762467724678246792468024681246822468324684246852468624687246882468924690246912469224693246942469524696246972469824699247002470124702247032470424705247062470724708247092471024711247122471324714247152471624717247182471924720247212472224723247242472524726247272472824729247302473124732247332473424735247362473724738247392474024741247422474324744247452474624747247482474924750247512475224753247542475524756247572475824759247602476124762247632476424765247662476724768247692477024771247722477324774247752477624777247782477924780247812478224783247842478524786247872478824789247902479124792247932479424795247962479724798247992480024801248022480324804248052480624807248082480924810248112481224813248142481524816248172481824819248202482124822248232482424825248262482724828248292483024831248322483324834248352483624837248382483924840248412484224843248442484524846248472484824849248502485124852248532485424855248562485724858248592486024861248622486324864248652486624867248682486924870248712487224873248742487524876248772487824879248802488124882248832488424885248862488724888248892489024891248922489324894248952489624897248982489924900249012490224903249042490524906249072490824909249102491124912249132491424915249162491724918249192492024921249222492324924249252492624927249282492924930249312493224933249342493524936249372493824939249402494124942249432494424945249462494724948249492495024951249522495324954249552495624957249582495924960249612496224963249642496524966249672496824969249702497124972249732497424975249762497724978249792498024981249822498324984249852498624987249882498924990249912499224993249942499524996249972499824999250002500125002250032500425005250062500725008250092501025011250122501325014250152501625017250182501925020250212502225023250242502525026250272502825029250302503125032250332503425035250362503725038250392504025041250422504325044250452504625047250482504925050250512505225053250542505525056250572505825059250602506125062250632506425065250662506725068250692507025071250722507325074250752507625077250782507925080250812508225083250842508525086250872508825089250902509125092250932509425095250962509725098250992510025101251022510325104251052510625107251082510925110251112511225113251142511525116251172511825119251202512125122251232512425125251262512725128251292513025131251322513325134251352513625137251382513925140251412514225143251442514525146251472514825149251502515125152251532515425155251562515725158251592516025161251622516325164251652516625167251682516925170251712517225173251742517525176251772517825179251802518125182251832518425185251862518725188251892519025191251922519325194251952519625197251982519925200252012520225203252042520525206252072520825209252102521125212252132521425215252162521725218252192522025221252222522325224252252522625227252282522925230252312523225233252342523525236252372523825239252402524125242252432524425245252462524725248252492525025251252522525325254252552525625257252582525925260252612526225263252642526525266252672526825269252702527125272252732527425275252762527725278252792528025281252822528325284252852528625287252882528925290252912529225293252942529525296252972529825299253002530125302253032530425305253062530725308253092531025311253122531325314253152531625317253182531925320253212532225323253242532525326253272532825329253302533125332253332533425335253362533725338253392534025341253422534325344253452534625347253482534925350253512535225353253542535525356253572535825359253602536125362253632536425365253662536725368253692537025371253722537325374253752537625377253782537925380253812538225383253842538525386253872538825389253902539125392253932539425395253962539725398253992540025401254022540325404254052540625407254082540925410254112541225413254142541525416254172541825419254202542125422254232542425425254262542725428254292543025431254322543325434254352543625437254382543925440254412544225443254442544525446254472544825449254502545125452254532545425455254562545725458254592546025461254622546325464254652546625467254682546925470254712547225473254742547525476254772547825479254802548125482254832548425485254862548725488254892549025491254922549325494254952549625497254982549925500255012550225503255042550525506255072550825509255102551125512255132551425515255162551725518255192552025521255222552325524255252552625527255282552925530255312553225533255342553525536255372553825539255402554125542255432554425545255462554725548255492555025551255522555325554255552555625557255582555925560255612556225563255642556525566255672556825569255702557125572255732557425575255762557725578255792558025581255822558325584255852558625587255882558925590255912559225593255942559525596255972559825599256002560125602256032560425605256062560725608256092561025611256122561325614256152561625617256182561925620256212562225623256242562525626256272562825629256302563125632256332563425635256362563725638256392564025641256422564325644256452564625647256482564925650256512565225653256542565525656256572565825659256602566125662256632566425665256662566725668256692567025671256722567325674256752567625677256782567925680256812568225683256842568525686256872568825689256902569125692256932569425695256962569725698256992570025701257022570325704257052570625707257082570925710257112571225713257142571525716257172571825719257202572125722257232572425725257262572725728257292573025731257322573325734257352573625737257382573925740257412574225743257442574525746257472574825749257502575125752257532575425755257562575725758257592576025761257622576325764257652576625767257682576925770257712577225773257742577525776257772577825779257802578125782257832578425785257862578725788257892579025791257922579325794257952579625797257982579925800258012580225803258042580525806258072580825809258102581125812258132581425815258162581725818258192582025821258222582325824258252582625827258282582925830258312583225833258342583525836258372583825839258402584125842258432584425845258462584725848258492585025851258522585325854258552585625857258582585925860258612586225863258642586525866258672586825869258702587125872258732587425875258762587725878258792588025881258822588325884258852588625887258882588925890258912589225893258942589525896258972589825899259002590125902259032590425905259062590725908259092591025911259122591325914259152591625917259182591925920259212592225923259242592525926259272592825929259302593125932259332593425935259362593725938259392594025941259422594325944259452594625947259482594925950259512595225953259542595525956259572595825959259602596125962259632596425965259662596725968259692597025971259722597325974259752597625977259782597925980259812598225983259842598525986259872598825989259902599125992259932599425995259962599725998259992600026001260022600326004260052600626007260082600926010260112601226013260142601526016260172601826019260202602126022260232602426025260262602726028260292603026031260322603326034260352603626037260382603926040260412604226043260442604526046260472604826049260502605126052260532605426055260562605726058260592606026061260622606326064260652606626067260682606926070260712607226073260742607526076260772607826079260802608126082260832608426085260862608726088260892609026091260922609326094260952609626097260982609926100261012610226103261042610526106261072610826109261102611126112261132611426115261162611726118261192612026121261222612326124261252612626127261282612926130261312613226133261342613526136261372613826139261402614126142261432614426145261462614726148261492615026151261522615326154261552615626157261582615926160261612616226163261642616526166261672616826169261702617126172261732617426175261762617726178261792618026181261822618326184261852618626187261882618926190261912619226193261942619526196261972619826199262002620126202262032620426205262062620726208262092621026211262122621326214262152621626217262182621926220262212622226223262242622526226262272622826229262302623126232262332623426235262362623726238262392624026241262422624326244262452624626247262482624926250262512625226253262542625526256262572625826259262602626126262262632626426265262662626726268262692627026271262722627326274262752627626277262782627926280262812628226283262842628526286262872628826289262902629126292262932629426295262962629726298262992630026301263022630326304263052630626307263082630926310263112631226313263142631526316263172631826319263202632126322263232632426325263262632726328263292633026331263322633326334263352633626337263382633926340263412634226343263442634526346263472634826349263502635126352263532635426355263562635726358263592636026361263622636326364263652636626367263682636926370263712637226373263742637526376263772637826379263802638126382263832638426385 |
- /*! *****************************************************************************
- 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) {
- (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 (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 = {}));
- /// <reference path="types.ts"/>
- var ts;
- (function (ts) {
- function createFileMap(getCanonicalFileName) {
- var files = {};
- return {
- get: get,
- set: set,
- contains: contains,
- remove: remove,
- 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));
- }
- }
- 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 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);
- 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) {
- Debug.assert(!headChain.next);
- headChain.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) {
- // Get root length of http://www.website.com/folder1/foler2/
- // In this example the root is: http://www.website.com/
- // normalized path components should be ["http://www.website.com/", "folder1", "folder2"]
- 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) {
- 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;
- var supportedExtensions = [".d.ts", ".ts", ".js"];
- function removeFileExtension(path) {
- for (var _i = 0; _i < supportedExtensions.length; _i++) {
- var ext = supportedExtensions[_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: 0,
- end: 0,
- 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 = {}));
- })(ts || (ts = {}));
- /// <reference path="core.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 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) {
- var result = [];
- 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 name_1 = files[_i];
- if (!extension || ts.fileExtensionIs(name_1, extension)) {
- result.push(ts.combinePaths(path, name_1));
- }
- }
- var subfolders = getNames(folder.subfolders);
- for (var _a = 0; _a < subfolders.length; _a++) {
- var current = subfolders[_a];
- visitDirectory(ts.combinePaths(path, current));
- }
- }
- }
- 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');
- 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 readDirectory(path, extension) {
- var result = [];
- 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 = ts.combinePaths(path, current);
- var stat = _fs.lstatSync(name);
- if (stat.isFile()) {
- if (!extension || ts.fileExtensionIs(name, extension)) {
- result.push(name);
- }
- }
- else if (stat.isDirectory()) {
- directories.push(name);
- }
- }
- 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) {
- _fs.writeSync(1, s);
- },
- readFile: readFile,
- writeFile: writeFile,
- watchFile: function (fileName, callback) {
- _fs.watchFile(fileName, { persistent: true, interval: 250 }, fileChanged);
- return {
- close: function () { _fs.unwatchFile(fileName, fileChanged); }
- };
- function fileChanged(curr, prev) {
- if (+curr.mtime <= +prev.mtime) {
- return;
- }
- callback(fileName);
- }
- ;
- },
- 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 module !== "undefined" && module.exports) {
- return getNodeSystem();
- }
- else {
- return undefined;
- }
- })();
- })(ts || (ts = {}));
- /// <reference path="types.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'." },
- A_class_or_interface_declaration_can_only_have_one_extends_clause: { code: 1024, category: ts.DiagnosticCategory.Error, key: "A class or interface declaration can only have one 'extends' clause." },
- An_extends_clause_must_precede_an_implements_clause: { code: 1025, category: ts.DiagnosticCategory.Error, key: "An 'extends' clause must precede an 'implements' clause." },
- A_class_can_only_extend_a_single_class: { code: 1026, category: ts.DiagnosticCategory.Error, key: "A class can only extend a single class." },
- A_class_declaration_can_only_have_one_implements_clause: { code: 1027, category: ts.DiagnosticCategory.Error, key: "A class declaration can only have one 'implements' clause." },
- 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." },
- An_interface_declaration_cannot_have_an_implements_clause: { code: 1032, category: ts.DiagnosticCategory.Error, key: "An interface declaration cannot have an 'implements' clause." },
- 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_appear_on_a_module_element: { code: 1044, category: ts.DiagnosticCategory.Error, key: "'{0}' modifier cannot appear on a module element." },
- A_declare_modifier_cannot_be_used_with_an_interface_declaration: { code: 1045, category: ts.DiagnosticCategory.Error, key: "A 'declare' 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." },
- 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." },
- Enum_member_must_have_initializer: { code: 1061, category: ts.DiagnosticCategory.Error, key: "Enum member must have initializer." },
- 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." },
- Ambient_enum_elements_can_only_have_integer_literal_initializers: { code: 1066, category: ts.DiagnosticCategory.Error, key: "Ambient enum elements can only have integer literal initializers." },
- 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_declare_modifier_cannot_be_used_with_an_import_declaration: { code: 1079, category: ts.DiagnosticCategory.Error, key: "A 'declare' 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." },
- Type_reference_expected: { code: 1133, category: ts.DiagnosticCategory.Error, key: "Type reference 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." },
- var_let_or_const_expected: { code: 1152, category: ts.DiagnosticCategory.Error, key: "'var', 'let' or 'const' expected." },
- let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1153, category: ts.DiagnosticCategory.Error, key: "'let' declarations are only available when targeting ECMAScript 6 and higher." },
- const_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1154, category: ts.DiagnosticCategory.Error, key: "'const' declarations are only available when targeting ECMAScript 6 and higher." },
- 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." },
- yield_expression_must_be_contained_within_a_generator_declaration: { code: 1163, category: ts.DiagnosticCategory.Error, key: "'yield' expression must be contained_within a generator declaration." },
- 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." },
- Computed_property_names_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1167, category: ts.DiagnosticCategory.Error, key: "Computed property names are only available when targeting ECMAScript 6 and higher." },
- 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." },
- Destructuring_declarations_are_not_allowed_in_ambient_contexts: { code: 1183, category: ts.DiagnosticCategory.Error, key: "Destructuring declarations are not allowed in ambient contexts." },
- An_implementation_cannot_be_declared_in_ambient_contexts: { code: 1184, 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_or_higher_Consider_using_import_Asterisk_as_ns_from_mod_import_a_from_mod_or_import_d_from_mod_instead: { code: 1202, category: ts.DiagnosticCategory.Error, key: "Import assignment cannot be used when targeting ECMAScript 6 or higher. Consider using 'import * as ns from \"mod\"', 'import {a} from \"mod\"' or 'import d from \"mod\"' instead." },
- Export_assignment_cannot_be_used_when_targeting_ECMAScript_6_or_higher_Consider_using_export_default_instead: { code: 1203, category: ts.DiagnosticCategory.Error, key: "Export assignment cannot be used when targeting ECMAScript 6 or higher. Consider using 'export default' instead." },
- Cannot_compile_modules_into_commonjs_amd_system_or_umd_when_targeting_ES6_or_higher: { code: 1204, category: ts.DiagnosticCategory.Error, key: "Cannot compile modules into 'commonjs', 'amd', 'system' or 'umd' when targeting 'ES6' or higher." },
- Decorators_are_only_available_when_targeting_ECMAScript_5_and_higher: { code: 1205, category: ts.DiagnosticCategory.Error, key: "Decorators are only available when targeting ECMAScript 5 and higher." },
- 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." },
- Type_expected_0_is_a_reserved_word_in_strict_mode: { code: 1215, category: ts.DiagnosticCategory.Error, key: "Type expected. '{0}' is a reserved word in strict mode" },
- Type_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode: { code: 1216, category: ts.DiagnosticCategory.Error, key: "Type expected. '{0}' is a reserved word in strict mode. Class definitions 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." },
- 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}'." },
- A_module_cannot_have_more_than_one_export_assignment: { code: 2308, category: ts.DiagnosticCategory.Error, key: "A module cannot have more than one export assignment." },
- 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." },
- 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: { code: 2435, category: ts.DiagnosticCategory.Error, key: "Ambient modules cannot be nested in other modules." },
- 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_6_and_higher: { code: 2472, category: ts.DiagnosticCategory.Error, key: "Spread operator in 'new' expressions is only available when targeting ECMAScript 6 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}'." },
- 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_mapRoot_cannot_be_specified_without_specifying_sourcemap_option: { code: 5038, category: ts.DiagnosticCategory.Error, key: "Option 'mapRoot' cannot be specified without specifying 'sourcemap' option." },
- Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option: { code: 5039, category: ts.DiagnosticCategory.Error, key: "Option 'sourceRoot' cannot be specified without specifying 'sourcemap' option." },
- Option_noEmit_cannot_be_specified_with_option_out_or_outDir: { code: 5040, category: ts.DiagnosticCategory.Error, key: "Option 'noEmit' cannot be specified with option 'out' or 'outDir'." },
- Option_noEmit_cannot_be_specified_with_option_declaration: { code: 5041, category: ts.DiagnosticCategory.Error, key: "Option 'noEmit' cannot be specified with option 'declaration'." },
- 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_sourceMap_cannot_be_specified_with_option_isolatedModules: { code: 5043, category: ts.DiagnosticCategory.Error, key: "Option 'sourceMap' cannot be specified with option 'isolatedModules'." },
- Option_declaration_cannot_be_specified_with_option_isolatedModules: { code: 5044, category: ts.DiagnosticCategory.Error, key: "Option 'declaration' cannot be specified with option 'isolatedModules'." },
- Option_noEmitOnError_cannot_be_specified_with_option_isolatedModules: { code: 5045, category: ts.DiagnosticCategory.Error, key: "Option 'noEmitOnError' cannot be specified with option 'isolatedModules'." },
- Option_out_cannot_be_specified_with_option_isolatedModules: { code: 5046, category: ts.DiagnosticCategory.Error, key: "Option 'out' cannot be specified with option 'isolatedModules'." },
- 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_sourceMap_cannot_be_specified_with_option_inlineSourceMap: { code: 5048, category: ts.DiagnosticCategory.Error, key: "Option 'sourceMap' cannot be specified with option 'inlineSourceMap'." },
- Option_sourceRoot_cannot_be_specified_with_option_inlineSourceMap: { code: 5049, category: ts.DiagnosticCategory.Error, key: "Option 'sourceRoot' cannot be specified with option 'inlineSourceMap'." },
- Option_mapRoot_cannot_be_specified_with_option_inlineSourceMap: { code: 5050, category: ts.DiagnosticCategory.Error, key: "Option 'mapRoot' cannot be specified with option 'inlineSourceMap'." },
- 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." },
- 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_type_checking_errors_were_reported: { code: 6008, category: ts.DiagnosticCategory.Message, key: "Do not emit outputs if any type checking 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_or_umd: { code: 6016, category: ts.DiagnosticCategory.Message, key: "Specify module code generation: 'commonjs', 'amd', 'system' or 'umd'" },
- 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_or_umd: { code: 6046, category: ts.DiagnosticCategory.Error, key: "Argument for '--module' option must be 'commonjs', 'amd', 'system' or 'umd'." },
- 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_must_have_extension_ts_or_d_ts: { code: 6054, category: ts.DiagnosticCategory.Error, key: "File '{0}' must have extension '.ts' or '.d.ts'." },
- 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." },
- Preserve_new_lines_when_emitting_code: { code: 6057, category: ts.DiagnosticCategory.Message, key: "Preserve new-lines when emitting code." },
- 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'." },
- Option_experimentalDecorators_must_also_be_specified_when_option_emitDecoratorMetadata_is_specified: { code: 6064, category: ts.DiagnosticCategory.Error, key: "Option 'experimentalDecorators' must also be specified when option 'emitDecoratorMetadata' is specified." },
- 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." },
- 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_is_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 is 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." },
- 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." },
- can_only_be_used_in_a_ts_file: { code: 8013, category: ts.DiagnosticCategory.Error, key: "'?' 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." },
- yield_expressions_are_not_currently_supported: { code: 9000, category: ts.DiagnosticCategory.Error, key: "'yield' expressions are not currently supported." },
- Generators_are_not_currently_supported: { code: 9001, category: ts.DiagnosticCategory.Error, key: "Generators are not currently supported." },
- 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." },
- class_declarations_are_only_supported_directly_inside_a_module_or_as_a_top_level_declaration: { code: 9004, category: ts.DiagnosticCategory.Error, key: "'class' declarations are only supported directly inside a module or as a top level declaration." }
- };
- })(ts || (ts = {}));
- /// <reference path="core.ts"/>
- /// <reference path="diagnosticInformationMap.generated.ts"/>
- var ts;
- (function (ts) {
- var textToToken = {
- "any": 112,
- "as": 111,
- "boolean": 113,
- "break": 66,
- "case": 67,
- "catch": 68,
- "class": 69,
- "continue": 71,
- "const": 70,
- "constructor": 114,
- "debugger": 72,
- "declare": 115,
- "default": 73,
- "delete": 74,
- "do": 75,
- "else": 76,
- "enum": 77,
- "export": 78,
- "extends": 79,
- "false": 80,
- "finally": 81,
- "for": 82,
- "from": 125,
- "function": 83,
- "get": 116,
- "if": 84,
- "implements": 102,
- "import": 85,
- "in": 86,
- "instanceof": 87,
- "interface": 103,
- "let": 104,
- "module": 117,
- "namespace": 118,
- "new": 88,
- "null": 89,
- "number": 120,
- "package": 105,
- "private": 106,
- "protected": 107,
- "public": 108,
- "require": 119,
- "return": 90,
- "set": 121,
- "static": 109,
- "string": 122,
- "super": 91,
- "switch": 92,
- "symbol": 123,
- "this": 93,
- "throw": 94,
- "true": 95,
- "try": 96,
- "type": 124,
- "typeof": 97,
- "var": 98,
- "void": 99,
- "while": 100,
- "with": 101,
- "yield": 110,
- "of": 126,
- "{": 14,
- "}": 15,
- "(": 16,
- ")": 17,
- "[": 18,
- "]": 19,
- ".": 20,
- "...": 21,
- ";": 22,
- ",": 23,
- "<": 24,
- ">": 25,
- "<=": 26,
- ">=": 27,
- "==": 28,
- "!=": 29,
- "===": 30,
- "!==": 31,
- "=>": 32,
- "+": 33,
- "-": 34,
- "*": 35,
- "/": 36,
- "%": 37,
- "++": 38,
- "--": 39,
- "<<": 40,
- ">>": 41,
- ">>>": 42,
- "&": 43,
- "|": 44,
- "^": 45,
- "!": 46,
- "~": 47,
- "&&": 48,
- "||": 49,
- "?": 50,
- ":": 51,
- "=": 53,
- "+=": 54,
- "-=": 55,
- "*=": 56,
- "/=": 57,
- "%=": 58,
- "<<=": 59,
- ">>=": 60,
- ">>>=": 61,
- "&=": 62,
- "|=": 63,
- "^=": 64,
- "@": 52
- };
- 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_2 in source) {
- if (source.hasOwnProperty(name_2)) {
- result[source[name_2]] = name_2;
- }
- }
- 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;
- }
- 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) {
- // ES5 7.3:
- // The ECMAScript line terminator characters are listed in Table 3.
- // Table 3: Line Terminator Characters
- // Code Unit Value Name Formal Name
- // \u000A Line Feed <LF>
- // \u000D Carriage Return <CR>
- // \u2028 Line separator <LS>
- // \u2029 Paragraph separator <PS>
- // Only the characters in Table 3 are treated as line terminators. Other new line or line
- // breaking characters are treated as white space but not as line terminators.
- 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 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;
- 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;
- }
- 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 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, text, onError, start, length) {
- 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 === 65 || token > 101; },
- isReservedWord: function () { return token >= 66 && token <= 101; },
- isUnterminated: function () { return tokenIsUnterminated; },
- reScanGreaterToken: reScanGreaterToken,
- reScanSlashToken: reScanSlashToken,
- reScanTemplateToken: reScanTemplateToken,
- scan: scan,
- setText: setText,
- setScriptTarget: setScriptTarget,
- setOnError: setOnError,
- setTextPos: setTextPos,
- tryScan: tryScan,
- lookAhead: lookAhead
- };
- function error(message, length) {
- if (onError) {
- onError(message, length || 0);
- }
- }
- function isIdentifierStart(ch) {
- return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 ||
- ch === 36 || ch === 95 ||
- ch > 127 && isUnicodeIdentifierStart(ch, languageVersion);
- }
- function isIdentifierPart(ch) {
- return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 ||
- ch >= 48 && ch <= 57 || ch === 36 || ch === 95 ||
- ch > 127 && isUnicodeIdentifierPart(ch, languageVersion);
- }
- 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 ? 10 : 13;
- break;
- }
- var currChar = text.charCodeAt(pos);
- if (currChar === 96) {
- contents += text.substring(start, pos);
- pos++;
- resultingToken = startedWithBacktick ? 10 : 13;
- break;
- }
- if (currChar === 36 && pos + 1 < end && text.charCodeAt(pos + 1) === 123) {
- contents += text.substring(start, pos);
- pos += 2;
- resultingToken = startedWithBacktick ? 11 : 12;
- 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)) {
- pos++;
- }
- else if (ch === 92) {
- ch = peekUnicodeEscape();
- if (!(ch >= 0 && isIdentifierPart(ch))) {
- 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 = 65;
- }
- 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);
- 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 = 31;
- }
- return pos += 2, token = 29;
- }
- return pos++, token = 46;
- case 34:
- case 39:
- tokenValue = scanString();
- return token = 8;
- case 96:
- return token = scanTemplateAndSetTokenValue();
- case 37:
- if (text.charCodeAt(pos + 1) === 61) {
- return pos += 2, token = 58;
- }
- return pos++, token = 37;
- case 38:
- if (text.charCodeAt(pos + 1) === 38) {
- return pos += 2, token = 48;
- }
- if (text.charCodeAt(pos + 1) === 61) {
- return pos += 2, token = 62;
- }
- return pos++, token = 43;
- case 40:
- return pos++, token = 16;
- case 41:
- return pos++, token = 17;
- case 42:
- if (text.charCodeAt(pos + 1) === 61) {
- return pos += 2, token = 56;
- }
- return pos++, token = 35;
- case 43:
- if (text.charCodeAt(pos + 1) === 43) {
- return pos += 2, token = 38;
- }
- if (text.charCodeAt(pos + 1) === 61) {
- return pos += 2, token = 54;
- }
- return pos++, token = 33;
- case 44:
- return pos++, token = 23;
- case 45:
- if (text.charCodeAt(pos + 1) === 45) {
- return pos += 2, token = 39;
- }
- if (text.charCodeAt(pos + 1) === 61) {
- return pos += 2, token = 55;
- }
- return pos++, token = 34;
- case 46:
- if (isDigit(text.charCodeAt(pos + 1))) {
- tokenValue = "" + scanNumber();
- return token = 7;
- }
- if (text.charCodeAt(pos + 1) === 46 && text.charCodeAt(pos + 2) === 46) {
- return pos += 3, token = 21;
- }
- return pos++, token = 20;
- 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 = 57;
- }
- return pos++, token = 36;
- 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 = 7;
- }
- 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 = 7;
- }
- 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 = 7;
- }
- if (pos + 1 < end && isOctalDigit(text.charCodeAt(pos + 1))) {
- tokenValue = "" + scanOctalDigits();
- return token = 7;
- }
- case 49:
- case 50:
- case 51:
- case 52:
- case 53:
- case 54:
- case 55:
- case 56:
- case 57:
- tokenValue = "" + scanNumber();
- return token = 7;
- case 58:
- return pos++, token = 51;
- case 59:
- return pos++, token = 22;
- case 60:
- if (isConflictMarkerTrivia(text, pos)) {
- pos = scanConflictMarkerTrivia(text, pos, error);
- if (skipTrivia) {
- continue;
- }
- else {
- return token = 6;
- }
- }
- if (text.charCodeAt(pos + 1) === 60) {
- if (text.charCodeAt(pos + 2) === 61) {
- return pos += 3, token = 59;
- }
- return pos += 2, token = 40;
- }
- if (text.charCodeAt(pos + 1) === 61) {
- return pos += 2, token = 26;
- }
- return pos++, token = 24;
- case 61:
- if (isConflictMarkerTrivia(text, pos)) {
- pos = scanConflictMarkerTrivia(text, pos, error);
- if (skipTrivia) {
- continue;
- }
- else {
- return token = 6;
- }
- }
- if (text.charCodeAt(pos + 1) === 61) {
- if (text.charCodeAt(pos + 2) === 61) {
- return pos += 3, token = 30;
- }
- return pos += 2, token = 28;
- }
- if (text.charCodeAt(pos + 1) === 62) {
- return pos += 2, token = 32;
- }
- return pos++, token = 53;
- case 62:
- if (isConflictMarkerTrivia(text, pos)) {
- pos = scanConflictMarkerTrivia(text, pos, error);
- if (skipTrivia) {
- continue;
- }
- else {
- return token = 6;
- }
- }
- return pos++, token = 25;
- case 63:
- return pos++, token = 50;
- case 91:
- return pos++, token = 18;
- case 93:
- return pos++, token = 19;
- case 94:
- if (text.charCodeAt(pos + 1) === 61) {
- return pos += 2, token = 64;
- }
- return pos++, token = 45;
- case 123:
- return pos++, token = 14;
- case 124:
- if (text.charCodeAt(pos + 1) === 124) {
- return pos += 2, token = 49;
- }
- if (text.charCodeAt(pos + 1) === 61) {
- return pos += 2, token = 63;
- }
- return pos++, token = 44;
- case 125:
- return pos++, token = 15;
- case 126:
- return pos++, token = 47;
- case 64:
- return pos++, token = 52;
- case 92:
- var cookedChar = peekUnicodeEscape();
- if (cookedChar >= 0 && isIdentifierStart(cookedChar)) {
- pos += 6;
- tokenValue = String.fromCharCode(cookedChar) + scanIdentifierParts();
- return token = getIdentifierToken();
- }
- error(ts.Diagnostics.Invalid_character);
- return pos++, token = 0;
- default:
- if (isIdentifierStart(ch)) {
- pos++;
- while (pos < end && isIdentifierPart(ch = text.charCodeAt(pos)))
- 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 === 25) {
- if (text.charCodeAt(pos) === 62) {
- if (text.charCodeAt(pos + 1) === 62) {
- if (text.charCodeAt(pos + 2) === 61) {
- return pos += 3, token = 61;
- }
- return pos += 2, token = 42;
- }
- if (text.charCodeAt(pos + 1) === 61) {
- return pos += 2, token = 60;
- }
- return pos++, token = 41;
- }
- if (text.charCodeAt(pos) === 61) {
- return pos++, token = 27;
- }
- }
- return token;
- }
- function reScanSlashToken() {
- if (token === 36 || token === 57) {
- 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))) {
- p++;
- }
- pos = p;
- tokenValue = text.substring(tokenPos, pos);
- token = 9;
- }
- return token;
- }
- function reScanTemplateToken() {
- ts.Debug.assert(token === 15, "'reScanTemplateToken' should only be called on a '}'");
- pos = tokenPos;
- return token = scanTemplateAndSetTokenValue();
- }
- 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 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 = {}));
- /// <reference path="parser.ts"/>
- var ts;
- (function (ts) {
- ts.bindTime = 0;
- function getModuleInstanceState(node) {
- if (node.kind === 203 || node.kind === 204) {
- return 0;
- }
- else if (ts.isConstEnumDeclaration(node)) {
- return 2;
- }
- else if ((node.kind === 210 || node.kind === 209) && !(node.flags & 1)) {
- return 0;
- }
- else if (node.kind === 207) {
- 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 === 206) {
- 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 symbolCount = 0;
- var Symbol = ts.objectAllocator.getSymbolConstructor();
- if (!file.locals) {
- file.locals = {};
- container = file;
- setBlockScopeContainer(file, false);
- bind(file);
- file.symbolCount = symbolCount;
- }
- function createSymbol(flags, name) {
- symbolCount++;
- return new Symbol(flags, name);
- }
- function setBlockScopeContainer(node, cleanLocals) {
- blockScopeContainer = node;
- if (cleanLocals) {
- blockScopeContainer.locals = undefined;
- }
- }
- function addDeclarationToSymbol(symbol, node, symbolKind) {
- symbol.flags |= symbolKind;
- if (!symbol.declarations)
- symbol.declarations = [];
- symbol.declarations.push(node);
- if (symbolKind & 1952 && !symbol.exports)
- symbol.exports = {};
- if (symbolKind & 6240 && !symbol.members)
- symbol.members = {};
- node.symbol = symbol;
- if (symbolKind & 107455 && !symbol.valueDeclaration)
- symbol.valueDeclaration = node;
- }
- function getDeclarationName(node) {
- if (node.name) {
- if (node.kind === 206 && node.name.kind === 8) {
- return '"' + node.name.text + '"';
- }
- if (node.name.kind === 128) {
- 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:
- case 136:
- return "__constructor";
- case 143:
- case 139:
- return "__call";
- case 140:
- return "__new";
- case 141:
- return "__index";
- case 216:
- return "__export";
- case 215:
- return node.isExportEquals ? "export=" : "default";
- case 201:
- case 202:
- return node.flags & 256 ? "default" : undefined;
- }
- }
- function getDisplayName(node) {
- return node.name ? ts.declarationNameToString(node.name) : getDeclarationName(node);
- }
- function declareSymbol(symbols, parent, node, includes, excludes) {
- ts.Debug.assert(!ts.hasDynamicName(node));
- var name = node.flags & 256 && parent ? "default" : getDeclarationName(node);
- var symbol;
- if (name !== undefined) {
- symbol = ts.hasProperty(symbols, name) ? symbols[name] : (symbols[name] = createSymbol(0, 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) {
- 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;
- if ((node.kind === 202 || node.kind === 175) && symbol.exports) {
- 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;
- }
- return symbol;
- }
- function declareModuleMember(node, symbolKind, symbolExcludes) {
- var hasExportModifier = ts.getCombinedNodeFlags(node) & 1;
- if (symbolKind & 8388608) {
- if (node.kind === 218 || (node.kind === 209 && hasExportModifier)) {
- declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes);
- }
- else {
- declareSymbol(container.locals, undefined, node, symbolKind, symbolExcludes);
- }
- }
- else {
- if (hasExportModifier || container.flags & 65536) {
- var exportKind = (symbolKind & 107455 ? 1048576 : 0) |
- (symbolKind & 793056 ? 2097152 : 0) |
- (symbolKind & 1536 ? 4194304 : 0);
- var local = declareSymbol(container.locals, undefined, node, exportKind, symbolExcludes);
- local.exportSymbol = declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes);
- node.localSymbol = local;
- }
- else {
- declareSymbol(container.locals, undefined, node, symbolKind, symbolExcludes);
- }
- }
- }
- function bindChildren(node, symbolKind, isBlockScopeContainer) {
- if (symbolKind & 255504) {
- node.locals = {};
- }
- var saveParent = parent;
- var saveContainer = container;
- var savedBlockScopeContainer = blockScopeContainer;
- parent = node;
- if (symbolKind & 262128) {
- container = node;
- addToContainerChain(container);
- }
- if (isBlockScopeContainer) {
- setBlockScopeContainer(node, (symbolKind & 255504) === 0 && node.kind !== 228);
- }
- ts.forEachChild(node, bind);
- container = saveContainer;
- parent = saveParent;
- blockScopeContainer = savedBlockScopeContainer;
- }
- function addToContainerChain(node) {
- if (lastContainer) {
- lastContainer.nextContainer = node;
- }
- lastContainer = node;
- }
- function bindDeclaration(node, symbolKind, symbolExcludes, isBlockScopeContainer) {
- switch (container.kind) {
- case 206:
- declareModuleMember(node, symbolKind, symbolExcludes);
- break;
- case 228:
- if (ts.isExternalModule(container)) {
- declareModuleMember(node, symbolKind, symbolExcludes);
- break;
- }
- case 143:
- case 144:
- case 139:
- case 140:
- case 141:
- case 135:
- case 134:
- case 136:
- case 137:
- case 138:
- case 201:
- case 163:
- case 164:
- declareSymbol(container.locals, undefined, node, symbolKind, symbolExcludes);
- break;
- case 175:
- case 202:
- if (node.flags & 128) {
- declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes);
- break;
- }
- case 146:
- case 155:
- case 203:
- declareSymbol(container.symbol.members, container.symbol, node, symbolKind, symbolExcludes);
- break;
- case 205:
- declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes);
- break;
- }
- bindChildren(node, symbolKind, isBlockScopeContainer);
- }
- function isAmbientContext(node) {
- while (node) {
- if (node.flags & 2)
- return true;
- node = node.parent;
- }
- return false;
- }
- function hasExportDeclarations(node) {
- var body = node.kind === 228 ? node : node.body;
- if (body.kind === 228 || body.kind === 207) {
- for (var _i = 0, _a = body.statements; _i < _a.length; _i++) {
- var stat = _a[_i];
- if (stat.kind === 216 || stat.kind === 215) {
- return true;
- }
- }
- }
- return false;
- }
- function setExportContextFlag(node) {
- if (isAmbientContext(node) && !hasExportDeclarations(node)) {
- node.flags |= 65536;
- }
- else {
- node.flags &= ~65536;
- }
- }
- function bindModuleDeclaration(node) {
- setExportContextFlag(node);
- if (node.name.kind === 8) {
- bindDeclaration(node, 512, 106639, true);
- }
- else {
- var state = getModuleInstanceState(node);
- if (state === 0) {
- bindDeclaration(node, 1024, 0, true);
- }
- else {
- bindDeclaration(node, 512, 106639, true);
- var currentModuleIsConstEnumOnly = state === 2;
- if (node.symbol.constEnumOnlyModule === undefined) {
- node.symbol.constEnumOnlyModule = currentModuleIsConstEnumOnly;
- }
- else {
- node.symbol.constEnumOnlyModule = node.symbol.constEnumOnlyModule && currentModuleIsConstEnumOnly;
- }
- }
- }
- }
- function bindFunctionOrConstructorType(node) {
- // For a given function symbol "<...>(...) => T" we want to generate a symbol identical
- // to the one we would get for: { <...>(...): T }
- //
- // We do that by making an anonymous type literal symbol, and then setting the function
- // symbol as its sole member. To the rest of the system, this symbol will be indistinguishable
- // from an actual type literal symbol you would have gotten had you used the long form.
- var symbol = createSymbol(131072, getDeclarationName(node));
- addDeclarationToSymbol(symbol, node, 131072);
- bindChildren(node, 131072, false);
- var typeLiteralSymbol = createSymbol(2048, "__type");
- addDeclarationToSymbol(typeLiteralSymbol, node, 2048);
- typeLiteralSymbol.members = {};
- typeLiteralSymbol.members[node.kind === 143 ? "__call" : "__new"] = symbol;
- }
- function bindAnonymousDeclaration(node, symbolKind, name, isBlockScopeContainer) {
- var symbol = createSymbol(symbolKind, name);
- addDeclarationToSymbol(symbol, node, symbolKind);
- bindChildren(node, symbolKind, isBlockScopeContainer);
- }
- function bindCatchVariableDeclaration(node) {
- bindChildren(node, 0, true);
- }
- function bindBlockScopedDeclaration(node, symbolKind, symbolExcludes) {
- switch (blockScopeContainer.kind) {
- case 206:
- declareModuleMember(node, symbolKind, symbolExcludes);
- break;
- case 228:
- if (ts.isExternalModule(container)) {
- declareModuleMember(node, symbolKind, symbolExcludes);
- break;
- }
- default:
- if (!blockScopeContainer.locals) {
- blockScopeContainer.locals = {};
- addToContainerChain(blockScopeContainer);
- }
- declareSymbol(blockScopeContainer.locals, undefined, node, symbolKind, symbolExcludes);
- }
- bindChildren(node, symbolKind, false);
- }
- function bindBlockScopedVariableDeclaration(node) {
- bindBlockScopedDeclaration(node, 2, 107455);
- }
- function getDestructuringParameterName(node) {
- return "__" + ts.indexOf(node.parent.parameters, node);
- }
- function bind(node) {
- node.parent = parent;
- switch (node.kind) {
- case 129:
- bindDeclaration(node, 262144, 530912, false);
- break;
- case 130:
- bindParameter(node);
- break;
- case 199:
- case 153:
- if (ts.isBindingPattern(node.name)) {
- bindChildren(node, 0, false);
- }
- else if (ts.isBlockOrCatchScoped(node)) {
- bindBlockScopedVariableDeclaration(node);
- }
- else {
- bindDeclaration(node, 1, 107454, false);
- }
- break;
- case 133:
- case 132:
- bindPropertyOrMethodOrAccessor(node, 4 | (node.questionToken ? 536870912 : 0), 107455, false);
- break;
- case 225:
- case 226:
- bindPropertyOrMethodOrAccessor(node, 4, 107455, false);
- break;
- case 227:
- bindPropertyOrMethodOrAccessor(node, 8, 107455, false);
- break;
- case 139:
- case 140:
- case 141:
- bindDeclaration(node, 131072, 0, false);
- break;
- case 135:
- case 134:
- bindPropertyOrMethodOrAccessor(node, 8192 | (node.questionToken ? 536870912 : 0), ts.isObjectLiteralMethod(node) ? 107455 : 99263, true);
- break;
- case 201:
- bindDeclaration(node, 16, 106927, true);
- break;
- case 136:
- bindDeclaration(node, 16384, 0, true);
- break;
- case 137:
- bindPropertyOrMethodOrAccessor(node, 32768, 41919, true);
- break;
- case 138:
- bindPropertyOrMethodOrAccessor(node, 65536, 74687, true);
- break;
- case 143:
- case 144:
- bindFunctionOrConstructorType(node);
- break;
- case 146:
- bindAnonymousDeclaration(node, 2048, "__type", false);
- break;
- case 155:
- bindAnonymousDeclaration(node, 4096, "__object", false);
- break;
- case 163:
- case 164:
- bindAnonymousDeclaration(node, 16, "__function", true);
- break;
- case 175:
- bindAnonymousDeclaration(node, 32, "__class", false);
- break;
- case 224:
- bindCatchVariableDeclaration(node);
- break;
- case 202:
- bindBlockScopedDeclaration(node, 32, 899583);
- break;
- case 203:
- bindDeclaration(node, 64, 792992, false);
- break;
- case 204:
- bindDeclaration(node, 524288, 793056, false);
- break;
- case 205:
- if (ts.isConst(node)) {
- bindDeclaration(node, 128, 899967, false);
- }
- else {
- bindDeclaration(node, 256, 899327, false);
- }
- break;
- case 206:
- bindModuleDeclaration(node);
- break;
- case 209:
- case 212:
- case 214:
- case 218:
- bindDeclaration(node, 8388608, 8388608, false);
- break;
- case 211:
- if (node.name) {
- bindDeclaration(node, 8388608, 8388608, false);
- }
- else {
- bindChildren(node, 0, false);
- }
- break;
- case 216:
- if (!node.exportClause) {
- declareSymbol(container.symbol.exports, container.symbol, node, 1073741824, 0);
- }
- bindChildren(node, 0, false);
- break;
- case 215:
- if (node.expression.kind === 65) {
- declareSymbol(container.symbol.exports, container.symbol, node, 8388608, 107455 | 8388608);
- }
- else {
- declareSymbol(container.symbol.exports, container.symbol, node, 4, 107455 | 8388608);
- }
- bindChildren(node, 0, false);
- break;
- case 228:
- setExportContextFlag(node);
- if (ts.isExternalModule(node)) {
- bindAnonymousDeclaration(node, 512, '"' + ts.removeFileExtension(node.fileName) + '"', true);
- break;
- }
- case 180:
- bindChildren(node, 0, !ts.isFunctionLike(node.parent));
- break;
- case 224:
- case 187:
- case 188:
- case 189:
- case 208:
- bindChildren(node, 0, true);
- break;
- default:
- var saveParent = parent;
- parent = node;
- ts.forEachChild(node, bind);
- parent = saveParent;
- }
- }
- function bindParameter(node) {
- if (ts.isBindingPattern(node.name)) {
- bindAnonymousDeclaration(node, 1, getDestructuringParameterName(node), false);
- }
- else {
- bindDeclaration(node, 1, 107455, false);
- }
- if (node.flags & 112 &&
- node.parent.kind === 136 &&
- (node.parent.parent.kind === 202 || node.parent.parent.kind === 175)) {
- var classDeclaration = node.parent.parent;
- declareSymbol(classDeclaration.symbol.members, classDeclaration.symbol, node, 4, 107455);
- }
- }
- function bindPropertyOrMethodOrAccessor(node, symbolKind, symbolExcludes, isBlockScopeContainer) {
- if (ts.hasDynamicName(node)) {
- bindAnonymousDeclaration(node, symbolKind, "__computed", isBlockScopeContainer);
- }
- else {
- bindDeclaration(node, symbolKind, symbolExcludes, isBlockScopeContainer);
- }
- }
- }
- })(ts || (ts = {}));
- /// <reference path="binder.ts" />
- var ts;
- (function (ts) {
- function getDeclarationOfKind(symbol, kind) {
- var declarations = symbol.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 () { }
- };
- }
- 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 containsParseError(node) {
- aggregateChildData(node);
- return (node.parserContextFlags & 64) !== 0;
- }
- ts.containsParseError = containsParseError;
- function aggregateChildData(node) {
- if (!(node.parserContextFlags & 128)) {
- var thisNodeOrAnySubNodesHasError = ((node.parserContextFlags & 32) !== 0) ||
- ts.forEachChild(node, containsParseError);
- if (thisNodeOrAnySubNodesHasError) {
- node.parserContextFlags |= 64;
- }
- node.parserContextFlags |= 128;
- }
- }
- function getSourceFileOfNode(node) {
- while (node && node.kind !== 228) {
- 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.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) {
- if (nodeIsMissing(node)) {
- return "";
- }
- var text = sourceFile.text;
- return text.substring(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) {
- return getSourceTextOfNodeFromSourceFile(getSourceFileOfNode(node), node);
- }
- 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(/\W/g, "_");
- }
- ts.makeIdentifierFromModuleName = makeIdentifierFromModuleName;
- function isBlockOrCatchScoped(declaration) {
- return (getCombinedNodeFlags(declaration) & 12288) !== 0 ||
- isCatchClauseVariableDeclaration(declaration);
- }
- ts.isBlockOrCatchScoped = isBlockOrCatchScoped;
- function getEnclosingBlockScopeContainer(node) {
- var current = node.parent;
- while (current) {
- if (isFunctionLike(current)) {
- return current;
- }
- switch (current.kind) {
- case 228:
- case 208:
- case 224:
- case 206:
- case 187:
- case 188:
- case 189:
- return current;
- case 180:
- if (!isFunctionLike(current.parent)) {
- return current;
- }
- }
- current = current.parent;
- }
- }
- ts.getEnclosingBlockScopeContainer = getEnclosingBlockScopeContainer;
- function isCatchClauseVariableDeclaration(declaration) {
- return declaration &&
- declaration.kind === 199 &&
- declaration.parent &&
- declaration.parent.kind === 224;
- }
- 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.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 228:
- 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 199:
- case 153:
- case 202:
- case 175:
- case 203:
- case 206:
- case 205:
- case 227:
- case 201:
- case 163:
- 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 & 2048) !== 0;
- }
- ts.isDeclarationFile = isDeclarationFile;
- function isConstEnumDeclaration(node) {
- return node.kind === 205 && isConst(node);
- }
- ts.isConstEnumDeclaration = isConstEnumDeclaration;
- function walkUpBindingElementsAndPatterns(node) {
- while (node && (node.kind === 153 || isBindingPattern(node))) {
- node = node.parent;
- }
- return node;
- }
- function getCombinedNodeFlags(node) {
- node = walkUpBindingElementsAndPatterns(node);
- var flags = node.flags;
- if (node.kind === 199) {
- node = node.parent;
- }
- if (node && node.kind === 200) {
- flags |= node.flags;
- node = node.parent;
- }
- if (node && node.kind === 181) {
- flags |= node.flags;
- }
- return flags;
- }
- ts.getCombinedNodeFlags = getCombinedNodeFlags;
- function isConst(node) {
- return !!(getCombinedNodeFlags(node) & 8192);
- }
- ts.isConst = isConst;
- function isLet(node) {
- return !!(getCombinedNodeFlags(node) & 4096);
- }
- ts.isLet = isLet;
- function isPrologueDirective(node) {
- return node.kind === 183 && node.expression.kind === 8;
- }
- ts.isPrologueDirective = isPrologueDirective;
- function getLeadingCommentRangesOfNode(node, sourceFileOfNode) {
- if (node.kind === 130 || node.kind === 129) {
- return ts.concatenate(ts.getTrailingCommentRanges(sourceFileOfNode.text, node.pos), ts.getLeadingCommentRanges(sourceFileOfNode.text, node.pos));
- }
- else {
- return ts.getLeadingCommentRanges(sourceFileOfNode.text, node.pos);
- }
- }
- ts.getLeadingCommentRangesOfNode = getLeadingCommentRangesOfNode;
- function getJsDocComments(node, sourceFileOfNode) {
- return ts.filter(getLeadingCommentRangesOfNode(node, sourceFileOfNode), 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.*?\/>/;
- function forEachReturnStatement(body, visitor) {
- return traverse(body);
- function traverse(node) {
- switch (node.kind) {
- case 192:
- return visitor(node);
- case 208:
- case 180:
- case 184:
- case 185:
- case 186:
- case 187:
- case 188:
- case 189:
- case 193:
- case 194:
- case 221:
- case 222:
- case 195:
- case 197:
- case 224:
- return ts.forEachChild(node, traverse);
- }
- }
- }
- ts.forEachReturnStatement = forEachReturnStatement;
- function isVariableLike(node) {
- if (node) {
- switch (node.kind) {
- case 153:
- case 227:
- case 130:
- case 225:
- case 133:
- case 132:
- case 226:
- case 199:
- return true;
- }
- }
- return false;
- }
- ts.isVariableLike = isVariableLike;
- function isAccessor(node) {
- if (node) {
- switch (node.kind) {
- case 137:
- case 138:
- return true;
- }
- }
- return false;
- }
- ts.isAccessor = isAccessor;
- function isFunctionLike(node) {
- if (node) {
- switch (node.kind) {
- case 136:
- case 163:
- case 201:
- case 164:
- case 135:
- case 134:
- case 137:
- case 138:
- case 139:
- case 140:
- case 141:
- case 143:
- case 144:
- case 163:
- case 164:
- case 201:
- return true;
- }
- }
- return false;
- }
- ts.isFunctionLike = isFunctionLike;
- function isFunctionBlock(node) {
- return node && node.kind === 180 && isFunctionLike(node.parent);
- }
- ts.isFunctionBlock = isFunctionBlock;
- function isObjectLiteralMethod(node) {
- return node && node.kind === 135 && node.parent.kind === 155;
- }
- ts.isObjectLiteralMethod = isObjectLiteralMethod;
- function getContainingFunction(node) {
- while (true) {
- node = node.parent;
- if (!node || isFunctionLike(node)) {
- return node;
- }
- }
- }
- ts.getContainingFunction = getContainingFunction;
- function getThisContainer(node, includeArrowFunctions) {
- while (true) {
- node = node.parent;
- if (!node) {
- return undefined;
- }
- switch (node.kind) {
- case 128:
- if (node.parent.parent.kind === 202) {
- return node;
- }
- node = node.parent;
- break;
- case 131:
- if (node.parent.kind === 130 && isClassElement(node.parent.parent)) {
- node = node.parent.parent;
- }
- else if (isClassElement(node.parent)) {
- node = node.parent;
- }
- break;
- case 164:
- if (!includeArrowFunctions) {
- continue;
- }
- case 201:
- case 163:
- case 206:
- case 133:
- case 132:
- case 135:
- case 134:
- case 136:
- case 137:
- case 138:
- case 205:
- case 228:
- return node;
- }
- }
- }
- ts.getThisContainer = getThisContainer;
- function getSuperContainer(node, includeFunctions) {
- while (true) {
- node = node.parent;
- if (!node)
- return node;
- switch (node.kind) {
- case 128:
- if (node.parent.parent.kind === 202) {
- return node;
- }
- node = node.parent;
- break;
- case 131:
- if (node.parent.kind === 130 && isClassElement(node.parent.parent)) {
- node = node.parent.parent;
- }
- else if (isClassElement(node.parent)) {
- node = node.parent;
- }
- break;
- case 201:
- case 163:
- case 164:
- if (!includeFunctions) {
- continue;
- }
- case 133:
- case 132:
- case 135:
- case 134:
- case 136:
- case 137:
- case 138:
- return node;
- }
- }
- }
- ts.getSuperContainer = getSuperContainer;
- function getInvokedExpression(node) {
- if (node.kind === 160) {
- return node.tag;
- }
- return node.expression;
- }
- ts.getInvokedExpression = getInvokedExpression;
- function nodeCanBeDecorated(node) {
- switch (node.kind) {
- case 202:
- return true;
- case 133:
- return node.parent.kind === 202;
- case 130:
- return node.parent.body && node.parent.parent.kind === 202;
- case 137:
- case 138:
- case 135:
- return node.body && node.parent.kind === 202;
- }
- return false;
- }
- ts.nodeCanBeDecorated = nodeCanBeDecorated;
- function nodeIsDecorated(node) {
- switch (node.kind) {
- case 202:
- if (node.decorators) {
- return true;
- }
- return false;
- case 133:
- case 130:
- if (node.decorators) {
- return true;
- }
- return false;
- case 137:
- if (node.body && node.decorators) {
- return true;
- }
- return false;
- case 135:
- case 138:
- if (node.body && node.decorators) {
- return true;
- }
- return false;
- }
- return false;
- }
- ts.nodeIsDecorated = nodeIsDecorated;
- function childIsDecorated(node) {
- switch (node.kind) {
- case 202:
- return ts.forEach(node.members, nodeOrChildIsDecorated);
- case 135:
- case 138:
- return ts.forEach(node.parameters, nodeIsDecorated);
- }
- return false;
- }
- ts.childIsDecorated = childIsDecorated;
- function nodeOrChildIsDecorated(node) {
- return nodeIsDecorated(node) || childIsDecorated(node);
- }
- ts.nodeOrChildIsDecorated = nodeOrChildIsDecorated;
- function isExpression(node) {
- switch (node.kind) {
- case 93:
- case 91:
- case 89:
- case 95:
- case 80:
- case 9:
- case 154:
- case 155:
- case 156:
- case 157:
- case 158:
- case 159:
- case 160:
- case 161:
- case 162:
- case 163:
- case 175:
- case 164:
- case 167:
- case 165:
- case 166:
- case 168:
- case 169:
- case 170:
- case 171:
- case 174:
- case 172:
- case 10:
- case 176:
- return true;
- case 127:
- while (node.parent.kind === 127) {
- node = node.parent;
- }
- return node.parent.kind === 145;
- case 65:
- if (node.parent.kind === 145) {
- return true;
- }
- case 7:
- case 8:
- var parent_1 = node.parent;
- switch (parent_1.kind) {
- case 199:
- case 130:
- case 133:
- case 132:
- case 227:
- case 225:
- case 153:
- return parent_1.initializer === node;
- case 183:
- case 184:
- case 185:
- case 186:
- case 192:
- case 193:
- case 194:
- case 221:
- case 196:
- case 194:
- return parent_1.expression === node;
- case 187:
- var forStatement = parent_1;
- return (forStatement.initializer === node && forStatement.initializer.kind !== 200) ||
- forStatement.condition === node ||
- forStatement.incrementor === node;
- case 188:
- case 189:
- var forInStatement = parent_1;
- return (forInStatement.initializer === node && forInStatement.initializer.kind !== 200) ||
- forInStatement.expression === node;
- case 161:
- return node === parent_1.expression;
- case 178:
- return node === parent_1.expression;
- case 128:
- return node === parent_1.expression;
- case 131:
- return true;
- default:
- if (isExpression(parent_1)) {
- return true;
- }
- }
- }
- return false;
- }
- ts.isExpression = isExpression;
- function isInstantiatedModule(node, preserveConstEnums) {
- var moduleState = ts.getModuleInstanceState(node);
- return moduleState === 1 ||
- (preserveConstEnums && moduleState === 2);
- }
- ts.isInstantiatedModule = isInstantiatedModule;
- function isExternalModuleImportEqualsDeclaration(node) {
- return node.kind === 209 && node.moduleReference.kind === 220;
- }
- ts.isExternalModuleImportEqualsDeclaration = isExternalModuleImportEqualsDeclaration;
- function getExternalModuleImportEqualsDeclarationExpression(node) {
- ts.Debug.assert(isExternalModuleImportEqualsDeclaration(node));
- return node.moduleReference.expression;
- }
- ts.getExternalModuleImportEqualsDeclarationExpression = getExternalModuleImportEqualsDeclarationExpression;
- function isInternalModuleImportEqualsDeclaration(node) {
- return node.kind === 209 && node.moduleReference.kind !== 220;
- }
- ts.isInternalModuleImportEqualsDeclaration = isInternalModuleImportEqualsDeclaration;
- function getExternalModuleName(node) {
- if (node.kind === 210) {
- return node.moduleSpecifier;
- }
- if (node.kind === 209) {
- var reference = node.moduleReference;
- if (reference.kind === 220) {
- return reference.expression;
- }
- }
- if (node.kind === 216) {
- return node.moduleSpecifier;
- }
- }
- ts.getExternalModuleName = getExternalModuleName;
- function hasDotDotDotToken(node) {
- return node && node.kind === 130 && node.dotDotDotToken !== undefined;
- }
- ts.hasDotDotDotToken = hasDotDotDotToken;
- function hasQuestionToken(node) {
- if (node) {
- switch (node.kind) {
- case 130:
- return node.questionToken !== undefined;
- case 135:
- case 134:
- return node.questionToken !== undefined;
- case 226:
- case 225:
- case 133:
- case 132:
- return node.questionToken !== undefined;
- }
- }
- return false;
- }
- ts.hasQuestionToken = hasQuestionToken;
- function hasRestParameters(s) {
- return s.parameters.length > 0 && ts.lastOrUndefined(s.parameters).dotDotDotToken !== undefined;
- }
- ts.hasRestParameters = hasRestParameters;
- function isLiteralKind(kind) {
- return 7 <= kind && kind <= 10;
- }
- ts.isLiteralKind = isLiteralKind;
- function isTextualLiteralKind(kind) {
- return kind === 8 || kind === 10;
- }
- ts.isTextualLiteralKind = isTextualLiteralKind;
- function isTemplateLiteralKind(kind) {
- return 10 <= kind && kind <= 13;
- }
- ts.isTemplateLiteralKind = isTemplateLiteralKind;
- function isBindingPattern(node) {
- return !!node && (node.kind === 152 || node.kind === 151);
- }
- ts.isBindingPattern = isBindingPattern;
- function isInAmbientContext(node) {
- while (node) {
- if (node.flags & (2 | 2048)) {
- return true;
- }
- node = node.parent;
- }
- return false;
- }
- ts.isInAmbientContext = isInAmbientContext;
- function isDeclaration(node) {
- switch (node.kind) {
- case 164:
- case 153:
- case 202:
- case 136:
- case 205:
- case 227:
- case 218:
- case 201:
- case 163:
- case 137:
- case 211:
- case 209:
- case 214:
- case 203:
- case 135:
- case 134:
- case 206:
- case 212:
- case 130:
- case 225:
- case 133:
- case 132:
- case 138:
- case 226:
- case 204:
- case 129:
- case 199:
- return true;
- }
- return false;
- }
- ts.isDeclaration = isDeclaration;
- function isStatement(n) {
- switch (n.kind) {
- case 191:
- case 190:
- case 198:
- case 185:
- case 183:
- case 182:
- case 188:
- case 189:
- case 187:
- case 184:
- case 195:
- case 192:
- case 194:
- case 94:
- case 197:
- case 181:
- case 186:
- case 193:
- case 215:
- return true;
- default:
- return false;
- }
- }
- ts.isStatement = isStatement;
- function isClassElement(n) {
- switch (n.kind) {
- case 136:
- case 133:
- case 135:
- case 137:
- case 138:
- case 134:
- case 141:
- return true;
- default:
- return false;
- }
- }
- ts.isClassElement = isClassElement;
- function isDeclarationName(name) {
- if (name.kind !== 65 && name.kind !== 8 && name.kind !== 7) {
- return false;
- }
- var parent = name.parent;
- if (parent.kind === 214 || parent.kind === 218) {
- if (parent.propertyName) {
- return true;
- }
- }
- if (isDeclaration(parent)) {
- return parent.name === name;
- }
- return false;
- }
- ts.isDeclarationName = isDeclarationName;
- function isAliasSymbolDeclaration(node) {
- return node.kind === 209 ||
- node.kind === 211 && !!node.name ||
- node.kind === 212 ||
- node.kind === 214 ||
- node.kind === 218 ||
- node.kind === 215 && node.expression.kind === 65;
- }
- ts.isAliasSymbolDeclaration = isAliasSymbolDeclaration;
- function getClassExtendsHeritageClauseElement(node) {
- var heritageClause = getHeritageClause(node.heritageClauses, 79);
- return heritageClause && heritageClause.types.length > 0 ? heritageClause.types[0] : undefined;
- }
- ts.getClassExtendsHeritageClauseElement = getClassExtendsHeritageClauseElement;
- function getClassImplementsHeritageClauseElements(node) {
- var heritageClause = getHeritageClause(node.heritageClauses, 102);
- return heritageClause ? heritageClause.types : undefined;
- }
- ts.getClassImplementsHeritageClauseElements = getClassImplementsHeritageClauseElements;
- function getInterfaceBaseTypeNodes(node) {
- var heritageClause = getHeritageClause(node.heritageClauses, 79);
- 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 66 <= token && token <= 126;
- }
- ts.isKeyword = isKeyword;
- function isTrivia(token) {
- return 2 <= token && token <= 6;
- }
- ts.isTrivia = isTrivia;
- function hasDynamicName(declaration) {
- return declaration.name &&
- declaration.name.kind === 128 &&
- !isWellKnownSymbolSyntactically(declaration.name.expression);
- }
- ts.hasDynamicName = hasDynamicName;
- function isWellKnownSymbolSyntactically(node) {
- return node.kind === 156 && isESSymbolIdentifier(node.expression);
- }
- ts.isWellKnownSymbolSyntactically = isWellKnownSymbolSyntactically;
- function getPropertyNameForPropertyNameNode(name) {
- if (name.kind === 65 || name.kind === 8 || name.kind === 7) {
- return name.text;
- }
- if (name.kind === 128) {
- 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 === 65 && node.text === "Symbol";
- }
- ts.isESSymbolIdentifier = isESSymbolIdentifier;
- function isModifier(token) {
- switch (token) {
- case 108:
- case 106:
- case 107:
- case 109:
- case 78:
- case 115:
- case 70:
- case 73:
- return true;
- }
- return false;
- }
- ts.isModifier = isModifier;
- function nodeStartsNewLexicalEnvironment(n) {
- return isFunctionLike(n) || n.kind === 206 || n.kind === 228;
- }
- ts.nodeStartsNewLexicalEnvironment = nodeStartsNewLexicalEnvironment;
- function nodeIsSynthesized(node) {
- return node.pos === -1;
- }
- ts.nodeIsSynthesized = nodeIsSynthesized;
- function createSynthesizedNode(kind, startsOnNewLine) {
- var node = ts.createNode(kind);
- node.pos = -1;
- node.end = -1;
- 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
- };
- function getModificationCount() {
- return modificationCount;
- }
- 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 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 === 136 && nodeIsPresent(member.body)) {
- return member;
- }
- });
- }
- ts.getFirstConstructorWithBody = getFirstConstructorWithBody;
- function shouldEmitToOwnFile(sourceFile, compilerOptions) {
- if (!isDeclarationFile(sourceFile)) {
- if ((isExternalModule(sourceFile) || !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 === 137) {
- getAccessor = accessor;
- }
- else if (accessor.kind === 138) {
- setAccessor = accessor;
- }
- else {
- ts.Debug.fail("Accessor has wrong kind");
- }
- }
- else {
- ts.forEach(declarations, function (member) {
- if ((member.kind === 137 || member.kind === 138)
- && (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 === 137 && !getAccessor) {
- getAccessor = member;
- }
- if (member.kind === 138 && !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 109: return 128;
- case 108: return 16;
- case 107: return 64;
- case 106: return 32;
- case 78: return 1;
- case 115: return 2;
- case 70: return 8192;
- case 73: return 256;
- }
- return 0;
- }
- ts.modifierToFlag = modifierToFlag;
- function isLeftHandSideExpression(expr) {
- if (expr) {
- switch (expr.kind) {
- case 156:
- case 157:
- case 159:
- case 158:
- case 160:
- case 154:
- case 162:
- case 155:
- case 175:
- case 163:
- case 65:
- case 9:
- case 7:
- case 8:
- case 10:
- case 172:
- case 80:
- case 89:
- case 93:
- case 95:
- case 91:
- return true;
- }
- }
- return false;
- }
- ts.isLeftHandSideExpression = isLeftHandSideExpression;
- function isAssignmentOperator(token) {
- return token >= 53 && token <= 64;
- }
- ts.isAssignmentOperator = isAssignmentOperator;
- function isSupportedExpressionWithTypeArguments(node) {
- return isSupportedExpressionWithTypeArgumentsRest(node.expression);
- }
- ts.isSupportedExpressionWithTypeArguments = isSupportedExpressionWithTypeArguments;
- function isSupportedExpressionWithTypeArgumentsRest(node) {
- if (node.kind === 65) {
- return true;
- }
- else if (node.kind === 156) {
- return isSupportedExpressionWithTypeArgumentsRest(node.expression);
- }
- else {
- return false;
- }
- }
- function isRightSideOfQualifiedNameOrPropertyAccess(node) {
- return (node.parent.kind === 127 && node.parent.right === node) ||
- (node.parent.kind === 156 && node.parent.name === node);
- }
- ts.isRightSideOfQualifiedNameOrPropertyAccess = isRightSideOfQualifiedNameOrPropertyAccess;
- function getLocalSymbolForExportDefault(symbol) {
- return symbol && symbol.valueDeclaration && (symbol.valueDeclaration.flags & 256) ? symbol.valueDeclaration.localSymbol : undefined;
- }
- ts.getLocalSymbolForExportDefault = getLocalSymbolForExportDefault;
- function getExpandedCharCodes(input) {
- var output = [];
- var length = input.length;
- var leadSurrogate = undefined;
- 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 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;
- })(ts || (ts = {}));
- /// <reference path="scanner.ts"/>
- /// <reference path="utilities.ts"/>
- var ts;
- (function (ts) {
- var nodeConstructors = new Array(230);
- 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 127:
- return visitNode(cbNode, node.left) ||
- visitNode(cbNode, node.right);
- case 129:
- return visitNode(cbNode, node.name) ||
- visitNode(cbNode, node.constraint) ||
- visitNode(cbNode, node.expression);
- case 130:
- case 133:
- case 132:
- case 225:
- case 226:
- case 199:
- case 153:
- 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 143:
- case 144:
- case 139:
- case 140:
- case 141:
- return visitNodes(cbNodes, node.decorators) ||
- visitNodes(cbNodes, node.modifiers) ||
- visitNodes(cbNodes, node.typeParameters) ||
- visitNodes(cbNodes, node.parameters) ||
- visitNode(cbNode, node.type);
- case 135:
- case 134:
- case 136:
- case 137:
- case 138:
- case 163:
- case 201:
- case 164:
- 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 142:
- return visitNode(cbNode, node.typeName) ||
- visitNodes(cbNodes, node.typeArguments);
- case 145:
- return visitNode(cbNode, node.exprName);
- case 146:
- return visitNodes(cbNodes, node.members);
- case 147:
- return visitNode(cbNode, node.elementType);
- case 148:
- return visitNodes(cbNodes, node.elementTypes);
- case 149:
- return visitNodes(cbNodes, node.types);
- case 150:
- return visitNode(cbNode, node.type);
- case 151:
- case 152:
- return visitNodes(cbNodes, node.elements);
- case 154:
- return visitNodes(cbNodes, node.elements);
- case 155:
- return visitNodes(cbNodes, node.properties);
- case 156:
- return visitNode(cbNode, node.expression) ||
- visitNode(cbNode, node.dotToken) ||
- visitNode(cbNode, node.name);
- case 157:
- return visitNode(cbNode, node.expression) ||
- visitNode(cbNode, node.argumentExpression);
- case 158:
- case 159:
- return visitNode(cbNode, node.expression) ||
- visitNodes(cbNodes, node.typeArguments) ||
- visitNodes(cbNodes, node.arguments);
- case 160:
- return visitNode(cbNode, node.tag) ||
- visitNode(cbNode, node.template);
- case 161:
- return visitNode(cbNode, node.type) ||
- visitNode(cbNode, node.expression);
- case 162:
- return visitNode(cbNode, node.expression);
- case 165:
- return visitNode(cbNode, node.expression);
- case 166:
- return visitNode(cbNode, node.expression);
- case 167:
- return visitNode(cbNode, node.expression);
- case 168:
- return visitNode(cbNode, node.operand);
- case 173:
- return visitNode(cbNode, node.asteriskToken) ||
- visitNode(cbNode, node.expression);
- case 169:
- return visitNode(cbNode, node.operand);
- case 170:
- return visitNode(cbNode, node.left) ||
- visitNode(cbNode, node.operatorToken) ||
- visitNode(cbNode, node.right);
- case 171:
- return visitNode(cbNode, node.condition) ||
- visitNode(cbNode, node.questionToken) ||
- visitNode(cbNode, node.whenTrue) ||
- visitNode(cbNode, node.colonToken) ||
- visitNode(cbNode, node.whenFalse);
- case 174:
- return visitNode(cbNode, node.expression);
- case 180:
- case 207:
- return visitNodes(cbNodes, node.statements);
- case 228:
- return visitNodes(cbNodes, node.statements) ||
- visitNode(cbNode, node.endOfFileToken);
- case 181:
- return visitNodes(cbNodes, node.decorators) ||
- visitNodes(cbNodes, node.modifiers) ||
- visitNode(cbNode, node.declarationList);
- case 200:
- return visitNodes(cbNodes, node.declarations);
- case 183:
- return visitNode(cbNode, node.expression);
- case 184:
- return visitNode(cbNode, node.expression) ||
- visitNode(cbNode, node.thenStatement) ||
- visitNode(cbNode, node.elseStatement);
- case 185:
- return visitNode(cbNode, node.statement) ||
- visitNode(cbNode, node.expression);
- case 186:
- return visitNode(cbNode, node.expression) ||
- visitNode(cbNode, node.statement);
- case 187:
- return visitNode(cbNode, node.initializer) ||
- visitNode(cbNode, node.condition) ||
- visitNode(cbNode, node.incrementor) ||
- visitNode(cbNode, node.statement);
- case 188:
- return visitNode(cbNode, node.initializer) ||
- visitNode(cbNode, node.expression) ||
- visitNode(cbNode, node.statement);
- case 189:
- return visitNode(cbNode, node.initializer) ||
- visitNode(cbNode, node.expression) ||
- visitNode(cbNode, node.statement);
- case 190:
- case 191:
- return visitNode(cbNode, node.label);
- case 192:
- return visitNode(cbNode, node.expression);
- case 193:
- return visitNode(cbNode, node.expression) ||
- visitNode(cbNode, node.statement);
- case 194:
- return visitNode(cbNode, node.expression) ||
- visitNode(cbNode, node.caseBlock);
- case 208:
- return visitNodes(cbNodes, node.clauses);
- case 221:
- return visitNode(cbNode, node.expression) ||
- visitNodes(cbNodes, node.statements);
- case 222:
- return visitNodes(cbNodes, node.statements);
- case 195:
- return visitNode(cbNode, node.label) ||
- visitNode(cbNode, node.statement);
- case 196:
- return visitNode(cbNode, node.expression);
- case 197:
- return visitNode(cbNode, node.tryBlock) ||
- visitNode(cbNode, node.catchClause) ||
- visitNode(cbNode, node.finallyBlock);
- case 224:
- return visitNode(cbNode, node.variableDeclaration) ||
- visitNode(cbNode, node.block);
- case 131:
- return visitNode(cbNode, node.expression);
- case 202:
- case 175:
- 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 203:
- 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 204:
- return visitNodes(cbNodes, node.decorators) ||
- visitNodes(cbNodes, node.modifiers) ||
- visitNode(cbNode, node.name) ||
- visitNode(cbNode, node.type);
- case 205:
- return visitNodes(cbNodes, node.decorators) ||
- visitNodes(cbNodes, node.modifiers) ||
- visitNode(cbNode, node.name) ||
- visitNodes(cbNodes, node.members);
- case 227:
- return visitNode(cbNode, node.name) ||
- visitNode(cbNode, node.initializer);
- case 206:
- return visitNodes(cbNodes, node.decorators) ||
- visitNodes(cbNodes, node.modifiers) ||
- visitNode(cbNode, node.name) ||
- visitNode(cbNode, node.body);
- case 209:
- return visitNodes(cbNodes, node.decorators) ||
- visitNodes(cbNodes, node.modifiers) ||
- visitNode(cbNode, node.name) ||
- visitNode(cbNode, node.moduleReference);
- case 210:
- return visitNodes(cbNodes, node.decorators) ||
- visitNodes(cbNodes, node.modifiers) ||
- visitNode(cbNode, node.importClause) ||
- visitNode(cbNode, node.moduleSpecifier);
- case 211:
- return visitNode(cbNode, node.name) ||
- visitNode(cbNode, node.namedBindings);
- case 212:
- return visitNode(cbNode, node.name);
- case 213:
- case 217:
- return visitNodes(cbNodes, node.elements);
- case 216:
- return visitNodes(cbNodes, node.decorators) ||
- visitNodes(cbNodes, node.modifiers) ||
- visitNode(cbNode, node.exportClause) ||
- visitNode(cbNode, node.moduleSpecifier);
- case 214:
- case 218:
- return visitNode(cbNode, node.propertyName) ||
- visitNode(cbNode, node.name);
- case 215:
- return visitNodes(cbNodes, node.decorators) ||
- visitNodes(cbNodes, node.modifiers) ||
- visitNode(cbNode, node.expression);
- case 172:
- return visitNode(cbNode, node.head) || visitNodes(cbNodes, node.templateSpans);
- case 178:
- return visitNode(cbNode, node.expression) || visitNode(cbNode, node.literal);
- case 128:
- return visitNode(cbNode, node.expression);
- case 223:
- return visitNodes(cbNodes, node.types);
- case 177:
- return visitNode(cbNode, node.expression) ||
- visitNodes(cbNodes, node.typeArguments);
- case 220:
- return visitNode(cbNode, node.expression);
- case 219:
- return visitNodes(cbNodes, node.decorators);
- }
- }
- 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;
- var Parser;
- (function (Parser) {
- var scanner = ts.createScanner(2, true);
- var disallowInAndDecoratorContext = 2 | 16;
- var sourceFile;
- var syntaxCursor;
- var token;
- var sourceText;
- var nodeCount;
- var identifiers;
- var identifierCount;
- var parsingContext;
- var contextFlags = 0;
- var parseErrorBeforeNextFinishedNode = false;
- function parseSourceFile(fileName, _sourceText, languageVersion, _syntaxCursor, setParentNodes) {
- sourceText = _sourceText;
- syntaxCursor = _syntaxCursor;
- parsingContext = 0;
- identifiers = {};
- identifierCount = 0;
- nodeCount = 0;
- contextFlags = 0;
- parseErrorBeforeNextFinishedNode = false;
- createSourceFile(fileName, languageVersion);
- scanner.setText(sourceText);
- scanner.setOnError(scanError);
- scanner.setScriptTarget(languageVersion);
- token = nextToken();
- processReferenceComments(sourceFile);
- sourceFile.statements = parseList(0, true, parseSourceElement);
- ts.Debug.assert(token === 1);
- sourceFile.endOfFileToken = parseTokenNode();
- setExternalModuleIndicator(sourceFile);
- sourceFile.nodeCount = nodeCount;
- sourceFile.identifierCount = identifierCount;
- sourceFile.identifiers = identifiers;
- if (setParentNodes) {
- fixupParentReferences(sourceFile);
- }
- syntaxCursor = undefined;
- scanner.setText("");
- scanner.setOnError(undefined);
- var result = sourceFile;
- sourceFile = undefined;
- identifiers = undefined;
- syntaxCursor = undefined;
- sourceText = undefined;
- return result;
- }
- Parser.parseSourceFile = parseSourceFile;
- function fixupParentReferences(sourceFile) {
- // normally parent references are set during binding. However, for clients that only need
- // a syntax tree, and no semantic features, then the binding process is an unnecessary
- // overhead. This functions allows us to set all the parents, without all the expense of
- // binding.
- 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;
- }
- }
- }
- function createSourceFile(fileName, languageVersion) {
- sourceFile = createNode(228, 0);
- sourceFile.pos = 0;
- sourceFile.end = sourceText.length;
- sourceFile.text = sourceText;
- sourceFile.parseDiagnostics = [];
- sourceFile.bindDiagnostics = [];
- sourceFile.languageVersion = languageVersion;
- sourceFile.fileName = ts.normalizePath(fileName);
- sourceFile.flags = ts.fileExtensionIs(sourceFile.fileName, ".d.ts") ? 2048 : 0;
- }
- function setContextFlag(val, flag) {
- if (val) {
- contextFlags |= flag;
- }
- else {
- contextFlags &= ~flag;
- }
- }
- function setStrictModeContext(val) {
- setContextFlag(val, 1);
- }
- function setDisallowInContext(val) {
- setContextFlag(val, 2);
- }
- function setYieldContext(val) {
- setContextFlag(val, 4);
- }
- function setGeneratorParameterContext(val) {
- setContextFlag(val, 8);
- }
- function setDecoratorContext(val) {
- setContextFlag(val, 16);
- }
- function doOutsideOfContext(flags, func) {
- var currentContextFlags = contextFlags & flags;
- if (currentContextFlags) {
- setContextFlag(false, currentContextFlags);
- var result = func();
- setContextFlag(true, currentContextFlags);
- return result;
- }
- return func();
- }
- function allowInAnd(func) {
- if (contextFlags & 2) {
- setDisallowInContext(false);
- var result = func();
- setDisallowInContext(true);
- return result;
- }
- return func();
- }
- function disallowInAnd(func) {
- if (contextFlags & 2) {
- return func();
- }
- setDisallowInContext(true);
- var result = func();
- setDisallowInContext(false);
- return result;
- }
- function doInYieldContext(func) {
- if (contextFlags & 4) {
- return func();
- }
- setYieldContext(true);
- var result = func();
- setYieldContext(false);
- return result;
- }
- function doOutsideOfYieldContext(func) {
- if (contextFlags & 4) {
- setYieldContext(false);
- var result = func();
- setYieldContext(true);
- return result;
- }
- return func();
- }
- function doInDecoratorContext(func) {
- if (contextFlags & 16) {
- return func();
- }
- setDecoratorContext(true);
- var result = func();
- setDecoratorContext(false);
- return result;
- }
- function inYieldContext() {
- return (contextFlags & 4) !== 0;
- }
- function inStrictModeContext() {
- return (contextFlags & 1) !== 0;
- }
- function inGeneratorParameterContext() {
- return (contextFlags & 8) !== 0;
- }
- function inDisallowInContext() {
- return (contextFlags & 2) !== 0;
- }
- function inDecoratorContext() {
- return (contextFlags & 16) !== 0;
- }
- 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(sourceFile.parseDiagnostics);
- if (!lastError || start !== lastError.start) {
- sourceFile.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 speculationHelper(callback, isLookAhead) {
- var saveToken = token;
- var saveParseDiagnosticsLength = sourceFile.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;
- sourceFile.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 === 65) {
- return true;
- }
- if (token === 110 && inYieldContext()) {
- return false;
- }
- return token > 101;
- }
- function parseExpected(kind, diagnosticMessage) {
- if (token === kind) {
- 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 === 22) {
- return true;
- }
- return token === 15 || token === 1 || scanner.hasPrecedingLineBreak();
- }
- function parseSemicolon() {
- if (canParseSemicolon()) {
- if (token === 22) {
- nextToken();
- }
- return true;
- }
- else {
- return parseExpected(22);
- }
- }
- 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) {
- node.end = scanner.getStartPos();
- if (contextFlags) {
- node.parserContextFlags = contextFlags;
- }
- if (parseErrorBeforeNextFinishedNode) {
- parseErrorBeforeNextFinishedNode = false;
- node.parserContextFlags |= 32;
- }
- 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(65);
- if (token !== 65) {
- node.originalKeywordKind = token;
- }
- node.text = internIdentifier(scanner.getTokenValue());
- nextToken();
- return finishNode(node);
- }
- return createMissingNode(65, false, diagnosticMessage || ts.Diagnostics.Identifier_expected);
- }
- function parseIdentifier(diagnosticMessage) {
- return createIdentifier(isIdentifier(), diagnosticMessage);
- }
- function parseIdentifierName() {
- return createIdentifier(isIdentifierOrKeyword());
- }
- function isLiteralPropertyName() {
- return isIdentifierOrKeyword() ||
- token === 8 ||
- token === 7;
- }
- function parsePropertyName() {
- if (token === 8 || token === 7) {
- return parseLiteralNode(true);
- }
- if (token === 18) {
- return parseComputedPropertyName();
- }
- return parseIdentifierName();
- }
- function parseComputedPropertyName() {
- var node = createNode(128);
- parseExpected(18);
- var yieldContext = inYieldContext();
- if (inGeneratorParameterContext()) {
- setYieldContext(false);
- }
- node.expression = allowInAnd(parseExpression);
- if (inGeneratorParameterContext()) {
- setYieldContext(yieldContext);
- }
- parseExpected(19);
- return finishNode(node);
- }
- function parseContextualModifier(t) {
- return token === t && tryParse(nextTokenCanFollowModifier);
- }
- function nextTokenCanFollowModifier() {
- nextToken();
- return canFollowModifier();
- }
- function parseAnyContextualModifier() {
- return ts.isModifier(token) && tryParse(nextTokenCanFollowContextualModifier);
- }
- function nextTokenCanFollowContextualModifier() {
- if (token === 70) {
- return nextToken() === 77;
- }
- if (token === 78) {
- nextToken();
- if (token === 73) {
- return lookAhead(nextTokenIsClassOrFunction);
- }
- return token !== 35 && token !== 14 && canFollowModifier();
- }
- if (token === 73) {
- return nextTokenIsClassOrFunction();
- }
- nextToken();
- return canFollowModifier();
- }
- function canFollowModifier() {
- return token === 18
- || token === 14
- || token === 35
- || isLiteralPropertyName();
- }
- function nextTokenIsClassOrFunction() {
- nextToken();
- return token === 69 || token === 83;
- }
- function isListElement(parsingContext, inErrorRecovery) {
- var node = currentNode(parsingContext);
- if (node) {
- return true;
- }
- switch (parsingContext) {
- case 0:
- case 1:
- return isSourceElement(inErrorRecovery);
- case 2:
- case 4:
- return isStartOfStatement(inErrorRecovery);
- case 3:
- return token === 67 || token === 73;
- case 5:
- return isStartOfTypeMember();
- case 6:
- return lookAhead(isClassMemberStart) || (token === 22 && !inErrorRecovery);
- case 7:
- return token === 18 || isLiteralPropertyName();
- case 13:
- return token === 18 || token === 35 || isLiteralPropertyName();
- case 10:
- return isLiteralPropertyName();
- case 8:
- if (token === 14) {
- return lookAhead(isValidHeritageClauseObjectLiteral);
- }
- if (!inErrorRecovery) {
- return isStartOfLeftHandSideExpression() && !isHeritageClauseExtendsOrImplementsKeyword();
- }
- else {
- return isIdentifier() && !isHeritageClauseExtendsOrImplementsKeyword();
- }
- case 9:
- return isIdentifierOrPattern();
- case 11:
- return token === 23 || token === 21 || isIdentifierOrPattern();
- case 16:
- return isIdentifier();
- case 12:
- case 14:
- return token === 23 || token === 21 || isStartOfExpression();
- case 15:
- return isStartOfParameter();
- case 17:
- case 18:
- return token === 23 || isStartOfType();
- case 19:
- return isHeritageClause();
- case 20:
- return isIdentifierOrKeyword();
- }
- ts.Debug.fail("Non-exhaustive case in 'isListElement'.");
- }
- function isValidHeritageClauseObjectLiteral() {
- ts.Debug.assert(token === 14);
- if (nextToken() === 15) {
- var next = nextToken();
- return next === 23 || next === 14 || next === 79 || next === 102;
- }
- return true;
- }
- function nextTokenIsIdentifier() {
- nextToken();
- return isIdentifier();
- }
- function isHeritageClauseExtendsOrImplementsKeyword() {
- if (token === 102 ||
- token === 79) {
- 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 3:
- case 5:
- case 6:
- case 7:
- case 13:
- case 10:
- case 20:
- return token === 15;
- case 4:
- return token === 15 || token === 67 || token === 73;
- case 8:
- return token === 14 || token === 79 || token === 102;
- case 9:
- return isVariableDeclaratorListTerminator();
- case 16:
- return token === 25 || token === 16 || token === 14 || token === 79 || token === 102;
- case 12:
- return token === 17 || token === 22;
- case 14:
- case 18:
- case 11:
- return token === 19;
- case 15:
- return token === 17 || token === 19;
- case 17:
- return token === 25 || token === 16;
- case 19:
- return token === 14 || token === 15;
- }
- }
- function isVariableDeclaratorListTerminator() {
- if (canParseSemicolon()) {
- return true;
- }
- if (isInOrOfKeyword(token)) {
- return true;
- }
- if (token === 32) {
- return true;
- }
- return false;
- }
- function isInSomeParsingContext() {
- for (var kind = 0; kind < 21; kind++) {
- if (parsingContext & (1 << kind)) {
- if (isListElement(kind, true) || isListTerminator(kind)) {
- return true;
- }
- }
- }
- return false;
- }
- function parseList(kind, checkForStrictMode, parseElement) {
- var saveParsingContext = parsingContext;
- parsingContext |= 1 << kind;
- var result = [];
- result.pos = getNodePos();
- var savedStrictModeContext = inStrictModeContext();
- while (!isListTerminator(kind)) {
- if (isListElement(kind, false)) {
- var element = parseListElement(kind, parseElement);
- result.push(element);
- if (checkForStrictMode && !inStrictModeContext()) {
- if (ts.isPrologueDirective(element)) {
- if (isUseStrictPrologueDirective(sourceFile, element)) {
- setStrictModeContext(true);
- checkForStrictMode = false;
- }
- }
- else {
- checkForStrictMode = false;
- }
- }
- continue;
- }
- if (abortParsingListOrMoveToNextToken(kind)) {
- break;
- }
- }
- setStrictModeContext(savedStrictModeContext);
- result.end = getNodeEnd();
- parsingContext = saveParsingContext;
- return result;
- }
- function isUseStrictPrologueDirective(sourceFile, node) {
- ts.Debug.assert(ts.isPrologueDirective(node));
- var nodeText = ts.getSourceTextOfNodeFromSourceFile(sourceFile, node.expression);
- return nodeText === '"use strict"' || nodeText === "'use strict'";
- }
- 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 & 63;
- 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 1:
- return isReusableModuleElement(node);
- case 6:
- return isReusableClassMember(node);
- case 3:
- return isReusableSwitchClause(node);
- case 2:
- case 4:
- return isReusableStatement(node);
- case 7:
- return isReusableEnumMember(node);
- case 5:
- return isReusableTypeMember(node);
- case 9:
- return isReusableVariableDeclaration(node);
- case 15:
- return isReusableParameter(node);
- case 19:
- case 16:
- case 18:
- case 17:
- case 12:
- case 13:
- case 8:
- }
- return false;
- }
- function isReusableModuleElement(node) {
- if (node) {
- switch (node.kind) {
- case 210:
- case 209:
- case 216:
- case 215:
- case 202:
- case 203:
- case 206:
- case 205:
- return true;
- }
- return isReusableStatement(node);
- }
- return false;
- }
- function isReusableClassMember(node) {
- if (node) {
- switch (node.kind) {
- case 136:
- case 141:
- case 135:
- case 137:
- case 138:
- case 133:
- case 179:
- return true;
- }
- }
- return false;
- }
- function isReusableSwitchClause(node) {
- if (node) {
- switch (node.kind) {
- case 221:
- case 222:
- return true;
- }
- }
- return false;
- }
- function isReusableStatement(node) {
- if (node) {
- switch (node.kind) {
- case 201:
- case 181:
- case 180:
- case 184:
- case 183:
- case 196:
- case 192:
- case 194:
- case 191:
- case 190:
- case 188:
- case 189:
- case 187:
- case 186:
- case 193:
- case 182:
- case 197:
- case 195:
- case 185:
- case 198:
- return true;
- }
- }
- return false;
- }
- function isReusableEnumMember(node) {
- return node.kind === 227;
- }
- function isReusableTypeMember(node) {
- if (node) {
- switch (node.kind) {
- case 140:
- case 134:
- case 141:
- case 132:
- case 139:
- return true;
- }
- }
- return false;
- }
- function isReusableVariableDeclaration(node) {
- if (node.kind !== 199) {
- return false;
- }
- var variableDeclarator = node;
- return variableDeclarator.initializer === undefined;
- }
- function isReusableParameter(node) {
- if (node.kind !== 130) {
- 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.Statement_expected;
- case 3: return ts.Diagnostics.case_or_default_expected;
- case 4: return ts.Diagnostics.Statement_expected;
- case 5: return ts.Diagnostics.Property_or_signature_expected;
- case 6: return ts.Diagnostics.Unexpected_token_A_constructor_method_accessor_or_property_was_expected;
- case 7: return ts.Diagnostics.Enum_member_expected;
- case 8: return ts.Diagnostics.Expression_expected;
- case 9: return ts.Diagnostics.Variable_declaration_expected;
- case 10: return ts.Diagnostics.Property_destructuring_pattern_expected;
- case 11: return ts.Diagnostics.Array_element_destructuring_pattern_expected;
- case 12: return ts.Diagnostics.Argument_expression_expected;
- case 13: return ts.Diagnostics.Property_assignment_expected;
- case 14: return ts.Diagnostics.Expression_or_comma_expected;
- case 15: return ts.Diagnostics.Parameter_declaration_expected;
- case 16: return ts.Diagnostics.Type_parameter_declaration_expected;
- case 17: return ts.Diagnostics.Type_argument_expected;
- case 18: return ts.Diagnostics.Type_expected;
- case 19: return ts.Diagnostics.Unexpected_token_expected;
- case 20: return ts.Diagnostics.Identifier_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(23)) {
- continue;
- }
- commaStart = -1;
- if (isListTerminator(kind)) {
- break;
- }
- parseExpected(23);
- if (considerSemicolonAsDelimeter && token === 22 && !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(20)) {
- var node = createNode(127, entity.pos);
- node.left = entity;
- node.right = parseRightSideOfDot(allowReservedWords);
- entity = finishNode(node);
- }
- return entity;
- }
- function parseRightSideOfDot(allowIdentifierNames) {
- if (scanner.hasPrecedingLineBreak() && scanner.isReservedWord()) {
- var matchesPattern = lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine);
- if (matchesPattern) {
- return createMissingNode(65, true, ts.Diagnostics.Identifier_expected);
- }
- }
- return allowIdentifierNames ? parseIdentifierName() : parseIdentifier();
- }
- function parseTemplateExpression() {
- var template = createNode(172);
- template.head = parseLiteralNode();
- ts.Debug.assert(template.head.kind === 11, "Template head has wrong token kind");
- var templateSpans = [];
- templateSpans.pos = getNodePos();
- do {
- templateSpans.push(parseTemplateSpan());
- } while (ts.lastOrUndefined(templateSpans).literal.kind === 12);
- templateSpans.end = getNodeEnd();
- template.templateSpans = templateSpans;
- return finishNode(template);
- }
- function parseTemplateSpan() {
- var span = createNode(178);
- span.expression = allowInAnd(parseExpression);
- var literal;
- if (token === 15) {
- reScanTemplateToken();
- literal = parseLiteralNode();
- }
- else {
- literal = parseExpectedToken(13, false, ts.Diagnostics._0_expected, ts.tokenToString(15));
- }
- 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 === 7
- && sourceText.charCodeAt(tokenPos) === 48
- && ts.isOctalDigit(sourceText.charCodeAt(tokenPos + 1))) {
- node.flags |= 16384;
- }
- return node;
- }
- function parseTypeReference() {
- var node = createNode(142);
- node.typeName = parseEntityName(false, ts.Diagnostics.Type_expected);
- if (!scanner.hasPrecedingLineBreak() && token === 24) {
- node.typeArguments = parseBracketedList(17, parseType, 24, 25);
- }
- return finishNode(node);
- }
- function parseTypeQuery() {
- var node = createNode(145);
- parseExpected(97);
- node.exprName = parseEntityName(true);
- return finishNode(node);
- }
- function parseTypeParameter() {
- var node = createNode(129);
- node.name = parseIdentifier();
- if (parseOptional(79)) {
- if (isStartOfType() || !isStartOfExpression()) {
- node.constraint = parseType();
- }
- else {
- node.expression = parseUnaryExpressionOrHigher();
- }
- }
- return finishNode(node);
- }
- function parseTypeParameters() {
- if (token === 24) {
- return parseBracketedList(16, parseTypeParameter, 24, 25);
- }
- }
- function parseParameterType() {
- if (parseOptional(51)) {
- return token === 8
- ? parseLiteralNode(true)
- : parseType();
- }
- return undefined;
- }
- function isStartOfParameter() {
- return token === 21 || isIdentifierOrPattern() || ts.isModifier(token) || token === 52;
- }
- function setModifiers(node, modifiers) {
- if (modifiers) {
- node.flags |= modifiers.flags;
- node.modifiers = modifiers;
- }
- }
- function parseParameter() {
- var node = createNode(130);
- node.decorators = parseDecorators();
- setModifiers(node, parseModifiers());
- node.dotDotDotToken = parseOptionalToken(21);
- node.name = inGeneratorParameterContext() ? doInYieldContext(parseIdentifierOrPattern) : parseIdentifierOrPattern();
- if (ts.getFullWidth(node.name) === 0 && node.flags === 0 && ts.isModifier(token)) {
- nextToken();
- }
- node.questionToken = parseOptionalToken(50);
- node.type = parseParameterType();
- node.initializer = inGeneratorParameterContext() ? doOutsideOfYieldContext(parseParameterInitializer) : parseParameterInitializer();
- return finishNode(node);
- }
- function parseParameterInitializer() {
- return parseInitializer(true);
- }
- function fillSignature(returnToken, yieldAndGeneratorParameterContext, requireCompleteParameterList, signature) {
- var returnTokenRequired = returnToken === 32;
- signature.typeParameters = parseTypeParameters();
- signature.parameters = parseParameterList(yieldAndGeneratorParameterContext, requireCompleteParameterList);
- if (returnTokenRequired) {
- parseExpected(returnToken);
- signature.type = parseType();
- }
- else if (parseOptional(returnToken)) {
- signature.type = parseType();
- }
- }
- function parseParameterList(yieldAndGeneratorParameterContext, requireCompleteParameterList) {
- if (parseExpected(16)) {
- var savedYieldContext = inYieldContext();
- var savedGeneratorParameterContext = inGeneratorParameterContext();
- setYieldContext(yieldAndGeneratorParameterContext);
- setGeneratorParameterContext(yieldAndGeneratorParameterContext);
- var result = parseDelimitedList(15, parseParameter);
- setYieldContext(savedYieldContext);
- setGeneratorParameterContext(savedGeneratorParameterContext);
- if (!parseExpected(17) && requireCompleteParameterList) {
- return undefined;
- }
- return result;
- }
- return requireCompleteParameterList ? undefined : createMissingList();
- }
- function parseTypeMemberSemicolon() {
- if (parseOptional(23)) {
- return;
- }
- parseSemicolon();
- }
- function parseSignatureMember(kind) {
- var node = createNode(kind);
- if (kind === 140) {
- parseExpected(88);
- }
- fillSignature(51, false, false, node);
- parseTypeMemberSemicolon();
- return finishNode(node);
- }
- function isIndexSignature() {
- if (token !== 18) {
- return false;
- }
- return lookAhead(isUnambiguouslyIndexSignature);
- }
- function isUnambiguouslyIndexSignature() {
- nextToken();
- if (token === 21 || token === 19) {
- return true;
- }
- if (ts.isModifier(token)) {
- nextToken();
- if (isIdentifier()) {
- return true;
- }
- }
- else if (!isIdentifier()) {
- return false;
- }
- else {
- nextToken();
- }
- if (token === 51 || token === 23) {
- return true;
- }
- if (token !== 50) {
- return false;
- }
- nextToken();
- return token === 51 || token === 23 || token === 19;
- }
- function parseIndexSignatureDeclaration(fullStart, decorators, modifiers) {
- var node = createNode(141, fullStart);
- node.decorators = decorators;
- setModifiers(node, modifiers);
- node.parameters = parseBracketedList(15, parseParameter, 18, 19);
- node.type = parseTypeAnnotation();
- parseTypeMemberSemicolon();
- return finishNode(node);
- }
- function parsePropertyOrMethodSignature() {
- var fullStart = scanner.getStartPos();
- var name = parsePropertyName();
- var questionToken = parseOptionalToken(50);
- if (token === 16 || token === 24) {
- var method = createNode(134, fullStart);
- method.name = name;
- method.questionToken = questionToken;
- fillSignature(51, false, false, method);
- parseTypeMemberSemicolon();
- return finishNode(method);
- }
- else {
- var property = createNode(132, fullStart);
- property.name = name;
- property.questionToken = questionToken;
- property.type = parseTypeAnnotation();
- parseTypeMemberSemicolon();
- return finishNode(property);
- }
- }
- function isStartOfTypeMember() {
- switch (token) {
- case 16:
- case 24:
- case 18:
- 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 === 16 ||
- token === 24 ||
- token === 50 ||
- token === 51 ||
- canParseSemicolon();
- }
- function parseTypeMember() {
- switch (token) {
- case 16:
- case 24:
- return parseSignatureMember(139);
- case 18:
- return isIndexSignature()
- ? parseIndexSignatureDeclaration(scanner.getStartPos(), undefined, undefined)
- : parsePropertyOrMethodSignature();
- case 88:
- if (lookAhead(isStartOfConstructSignature)) {
- return parseSignatureMember(140);
- }
- case 8:
- case 7:
- return parsePropertyOrMethodSignature();
- default:
- if (ts.isModifier(token)) {
- var result = tryParse(parseIndexSignatureWithModifiers);
- if (result) {
- return result;
- }
- }
- if (isIdentifierOrKeyword()) {
- 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 === 16 || token === 24;
- }
- function parseTypeLiteral() {
- var node = createNode(146);
- node.members = parseObjectTypeMembers();
- return finishNode(node);
- }
- function parseObjectTypeMembers() {
- var members;
- if (parseExpected(14)) {
- members = parseList(5, false, parseTypeMember);
- parseExpected(15);
- }
- else {
- members = createMissingList();
- }
- return members;
- }
- function parseTupleType() {
- var node = createNode(148);
- node.elementTypes = parseBracketedList(18, parseType, 18, 19);
- return finishNode(node);
- }
- function parseParenthesizedType() {
- var node = createNode(150);
- parseExpected(16);
- node.type = parseType();
- parseExpected(17);
- return finishNode(node);
- }
- function parseFunctionOrConstructorType(kind) {
- var node = createNode(kind);
- if (kind === 144) {
- parseExpected(88);
- }
- fillSignature(32, false, false, node);
- return finishNode(node);
- }
- function parseKeywordAndNoDot() {
- var node = parseTokenNode();
- return token === 20 ? undefined : node;
- }
- function parseNonArrayType() {
- switch (token) {
- case 112:
- case 122:
- case 120:
- case 113:
- case 123:
- var node = tryParse(parseKeywordAndNoDot);
- return node || parseTypeReference();
- case 99:
- return parseTokenNode();
- case 97:
- return parseTypeQuery();
- case 14:
- return parseTypeLiteral();
- case 18:
- return parseTupleType();
- case 16:
- return parseParenthesizedType();
- default:
- return parseTypeReference();
- }
- }
- function isStartOfType() {
- switch (token) {
- case 112:
- case 122:
- case 120:
- case 113:
- case 123:
- case 99:
- case 97:
- case 14:
- case 18:
- case 24:
- case 88:
- return true;
- case 16:
- return lookAhead(isStartOfParenthesizedOrFunctionType);
- default:
- return isIdentifier();
- }
- }
- function isStartOfParenthesizedOrFunctionType() {
- nextToken();
- return token === 17 || isStartOfParameter() || isStartOfType();
- }
- function parseArrayTypeOrHigher() {
- var type = parseNonArrayType();
- while (!scanner.hasPrecedingLineBreak() && parseOptional(18)) {
- parseExpected(19);
- var node = createNode(147, type.pos);
- node.elementType = type;
- type = finishNode(node);
- }
- return type;
- }
- function parseUnionTypeOrHigher() {
- var type = parseArrayTypeOrHigher();
- if (token === 44) {
- var types = [type];
- types.pos = type.pos;
- while (parseOptional(44)) {
- types.push(parseArrayTypeOrHigher());
- }
- types.end = getNodeEnd();
- var node = createNode(149, type.pos);
- node.types = types;
- type = finishNode(node);
- }
- return type;
- }
- function isStartOfFunctionType() {
- if (token === 24) {
- return true;
- }
- return token === 16 && lookAhead(isUnambiguouslyStartOfFunctionType);
- }
- function isUnambiguouslyStartOfFunctionType() {
- nextToken();
- if (token === 17 || token === 21) {
- return true;
- }
- if (isIdentifier() || ts.isModifier(token)) {
- nextToken();
- if (token === 51 || token === 23 ||
- token === 50 || token === 53 ||
- isIdentifier() || ts.isModifier(token)) {
- return true;
- }
- if (token === 17) {
- nextToken();
- if (token === 32) {
- return true;
- }
- }
- }
- return false;
- }
- function parseType() {
- var savedYieldContext = inYieldContext();
- var savedGeneratorParameterContext = inGeneratorParameterContext();
- setYieldContext(false);
- setGeneratorParameterContext(false);
- var result = parseTypeWorker();
- setYieldContext(savedYieldContext);
- setGeneratorParameterContext(savedGeneratorParameterContext);
- return result;
- }
- function parseTypeWorker() {
- if (isStartOfFunctionType()) {
- return parseFunctionOrConstructorType(143);
- }
- if (token === 88) {
- return parseFunctionOrConstructorType(144);
- }
- return parseUnionTypeOrHigher();
- }
- function parseTypeAnnotation() {
- return parseOptional(51) ? parseType() : undefined;
- }
- function isStartOfLeftHandSideExpression() {
- switch (token) {
- case 93:
- case 91:
- case 89:
- case 95:
- case 80:
- case 7:
- case 8:
- case 10:
- case 11:
- case 16:
- case 18:
- case 14:
- case 83:
- case 69:
- case 88:
- case 36:
- case 57:
- case 65:
- return true;
- default:
- return isIdentifier();
- }
- }
- function isStartOfExpression() {
- if (isStartOfLeftHandSideExpression()) {
- return true;
- }
- switch (token) {
- case 33:
- case 34:
- case 47:
- case 46:
- case 74:
- case 97:
- case 99:
- case 38:
- case 39:
- case 24:
- case 110:
- return true;
- default:
- if (isBinaryOperator()) {
- return true;
- }
- return isIdentifier();
- }
- }
- function isStartOfExpressionStatement() {
- return token !== 14 &&
- token !== 83 &&
- token !== 69 &&
- token !== 52 &&
- isStartOfExpression();
- }
- function parseExpression() {
- // Expression[in]:
- // AssignmentExpression[in]
- // Expression[in] , AssignmentExpression[in]
- var saveDecoratorContext = inDecoratorContext();
- if (saveDecoratorContext) {
- setDecoratorContext(false);
- }
- var expr = parseAssignmentExpressionOrHigher();
- var operatorToken;
- while ((operatorToken = parseOptionalToken(23))) {
- expr = makeBinaryExpression(expr, operatorToken, parseAssignmentExpressionOrHigher());
- }
- if (saveDecoratorContext) {
- setDecoratorContext(true);
- }
- return expr;
- }
- function parseInitializer(inParameter) {
- if (token !== 53) {
- if (scanner.hasPrecedingLineBreak() || (inParameter && token === 14) || !isStartOfExpression()) {
- return undefined;
- }
- }
- parseExpected(53);
- return parseAssignmentExpressionOrHigher();
- }
- function parseAssignmentExpressionOrHigher() {
- // AssignmentExpression[in,yield]:
- // 1) ConditionalExpression[?in,?yield]
- // 2) LeftHandSideExpression = AssignmentExpression[?in,?yield]
- // 3) LeftHandSideExpression AssignmentOperator AssignmentExpression[?in,?yield]
- // 4) ArrowFunctionExpression[?in,?yield]
- // 5) [+Yield] YieldExpression[?In]
- //
- // Note: for ease of implementation we treat productions '2' and '3' as the same thing.
- // (i.e. they're both BinaryExpressions with an assignment operator in it).
- if (isYieldExpression()) {
- return parseYieldExpression();
- }
- var arrowExpression = tryParseParenthesizedArrowFunctionExpression();
- if (arrowExpression) {
- return arrowExpression;
- }
- var expr = parseBinaryExpressionOrHigher(0);
- if (expr.kind === 65 && token === 32) {
- return parseSimpleArrowFunctionExpression(expr);
- }
- if (ts.isLeftHandSideExpression(expr) && ts.isAssignmentOperator(reScanGreaterToken())) {
- return makeBinaryExpression(expr, parseTokenNode(), parseAssignmentExpressionOrHigher());
- }
- return parseConditionalExpressionRest(expr);
- }
- function isYieldExpression() {
- if (token === 110) {
- if (inYieldContext()) {
- return true;
- }
- if (inStrictModeContext()) {
- return true;
- }
- return lookAhead(nextTokenIsIdentifierOnSameLine);
- }
- return false;
- }
- function nextTokenIsIdentifierOnSameLine() {
- nextToken();
- return !scanner.hasPrecedingLineBreak() && isIdentifier();
- }
- function nextTokenIsIdentifierOrStartOfDestructuringOnTheSameLine() {
- nextToken();
- return !scanner.hasPrecedingLineBreak() &&
- (isIdentifier() || token === 14 || token === 18);
- }
- function parseYieldExpression() {
- var node = createNode(173);
- nextToken();
- if (!scanner.hasPrecedingLineBreak() &&
- (token === 35 || isStartOfExpression())) {
- node.asteriskToken = parseOptionalToken(35);
- node.expression = parseAssignmentExpressionOrHigher();
- return finishNode(node);
- }
- else {
- return finishNode(node);
- }
- }
- function parseSimpleArrowFunctionExpression(identifier) {
- ts.Debug.assert(token === 32, "parseSimpleArrowFunctionExpression should only have been called if we had a =>");
- var node = createNode(164, identifier.pos);
- var parameter = createNode(130, identifier.pos);
- parameter.name = identifier;
- finishNode(parameter);
- node.parameters = [parameter];
- node.parameters.pos = parameter.pos;
- node.parameters.end = parameter.end;
- node.equalsGreaterThanToken = parseExpectedToken(32, false, ts.Diagnostics._0_expected, "=>");
- node.body = parseArrowFunctionExpressionBody();
- 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 lastToken = token;
- arrowFunction.equalsGreaterThanToken = parseExpectedToken(32, false, ts.Diagnostics._0_expected, "=>");
- arrowFunction.body = (lastToken === 32 || lastToken === 14)
- ? parseArrowFunctionExpressionBody()
- : parseIdentifier();
- return finishNode(arrowFunction);
- }
- function isParenthesizedArrowFunctionExpression() {
- if (token === 16 || token === 24) {
- return lookAhead(isParenthesizedArrowFunctionExpressionWorker);
- }
- if (token === 32) {
- return 1;
- }
- return 0;
- }
- function isParenthesizedArrowFunctionExpressionWorker() {
- var first = token;
- var second = nextToken();
- if (first === 16) {
- if (second === 17) {
- var third = nextToken();
- switch (third) {
- case 32:
- case 51:
- case 14:
- return 1;
- default:
- return 0;
- }
- }
- if (second === 18 || second === 14) {
- return 2;
- }
- if (second === 21) {
- return 1;
- }
- if (!isIdentifier()) {
- return 0;
- }
- if (nextToken() === 51) {
- return 1;
- }
- return 2;
- }
- else {
- ts.Debug.assert(first === 24);
- if (!isIdentifier()) {
- return 0;
- }
- return 2;
- }
- }
- function parsePossibleParenthesizedArrowFunctionExpressionHead() {
- return parseParenthesizedArrowFunctionExpressionHead(false);
- }
- function parseParenthesizedArrowFunctionExpressionHead(allowAmbiguity) {
- var node = createNode(164);
- fillSignature(51, false, !allowAmbiguity, node);
- if (!node.parameters) {
- return undefined;
- }
- if (!allowAmbiguity && token !== 32 && token !== 14) {
- return undefined;
- }
- return node;
- }
- function parseArrowFunctionExpressionBody() {
- if (token === 14) {
- return parseFunctionBlock(false, false);
- }
- if (isStartOfStatement(true) &&
- !isStartOfExpressionStatement() &&
- token !== 83 &&
- token !== 69) {
- return parseFunctionBlock(false, true);
- }
- return parseAssignmentExpressionOrHigher();
- }
- function parseConditionalExpressionRest(leftOperand) {
- var questionToken = parseOptionalToken(50);
- if (!questionToken) {
- return leftOperand;
- }
- var node = createNode(171, leftOperand.pos);
- node.condition = leftOperand;
- node.questionToken = questionToken;
- node.whenTrue = doOutsideOfContext(disallowInAndDecoratorContext, parseAssignmentExpressionOrHigher);
- node.colonToken = parseExpectedToken(51, false, ts.Diagnostics._0_expected, ts.tokenToString(51));
- node.whenFalse = parseAssignmentExpressionOrHigher();
- return finishNode(node);
- }
- function parseBinaryExpressionOrHigher(precedence) {
- var leftOperand = parseUnaryExpressionOrHigher();
- return parseBinaryExpressionRest(precedence, leftOperand);
- }
- function isInOrOfKeyword(t) {
- return t === 86 || t === 126;
- }
- function parseBinaryExpressionRest(precedence, leftOperand) {
- while (true) {
- reScanGreaterToken();
- var newPrecedence = getBinaryOperatorPrecedence();
- if (newPrecedence <= precedence) {
- break;
- }
- if (token === 86 && inDisallowInContext()) {
- break;
- }
- leftOperand = makeBinaryExpression(leftOperand, parseTokenNode(), parseBinaryExpressionOrHigher(newPrecedence));
- }
- return leftOperand;
- }
- function isBinaryOperator() {
- if (inDisallowInContext() && token === 86) {
- return false;
- }
- return getBinaryOperatorPrecedence() > 0;
- }
- function getBinaryOperatorPrecedence() {
- switch (token) {
- case 49:
- return 1;
- case 48:
- return 2;
- case 44:
- return 3;
- case 45:
- return 4;
- case 43:
- return 5;
- case 28:
- case 29:
- case 30:
- case 31:
- return 6;
- case 24:
- case 25:
- case 26:
- case 27:
- case 87:
- case 86:
- return 7;
- case 40:
- case 41:
- case 42:
- return 8;
- case 33:
- case 34:
- return 9;
- case 35:
- case 36:
- case 37:
- return 10;
- }
- return -1;
- }
- function makeBinaryExpression(left, operatorToken, right) {
- var node = createNode(170, left.pos);
- node.left = left;
- node.operatorToken = operatorToken;
- node.right = right;
- return finishNode(node);
- }
- function parsePrefixUnaryExpression() {
- var node = createNode(168);
- node.operator = token;
- nextToken();
- node.operand = parseUnaryExpressionOrHigher();
- return finishNode(node);
- }
- function parseDeleteExpression() {
- var node = createNode(165);
- nextToken();
- node.expression = parseUnaryExpressionOrHigher();
- return finishNode(node);
- }
- function parseTypeOfExpression() {
- var node = createNode(166);
- nextToken();
- node.expression = parseUnaryExpressionOrHigher();
- return finishNode(node);
- }
- function parseVoidExpression() {
- var node = createNode(167);
- nextToken();
- node.expression = parseUnaryExpressionOrHigher();
- return finishNode(node);
- }
- function parseUnaryExpressionOrHigher() {
- switch (token) {
- case 33:
- case 34:
- case 47:
- case 46:
- case 38:
- case 39:
- return parsePrefixUnaryExpression();
- case 74:
- return parseDeleteExpression();
- case 97:
- return parseTypeOfExpression();
- case 99:
- return parseVoidExpression();
- case 24:
- return parseTypeAssertion();
- default:
- return parsePostfixExpressionOrHigher();
- }
- }
- function parsePostfixExpressionOrHigher() {
- var expression = parseLeftHandSideExpressionOrHigher();
- ts.Debug.assert(ts.isLeftHandSideExpression(expression));
- if ((token === 38 || token === 39) && !scanner.hasPrecedingLineBreak()) {
- var node = createNode(169, expression.pos);
- node.operand = expression;
- node.operator = token;
- nextToken();
- return finishNode(node);
- }
- return expression;
- }
- function parseLeftHandSideExpressionOrHigher() {
- var expression = token === 91
- ? parseSuperExpression()
- : parseMemberExpressionOrHigher();
- return parseCallExpressionRest(expression);
- }
- function parseMemberExpressionOrHigher() {
- var expression = parsePrimaryExpression();
- return parseMemberExpressionRest(expression);
- }
- function parseSuperExpression() {
- var expression = parseTokenNode();
- if (token === 16 || token === 20) {
- return expression;
- }
- var node = createNode(156, expression.pos);
- node.expression = expression;
- node.dotToken = parseExpectedToken(20, false, ts.Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access);
- node.name = parseRightSideOfDot(true);
- return finishNode(node);
- }
- function parseTypeAssertion() {
- var node = createNode(161);
- parseExpected(24);
- node.type = parseType();
- parseExpected(25);
- node.expression = parseUnaryExpressionOrHigher();
- return finishNode(node);
- }
- function parseMemberExpressionRest(expression) {
- while (true) {
- var dotToken = parseOptionalToken(20);
- if (dotToken) {
- var propertyAccess = createNode(156, expression.pos);
- propertyAccess.expression = expression;
- propertyAccess.dotToken = dotToken;
- propertyAccess.name = parseRightSideOfDot(true);
- expression = finishNode(propertyAccess);
- continue;
- }
- if (!inDecoratorContext() && parseOptional(18)) {
- var indexedAccess = createNode(157, expression.pos);
- indexedAccess.expression = expression;
- if (token !== 19) {
- indexedAccess.argumentExpression = allowInAnd(parseExpression);
- if (indexedAccess.argumentExpression.kind === 8 || indexedAccess.argumentExpression.kind === 7) {
- var literal = indexedAccess.argumentExpression;
- literal.text = internIdentifier(literal.text);
- }
- }
- parseExpected(19);
- expression = finishNode(indexedAccess);
- continue;
- }
- if (token === 10 || token === 11) {
- var tagExpression = createNode(160, expression.pos);
- tagExpression.tag = expression;
- tagExpression.template = token === 10
- ? parseLiteralNode()
- : parseTemplateExpression();
- expression = finishNode(tagExpression);
- continue;
- }
- return expression;
- }
- }
- function parseCallExpressionRest(expression) {
- while (true) {
- expression = parseMemberExpressionRest(expression);
- if (token === 24) {
- var typeArguments = tryParse(parseTypeArgumentsInExpression);
- if (!typeArguments) {
- return expression;
- }
- var callExpr = createNode(158, expression.pos);
- callExpr.expression = expression;
- callExpr.typeArguments = typeArguments;
- callExpr.arguments = parseArgumentList();
- expression = finishNode(callExpr);
- continue;
- }
- else if (token === 16) {
- var callExpr = createNode(158, expression.pos);
- callExpr.expression = expression;
- callExpr.arguments = parseArgumentList();
- expression = finishNode(callExpr);
- continue;
- }
- return expression;
- }
- }
- function parseArgumentList() {
- parseExpected(16);
- var result = parseDelimitedList(12, parseArgumentExpression);
- parseExpected(17);
- return result;
- }
- function parseTypeArgumentsInExpression() {
- if (!parseOptional(24)) {
- return undefined;
- }
- var typeArguments = parseDelimitedList(17, parseType);
- if (!parseExpected(25)) {
- return undefined;
- }
- return typeArguments && canFollowTypeArgumentsInExpression()
- ? typeArguments
- : undefined;
- }
- function canFollowTypeArgumentsInExpression() {
- switch (token) {
- case 16:
- case 20:
- case 17:
- case 19:
- case 51:
- case 22:
- case 50:
- case 28:
- case 30:
- case 29:
- case 31:
- case 48:
- case 49:
- case 45:
- case 43:
- case 44:
- case 15:
- case 1:
- return true;
- case 23:
- case 14:
- default:
- return false;
- }
- }
- function parsePrimaryExpression() {
- switch (token) {
- case 7:
- case 8:
- case 10:
- return parseLiteralNode();
- case 93:
- case 91:
- case 89:
- case 95:
- case 80:
- return parseTokenNode();
- case 16:
- return parseParenthesizedExpression();
- case 18:
- return parseArrayLiteralExpression();
- case 14:
- return parseObjectLiteralExpression();
- case 69:
- return parseClassExpression();
- case 83:
- return parseFunctionExpression();
- case 88:
- return parseNewExpression();
- case 36:
- case 57:
- if (reScanSlashToken() === 9) {
- return parseLiteralNode();
- }
- break;
- case 11:
- return parseTemplateExpression();
- }
- return parseIdentifier(ts.Diagnostics.Expression_expected);
- }
- function parseParenthesizedExpression() {
- var node = createNode(162);
- parseExpected(16);
- node.expression = allowInAnd(parseExpression);
- parseExpected(17);
- return finishNode(node);
- }
- function parseSpreadElement() {
- var node = createNode(174);
- parseExpected(21);
- node.expression = parseAssignmentExpressionOrHigher();
- return finishNode(node);
- }
- function parseArgumentOrArrayLiteralElement() {
- return token === 21 ? parseSpreadElement() :
- token === 23 ? createNode(176) :
- parseAssignmentExpressionOrHigher();
- }
- function parseArgumentExpression() {
- return doOutsideOfContext(disallowInAndDecoratorContext, parseArgumentOrArrayLiteralElement);
- }
- function parseArrayLiteralExpression() {
- var node = createNode(154);
- parseExpected(18);
- if (scanner.hasPrecedingLineBreak())
- node.flags |= 512;
- node.elements = parseDelimitedList(14, parseArgumentOrArrayLiteralElement);
- parseExpected(19);
- return finishNode(node);
- }
- function tryParseAccessorDeclaration(fullStart, decorators, modifiers) {
- if (parseContextualModifier(116)) {
- return parseAccessorDeclaration(137, fullStart, decorators, modifiers);
- }
- else if (parseContextualModifier(121)) {
- return parseAccessorDeclaration(138, 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(35);
- var tokenIsIdentifier = isIdentifier();
- var nameToken = token;
- var propertyName = parsePropertyName();
- var questionToken = parseOptionalToken(50);
- if (asteriskToken || token === 16 || token === 24) {
- return parseMethodDeclaration(fullStart, decorators, modifiers, asteriskToken, propertyName, questionToken);
- }
- if ((token === 23 || token === 15) && tokenIsIdentifier) {
- var shorthandDeclaration = createNode(226, fullStart);
- shorthandDeclaration.name = propertyName;
- shorthandDeclaration.questionToken = questionToken;
- return finishNode(shorthandDeclaration);
- }
- else {
- var propertyAssignment = createNode(225, fullStart);
- propertyAssignment.name = propertyName;
- propertyAssignment.questionToken = questionToken;
- parseExpected(51);
- propertyAssignment.initializer = allowInAnd(parseAssignmentExpressionOrHigher);
- return finishNode(propertyAssignment);
- }
- }
- function parseObjectLiteralExpression() {
- var node = createNode(155);
- parseExpected(14);
- if (scanner.hasPrecedingLineBreak()) {
- node.flags |= 512;
- }
- node.properties = parseDelimitedList(13, parseObjectLiteralElement, true);
- parseExpected(15);
- return finishNode(node);
- }
- function parseFunctionExpression() {
- var saveDecoratorContext = inDecoratorContext();
- if (saveDecoratorContext) {
- setDecoratorContext(false);
- }
- var node = createNode(163);
- parseExpected(83);
- node.asteriskToken = parseOptionalToken(35);
- node.name = node.asteriskToken ? doInYieldContext(parseOptionalIdentifier) : parseOptionalIdentifier();
- fillSignature(51, !!node.asteriskToken, false, node);
- node.body = parseFunctionBlock(!!node.asteriskToken, false);
- if (saveDecoratorContext) {
- setDecoratorContext(true);
- }
- return finishNode(node);
- }
- function parseOptionalIdentifier() {
- return isIdentifier() ? parseIdentifier() : undefined;
- }
- function parseNewExpression() {
- var node = createNode(159);
- parseExpected(88);
- node.expression = parseMemberExpressionOrHigher();
- node.typeArguments = tryParse(parseTypeArgumentsInExpression);
- if (node.typeArguments || token === 16) {
- node.arguments = parseArgumentList();
- }
- return finishNode(node);
- }
- function parseBlock(ignoreMissingOpenBrace, checkForStrictMode, diagnosticMessage) {
- var node = createNode(180);
- if (parseExpected(14, diagnosticMessage) || ignoreMissingOpenBrace) {
- node.statements = parseList(2, checkForStrictMode, parseStatement);
- parseExpected(15);
- }
- else {
- node.statements = createMissingList();
- }
- return finishNode(node);
- }
- function parseFunctionBlock(allowYield, ignoreMissingOpenBrace, diagnosticMessage) {
- var savedYieldContext = inYieldContext();
- setYieldContext(allowYield);
- var saveDecoratorContext = inDecoratorContext();
- if (saveDecoratorContext) {
- setDecoratorContext(false);
- }
- var block = parseBlock(ignoreMissingOpenBrace, true, diagnosticMessage);
- if (saveDecoratorContext) {
- setDecoratorContext(true);
- }
- setYieldContext(savedYieldContext);
- return block;
- }
- function parseEmptyStatement() {
- var node = createNode(182);
- parseExpected(22);
- return finishNode(node);
- }
- function parseIfStatement() {
- var node = createNode(184);
- parseExpected(84);
- parseExpected(16);
- node.expression = allowInAnd(parseExpression);
- parseExpected(17);
- node.thenStatement = parseStatement();
- node.elseStatement = parseOptional(76) ? parseStatement() : undefined;
- return finishNode(node);
- }
- function parseDoStatement() {
- var node = createNode(185);
- parseExpected(75);
- node.statement = parseStatement();
- parseExpected(100);
- parseExpected(16);
- node.expression = allowInAnd(parseExpression);
- parseExpected(17);
- parseOptional(22);
- return finishNode(node);
- }
- function parseWhileStatement() {
- var node = createNode(186);
- parseExpected(100);
- parseExpected(16);
- node.expression = allowInAnd(parseExpression);
- parseExpected(17);
- node.statement = parseStatement();
- return finishNode(node);
- }
- function parseForOrForInOrForOfStatement() {
- var pos = getNodePos();
- parseExpected(82);
- parseExpected(16);
- var initializer = undefined;
- if (token !== 22) {
- if (token === 98 || token === 104 || token === 70) {
- initializer = parseVariableDeclarationList(true);
- }
- else {
- initializer = disallowInAnd(parseExpression);
- }
- }
- var forOrForInOrForOfStatement;
- if (parseOptional(86)) {
- var forInStatement = createNode(188, pos);
- forInStatement.initializer = initializer;
- forInStatement.expression = allowInAnd(parseExpression);
- parseExpected(17);
- forOrForInOrForOfStatement = forInStatement;
- }
- else if (parseOptional(126)) {
- var forOfStatement = createNode(189, pos);
- forOfStatement.initializer = initializer;
- forOfStatement.expression = allowInAnd(parseAssignmentExpressionOrHigher);
- parseExpected(17);
- forOrForInOrForOfStatement = forOfStatement;
- }
- else {
- var forStatement = createNode(187, pos);
- forStatement.initializer = initializer;
- parseExpected(22);
- if (token !== 22 && token !== 17) {
- forStatement.condition = allowInAnd(parseExpression);
- }
- parseExpected(22);
- if (token !== 17) {
- forStatement.incrementor = allowInAnd(parseExpression);
- }
- parseExpected(17);
- forOrForInOrForOfStatement = forStatement;
- }
- forOrForInOrForOfStatement.statement = parseStatement();
- return finishNode(forOrForInOrForOfStatement);
- }
- function parseBreakOrContinueStatement(kind) {
- var node = createNode(kind);
- parseExpected(kind === 191 ? 66 : 71);
- if (!canParseSemicolon()) {
- node.label = parseIdentifier();
- }
- parseSemicolon();
- return finishNode(node);
- }
- function parseReturnStatement() {
- var node = createNode(192);
- parseExpected(90);
- if (!canParseSemicolon()) {
- node.expression = allowInAnd(parseExpression);
- }
- parseSemicolon();
- return finishNode(node);
- }
- function parseWithStatement() {
- var node = createNode(193);
- parseExpected(101);
- parseExpected(16);
- node.expression = allowInAnd(parseExpression);
- parseExpected(17);
- node.statement = parseStatement();
- return finishNode(node);
- }
- function parseCaseClause() {
- var node = createNode(221);
- parseExpected(67);
- node.expression = allowInAnd(parseExpression);
- parseExpected(51);
- node.statements = parseList(4, false, parseStatement);
- return finishNode(node);
- }
- function parseDefaultClause() {
- var node = createNode(222);
- parseExpected(73);
- parseExpected(51);
- node.statements = parseList(4, false, parseStatement);
- return finishNode(node);
- }
- function parseCaseOrDefaultClause() {
- return token === 67 ? parseCaseClause() : parseDefaultClause();
- }
- function parseSwitchStatement() {
- var node = createNode(194);
- parseExpected(92);
- parseExpected(16);
- node.expression = allowInAnd(parseExpression);
- parseExpected(17);
- var caseBlock = createNode(208, scanner.getStartPos());
- parseExpected(14);
- caseBlock.clauses = parseList(3, false, parseCaseOrDefaultClause);
- parseExpected(15);
- node.caseBlock = finishNode(caseBlock);
- return finishNode(node);
- }
- function parseThrowStatement() {
- // ThrowStatement[Yield] :
- // throw [no LineTerminator here]Expression[In, ?Yield];
- var node = createNode(196);
- parseExpected(94);
- node.expression = scanner.hasPrecedingLineBreak() ? undefined : allowInAnd(parseExpression);
- parseSemicolon();
- return finishNode(node);
- }
- function parseTryStatement() {
- var node = createNode(197);
- parseExpected(96);
- node.tryBlock = parseBlock(false, false);
- node.catchClause = token === 68 ? parseCatchClause() : undefined;
- if (!node.catchClause || token === 81) {
- parseExpected(81);
- node.finallyBlock = parseBlock(false, false);
- }
- return finishNode(node);
- }
- function parseCatchClause() {
- var result = createNode(224);
- parseExpected(68);
- if (parseExpected(16)) {
- result.variableDeclaration = parseVariableDeclaration();
- }
- parseExpected(17);
- result.block = parseBlock(false, false);
- return finishNode(result);
- }
- function parseDebuggerStatement() {
- var node = createNode(198);
- parseExpected(72);
- parseSemicolon();
- return finishNode(node);
- }
- function parseExpressionOrLabeledStatement() {
- var fullStart = scanner.getStartPos();
- var expression = allowInAnd(parseExpression);
- if (expression.kind === 65 && parseOptional(51)) {
- var labeledStatement = createNode(195, fullStart);
- labeledStatement.label = expression;
- labeledStatement.statement = parseStatement();
- return finishNode(labeledStatement);
- }
- else {
- var expressionStatement = createNode(183, fullStart);
- expressionStatement.expression = expression;
- parseSemicolon();
- return finishNode(expressionStatement);
- }
- }
- function isStartOfStatement(inErrorRecovery) {
- if (ts.isModifier(token)) {
- var result = lookAhead(parseVariableStatementOrFunctionDeclarationOrClassDeclarationWithDecoratorsOrModifiers);
- if (result) {
- return true;
- }
- }
- switch (token) {
- case 22:
- return !inErrorRecovery;
- case 14:
- case 98:
- case 104:
- case 83:
- case 69:
- case 84:
- case 75:
- case 100:
- case 82:
- case 71:
- case 66:
- case 90:
- case 101:
- case 92:
- case 94:
- case 96:
- case 72:
- case 68:
- case 81:
- return true;
- case 70:
- var isConstEnum = lookAhead(nextTokenIsEnumKeyword);
- return !isConstEnum;
- case 103:
- case 117:
- case 118:
- case 77:
- case 124:
- if (isDeclarationStart()) {
- return false;
- }
- case 108:
- case 106:
- case 107:
- case 109:
- if (lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine)) {
- return false;
- }
- default:
- return isStartOfExpression();
- }
- }
- function nextTokenIsEnumKeyword() {
- nextToken();
- return token === 77;
- }
- function nextTokenIsIdentifierOrKeywordOnSameLine() {
- nextToken();
- return isIdentifierOrKeyword() && !scanner.hasPrecedingLineBreak();
- }
- function parseStatement() {
- switch (token) {
- case 14:
- return parseBlock(false, false);
- case 98:
- case 70:
- return parseVariableStatement(scanner.getStartPos(), undefined, undefined);
- case 83:
- return parseFunctionDeclaration(scanner.getStartPos(), undefined, undefined);
- case 69:
- return parseClassDeclaration(scanner.getStartPos(), undefined, undefined);
- case 22:
- return parseEmptyStatement();
- case 84:
- return parseIfStatement();
- case 75:
- return parseDoStatement();
- case 100:
- return parseWhileStatement();
- case 82:
- return parseForOrForInOrForOfStatement();
- case 71:
- return parseBreakOrContinueStatement(190);
- case 66:
- return parseBreakOrContinueStatement(191);
- case 90:
- return parseReturnStatement();
- case 101:
- return parseWithStatement();
- case 92:
- return parseSwitchStatement();
- case 94:
- return parseThrowStatement();
- case 96:
- case 68:
- case 81:
- return parseTryStatement();
- case 72:
- return parseDebuggerStatement();
- case 104:
- if (isLetDeclaration()) {
- return parseVariableStatement(scanner.getStartPos(), undefined, undefined);
- }
- default:
- if (ts.isModifier(token) || token === 52) {
- var result = tryParse(parseVariableStatementOrFunctionDeclarationOrClassDeclarationWithDecoratorsOrModifiers);
- if (result) {
- return result;
- }
- }
- return parseExpressionOrLabeledStatement();
- }
- }
- function parseVariableStatementOrFunctionDeclarationOrClassDeclarationWithDecoratorsOrModifiers() {
- var start = scanner.getStartPos();
- var decorators = parseDecorators();
- var modifiers = parseModifiers();
- switch (token) {
- case 70:
- var nextTokenIsEnum = lookAhead(nextTokenIsEnumKeyword);
- if (nextTokenIsEnum) {
- return undefined;
- }
- return parseVariableStatement(start, decorators, modifiers);
- case 104:
- if (!isLetDeclaration()) {
- return undefined;
- }
- return parseVariableStatement(start, decorators, modifiers);
- case 98:
- return parseVariableStatement(start, decorators, modifiers);
- case 83:
- return parseFunctionDeclaration(start, decorators, modifiers);
- case 69:
- return parseClassDeclaration(start, decorators, modifiers);
- }
- return undefined;
- }
- function parseFunctionBlockOrSemicolon(isGenerator, diagnosticMessage) {
- if (token !== 14 && canParseSemicolon()) {
- parseSemicolon();
- return;
- }
- return parseFunctionBlock(isGenerator, false, diagnosticMessage);
- }
- function parseArrayBindingElement() {
- if (token === 23) {
- return createNode(176);
- }
- var node = createNode(153);
- node.dotDotDotToken = parseOptionalToken(21);
- node.name = parseIdentifierOrPattern();
- node.initializer = parseInitializer(false);
- return finishNode(node);
- }
- function parseObjectBindingElement() {
- var node = createNode(153);
- var tokenIsIdentifier = isIdentifier();
- var propertyName = parsePropertyName();
- if (tokenIsIdentifier && token !== 51) {
- node.name = propertyName;
- }
- else {
- parseExpected(51);
- node.propertyName = propertyName;
- node.name = parseIdentifierOrPattern();
- }
- node.initializer = parseInitializer(false);
- return finishNode(node);
- }
- function parseObjectBindingPattern() {
- var node = createNode(151);
- parseExpected(14);
- node.elements = parseDelimitedList(10, parseObjectBindingElement);
- parseExpected(15);
- return finishNode(node);
- }
- function parseArrayBindingPattern() {
- var node = createNode(152);
- parseExpected(18);
- node.elements = parseDelimitedList(11, parseArrayBindingElement);
- parseExpected(19);
- return finishNode(node);
- }
- function isIdentifierOrPattern() {
- return token === 14 || token === 18 || isIdentifier();
- }
- function parseIdentifierOrPattern() {
- if (token === 18) {
- return parseArrayBindingPattern();
- }
- if (token === 14) {
- return parseObjectBindingPattern();
- }
- return parseIdentifier();
- }
- function parseVariableDeclaration() {
- var node = createNode(199);
- node.name = parseIdentifierOrPattern();
- node.type = parseTypeAnnotation();
- if (!isInOrOfKeyword(token)) {
- node.initializer = parseInitializer(false);
- }
- return finishNode(node);
- }
- function parseVariableDeclarationList(inForStatementInitializer) {
- var node = createNode(200);
- switch (token) {
- case 98:
- break;
- case 104:
- node.flags |= 4096;
- break;
- case 70:
- node.flags |= 8192;
- break;
- default:
- ts.Debug.fail();
- }
- nextToken();
- if (token === 126 && lookAhead(canFollowContextualOfKeyword)) {
- node.declarations = createMissingList();
- }
- else {
- var savedDisallowIn = inDisallowInContext();
- setDisallowInContext(inForStatementInitializer);
- node.declarations = parseDelimitedList(9, parseVariableDeclaration);
- setDisallowInContext(savedDisallowIn);
- }
- return finishNode(node);
- }
- function canFollowContextualOfKeyword() {
- return nextTokenIsIdentifier() && nextToken() === 17;
- }
- function parseVariableStatement(fullStart, decorators, modifiers) {
- var node = createNode(181, fullStart);
- node.decorators = decorators;
- setModifiers(node, modifiers);
- node.declarationList = parseVariableDeclarationList(false);
- parseSemicolon();
- return finishNode(node);
- }
- function parseFunctionDeclaration(fullStart, decorators, modifiers) {
- var node = createNode(201, fullStart);
- node.decorators = decorators;
- setModifiers(node, modifiers);
- parseExpected(83);
- node.asteriskToken = parseOptionalToken(35);
- node.name = node.flags & 256 ? parseOptionalIdentifier() : parseIdentifier();
- fillSignature(51, !!node.asteriskToken, false, node);
- node.body = parseFunctionBlockOrSemicolon(!!node.asteriskToken, ts.Diagnostics.or_expected);
- return finishNode(node);
- }
- function parseConstructorDeclaration(pos, decorators, modifiers) {
- var node = createNode(136, pos);
- node.decorators = decorators;
- setModifiers(node, modifiers);
- parseExpected(114);
- fillSignature(51, false, false, node);
- node.body = parseFunctionBlockOrSemicolon(false, ts.Diagnostics.or_expected);
- return finishNode(node);
- }
- function parseMethodDeclaration(fullStart, decorators, modifiers, asteriskToken, name, questionToken, diagnosticMessage) {
- var method = createNode(135, fullStart);
- method.decorators = decorators;
- setModifiers(method, modifiers);
- method.asteriskToken = asteriskToken;
- method.name = name;
- method.questionToken = questionToken;
- fillSignature(51, !!asteriskToken, false, method);
- method.body = parseFunctionBlockOrSemicolon(!!asteriskToken, diagnosticMessage);
- return finishNode(method);
- }
- function parsePropertyDeclaration(fullStart, decorators, modifiers, name, questionToken) {
- var property = createNode(133, fullStart);
- property.decorators = decorators;
- setModifiers(property, modifiers);
- property.name = name;
- property.questionToken = questionToken;
- property.type = parseTypeAnnotation();
- property.initializer = allowInAnd(parseNonParameterInitializer);
- parseSemicolon();
- return finishNode(property);
- }
- function parsePropertyOrMethodDeclaration(fullStart, decorators, modifiers) {
- var asteriskToken = parseOptionalToken(35);
- var name = parsePropertyName();
- var questionToken = parseOptionalToken(50);
- if (asteriskToken || token === 16 || token === 24) {
- 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(51, false, false, node);
- node.body = parseFunctionBlockOrSemicolon(false);
- return finishNode(node);
- }
- function isClassMemberModifier(idToken) {
- switch (idToken) {
- case 108:
- case 106:
- case 107:
- case 109:
- return true;
- default:
- return false;
- }
- }
- function isClassMemberStart() {
- var idToken;
- if (token === 52) {
- return true;
- }
- while (ts.isModifier(token)) {
- idToken = token;
- if (isClassMemberModifier(idToken)) {
- return true;
- }
- nextToken();
- }
- if (token === 35) {
- return true;
- }
- if (isLiteralPropertyName()) {
- idToken = token;
- nextToken();
- }
- if (token === 18) {
- return true;
- }
- if (idToken !== undefined) {
- if (!ts.isKeyword(idToken) || idToken === 121 || idToken === 116) {
- return true;
- }
- switch (token) {
- case 16:
- case 24:
- case 51:
- case 53:
- case 50:
- return true;
- default:
- return canParseSemicolon();
- }
- }
- return false;
- }
- function parseDecorators() {
- var decorators;
- while (true) {
- var decoratorStart = getNodePos();
- if (!parseOptional(52)) {
- break;
- }
- if (!decorators) {
- decorators = [];
- decorators.pos = scanner.getStartPos();
- }
- var decorator = createNode(131, 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 parseClassElement() {
- if (token === 22) {
- var result = createNode(179);
- 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 === 114) {
- return parseConstructorDeclaration(fullStart, decorators, modifiers);
- }
- if (isIndexSignature()) {
- return parseIndexSignatureDeclaration(fullStart, decorators, modifiers);
- }
- if (isIdentifierOrKeyword() ||
- token === 8 ||
- token === 7 ||
- token === 35 ||
- token === 18) {
- return parsePropertyOrMethodDeclaration(fullStart, decorators, modifiers);
- }
- if (decorators || modifiers) {
- var name_3 = createMissingNode(65, true, ts.Diagnostics.Declaration_expected);
- return parsePropertyDeclaration(fullStart, decorators, modifiers, name_3, undefined);
- }
- ts.Debug.fail("Should not have attempted to parse class member declaration.");
- }
- function parseClassExpression() {
- return parseClassDeclarationOrExpression(scanner.getStartPos(), undefined, undefined, 175);
- }
- function parseClassDeclaration(fullStart, decorators, modifiers) {
- return parseClassDeclarationOrExpression(fullStart, decorators, modifiers, 202);
- }
- function parseClassDeclarationOrExpression(fullStart, decorators, modifiers, kind) {
- var savedStrictModeContext = inStrictModeContext();
- setStrictModeContext(true);
- var node = createNode(kind, fullStart);
- node.decorators = decorators;
- setModifiers(node, modifiers);
- parseExpected(69);
- node.name = parseOptionalIdentifier();
- node.typeParameters = parseTypeParameters();
- node.heritageClauses = parseHeritageClauses(true);
- if (parseExpected(14)) {
- node.members = inGeneratorParameterContext()
- ? doOutsideOfYieldContext(parseClassMembers)
- : parseClassMembers();
- parseExpected(15);
- }
- else {
- node.members = createMissingList();
- }
- var finishedNode = finishNode(node);
- setStrictModeContext(savedStrictModeContext);
- return finishedNode;
- }
- function parseHeritageClauses(isClassHeritageClause) {
- // ClassTail[Yield,GeneratorParameter] : See 14.5
- // [~GeneratorParameter]ClassHeritage[?Yield]opt { ClassBody[?Yield]opt }
- // [+GeneratorParameter] ClassHeritageopt { ClassBodyopt }
- if (isHeritageClause()) {
- return isClassHeritageClause && inGeneratorParameterContext()
- ? doOutsideOfYieldContext(parseHeritageClausesWorker)
- : parseHeritageClausesWorker();
- }
- return undefined;
- }
- function parseHeritageClausesWorker() {
- return parseList(19, false, parseHeritageClause);
- }
- function parseHeritageClause() {
- if (token === 79 || token === 102) {
- var node = createNode(223);
- node.token = token;
- nextToken();
- node.types = parseDelimitedList(8, parseExpressionWithTypeArguments);
- return finishNode(node);
- }
- return undefined;
- }
- function parseExpressionWithTypeArguments() {
- var node = createNode(177);
- node.expression = parseLeftHandSideExpressionOrHigher();
- if (token === 24) {
- node.typeArguments = parseBracketedList(17, parseType, 24, 25);
- }
- return finishNode(node);
- }
- function isHeritageClause() {
- return token === 79 || token === 102;
- }
- function parseClassMembers() {
- return parseList(6, false, parseClassElement);
- }
- function parseInterfaceDeclaration(fullStart, decorators, modifiers) {
- var node = createNode(203, fullStart);
- node.decorators = decorators;
- setModifiers(node, modifiers);
- parseExpected(103);
- node.name = parseIdentifier();
- node.typeParameters = parseTypeParameters();
- node.heritageClauses = parseHeritageClauses(false);
- node.members = parseObjectTypeMembers();
- return finishNode(node);
- }
- function parseTypeAliasDeclaration(fullStart, decorators, modifiers) {
- var node = createNode(204, fullStart);
- node.decorators = decorators;
- setModifiers(node, modifiers);
- parseExpected(124);
- node.name = parseIdentifier();
- parseExpected(53);
- node.type = parseType();
- parseSemicolon();
- return finishNode(node);
- }
- function parseEnumMember() {
- var node = createNode(227, scanner.getStartPos());
- node.name = parsePropertyName();
- node.initializer = allowInAnd(parseNonParameterInitializer);
- return finishNode(node);
- }
- function parseEnumDeclaration(fullStart, decorators, modifiers) {
- var node = createNode(205, fullStart);
- node.decorators = decorators;
- setModifiers(node, modifiers);
- parseExpected(77);
- node.name = parseIdentifier();
- if (parseExpected(14)) {
- node.members = parseDelimitedList(7, parseEnumMember);
- parseExpected(15);
- }
- else {
- node.members = createMissingList();
- }
- return finishNode(node);
- }
- function parseModuleBlock() {
- var node = createNode(207, scanner.getStartPos());
- if (parseExpected(14)) {
- node.statements = parseList(1, false, parseModuleElement);
- parseExpected(15);
- }
- else {
- node.statements = createMissingList();
- }
- return finishNode(node);
- }
- function parseModuleOrNamespaceDeclaration(fullStart, decorators, modifiers, flags) {
- var node = createNode(206, fullStart);
- node.decorators = decorators;
- setModifiers(node, modifiers);
- node.flags |= flags;
- node.name = parseIdentifier();
- node.body = parseOptional(20)
- ? parseModuleOrNamespaceDeclaration(getNodePos(), undefined, undefined, 1)
- : parseModuleBlock();
- return finishNode(node);
- }
- function parseAmbientExternalModuleDeclaration(fullStart, decorators, modifiers) {
- var node = createNode(206, 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(118)) {
- flags |= 32768;
- }
- else {
- parseExpected(117);
- if (token === 8) {
- return parseAmbientExternalModuleDeclaration(fullStart, decorators, modifiers);
- }
- }
- return parseModuleOrNamespaceDeclaration(fullStart, decorators, modifiers, flags);
- }
- function isExternalModuleReference() {
- return token === 119 &&
- lookAhead(nextTokenIsOpenParen);
- }
- function nextTokenIsOpenParen() {
- return nextToken() === 16;
- }
- function nextTokenIsCommaOrFromKeyword() {
- nextToken();
- return token === 23 ||
- token === 125;
- }
- function parseImportDeclarationOrImportEqualsDeclaration(fullStart, decorators, modifiers) {
- parseExpected(85);
- var afterImportPos = scanner.getStartPos();
- var identifier;
- if (isIdentifier()) {
- identifier = parseIdentifier();
- if (token !== 23 && token !== 125) {
- var importEqualsDeclaration = createNode(209, fullStart);
- importEqualsDeclaration.decorators = decorators;
- setModifiers(importEqualsDeclaration, modifiers);
- importEqualsDeclaration.name = identifier;
- parseExpected(53);
- importEqualsDeclaration.moduleReference = parseModuleReference();
- parseSemicolon();
- return finishNode(importEqualsDeclaration);
- }
- }
- var importDeclaration = createNode(210, fullStart);
- importDeclaration.decorators = decorators;
- setModifiers(importDeclaration, modifiers);
- if (identifier ||
- token === 35 ||
- token === 14) {
- importDeclaration.importClause = parseImportClause(identifier, afterImportPos);
- parseExpected(125);
- }
- importDeclaration.moduleSpecifier = parseModuleSpecifier();
- parseSemicolon();
- return finishNode(importDeclaration);
- }
- function parseImportClause(identifier, fullStart) {
- //ImportClause:
- // ImportedDefaultBinding
- // NameSpaceImport
- // NamedImports
- // ImportedDefaultBinding, NameSpaceImport
- // ImportedDefaultBinding, NamedImports
- var importClause = createNode(211, fullStart);
- if (identifier) {
- importClause.name = identifier;
- }
- if (!importClause.name ||
- parseOptional(23)) {
- importClause.namedBindings = token === 35 ? parseNamespaceImport() : parseNamedImportsOrExports(213);
- }
- return finishNode(importClause);
- }
- function parseModuleReference() {
- return isExternalModuleReference()
- ? parseExternalModuleReference()
- : parseEntityName(false);
- }
- function parseExternalModuleReference() {
- var node = createNode(220);
- parseExpected(119);
- parseExpected(16);
- node.expression = parseModuleSpecifier();
- parseExpected(17);
- return finishNode(node);
- }
- function parseModuleSpecifier() {
- var result = parseExpression();
- if (result.kind === 8) {
- internIdentifier(result.text);
- }
- return result;
- }
- function parseNamespaceImport() {
- var namespaceImport = createNode(212);
- parseExpected(35);
- parseExpected(111);
- namespaceImport.name = parseIdentifier();
- return finishNode(namespaceImport);
- }
- function parseNamedImportsOrExports(kind) {
- var node = createNode(kind);
- node.elements = parseBracketedList(20, kind === 213 ? parseImportSpecifier : parseExportSpecifier, 14, 15);
- return finishNode(node);
- }
- function parseExportSpecifier() {
- return parseImportOrExportSpecifier(218);
- }
- function parseImportSpecifier() {
- return parseImportOrExportSpecifier(214);
- }
- 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 === 111) {
- node.propertyName = identifierName;
- parseExpected(111);
- checkIdentifierIsKeyword = ts.isKeyword(token) && !isIdentifier();
- checkIdentifierStart = scanner.getTokenPos();
- checkIdentifierEnd = scanner.getTextPos();
- node.name = parseIdentifierName();
- }
- else {
- node.name = identifierName;
- }
- if (kind === 214 && checkIdentifierIsKeyword) {
- parseErrorAtPosition(checkIdentifierStart, checkIdentifierEnd - checkIdentifierStart, ts.Diagnostics.Identifier_expected);
- }
- return finishNode(node);
- }
- function parseExportDeclaration(fullStart, decorators, modifiers) {
- var node = createNode(216, fullStart);
- node.decorators = decorators;
- setModifiers(node, modifiers);
- if (parseOptional(35)) {
- parseExpected(125);
- node.moduleSpecifier = parseModuleSpecifier();
- }
- else {
- node.exportClause = parseNamedImportsOrExports(217);
- if (parseOptional(125)) {
- node.moduleSpecifier = parseModuleSpecifier();
- }
- }
- parseSemicolon();
- return finishNode(node);
- }
- function parseExportAssignment(fullStart, decorators, modifiers) {
- var node = createNode(215, fullStart);
- node.decorators = decorators;
- setModifiers(node, modifiers);
- if (parseOptional(53)) {
- node.isExportEquals = true;
- }
- else {
- parseExpected(73);
- }
- node.expression = parseAssignmentExpressionOrHigher();
- parseSemicolon();
- return finishNode(node);
- }
- function isLetDeclaration() {
- return inStrictModeContext() || lookAhead(nextTokenIsIdentifierOrStartOfDestructuringOnTheSameLine);
- }
- function isDeclarationStart(followsModifier) {
- switch (token) {
- case 98:
- case 70:
- case 83:
- return true;
- case 104:
- return isLetDeclaration();
- case 69:
- case 103:
- case 77:
- case 124:
- return lookAhead(nextTokenIsIdentifierOrKeyword);
- case 85:
- return lookAhead(nextTokenCanFollowImportKeyword);
- case 117:
- case 118:
- return lookAhead(nextTokenIsIdentifierOrKeywordOrStringLiteral);
- case 78:
- return lookAhead(nextTokenCanFollowExportKeyword);
- case 115:
- case 108:
- case 106:
- case 107:
- case 109:
- return lookAhead(nextTokenIsDeclarationStart);
- case 52:
- return !followsModifier;
- }
- }
- function isIdentifierOrKeyword() {
- return token >= 65;
- }
- function nextTokenIsIdentifierOrKeyword() {
- nextToken();
- return isIdentifierOrKeyword();
- }
- function nextTokenIsIdentifierOrKeywordOrStringLiteral() {
- nextToken();
- return isIdentifierOrKeyword() || token === 8;
- }
- function nextTokenCanFollowImportKeyword() {
- nextToken();
- return isIdentifierOrKeyword() || token === 8 ||
- token === 35 || token === 14;
- }
- function nextTokenCanFollowExportKeyword() {
- nextToken();
- return token === 53 || token === 35 ||
- token === 14 || token === 73 || isDeclarationStart(true);
- }
- function nextTokenIsDeclarationStart() {
- nextToken();
- return isDeclarationStart(true);
- }
- function nextTokenIsAsKeyword() {
- return nextToken() === 111;
- }
- function parseDeclaration() {
- var fullStart = getNodePos();
- var decorators = parseDecorators();
- var modifiers = parseModifiers();
- if (token === 78) {
- nextToken();
- if (token === 73 || token === 53) {
- return parseExportAssignment(fullStart, decorators, modifiers);
- }
- if (token === 35 || token === 14) {
- return parseExportDeclaration(fullStart, decorators, modifiers);
- }
- }
- switch (token) {
- case 98:
- case 104:
- case 70:
- return parseVariableStatement(fullStart, decorators, modifiers);
- case 83:
- return parseFunctionDeclaration(fullStart, decorators, modifiers);
- case 69:
- return parseClassDeclaration(fullStart, decorators, modifiers);
- case 103:
- return parseInterfaceDeclaration(fullStart, decorators, modifiers);
- case 124:
- return parseTypeAliasDeclaration(fullStart, decorators, modifiers);
- case 77:
- return parseEnumDeclaration(fullStart, decorators, modifiers);
- case 117:
- case 118:
- return parseModuleDeclaration(fullStart, decorators, modifiers);
- case 85:
- return parseImportDeclarationOrImportEqualsDeclaration(fullStart, decorators, modifiers);
- default:
- if (decorators || modifiers) {
- var node = createMissingNode(219, true, ts.Diagnostics.Declaration_expected);
- node.pos = fullStart;
- node.decorators = decorators;
- setModifiers(node, modifiers);
- return finishNode(node);
- }
- ts.Debug.fail("Mismatch between isDeclarationStart and parseDeclaration");
- }
- }
- function isSourceElement(inErrorRecovery) {
- return isDeclarationStart() || isStartOfStatement(inErrorRecovery);
- }
- function parseSourceElement() {
- return parseSourceElementOrModuleElement();
- }
- function parseModuleElement() {
- return parseSourceElementOrModuleElement();
- }
- function parseSourceElementOrModuleElement() {
- return isDeclarationStart()
- ? parseDeclaration()
- : parseStatement();
- }
- function processReferenceComments(sourceFile) {
- var triviaScanner = ts.createScanner(sourceFile.languageVersion, false, 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) {
- sourceFile.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) {
- sourceFile.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 === 209 && node.moduleReference.kind === 220
- || node.kind === 210
- || node.kind === 215
- || node.kind === 216
- ? node
- : undefined;
- });
- }
- })(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) {
- if (aggressiveChecks && shouldCheckNode(node)) {
- var text = oldText.substring(node.pos, node.end);
- }
- node._children = 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 8:
- case 7:
- case 65:
- 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 = {}));
- /// <reference path="binder.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 Symbol = ts.objectAllocator.getSymbolConstructor();
- var Type = ts.objectAllocator.getTypeConstructor();
- var Signature = ts.objectAllocator.getSignatureConstructor();
- var typeCount = 0;
- var emptyArray = [];
- var emptySymbols = {};
- var compilerOptions = host.getCompilerOptions();
- var languageVersion = compilerOptions.target || 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"); },
- getTypeCount: function () { return typeCount; },
- isUndefinedSymbol: function (symbol) { return symbol === undefinedSymbol; },
- isArgumentsSymbol: function (symbol) { return symbol === argumentsSymbol; },
- getDiagnostics: getDiagnostics,
- getGlobalDiagnostics: getGlobalDiagnostics,
- getTypeOfSymbolAtLocation: getTypeOfSymbolAtLocation,
- getDeclaredTypeOfSymbol: getDeclaredTypeOfSymbol,
- getPropertiesOfType: getPropertiesOfType,
- getPropertyOfType: getPropertyOfType,
- getSignaturesOfType: getSignaturesOfType,
- getIndexTypeOfType: getIndexTypeOfType,
- getReturnTypeOfSignature: getReturnTypeOfSignature,
- getSymbolsInScope: getSymbolsInScope,
- getSymbolAtLocation: getSymbolAtLocation,
- getShorthandAssignmentValueSymbol: getShorthandAssignmentValueSymbol,
- getTypeAtLocation: getTypeAtLocation,
- 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
- };
- 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(1048576, "symbol");
- var voidType = createIntrinsicType(16, "void");
- var undefinedType = createIntrinsicType(32 | 262144, "undefined");
- var nullType = createIntrinsicType(64 | 262144, "null");
- var unknownType = createIntrinsicType(1, "unknown");
- var emptyObjectType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
- var anyFunctionType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
- var noConstraintType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
- var anySignature = createSignature(undefined, undefined, emptyArray, anyType, 0, false, false);
- var unknownSignature = createSignature(undefined, undefined, emptyArray, unknownType, 0, false, false);
- var globals = {};
- var globalArraySymbol;
- var globalESSymbolConstructorSymbol;
- var globalObjectType;
- var globalFunctionType;
- var globalArrayType;
- var globalStringType;
- var globalNumberType;
- var globalBooleanType;
- var globalRegExpType;
- var globalTemplateStringsArrayType;
- var globalESSymbolType;
- var globalIterableType;
- var anyArrayType;
- var getGlobalClassDecoratorType;
- var getGlobalParameterDecoratorType;
- var getGlobalPropertyDecoratorType;
- var getGlobalMethodDecoratorType;
- var tupleTypes = {};
- var unionTypes = {};
- var stringLiteralTypes = {};
- var emitExtends = false;
- var emitDecorate = false;
- var emitParam = false;
- var resolutionTargets = [];
- var resolutionResults = [];
- var mergedSymbols = [];
- var symbolLinks = [];
- var nodeLinks = [];
- var potentialThisCollisions = [];
- 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: 1048576
- }
- };
- function getEmitResolver(sourceFile) {
- getDiagnostics(sourceFile);
- 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) {
- 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 |= 899583;
- if (flags & 64)
- result |= 792992;
- 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, 228);
- }
- function isGlobalSourceFile(node) {
- return node.kind === 228 && !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 isDefinedBefore(node1, node2) {
- var file1 = ts.getSourceFileOfNode(node1);
- var file2 = ts.getSourceFileOfNode(node2);
- if (file1 === file2) {
- return node1.pos <= node2.pos;
- }
- if (!compilerOptions.out) {
- return true;
- }
- var sourceFiles = host.getSourceFiles();
- return sourceFiles.indexOf(file1) <= sourceFiles.indexOf(file2);
- }
- 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)) {
- break loop;
- }
- }
- switch (location.kind) {
- case 228:
- if (!ts.isExternalModule(location))
- break;
- case 206:
- var moduleExports = getSymbolOfNode(location).exports;
- if (location.kind === 228 ||
- (location.kind === 206 && location.name.kind === 8)) {
- if (ts.hasProperty(moduleExports, name) &&
- moduleExports[name].flags === 8388608 &&
- ts.getDeclarationOfKind(moduleExports[name], 218)) {
- 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 205:
- if (result = getSymbol(getSymbolOfNode(location).exports, name, meaning & 8)) {
- break loop;
- }
- break;
- case 133:
- case 132:
- if (location.parent.kind === 202 && !(location.flags & 128)) {
- var ctor = findConstructorDeclaration(location.parent);
- if (ctor && ctor.locals) {
- if (getSymbol(ctor.locals, name, meaning & 107455)) {
- propertyWithInvalidInitializer = location;
- }
- }
- }
- break;
- case 202:
- case 203:
- 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;
- }
- break;
- case 128:
- grandparent = location.parent.parent;
- if (grandparent.kind === 202 || grandparent.kind === 203) {
- 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 135:
- case 134:
- case 136:
- case 137:
- case 138:
- case 201:
- case 164:
- if (meaning & 3 && name === "arguments") {
- result = argumentsSymbol;
- break loop;
- }
- break;
- case 163:
- 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 175:
- if (meaning & 32) {
- var className = location.name;
- if (className && name === className.text) {
- result = location.symbol;
- break loop;
- }
- }
- break;
- case 131:
- if (location.parent && location.parent.kind === 130) {
- 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 (result.flags & 2) {
- checkResolvedBlockScopedVariable(result, 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");
- var isUsedBeforeDeclaration = !isDefinedBefore(declaration, errorLocation);
- if (!isUsedBeforeDeclaration) {
- var variableDeclaration = ts.getAncestor(declaration, 199);
- var container = ts.getEnclosingBlockScopeContainer(variableDeclaration);
- if (variableDeclaration.parent.parent.kind === 181 ||
- variableDeclaration.parent.parent.kind === 187) {
- isUsedBeforeDeclaration = isSameScopeDescendentOf(errorLocation, variableDeclaration, container);
- }
- else if (variableDeclaration.parent.parent.kind === 189 ||
- variableDeclaration.parent.parent.kind === 188) {
- var expression = variableDeclaration.parent.parent.expression;
- isUsedBeforeDeclaration = isSameScopeDescendentOf(errorLocation, expression, container);
- }
- }
- if (isUsedBeforeDeclaration) {
- 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 === 209) {
- return node;
- }
- while (node && node.kind !== 210) {
- 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 === 220) {
- 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_4 = specifier.propertyName || specifier.name;
- if (name_4.text) {
- var symbolFromModule = getExportOfModule(targetSymbol, name_4.text);
- var symbolFromVariable = getPropertyOfVariable(targetSymbol, name_4.text);
- var symbol = symbolFromModule && symbolFromVariable ?
- combineValueAndTypeSymbols(symbolFromVariable, symbolFromModule) :
- symbolFromModule || symbolFromVariable;
- if (!symbol) {
- error(name_4, ts.Diagnostics.Module_0_has_no_exported_member_1, getFullyQualifiedName(moduleSymbol), ts.declarationNameToString(name_4));
- }
- 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 209:
- return getTargetOfImportEqualsDeclaration(node);
- case 211:
- return getTargetOfImportClause(node);
- case 212:
- return getTargetOfNamespaceImport(node);
- case 214:
- return getTargetOfImportSpecifier(node);
- case 218:
- return getTargetOfExportSpecifier(node);
- case 215:
- 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 === 215) {
- checkExpressionCached(node.expression);
- }
- else if (node.kind === 218) {
- checkExpressionCached(node.propertyName || node.name);
- }
- else if (ts.isInternalModuleImportEqualsDeclaration(node)) {
- checkExpressionCached(node.moduleReference);
- }
- }
- }
- function getSymbolOfPartOfRightHandSideOfImportEquals(entityName, importDeclaration) {
- if (!importDeclaration) {
- importDeclaration = ts.getAncestor(entityName, 209);
- ts.Debug.assert(importDeclaration !== undefined);
- }
- if (entityName.kind === 65 && ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) {
- entityName = entityName.parent;
- }
- if (entityName.kind === 65 || entityName.parent.kind === 127) {
- return resolveEntityName(entityName, 1536);
- }
- else {
- ts.Debug.assert(entityName.parent.kind === 209);
- return resolveEntityName(entityName, 107455 | 793056 | 1536);
- }
- }
- function getFullyQualifiedName(symbol) {
- return symbol.parent ? getFullyQualifiedName(symbol.parent) + "." + symbolToString(symbol) : symbolToString(symbol);
- }
- function resolveEntityName(name, meaning) {
- if (ts.nodeIsMissing(name)) {
- return undefined;
- }
- var symbol;
- if (name.kind === 65) {
- var message = meaning === 1536 ? ts.Diagnostics.Cannot_find_namespace_0 : ts.Diagnostics.Cannot_find_name_0;
- symbol = resolveName(name, name.text, meaning, message, name);
- if (!symbol) {
- return undefined;
- }
- }
- else if (name.kind === 127 || name.kind === 156) {
- var left = name.kind === 127 ? name.left : name.expression;
- var right = name.kind === 127 ? name.right : name.name;
- var namespace = resolveEntityName(left, 1536);
- if (!namespace || namespace === unknownSymbol || ts.nodeIsMissing(right)) {
- return undefined;
- }
- symbol = getSymbol(getExportsOfSymbol(namespace), right.text, meaning);
- if (!symbol) {
- 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 isExternalModuleNameRelative(moduleName) {
- return moduleName.substr(0, 2) === "./" || moduleName.substr(0, 3) === "../" || moduleName.substr(0, 2) === ".\\" || moduleName.substr(0, 3) === "..\\";
- }
- function resolveExternalModuleName(location, moduleReferenceExpression) {
- if (moduleReferenceExpression.kind !== 8) {
- return;
- }
- var moduleReferenceLiteral = moduleReferenceExpression;
- var searchPath = ts.getDirectoryPath(getSourceFile(location).fileName);
- var moduleName = ts.escapeIdentifier(moduleReferenceLiteral.text);
- if (!moduleName)
- return;
- var isRelative = isExternalModuleNameRelative(moduleName);
- if (!isRelative) {
- var symbol = getSymbol(globals, '"' + moduleName + '"', 512);
- if (symbol) {
- return symbol;
- }
- }
- var sourceFile;
- while (true) {
- var fileName = ts.normalizePath(ts.combinePaths(searchPath, moduleName));
- sourceFile = host.getSourceFile(fileName + ".ts") || host.getSourceFile(fileName + ".d.ts");
- if (sourceFile || isRelative) {
- break;
- }
- var parentPath = ts.getDirectoryPath(searchPath);
- if (parentPath === searchPath) {
- break;
- }
- searchPath = parentPath;
- }
- 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 === 136 && 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(32768, 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 228:
- if (!ts.isExternalModule(location_1)) {
- break;
- }
- case 206:
- if (result = callback(getSymbolOfNode(location_1).exports)) {
- return result;
- }
- break;
- case 202:
- case 203:
- 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=") {
- 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) ? 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 === 206 && declaration.name.kind === 8) ||
- (declaration.kind === 228 && 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 === 145) {
- meaning = 107455 | 1048576;
- }
- else if (entityName.kind === 127 || entityName.kind === 156 ||
- entityName.parent.kind === 209) {
- 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 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 === 150) {
- node = node.parent;
- }
- if (node.kind === 204) {
- return getSymbolOfNode(node);
- }
- }
- return undefined;
- }
- var _displayBuilder;
- function getSymbolDisplayBuilder() {
- function appendSymbolNameOnly(symbol, writer) {
- if (symbol.declarations && symbol.declarations.length > 0) {
- var declaration = symbol.declarations[0];
- if (declaration.name) {
- writer.writeSymbol(ts.declarationNameToString(declaration.name), symbol);
- return;
- }
- }
- writer.writeSymbol(symbol.name, 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, 20);
- }
- 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, typeStack) {
- var globalFlagsToPass = globalFlags & 16;
- return writeType(type, globalFlags);
- function writeType(type, flags) {
- if (type.flags & 1048703) {
- writer.writeKeyword(!(globalFlags & 16) &&
- (type.flags & 1) ? "any" : type.intrinsicName);
- }
- 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 & 16384) {
- writeUnionType(type, flags);
- }
- else if (type.flags & 32768) {
- writeAnonymousType(type, flags);
- }
- else if (type.flags & 256) {
- writer.writeStringLiteral(type.text);
- }
- else {
- writePunctuation(writer, 14);
- writeSpace(writer);
- writePunctuation(writer, 21);
- writeSpace(writer);
- writePunctuation(writer, 15);
- }
- }
- function writeTypeList(types, union) {
- for (var i = 0; i < types.length; i++) {
- if (i > 0) {
- if (union) {
- writeSpace(writer);
- }
- writePunctuation(writer, union ? 44 : 23);
- writeSpace(writer);
- }
- writeType(types[i], union ? 64 : 0);
- }
- }
- function writeTypeReference(type, flags) {
- if (type.target === globalArrayType && !(flags & 1)) {
- writeType(type.typeArguments[0], 64);
- writePunctuation(writer, 18);
- writePunctuation(writer, 19);
- }
- else {
- buildSymbolDisplay(type.target.symbol, writer, enclosingDeclaration, 793056);
- writePunctuation(writer, 24);
- writeTypeList(type.typeArguments, false);
- writePunctuation(writer, 25);
- }
- }
- function writeTupleType(type) {
- writePunctuation(writer, 18);
- writeTypeList(type.elementTypes, false);
- writePunctuation(writer, 19);
- }
- function writeUnionType(type, flags) {
- if (flags & 64) {
- writePunctuation(writer, 16);
- }
- writeTypeList(type.types, true);
- if (flags & 64) {
- writePunctuation(writer, 17);
- }
- }
- function writeAnonymousType(type, flags) {
- if (type.symbol && type.symbol.flags & (32 | 384 | 512)) {
- writeTypeofSymbol(type, flags);
- }
- else if (shouldWriteTypeOfFunctionSymbol()) {
- writeTypeofSymbol(type, flags);
- }
- else if (typeStack && ts.contains(typeStack, type)) {
- var typeAlias = getTypeAliasForTypeLiteral(type);
- if (typeAlias) {
- buildSymbolDisplay(typeAlias, writer, enclosingDeclaration, 793056, 0, flags);
- }
- else {
- writeKeyword(writer, 112);
- }
- }
- else {
- if (!typeStack) {
- typeStack = [];
- }
- typeStack.push(type);
- writeLiteralType(type, flags);
- typeStack.pop();
- }
- function shouldWriteTypeOfFunctionSymbol() {
- if (type.symbol) {
- var isStaticMethodSymbol = !!(type.symbol.flags & 8192 &&
- ts.forEach(type.symbol.declarations, function (declaration) { return declaration.flags & 128; }));
- var isNonLocalFunctionSymbol = !!(type.symbol.flags & 16) &&
- (type.symbol.parent ||
- ts.forEach(type.symbol.declarations, function (declaration) {
- return declaration.parent.kind === 228 || declaration.parent.kind === 207;
- }));
- if (isStaticMethodSymbol || isNonLocalFunctionSymbol) {
- return !!(flags & 2) ||
- (typeStack && ts.contains(typeStack, type));
- }
- }
- }
- }
- function writeTypeofSymbol(type, typeFormatFlags) {
- writeKeyword(writer, 97);
- 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 = resolveObjectOrUnionTypeMembers(type);
- if (!resolved.properties.length && !resolved.stringIndexType && !resolved.numberIndexType) {
- if (!resolved.callSignatures.length && !resolved.constructSignatures.length) {
- writePunctuation(writer, 14);
- writePunctuation(writer, 15);
- return;
- }
- if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) {
- if (flags & 64) {
- writePunctuation(writer, 16);
- }
- buildSignatureDisplay(resolved.callSignatures[0], writer, enclosingDeclaration, globalFlagsToPass | 8, typeStack);
- if (flags & 64) {
- writePunctuation(writer, 17);
- }
- return;
- }
- if (resolved.constructSignatures.length === 1 && !resolved.callSignatures.length) {
- if (flags & 64) {
- writePunctuation(writer, 16);
- }
- writeKeyword(writer, 88);
- writeSpace(writer);
- buildSignatureDisplay(resolved.constructSignatures[0], writer, enclosingDeclaration, globalFlagsToPass | 8, typeStack);
- if (flags & 64) {
- writePunctuation(writer, 17);
- }
- return;
- }
- }
- writePunctuation(writer, 14);
- writer.writeLine();
- writer.increaseIndent();
- for (var _i = 0, _a = resolved.callSignatures; _i < _a.length; _i++) {
- var signature = _a[_i];
- buildSignatureDisplay(signature, writer, enclosingDeclaration, globalFlagsToPass, typeStack);
- writePunctuation(writer, 22);
- writer.writeLine();
- }
- for (var _b = 0, _c = resolved.constructSignatures; _b < _c.length; _b++) {
- var signature = _c[_b];
- writeKeyword(writer, 88);
- writeSpace(writer);
- buildSignatureDisplay(signature, writer, enclosingDeclaration, globalFlagsToPass, typeStack);
- writePunctuation(writer, 22);
- writer.writeLine();
- }
- if (resolved.stringIndexType) {
- writePunctuation(writer, 18);
- writer.writeParameter(getIndexerParameterName(resolved, 0, "x"));
- writePunctuation(writer, 51);
- writeSpace(writer);
- writeKeyword(writer, 122);
- writePunctuation(writer, 19);
- writePunctuation(writer, 51);
- writeSpace(writer);
- writeType(resolved.stringIndexType, 0);
- writePunctuation(writer, 22);
- writer.writeLine();
- }
- if (resolved.numberIndexType) {
- writePunctuation(writer, 18);
- writer.writeParameter(getIndexerParameterName(resolved, 1, "x"));
- writePunctuation(writer, 51);
- writeSpace(writer);
- writeKeyword(writer, 120);
- writePunctuation(writer, 19);
- writePunctuation(writer, 51);
- writeSpace(writer);
- writeType(resolved.numberIndexType, 0);
- writePunctuation(writer, 22);
- 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, 50);
- }
- buildSignatureDisplay(signature, writer, enclosingDeclaration, globalFlagsToPass, typeStack);
- writePunctuation(writer, 22);
- writer.writeLine();
- }
- }
- else {
- buildSymbolDisplay(p, writer);
- if (p.flags & 536870912) {
- writePunctuation(writer, 50);
- }
- writePunctuation(writer, 51);
- writeSpace(writer);
- writeType(t, 0);
- writePunctuation(writer, 22);
- writer.writeLine();
- }
- }
- writer.decreaseIndent();
- writePunctuation(writer, 15);
- }
- }
- function buildTypeParameterDisplayFromSymbol(symbol, writer, enclosingDeclaraiton, flags) {
- var targetSymbol = getTargetSymbol(symbol);
- if (targetSymbol.flags & 32 || targetSymbol.flags & 64) {
- buildDisplayForTypeParametersAndDelimiters(getTypeParametersOfClassOrInterface(symbol), writer, enclosingDeclaraiton, flags);
- }
- }
- function buildTypeParameterDisplay(tp, writer, enclosingDeclaration, flags, typeStack) {
- appendSymbolNameOnly(tp.symbol, writer);
- var constraint = getConstraintOfTypeParameter(tp);
- if (constraint) {
- writeSpace(writer);
- writeKeyword(writer, 79);
- writeSpace(writer);
- buildTypeDisplay(constraint, writer, enclosingDeclaration, flags, typeStack);
- }
- }
- function buildParameterDisplay(p, writer, enclosingDeclaration, flags, typeStack) {
- if (ts.hasDotDotDotToken(p.valueDeclaration)) {
- writePunctuation(writer, 21);
- }
- appendSymbolNameOnly(p, writer);
- if (ts.hasQuestionToken(p.valueDeclaration) || p.valueDeclaration.initializer) {
- writePunctuation(writer, 50);
- }
- writePunctuation(writer, 51);
- writeSpace(writer);
- buildTypeDisplay(getTypeOfSymbol(p), writer, enclosingDeclaration, flags, typeStack);
- }
- function buildDisplayForTypeParametersAndDelimiters(typeParameters, writer, enclosingDeclaration, flags, typeStack) {
- if (typeParameters && typeParameters.length) {
- writePunctuation(writer, 24);
- for (var i = 0; i < typeParameters.length; i++) {
- if (i > 0) {
- writePunctuation(writer, 23);
- writeSpace(writer);
- }
- buildTypeParameterDisplay(typeParameters[i], writer, enclosingDeclaration, flags, typeStack);
- }
- writePunctuation(writer, 25);
- }
- }
- function buildDisplayForTypeArgumentsAndDelimiters(typeParameters, mapper, writer, enclosingDeclaration, flags, typeStack) {
- if (typeParameters && typeParameters.length) {
- writePunctuation(writer, 24);
- for (var i = 0; i < typeParameters.length; i++) {
- if (i > 0) {
- writePunctuation(writer, 23);
- writeSpace(writer);
- }
- buildTypeDisplay(mapper(typeParameters[i]), writer, enclosingDeclaration, 0);
- }
- writePunctuation(writer, 25);
- }
- }
- function buildDisplayForParametersAndDelimiters(parameters, writer, enclosingDeclaration, flags, typeStack) {
- writePunctuation(writer, 16);
- for (var i = 0; i < parameters.length; i++) {
- if (i > 0) {
- writePunctuation(writer, 23);
- writeSpace(writer);
- }
- buildParameterDisplay(parameters[i], writer, enclosingDeclaration, flags, typeStack);
- }
- writePunctuation(writer, 17);
- }
- function buildReturnTypeDisplay(signature, writer, enclosingDeclaration, flags, typeStack) {
- if (flags & 8) {
- writeSpace(writer);
- writePunctuation(writer, 32);
- }
- else {
- writePunctuation(writer, 51);
- }
- writeSpace(writer);
- buildTypeDisplay(getReturnTypeOfSignature(signature), writer, enclosingDeclaration, flags, typeStack);
- }
- function buildSignatureDisplay(signature, writer, enclosingDeclaration, flags, typeStack) {
- if (signature.target && (flags & 32)) {
- buildDisplayForTypeArgumentsAndDelimiters(signature.target.typeParameters, signature.mapper, writer, enclosingDeclaration);
- }
- else {
- buildDisplayForTypeParametersAndDelimiters(signature.typeParameters, writer, enclosingDeclaration, flags, typeStack);
- }
- buildDisplayForParametersAndDelimiters(signature.parameters, writer, enclosingDeclaration, flags, typeStack);
- buildReturnTypeDisplay(signature, writer, enclosingDeclaration, flags, typeStack);
- }
- return _displayBuilder || (_displayBuilder = {
- symbolToString: symbolToString,
- typeToString: typeToString,
- buildSymbolDisplay: buildSymbolDisplay,
- buildTypeDisplay: buildTypeDisplay,
- buildTypeParameterDisplay: buildTypeParameterDisplay,
- buildParameterDisplay: buildParameterDisplay,
- buildDisplayForParametersAndDelimiters: buildDisplayForParametersAndDelimiters,
- buildDisplayForTypeParametersAndDelimiters: buildDisplayForTypeParametersAndDelimiters,
- buildDisplayForTypeArgumentsAndDelimiters: buildDisplayForTypeArgumentsAndDelimiters,
- buildTypeParameterDisplayFromSymbol: buildTypeParameterDisplayFromSymbol,
- buildSignatureDisplay: buildSignatureDisplay,
- buildReturnTypeDisplay: buildReturnTypeDisplay
- });
- }
- function isDeclarationVisible(node) {
- function getContainingExternalModule(node) {
- for (; node; node = node.parent) {
- if (node.kind === 206) {
- if (node.name.kind === 8) {
- return node;
- }
- }
- else if (node.kind === 228) {
- 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 153:
- return isDeclarationVisible(node.parent.parent);
- case 199:
- if (ts.isBindingPattern(node.name) &&
- !node.name.elements.length) {
- return false;
- }
- case 206:
- case 202:
- case 203:
- case 204:
- case 201:
- case 205:
- case 209:
- var parent_2 = getDeclarationContainer(node);
- if (!(ts.getCombinedNodeFlags(node) & 1) &&
- !(node.kind !== 209 && parent_2.kind !== 228 && ts.isInAmbientContext(parent_2))) {
- return isGlobalSourceFile(parent_2);
- }
- return isDeclarationVisible(parent_2);
- case 133:
- case 132:
- case 137:
- case 138:
- case 135:
- case 134:
- if (node.flags & (32 | 64)) {
- return false;
- }
- case 136:
- case 140:
- case 139:
- case 141:
- case 130:
- case 207:
- case 143:
- case 144:
- case 146:
- case 142:
- case 147:
- case 148:
- case 149:
- case 150:
- return isDeclarationVisible(node.parent);
- case 211:
- case 212:
- case 214:
- return false;
- case 129:
- case 228:
- return true;
- case 215:
- 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 === 215) {
- exportSymbol = resolveName(node.parent, node.text, 107455 | 793056 | 1536, ts.Diagnostics.Cannot_find_name_0, node);
- }
- else if (node.parent.kind === 218) {
- exportSymbol = getTargetOfExportSpecifier(node.parent);
- }
- 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) {
- var i = 0;
- var count = resolutionTargets.length;
- while (i < count && resolutionTargets[i] !== target) {
- i++;
- }
- if (i < count) {
- do {
- resolutionResults[i++] = false;
- } while (i < count);
- return false;
- }
- resolutionTargets.push(target);
- resolutionResults.push(true);
- return true;
- }
- function popTypeResolution() {
- resolutionTargets.pop();
- return resolutionResults.pop();
- }
- function getRootDeclaration(node) {
- while (node.kind === 153) {
- node = node.parent.parent;
- }
- return node;
- }
- function getDeclarationContainer(node) {
- node = getRootDeclaration(node);
- return node.kind === 199 ? 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 getTypeForBindingElement(declaration) {
- var pattern = declaration.parent;
- var parentType = getTypeForVariableLikeDeclaration(pattern.parent);
- if (parentType === unknownType) {
- return unknownType;
- }
- if (!parentType || parentType === anyType) {
- if (declaration.initializer) {
- return checkExpressionCached(declaration.initializer);
- }
- return parentType;
- }
- var type;
- if (pattern.kind === 151) {
- var name_5 = declaration.propertyName || declaration.name;
- type = getTypeOfPropertyOfType(parentType, name_5.text) ||
- isNumericLiteralName(name_5.text) && getIndexTypeOfType(parentType, 1) ||
- getIndexTypeOfType(parentType, 0);
- if (!type) {
- error(name_5, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(parentType), ts.declarationNameToString(name_5));
- return unknownType;
- }
- }
- else {
- var elementType = checkIteratedTypeOrElementType(parentType, pattern, false);
- if (!declaration.dotDotDotToken) {
- if (elementType.flags & 1) {
- return elementType;
- }
- 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 === 188) {
- return anyType;
- }
- if (declaration.parent.parent.kind === 189) {
- 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 === 130) {
- var func = declaration.parent;
- if (func.kind === 138 && !ts.hasDynamicName(func)) {
- var getter = ts.getDeclarationOfKind(declaration.parent.symbol, 137);
- if (getter) {
- return getReturnTypeOfSignature(getSignatureFromDeclaration(getter));
- }
- }
- var type = getContextuallyTypedParameterType(declaration);
- if (type) {
- return type;
- }
- }
- if (declaration.initializer) {
- return checkExpressionCached(declaration.initializer);
- }
- if (declaration.kind === 226) {
- return checkIdentifier(declaration.name);
- }
- return undefined;
- }
- function getTypeFromBindingElement(element) {
- if (element.initializer) {
- return getWidenedType(checkExpressionCached(element.initializer));
- }
- if (ts.isBindingPattern(element.name)) {
- return getTypeFromBindingPattern(element.name);
- }
- return anyType;
- }
- function getTypeFromObjectBindingPattern(pattern) {
- 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);
- members[symbol.name] = symbol;
- });
- return createAnonymousType(undefined, members, emptyArray, emptyArray, undefined, undefined);
- }
- function getTypeFromArrayBindingPattern(pattern) {
- var hasSpreadElement = false;
- var elementTypes = [];
- ts.forEach(pattern.elements, function (e) {
- elementTypes.push(e.kind === 176 || e.dotDotDotToken ? anyType : getTypeFromBindingElement(e));
- if (e.dotDotDotToken) {
- hasSpreadElement = true;
- }
- });
- if (!elementTypes.length) {
- return languageVersion >= 2 ? createIterableType(anyType) : anyArrayType;
- }
- else if (hasSpreadElement) {
- var unionOfElements = getUnionType(elementTypes);
- return languageVersion >= 2 ? createIterableType(unionOfElements) : createArrayType(unionOfElements);
- }
- return createTupleType(elementTypes);
- }
- function getTypeFromBindingPattern(pattern) {
- return pattern.kind === 151
- ? getTypeFromObjectBindingPattern(pattern)
- : getTypeFromArrayBindingPattern(pattern);
- }
- function getWidenedTypeForVariableLikeDeclaration(declaration, reportErrors) {
- var type = getTypeForVariableLikeDeclaration(declaration);
- if (type) {
- if (reportErrors) {
- reportErrorsFromWidening(declaration, type);
- }
- return declaration.kind !== 225 ? getWidenedType(type) : type;
- }
- if (ts.isBindingPattern(declaration.name)) {
- return getTypeFromBindingPattern(declaration.name);
- }
- type = declaration.dotDotDotToken ? anyArrayType : anyType;
- if (reportErrors && compilerOptions.noImplicitAny) {
- var root = getRootDeclaration(declaration);
- if (!isPrivateWithinAmbient(root) && !(root.kind === 130 && 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 === 224) {
- return links.type = anyType;
- }
- if (declaration.kind === 215) {
- return links.type = checkExpression(declaration.expression);
- }
- if (!pushTypeResolution(symbol)) {
- 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_is_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 getSetAccessorTypeAnnotationNode(accessor) {
- return accessor && accessor.parameters.length > 0 && accessor.parameters[0].type;
- }
- function getAnnotatedAccessorType(accessor) {
- if (accessor) {
- if (accessor.kind === 137) {
- return accessor.type && getTypeFromTypeNode(accessor.type);
- }
- else {
- var setterTypeAnnotation = getSetAccessorTypeAnnotationNode(accessor);
- return setterTypeAnnotation && getTypeFromTypeNode(setterTypeAnnotation);
- }
- }
- return undefined;
- }
- function getTypeOfAccessors(symbol) {
- var links = getSymbolLinks(symbol);
- if (!links.type) {
- if (!pushTypeResolution(symbol)) {
- return unknownType;
- }
- var getter = ts.getDeclarationOfKind(symbol, 137);
- var setter = ts.getDeclarationOfKind(symbol, 138);
- 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, 137);
- 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(32768, 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 getTypeParametersOfClassOrInterface(symbol) {
- var result;
- ts.forEach(symbol.declarations, function (node) {
- if (node.kind === 203 || node.kind === 202) {
- var declaration = node;
- if (declaration.typeParameters && declaration.typeParameters.length) {
- ts.forEach(declaration.typeParameters, function (node) {
- var tp = getDeclaredTypeOfTypeParameter(getSymbolOfNode(node));
- if (!result) {
- result = [tp];
- }
- else if (!ts.contains(result, tp)) {
- result.push(tp);
- }
- });
- }
- }
- });
- return result;
- }
- function getBaseTypes(type) {
- var typeWithBaseTypes = type;
- if (!typeWithBaseTypes.baseTypes) {
- if (type.symbol.flags & 32) {
- resolveBaseTypesOfClass(typeWithBaseTypes);
- }
- else if (type.symbol.flags & 64) {
- resolveBaseTypesOfInterface(typeWithBaseTypes);
- }
- else {
- ts.Debug.fail("type must be class or interface");
- }
- }
- return typeWithBaseTypes.baseTypes;
- }
- function resolveBaseTypesOfClass(type) {
- type.baseTypes = [];
- var declaration = ts.getDeclarationOfKind(type.symbol, 202);
- var baseTypeNode = ts.getClassExtendsHeritageClauseElement(declaration);
- if (baseTypeNode) {
- var baseType = getTypeFromTypeNode(baseTypeNode);
- if (baseType !== unknownType) {
- if (getTargetType(baseType).flags & 1024) {
- if (type !== baseType && !hasBaseType(baseType, type)) {
- type.baseTypes.push(baseType);
- }
- else {
- error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 1));
- }
- }
- else {
- error(baseTypeNode, ts.Diagnostics.A_class_may_only_extend_another_class);
- }
- }
- }
- }
- function resolveBaseTypesOfInterface(type) {
- type.baseTypes = [];
- for (var _i = 0, _a = type.symbol.declarations; _i < _a.length; _i++) {
- var declaration = _a[_i];
- if (declaration.kind === 203 && 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)) {
- type.baseTypes.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 getDeclaredTypeOfClassOrInterface(symbol) {
- var links = getSymbolLinks(symbol);
- if (!links.declaredType) {
- var kind = symbol.flags & 32 ? 1024 : 2048;
- var type = links.declaredType = createObjectType(kind, symbol);
- var typeParameters = getTypeParametersOfClassOrInterface(symbol);
- if (typeParameters) {
- type.flags |= 4096;
- type.typeParameters = typeParameters;
- type.instantiations = {};
- type.instantiations[getTypeListId(type.typeParameters)] = type;
- type.target = type;
- type.typeArguments = type.typeParameters;
- }
- }
- return links.declaredType;
- }
- function getDeclaredTypeOfTypeAlias(symbol) {
- var links = getSymbolLinks(symbol);
- if (!links.declaredType) {
- if (!pushTypeResolution(links)) {
- return unknownType;
- }
- var declaration = ts.getDeclarationOfKind(symbol, 204);
- var type = getTypeFromTypeNode(declaration.type);
- if (!popTypeResolution()) {
- 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, 129).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 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) {
- var result = {};
- for (var _i = 0; _i < symbols.length; _i++) {
- var symbol = symbols[_i];
- result[symbol.name] = 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 resolveClassOrInterfaceMembers(type) {
- var target = resolveDeclaredMembers(type);
- var members = target.symbol.members;
- var callSignatures = target.declaredCallSignatures;
- var constructSignatures = target.declaredConstructSignatures;
- var stringIndexType = target.declaredStringIndexType;
- var numberIndexType = target.declaredNumberIndexType;
- var baseTypes = getBaseTypes(target);
- if (baseTypes.length) {
- members = createSymbolTable(target.declaredProperties);
- for (var _i = 0; _i < baseTypes.length; _i++) {
- var baseType = baseTypes[_i];
- addInheritedMembers(members, getPropertiesOfObjectType(baseType));
- callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(baseType, 0));
- constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(baseType, 1));
- stringIndexType = stringIndexType || getIndexTypeOfType(baseType, 0);
- numberIndexType = numberIndexType || getIndexTypeOfType(baseType, 1);
- }
- }
- setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType);
- }
- function resolveTypeReferenceMembers(type) {
- var target = resolveDeclaredMembers(type.target);
- var mapper = createTypeMapper(target.typeParameters, type.typeArguments);
- var members = createInstantiatedSymbolTable(target.declaredProperties, mapper);
- var callSignatures = instantiateList(target.declaredCallSignatures, mapper, instantiateSignature);
- var constructSignatures = instantiateList(target.declaredConstructSignatures, mapper, instantiateSignature);
- var stringIndexType = target.declaredStringIndexType ? instantiateType(target.declaredStringIndexType, mapper) : undefined;
- var numberIndexType = target.declaredNumberIndexType ? instantiateType(target.declaredNumberIndexType, mapper) : undefined;
- ts.forEach(getBaseTypes(target), function (baseType) {
- var instantiatedBaseType = instantiateType(baseType, mapper);
- 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 createSignature(declaration, typeParameters, parameters, resolvedReturnType, minArgumentCount, hasRestParameter, hasStringLiterals) {
- var sig = new Signature(checker);
- sig.declaration = declaration;
- sig.typeParameters = typeParameters;
- sig.parameters = parameters;
- sig.resolvedReturnType = resolvedReturnType;
- 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.minArgumentCount, sig.hasRestParameter, sig.hasStringLiterals);
- }
- function getDefaultConstructSignatures(classType) {
- var baseTypes = getBaseTypes(classType);
- if (baseTypes.length) {
- var baseType = baseTypes[0];
- var baseSignatures = getSignaturesOfType(getTypeOfSymbol(baseType.symbol), 1);
- return ts.map(baseSignatures, function (baseSignature) {
- var signature = baseType.flags & 4096 ?
- getSignatureInstantiation(baseSignature, baseType.typeArguments) : cloneSignature(baseSignature);
- signature.typeParameters = classType.typeParameters;
- signature.resolvedReturnType = classType;
- return signature;
- });
- }
- return [createSignature(undefined, classType.typeParameters, emptyArray, classType, 0, false, false)];
- }
- 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 arrayType = resolveObjectOrUnionTypeMembers(createArrayType(getUnionType(type.elementTypes)));
- var members = createTupleTypeMemberSymbols(type.elementTypes);
- addInheritedMembers(members, arrayType.properties);
- setObjectTypeMembers(type, members, arrayType.callSignatures, arrayType.constructSignatures, arrayType.stringIndexType, arrayType.numberIndexType);
- }
- function signatureListsIdentical(s, t) {
- if (s.length !== t.length) {
- return false;
- }
- for (var i = 0; i < s.length; i++) {
- if (!compareSignatures(s[i], t[i], false, compareTypes)) {
- return false;
- }
- }
- return true;
- }
- function getUnionSignatures(types, kind) {
- var signatureLists = ts.map(types, function (t) { return getSignaturesOfType(t, kind); });
- var signatures = signatureLists[0];
- for (var _i = 0; _i < signatures.length; _i++) {
- var signature = signatures[_i];
- if (signature.typeParameters) {
- return emptyArray;
- }
- }
- for (var i_1 = 1; i_1 < signatureLists.length; i_1++) {
- if (!signatureListsIdentical(signatures, signatureLists[i_1])) {
- return emptyArray;
- }
- }
- var result = ts.map(signatures, cloneSignature);
- for (var i = 0; i < result.length; i++) {
- var s = result[i];
- s.resolvedReturnType = undefined;
- s.unionSignatures = ts.map(signatureLists, function (signatures) { return signatures[i]; });
- }
- return result;
- }
- 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 resolveAnonymousTypeMembers(type) {
- var symbol = type.symbol;
- var members;
- var callSignatures;
- var constructSignatures;
- var stringIndexType;
- var numberIndexType;
- 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 baseTypes = getBaseTypes(classType);
- if (baseTypes.length) {
- members = createSymbolTable(getNamedMembers(members));
- addInheritedMembers(members, getPropertiesOfObjectType(getTypeOfSymbol(baseTypes[0].symbol)));
- }
- }
- stringIndexType = undefined;
- numberIndexType = (symbol.flags & 384) ? stringType : undefined;
- }
- setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType);
- }
- function resolveObjectOrUnionTypeMembers(type) {
- if (!type.members) {
- if (type.flags & (1024 | 2048)) {
- resolveClassOrInterfaceMembers(type);
- }
- else if (type.flags & 32768) {
- resolveAnonymousTypeMembers(type);
- }
- else if (type.flags & 8192) {
- resolveTupleTypeMembers(type);
- }
- else if (type.flags & 16384) {
- resolveUnionTypeMembers(type);
- }
- else {
- resolveTypeReferenceMembers(type);
- }
- }
- return type;
- }
- function getPropertiesOfObjectType(type) {
- if (type.flags & 48128) {
- return resolveObjectOrUnionTypeMembers(type).properties;
- }
- return emptyArray;
- }
- function getPropertyOfObjectType(type, name) {
- if (type.flags & 48128) {
- var resolved = resolveObjectOrUnionTypeMembers(type);
- if (ts.hasProperty(resolved.members, name)) {
- var symbol = resolved.members[name];
- if (symbolIsValue(symbol)) {
- return symbol;
- }
- }
- }
- }
- function getPropertiesOfUnionType(type) {
- var result = [];
- ts.forEach(getPropertiesOfType(type.types[0]), function (prop) {
- var unionProp = getPropertyOfUnionType(type, prop.name);
- if (unionProp) {
- result.push(unionProp);
- }
- });
- return result;
- }
- function getPropertiesOfType(type) {
- type = getApparentType(type);
- return type.flags & 16384 ? getPropertiesOfUnionType(type) : getPropertiesOfObjectType(type);
- }
- function getApparentType(type) {
- if (type.flags & 16384) {
- type = getReducedTypeOfUnionType(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 & 1048576) {
- type = globalESSymbolType;
- }
- return type;
- }
- function createUnionProperty(unionType, name) {
- var types = unionType.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)) {
- return undefined;
- }
- if (!props) {
- props = [prop];
- }
- else {
- props.push(prop);
- }
- }
- }
- var propTypes = [];
- var declarations = [];
- for (var _a = 0; _a < props.length; _a++) {
- var prop = props[_a];
- if (prop.declarations) {
- declarations.push.apply(declarations, prop.declarations);
- }
- propTypes.push(getTypeOfSymbol(prop));
- }
- var result = createSymbol(4 | 67108864 | 268435456, name);
- result.unionType = unionType;
- result.declarations = declarations;
- result.type = getUnionType(propTypes);
- return result;
- }
- function getPropertyOfUnionType(type, name) {
- var properties = type.resolvedProperties || (type.resolvedProperties = {});
- if (ts.hasProperty(properties, name)) {
- return properties[name];
- }
- var property = createUnionProperty(type, name);
- if (property) {
- properties[name] = property;
- }
- return property;
- }
- function getPropertyOfType(type, name) {
- type = getApparentType(type);
- if (type.flags & 48128) {
- var resolved = resolveObjectOrUnionTypeMembers(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 & 16384) {
- return getPropertyOfUnionType(type, name);
- }
- return undefined;
- }
- function getSignaturesOfObjectOrUnionType(type, kind) {
- if (type.flags & (48128 | 16384)) {
- var resolved = resolveObjectOrUnionTypeMembers(type);
- return kind === 0 ? resolved.callSignatures : resolved.constructSignatures;
- }
- return emptyArray;
- }
- function getSignaturesOfType(type, kind) {
- return getSignaturesOfObjectOrUnionType(getApparentType(type), kind);
- }
- function typeHasCallOrConstructSignatures(type) {
- var apparentType = getApparentType(type);
- if (apparentType.flags & (48128 | 16384)) {
- var resolved = resolveObjectOrUnionTypeMembers(type);
- return resolved.callSignatures.length > 0
- || resolved.constructSignatures.length > 0;
- }
- return false;
- }
- function getIndexTypeOfObjectOrUnionType(type, kind) {
- if (type.flags & (48128 | 16384)) {
- var resolved = resolveObjectOrUnionTypeMembers(type);
- return kind === 0 ? resolved.stringIndexType : resolved.numberIndexType;
- }
- }
- function getIndexTypeOfType(type, kind) {
- return getIndexTypeOfObjectOrUnionType(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 getSignatureFromDeclaration(declaration) {
- var links = getNodeLinks(declaration);
- if (!links.resolvedSignature) {
- var classType = declaration.kind === 136 ? getDeclaredTypeOfClassOrInterface(declaration.parent.symbol) : undefined;
- var typeParameters = classType ? classType.typeParameters :
- 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 === 8) {
- hasStringLiterals = true;
- }
- if (minArgumentCount < 0) {
- if (param.initializer || param.questionToken || param.dotDotDotToken) {
- minArgumentCount = i;
- }
- }
- }
- if (minArgumentCount < 0) {
- minArgumentCount = declaration.parameters.length;
- }
- var returnType;
- if (classType) {
- returnType = classType;
- }
- else if (declaration.type) {
- returnType = getTypeFromTypeNode(declaration.type);
- }
- else {
- if (declaration.kind === 137 && !ts.hasDynamicName(declaration)) {
- var setter = ts.getDeclarationOfKind(declaration.symbol, 138);
- returnType = getAnnotatedAccessorType(setter);
- }
- if (!returnType && ts.nodeIsMissing(declaration.body)) {
- returnType = anyType;
- }
- }
- links.resolvedSignature = createSignature(declaration, typeParameters, parameters, returnType, minArgumentCount, ts.hasRestParameters(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 143:
- case 144:
- case 201:
- case 135:
- case 134:
- case 136:
- case 139:
- case 140:
- case 141:
- case 137:
- case 138:
- case 163:
- case 164:
- 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)) {
- 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 === 136 || signature.declaration.kind === 140;
- var type = createObjectType(32768 | 65536);
- 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 ? 120 : 122;
- var indexSymbol = getIndexSymbol(symbol);
- if (indexSymbol) {
- var len = indexSymbol.declarations.length;
- 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, 129).constraint);
- }
- }
- return type.constraint === noConstraintType ? undefined : type.constraint;
- }
- function getTypeListId(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;
- }
- }
- function getWideningFlagsOfTypes(types) {
- var result = 0;
- for (var _i = 0; _i < types.length; _i++) {
- var type = types[_i];
- result |= type.flags;
- }
- return result & 786432;
- }
- function createTypeReference(target, typeArguments) {
- var id = getTypeListId(typeArguments);
- var type = target.instantiations[id];
- if (!type) {
- var flags = 4096 | getWideningFlagsOfTypes(typeArguments);
- 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 === 129;
- return links.isIllegalTypeReferenceInConstraint;
- }
- function checkTypeParameterHasIllegalReferencesInConstraint(typeParameter) {
- var typeParameterSymbol;
- function check(n) {
- if (n.kind === 142 && n.typeName.kind === 65) {
- 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 getTypeFromTypeReferenceOrExpressionWithTypeArguments(node) {
- var links = getNodeLinks(node);
- if (!links.resolvedType) {
- var type;
- if (node.kind !== 177 || ts.isSupportedExpressionWithTypeArguments(node)) {
- var typeNameOrExpression = node.kind === 142
- ? node.typeName
- : node.expression;
- var symbol = resolveEntityName(typeNameOrExpression, 793056);
- if (symbol) {
- if ((symbol.flags & 262144) && isTypeParameterReferenceIllegalInConstraint(node, symbol)) {
- type = unknownType;
- }
- else {
- type = getDeclaredTypeOfSymbol(symbol);
- if (type.flags & (1024 | 2048) && type.flags & 4096) {
- var typeParameters = type.typeParameters;
- if (node.typeArguments && node.typeArguments.length === typeParameters.length) {
- type = createTypeReference(type, ts.map(node.typeArguments, getTypeFromTypeNode));
- }
- else {
- error(node, ts.Diagnostics.Generic_type_0_requires_1_type_argument_s, typeToString(type, undefined, 1), typeParameters.length);
- type = undefined;
- }
- }
- else {
- if (node.typeArguments) {
- error(node, ts.Diagnostics.Type_0_is_not_generic, typeToString(type));
- type = undefined;
- }
- }
- }
- }
- }
- links.resolvedType = type || unknownType;
- }
- return links.resolvedType;
- }
- function getTypeFromTypeQueryNode(node) {
- var links = getNodeLinks(node);
- if (!links.resolvedType) {
- links.resolvedType = getWidenedType(checkExpressionOrQualifiedName(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 202:
- case 203:
- case 205:
- return declaration;
- }
- }
- }
- if (!symbol) {
- return emptyObjectType;
- }
- var type = getDeclaredTypeOfSymbol(symbol);
- if (!(type.flags & 48128)) {
- error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_be_a_class_or_interface_type, symbol.name);
- return 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 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 getGlobalESSymbolConstructorSymbol() {
- return globalESSymbolConstructorSymbol || (globalESSymbolConstructorSymbol = getGlobalValueSymbol("Symbol"));
- }
- function createIterableType(elementType) {
- return globalIterableType !== emptyObjectType ? createTypeReference(globalIterableType, [elementType]) : emptyObjectType;
- }
- function createArrayType(elementType) {
- var arrayType = globalArrayType || getDeclaredTypeOfSymbol(globalArraySymbol);
- return arrayType !== emptyObjectType ? createTypeReference(arrayType, [elementType]) : emptyObjectType;
- }
- 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);
- var type = tupleTypes[id];
- if (!type) {
- type = tupleTypes[id] = createObjectType(8192);
- 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 addTypeToSortedSet(sortedSet, type) {
- if (type.flags & 16384) {
- addTypesToSortedSet(sortedSet, type.types);
- }
- else {
- var i = 0;
- var id = type.id;
- while (i < sortedSet.length && sortedSet[i].id < id) {
- i++;
- }
- if (i === sortedSet.length || sortedSet[i].id !== id) {
- sortedSet.splice(i, 0, type);
- }
- }
- }
- function addTypesToSortedSet(sortedTypes, types) {
- for (var _i = 0; _i < types.length; _i++) {
- var type = types[_i];
- addTypeToSortedSet(sortedTypes, type);
- }
- }
- function isSubtypeOfAny(candidate, types) {
- for (var _i = 0; _i < types.length; _i++) {
- var type = types[_i];
- if (candidate !== type && isTypeSubtypeOf(candidate, type)) {
- return true;
- }
- }
- return false;
- }
- var removeSubtypesStack = [];
- function removeSubtypes(types) {
- var typeListId = getTypeListId(types);
- if (removeSubtypesStack.lastIndexOf(typeListId) >= 0) {
- return;
- }
- removeSubtypesStack.push(typeListId);
- var i = types.length;
- while (i > 0) {
- i--;
- if (isSubtypeOfAny(types[i], types)) {
- types.splice(i, 1);
- }
- }
- removeSubtypesStack.pop();
- }
- function containsAnyType(types) {
- for (var _i = 0; _i < types.length; _i++) {
- var type = types[_i];
- if (type.flags & 1) {
- 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 sortedTypes = [];
- addTypesToSortedSet(sortedTypes, types);
- if (noSubtypeReduction) {
- if (containsAnyType(sortedTypes)) {
- return anyType;
- }
- removeAllButLast(sortedTypes, undefinedType);
- removeAllButLast(sortedTypes, nullType);
- }
- else {
- removeSubtypes(sortedTypes);
- }
- if (sortedTypes.length === 1) {
- return sortedTypes[0];
- }
- var id = getTypeListId(sortedTypes);
- var type = unionTypes[id];
- if (!type) {
- type = unionTypes[id] = createObjectType(16384 | getWideningFlagsOfTypes(sortedTypes));
- type.types = sortedTypes;
- type.reducedType = noSubtypeReduction ? undefined : type;
- }
- return type;
- }
- function getReducedTypeOfUnionType(type) {
- if (!type.reducedType) {
- type.reducedType = getUnionType(type.types, false);
- }
- return type.reducedType;
- }
- function getTypeFromUnionTypeNode(node) {
- var links = getNodeLinks(node);
- if (!links.resolvedType) {
- links.resolvedType = getUnionType(ts.map(node.types, getTypeFromTypeNode), true);
- }
- return links.resolvedType;
- }
- function getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node) {
- var links = getNodeLinks(node);
- if (!links.resolvedType) {
- links.resolvedType = createObjectType(32768, 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 getTypeFromTypeNode(node) {
- switch (node.kind) {
- case 112:
- return anyType;
- case 122:
- return stringType;
- case 120:
- return numberType;
- case 113:
- return booleanType;
- case 123:
- return esSymbolType;
- case 99:
- return voidType;
- case 8:
- return getTypeFromStringLiteral(node);
- case 142:
- return getTypeFromTypeReferenceOrExpressionWithTypeArguments(node);
- case 177:
- return getTypeFromTypeReferenceOrExpressionWithTypeArguments(node);
- case 145:
- return getTypeFromTypeQueryNode(node);
- case 147:
- return getTypeFromArrayTypeNode(node);
- case 148:
- return getTypeFromTupleTypeNode(node);
- case 149:
- return getTypeFromUnionTypeNode(node);
- case 150:
- return getTypeFromTypeNode(node.type);
- case 143:
- case 144:
- case 146:
- return getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node);
- case 65:
- case 127:
- var symbol = getSymbolInfo(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) {
- return 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;
- };
- }
- 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;
- if (signature.typeParameters && !eraseTypeParameters) {
- freshTypeParameters = instantiateList(signature.typeParameters, mapper, instantiateTypeParameter);
- mapper = combineTypeMappers(createTypeMapper(signature.typeParameters, freshTypeParameters), mapper);
- }
- var result = createSignature(signature.declaration, freshTypeParameters, instantiateList(signature.parameters, mapper, instantiateSymbol), signature.resolvedReturnType ? instantiateType(signature.resolvedReturnType, mapper) : undefined, 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) {
- var result = createObjectType(32768, type.symbol);
- result.properties = instantiateList(getPropertiesOfObjectType(type), mapper, instantiateSymbol);
- result.members = createSymbolTable(result.properties);
- result.callSignatures = instantiateList(getSignaturesOfType(type, 0), mapper, instantiateSignature);
- result.constructSignatures = instantiateList(getSignaturesOfType(type, 1), mapper, instantiateSignature);
- var stringIndexType = getIndexTypeOfType(type, 0);
- var numberIndexType = getIndexTypeOfType(type, 1);
- if (stringIndexType)
- result.stringIndexType = instantiateType(stringIndexType, mapper);
- if (numberIndexType)
- result.numberIndexType = instantiateType(numberIndexType, mapper);
- return result;
- }
- function instantiateType(type, mapper) {
- if (mapper !== identityMapper) {
- if (type.flags & 512) {
- return mapper(type);
- }
- if (type.flags & 32768) {
- return type.symbol && type.symbol.flags & (16 | 8192 | 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);
- }
- }
- return type;
- }
- function isContextSensitive(node) {
- ts.Debug.assert(node.kind !== 135 || ts.isObjectLiteralMethod(node));
- switch (node.kind) {
- case 163:
- case 164:
- return isContextSensitiveFunctionLikeDeclaration(node);
- case 155:
- return ts.forEach(node.properties, isContextSensitive);
- case 154:
- return ts.forEach(node.elements, isContextSensitive);
- case 171:
- return isContextSensitive(node.whenTrue) ||
- isContextSensitive(node.whenFalse);
- case 170:
- return node.operatorToken.kind === 49 &&
- (isContextSensitive(node.left) || isContextSensitive(node.right));
- case 225:
- return isContextSensitive(node.initializer);
- case 135:
- case 134:
- return isContextSensitiveFunctionLikeDeclaration(node);
- case 162:
- 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 getTypeWithoutConstructors(type) {
- if (type.flags & 48128) {
- var resolved = resolveObjectOrUnionTypeMembers(type);
- if (resolved.constructSignatures.length) {
- var result = createObjectType(32768, type.symbol);
- result.members = resolved.members;
- result.properties = resolved.properties;
- result.callSignatures = resolved.callSignatures;
- result.constructSignatures = emptyArray;
- type = result;
- }
- }
- return type;
- }
- var subtypeRelation = {};
- var assignableRelation = {};
- var identityRelation = {};
- 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) {
- return checkTypeRelatedTo(source, target, assignableRelation, errorNode, headMessage);
- }
- 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 isRelatedTo(source, target, reportErrors, headMessage) {
- var result;
- if (source === target)
- return -1;
- if (relation !== identityRelation) {
- if (target.flags & 1)
- 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 (source.flags & 1)
- return -1;
- if (source === numberType && target.flags & 128)
- return -1;
- }
- }
- var saveErrorInfo = errorInfo;
- if (source.flags & 16384 || target.flags & 16384) {
- if (relation === identityRelation) {
- if (source.flags & 16384 && target.flags & 16384) {
- if (result = unionTypeRelatedToUnionType(source, target)) {
- if (result &= unionTypeRelatedToUnionType(target, source)) {
- return result;
- }
- }
- }
- else if (source.flags & 16384) {
- if (result = unionTypeRelatedToType(source, target, reportErrors)) {
- return result;
- }
- }
- else {
- if (result = unionTypeRelatedToType(target, source, reportErrors)) {
- return result;
- }
- }
- }
- else {
- if (source.flags & 16384) {
- if (result = unionTypeRelatedToType(source, target, reportErrors)) {
- return result;
- }
- }
- else {
- if (result = typeRelatedToUnionType(source, target, reportErrors)) {
- return result;
- }
- }
- }
- }
- else if (source.flags & 512 && target.flags & 512) {
- if (result = typeParameterRelatedTo(source, target, reportErrors)) {
- return result;
- }
- }
- else if (source.flags & 4096 && target.flags & 4096 && source.target === target.target) {
- if (result = typesRelatedTo(source.typeArguments, target.typeArguments, reportErrors)) {
- return result;
- }
- }
- var reportStructuralErrors = reportErrors && errorInfo === saveErrorInfo;
- var sourceOrApparentType = relation === identityRelation ? source : getApparentType(source);
- if (sourceOrApparentType.flags & 48128 && target.flags & 48128) {
- if (result = objectTypeRelatedTo(sourceOrApparentType, target, reportStructuralErrors)) {
- errorInfo = saveErrorInfo;
- return result;
- }
- }
- else if (source.flags & 512 && sourceOrApparentType.flags & 16384) {
- errorInfo = saveErrorInfo;
- if (result = isRelatedTo(sourceOrApparentType, target, reportErrors)) {
- return result;
- }
- }
- if (reportErrors) {
- headMessage = headMessage || ts.Diagnostics.Type_0_is_not_assignable_to_type_1;
- var sourceType = typeToString(source);
- var targetType = typeToString(target);
- if (sourceType === targetType) {
- sourceType = typeToString(source, undefined, 128);
- targetType = typeToString(target, undefined, 128);
- }
- reportError(headMessage, sourceType, targetType);
- }
- return 0;
- }
- function unionTypeRelatedToUnionType(source, target) {
- var result = -1;
- var sourceTypes = source.types;
- for (var _i = 0; _i < sourceTypes.length; _i++) {
- var sourceType = sourceTypes[_i];
- var related = typeRelatedToUnionType(sourceType, target, false);
- if (!related) {
- return 0;
- }
- result &= related;
- }
- return result;
- }
- function typeRelatedToUnionType(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 unionTypeRelatedToType(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 typesRelatedTo(sources, targets, reportErrors) {
- var result = -1;
- for (var i = 0, len = sources.length; i < len; i++) {
- var related = isRelatedTo(sources[i], targets[i], reportErrors);
- if (!related) {
- return 0;
- }
- result &= related;
- }
- return result;
- }
- function typeParameterRelatedTo(source, target, reportErrors) {
- if (relation === identityRelation) {
- 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 isRelatedTo(source.constraint, target.constraint, reportErrors);
- }
- else {
- while (true) {
- var constraint = getConstraintOfTypeParameter(source);
- if (constraint === target)
- return -1;
- if (!(constraint && constraint.flags & 512))
- break;
- source = constraint;
- }
- return 0;
- }
- }
- 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))
- expandingFlags |= 1;
- if (!(expandingFlags & 2) && isDeeplyNestedGeneric(target, targetStack))
- 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 isDeeplyNestedGeneric(type, stack) {
- if (type.flags & 4096 && depth >= 10) {
- var target_1 = type.target;
- var count = 0;
- for (var i = 0; i < depth; i++) {
- var t = stack[i];
- if (t.flags & 4096 && t.target === target_1) {
- count++;
- if (count >= 10)
- return true;
- }
- }
- }
- return false;
- }
- 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 & 131072);
- 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 sourceFlags = getDeclarationFlagsFromSymbol(sourceProp);
- var targetFlags = getDeclarationFlagsFromSymbol(targetProp);
- if (sourceFlags & 32 || targetFlags & 32) {
- if (sourceProp.valueDeclaration !== targetProp.valueDeclaration) {
- if (reportErrors) {
- if (sourceFlags & 32 && targetFlags & 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(sourceFlags & 32 ? source : target), typeToString(sourceFlags & 32 ? target : source));
- }
- }
- return 0;
- }
- }
- else if (targetFlags & 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 (sourceFlags & 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) {
- 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;
- outer: for (var _i = 0; _i < targetSignatures.length; _i++) {
- var t = targetSignatures[_i];
- if (!t.hasStringLiterals || target.flags & 65536) {
- var localErrors = reportErrors;
- for (var _a = 0; _a < sourceSignatures.length; _a++) {
- var s = sourceSignatures[_a];
- if (!s.hasStringLiterals || source.flags & 65536) {
- var related = signatureRelatedTo(s, t, localErrors);
- if (related) {
- result &= related;
- errorInfo = saveErrorInfo;
- continue outer;
- }
- localErrors = false;
- }
- }
- return 0;
- }
- }
- return result;
- }
- 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_1 = i < sourceMax ? getTypeOfSymbol(source.parameters[i]) : getRestTypeOfSignature(source);
- var t_1 = i < targetMax ? getTypeOfSymbol(target.parameters[i]) : getRestTypeOfSignature(target);
- var saveErrorInfo = errorInfo;
- var related = isRelatedTo(s_1, t_1, reportErrors);
- if (!related) {
- related = isRelatedTo(t_1, s_1, 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;
- }
- var t = getReturnTypeOfSignature(target);
- if (t === voidType)
- return result;
- var s = getReturnTypeOfSignature(source);
- return result & isRelatedTo(s, t, 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], true, 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) {
- 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) {
- 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 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, compareReturnTypes, compareTypes) {
- if (source === target) {
- return -1;
- }
- if (source.parameters.length !== target.parameters.length ||
- source.minArgumentCount !== target.minArgumentCount ||
- source.hasRestParameter !== target.hasRestParameter) {
- 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);
- for (var i = 0, len = source.parameters.length; i < len; i++) {
- var s = source.hasRestParameter && i === len - 1 ? getRestTypeOfSignature(source) : getTypeOfSymbol(source.parameters[i]);
- var t = target.hasRestParameter && i === len - 1 ? getRestTypeOfSignature(target) : getTypeOfSymbol(target.parameters[i]);
- var related = compareTypes(s, t);
- if (!related) {
- return 0;
- }
- result &= related;
- }
- if (compareReturnTypes) {
- result &= compareTypes(getReturnTypeOfSignature(source), getReturnTypeOfSignature(target));
- }
- return result;
- }
- 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) && !!type.elementTypes;
- }
- 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 & 786432) {
- if (type.flags & (32 | 64)) {
- return anyType;
- }
- if (type.flags & 131072) {
- return getWidenedTypeOfObjectLiteral(type);
- }
- if (type.flags & 16384) {
- return getUnionType(ts.map(type.types, getWidenedType));
- }
- if (isArrayType(type)) {
- return createArrayType(getWidenedType(type.typeArguments[0]));
- }
- }
- return type;
- }
- function reportWideningErrorsInType(type) {
- if (type.flags & 16384) {
- var errorReported = false;
- ts.forEach(type.types, function (t) {
- if (reportWideningErrorsInType(t)) {
- errorReported = true;
- }
- });
- return errorReported;
- }
- if (isArrayType(type)) {
- return reportWideningErrorsInType(type.typeArguments[0]);
- }
- if (type.flags & 131072) {
- var errorReported = false;
- ts.forEach(getPropertiesOfObjectType(type), function (p) {
- var t = getTypeOfSymbol(p);
- if (t.flags & 262144) {
- 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;
- }
- return false;
- }
- function reportImplicitAnyError(declaration, type) {
- var typeAsString = typeToString(getWidenedType(type));
- var diagnostic;
- switch (declaration.kind) {
- case 133:
- case 132:
- diagnostic = ts.Diagnostics.Member_0_implicitly_has_an_1_type;
- break;
- case 130:
- diagnostic = declaration.dotDotDotToken ?
- ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type :
- ts.Diagnostics.Parameter_0_implicitly_has_an_1_type;
- break;
- case 201:
- case 135:
- case 134:
- case 137:
- case 138:
- case 163:
- case 164:
- 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 & 262144) {
- 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 isWithinDepthLimit(type, stack) {
- if (depth >= 5) {
- var target_2 = type.target;
- var count = 0;
- for (var i = 0; i < depth; i++) {
- var t = stack[i];
- if (t.flags & 4096 && t.target === target_2) {
- count++;
- }
- }
- return count < 5;
- }
- return true;
- }
- function inferFromTypes(source, target) {
- if (source === anyFunctionType) {
- return;
- }
- if (target.flags & 512) {
- 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;
- var targetTypes = target.typeArguments;
- for (var i = 0; i < sourceTypes.length; i++) {
- inferFromTypes(sourceTypes[i], targetTypes[i]);
- }
- }
- else if (target.flags & 16384) {
- 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 (typeParameterCount === 1) {
- inferiority++;
- inferFromTypes(source, typeParameter);
- inferiority--;
- }
- }
- else if (source.flags & 16384) {
- var sourceTypes = source.types;
- for (var _a = 0; _a < sourceTypes.length; _a++) {
- var sourceType = sourceTypes[_a];
- inferFromTypes(sourceType, target);
- }
- }
- else if (source.flags & 48128 && (target.flags & (4096 | 8192) ||
- (target.flags & 32768) && target.symbol && target.symbol.flags & (8192 | 2048))) {
- if (!isInProcess(source, target) && isWithinDepthLimit(source, sourceStack) && isWithinDepthLimit(target, targetStack)) {
- 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);
- 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 145:
- return true;
- case 65:
- case 127:
- 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 >= 53 && node.operatorToken.kind <= 64) {
- var n = node.left;
- while (n.kind === 162) {
- n = n.expression;
- }
- if (n.kind === 65 && 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 170:
- return isAssignedInBinaryExpression(node);
- case 199:
- case 153:
- return isAssignedInVariableDeclaration(node);
- case 151:
- case 152:
- case 154:
- case 155:
- case 156:
- case 157:
- case 158:
- case 159:
- case 161:
- case 162:
- case 168:
- case 165:
- case 166:
- case 167:
- case 169:
- case 171:
- case 174:
- case 180:
- case 181:
- case 183:
- case 184:
- case 185:
- case 186:
- case 187:
- case 188:
- case 189:
- case 192:
- case 193:
- case 194:
- case 221:
- case 222:
- case 195:
- case 196:
- case 197:
- case 224:
- return ts.forEachChild(node, isAssignedIn);
- }
- return false;
- }
- }
- function resolveLocation(node) {
- var containerNodes = [];
- for (var parent_3 = node.parent; parent_3; parent_3 = parent_3.parent) {
- if ((ts.isExpression(parent_3) || ts.isObjectLiteralMethod(node)) &&
- isContextSensitive(parent_3)) {
- containerNodes.unshift(parent_3);
- }
- }
- ts.forEach(containerNodes, function (node) { getTypeOfNode(node); });
- }
- function getSymbolAtLocation(node) {
- resolveLocation(node);
- return getSymbolInfo(node);
- }
- function getTypeAtLocation(node) {
- resolveLocation(node);
- return getTypeOfNode(node);
- }
- function getTypeOfSymbolAtLocation(symbol, node) {
- resolveLocation(node);
- return getNarrowedTypeOfSymbol(symbol, node);
- }
- function getNarrowedTypeOfSymbol(symbol, node) {
- var type = getTypeOfSymbol(symbol);
- if (node && symbol.flags & 3 && type.flags & (1 | 48128 | 16384 | 512)) {
- loop: while (node.parent) {
- var child = node;
- node = node.parent;
- var narrowedType = type;
- switch (node.kind) {
- case 184:
- if (child !== node.expression) {
- narrowedType = narrowType(type, node.expression, child === node.thenStatement);
- }
- break;
- case 171:
- if (child !== node.condition) {
- narrowedType = narrowType(type, node.condition, child === node.whenTrue);
- }
- break;
- case 170:
- if (child === node.right) {
- if (node.operatorToken.kind === 48) {
- narrowedType = narrowType(type, node.left, true);
- }
- else if (node.operatorToken.kind === 49) {
- narrowedType = narrowType(type, node.left, false);
- }
- }
- break;
- case 228:
- case 206:
- case 201:
- case 135:
- case 134:
- case 137:
- case 138:
- case 136:
- break loop;
- }
- if (narrowedType !== type) {
- if (isVariableAssignedWithin(symbol, node)) {
- break;
- }
- type = narrowedType;
- }
- }
- }
- return type;
- function narrowTypeByEquality(type, expr, assumeTrue) {
- if (expr.left.kind !== 166 || expr.right.kind !== 8) {
- return type;
- }
- var left = expr.left;
- var right = expr.right;
- if (left.expression.kind !== 65 || getResolvedSymbol(left.expression) !== symbol) {
- return type;
- }
- var typeInfo = primitiveTypeInfo[right.text];
- if (expr.operatorToken.kind === 31) {
- assumeTrue = !assumeTrue;
- }
- if (assumeTrue) {
- if (!typeInfo) {
- return removeTypesFromUnionType(type, 258 | 132 | 8 | 1048576, 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 (type.flags & 1 || !assumeTrue || expr.left.kind !== 65 || 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 (prototypePropertyType !== anyType) {
- targetType = prototypePropertyType;
- }
- }
- if (!targetType) {
- var constructSignatures;
- if (rightType.flags & 2048) {
- constructSignatures = resolveDeclaredMembers(rightType).declaredConstructSignatures;
- }
- else if (rightType.flags & 32768) {
- constructSignatures = getSignaturesOfType(rightType, 1);
- }
- if (constructSignatures && constructSignatures.length) {
- targetType = getUnionType(ts.map(constructSignatures, function (signature) { return getReturnTypeOfSignature(getErasedSignature(signature)); }));
- }
- }
- if (targetType) {
- if (isTypeSubtypeOf(targetType, type)) {
- return targetType;
- }
- if (type.flags & 16384) {
- return getUnionType(ts.filter(type.types, function (t) { return isTypeSubtypeOf(t, targetType); }));
- }
- }
- return type;
- }
- function narrowType(type, expr, assumeTrue) {
- switch (expr.kind) {
- case 162:
- return narrowType(type, expr.expression, assumeTrue);
- case 170:
- var operator = expr.operatorToken.kind;
- if (operator === 30 || operator === 31) {
- return narrowTypeByEquality(type, expr, assumeTrue);
- }
- else if (operator === 48) {
- return narrowTypeByAnd(type, expr, assumeTrue);
- }
- else if (operator === 49) {
- return narrowTypeByOr(type, expr, assumeTrue);
- }
- else if (operator === 87) {
- return narrowTypeByInstanceof(type, expr, assumeTrue);
- }
- break;
- case 168:
- if (expr.operator === 46) {
- return narrowType(type, expr.operand, !assumeTrue);
- }
- break;
- }
- return type;
- }
- }
- function checkIdentifier(node) {
- var symbol = getResolvedSymbol(node);
- if (symbol === argumentsSymbol && ts.getContainingFunction(node).kind === 164 && 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 (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 === 224) {
- return;
- }
- var container = symbol.valueDeclaration;
- while (container.kind !== 200) {
- container = container.parent;
- }
- container = container.parent;
- if (container.kind === 181) {
- 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 |= 256;
- break;
- }
- current = current.parent;
- }
- }
- function captureLexicalThis(node, container) {
- var classNode = container.parent && container.parent.kind === 202 ? container.parent : undefined;
- getNodeLinks(node).flags |= 2;
- if (container.kind === 133 || container.kind === 136) {
- getNodeLinks(classNode).flags |= 4;
- }
- else {
- getNodeLinks(container).flags |= 4;
- }
- }
- function checkThisExpression(node) {
- var container = ts.getThisContainer(node, true);
- var needToCaptureLexicalThis = false;
- if (container.kind === 164) {
- container = ts.getThisContainer(container, false);
- needToCaptureLexicalThis = (languageVersion < 2);
- }
- switch (container.kind) {
- case 206:
- error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_module_or_namespace_body);
- break;
- case 205:
- error(node, ts.Diagnostics.this_cannot_be_referenced_in_current_location);
- break;
- case 136:
- if (isInConstructorArgumentInitializer(node, container)) {
- error(node, ts.Diagnostics.this_cannot_be_referenced_in_constructor_arguments);
- }
- break;
- case 133:
- case 132:
- if (container.flags & 128) {
- error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_static_property_initializer);
- }
- break;
- case 128:
- error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_computed_property_name);
- break;
- }
- if (needToCaptureLexicalThis) {
- captureLexicalThis(node, container);
- }
- var classNode = container.parent && container.parent.kind === 202 ? container.parent : undefined;
- if (classNode) {
- var symbol = getSymbolOfNode(classNode);
- return container.flags & 128 ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol);
- }
- return anyType;
- }
- function isInConstructorArgumentInitializer(node, constructorDecl) {
- for (var n = node; n && n !== constructorDecl; n = n.parent) {
- if (n.kind === 130) {
- return true;
- }
- }
- return false;
- }
- function checkSuperExpression(node) {
- var isCallExpression = node.parent.kind === 158 && node.parent.expression === node;
- var enclosingClass = ts.getAncestor(node, 202);
- var baseClass;
- if (enclosingClass && ts.getClassExtendsHeritageClauseElement(enclosingClass)) {
- var classType = getDeclaredTypeOfSymbol(getSymbolOfNode(enclosingClass));
- var baseTypes = getBaseTypes(classType);
- baseClass = baseTypes.length && baseTypes[0];
- }
- if (!baseClass) {
- error(node, ts.Diagnostics.super_can_only_be_referenced_in_a_derived_class);
- return unknownType;
- }
- var container = ts.getSuperContainer(node, true);
- if (container) {
- var canUseSuperExpression = false;
- var needToCaptureLexicalThis;
- if (isCallExpression) {
- canUseSuperExpression = container.kind === 136;
- }
- else {
- needToCaptureLexicalThis = false;
- while (container && container.kind === 164) {
- container = ts.getSuperContainer(container, true);
- needToCaptureLexicalThis = languageVersion < 2;
- }
- if (container && container.parent && container.parent.kind === 202) {
- if (container.flags & 128) {
- canUseSuperExpression =
- container.kind === 135 ||
- container.kind === 134 ||
- container.kind === 137 ||
- container.kind === 138;
- }
- else {
- canUseSuperExpression =
- container.kind === 135 ||
- container.kind === 134 ||
- container.kind === 137 ||
- container.kind === 138 ||
- container.kind === 133 ||
- container.kind === 132 ||
- container.kind === 136;
- }
- }
- }
- if (canUseSuperExpression) {
- var returnType;
- if ((container.flags & 128) || isCallExpression) {
- getNodeLinks(node).flags |= 32;
- returnType = getTypeOfSymbol(baseClass.symbol);
- }
- else {
- getNodeLinks(node).flags |= 16;
- returnType = baseClass;
- }
- if (container.kind === 136 && isInConstructorArgumentInitializer(node, container)) {
- error(node, ts.Diagnostics.super_cannot_be_referenced_in_constructor_arguments);
- returnType = unknownType;
- }
- if (!isCallExpression && needToCaptureLexicalThis) {
- captureLexicalThis(node.parent, container);
- }
- return returnType;
- }
- }
- if (container && container.kind === 128) {
- 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;
- }
- function getContextuallyTypedParameterType(parameter) {
- if (isFunctionExpressionOrArrowFunction(parameter.parent)) {
- var func = parameter.parent;
- if (isContextSensitive(func)) {
- var contextualSignature = getContextualSignature(func);
- if (contextualSignature) {
- var funcHasRestParameters = ts.hasRestParameters(func);
- var len = func.parameters.length - (funcHasRestParameters ? 1 : 0);
- var indexOfParameter = ts.indexOf(func.parameters, parameter);
- if (indexOfParameter < len) {
- return getTypeAtPosition(contextualSignature, indexOfParameter);
- }
- if (indexOfParameter === (func.parameters.length - 1) &&
- funcHasRestParameters && contextualSignature.hasRestParameter && func.parameters.length >= contextualSignature.parameters.length) {
- 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 === 130) {
- var type = getContextuallyTypedParameterType(declaration);
- if (type) {
- return type;
- }
- }
- if (ts.isBindingPattern(declaration.name)) {
- return getTypeFromBindingPattern(declaration.name);
- }
- }
- return undefined;
- }
- function getContextualTypeForReturnExpression(node) {
- var func = ts.getContainingFunction(node);
- if (func) {
- if (func.type || func.kind === 136 || func.kind === 137 && getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(func.symbol, 138))) {
- return getReturnTypeOfSignature(getSignatureFromDeclaration(func));
- }
- var signature = getContextualSignatureForFunctionLikeDeclaration(func);
- 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 === 160) {
- return getContextualTypeForArgument(template.parent, substitutionExpression);
- }
- return undefined;
- }
- function getContextualTypeForBinaryOperand(node) {
- var binaryExpression = node.parent;
- var operator = binaryExpression.operatorToken.kind;
- if (operator >= 53 && operator <= 64) {
- if (node === binaryExpression.right) {
- return checkExpression(binaryExpression.left);
- }
- }
- else if (operator === 49) {
- 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 = getPropertyOfObjectType(t, name);
- return prop ? getTypeOfSymbol(prop) : undefined;
- });
- }
- function getIndexTypeOfContextualType(type, kind) {
- return applyToContextualType(type, function (t) { return getIndexTypeOfObjectOrUnionType(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 getIndexTypeOfObjectOrUnionType(t, kind); }) : getIndexTypeOfObjectOrUnionType(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 ? checkIteratedType(type, undefined) : undefined);
- }
- return undefined;
- }
- function getContextualTypeForConditionalOperand(node) {
- var conditional = node.parent;
- return node === conditional.whenTrue || node === conditional.whenFalse ? getContextualType(conditional) : undefined;
- }
- function getContextualType(node) {
- if (isInsideWithStatementBody(node)) {
- return undefined;
- }
- if (node.contextualType) {
- return node.contextualType;
- }
- var parent = node.parent;
- switch (parent.kind) {
- case 199:
- case 130:
- case 133:
- case 132:
- case 153:
- return getContextualTypeForInitializerExpression(node);
- case 164:
- case 192:
- return getContextualTypeForReturnExpression(node);
- case 158:
- case 159:
- return getContextualTypeForArgument(parent, node);
- case 161:
- return getTypeFromTypeNode(parent.type);
- case 170:
- return getContextualTypeForBinaryOperand(node);
- case 225:
- return getContextualTypeForObjectLiteralElement(parent);
- case 154:
- return getContextualTypeForElementExpression(node);
- case 171:
- return getContextualTypeForConditionalOperand(node);
- case 178:
- ts.Debug.assert(parent.parent.kind === 172);
- return getContextualTypeForSubstitutionExpression(parent.parent, node);
- case 162:
- return getContextualType(parent);
- }
- return undefined;
- }
- function getNonGenericSignature(type) {
- var signatures = getSignaturesOfObjectOrUnionType(type, 0);
- if (signatures.length === 1) {
- var signature = signatures[0];
- if (!signature.typeParameters) {
- return signature;
- }
- }
- }
- function isFunctionExpressionOrArrowFunction(node) {
- return node.kind === 163 || node.kind === 164;
- }
- function getContextualSignatureForFunctionLikeDeclaration(node) {
- return isFunctionExpressionOrArrowFunction(node) ? getContextualSignature(node) : undefined;
- }
- function getContextualSignature(node) {
- ts.Debug.assert(node.kind !== 135 || 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];
- if (signatureList &&
- getSignaturesOfObjectOrUnionType(current, 0).length > 1) {
- return undefined;
- }
- var signature = getNonGenericSignature(current);
- if (signature) {
- if (!signatureList) {
- signatureList = [signature];
- }
- else if (!compareSignatures(signatureList[0], signature, false, 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 !== identityMapper;
- }
- function isAssignmentTarget(node) {
- var parent = node.parent;
- if (parent.kind === 170 && parent.operatorToken.kind === 53 && parent.left === node) {
- return true;
- }
- if (parent.kind === 225) {
- return isAssignmentTarget(parent.parent);
- }
- if (parent.kind === 154) {
- return isAssignmentTarget(parent);
- }
- return false;
- }
- function checkSpreadElementExpression(node, contextualMapper) {
- var arrayOrIterableType = checkExpressionCached(node.expression, contextualMapper);
- return checkIteratedTypeOrElementType(arrayOrIterableType, node.expression, false);
- }
- function checkArrayLiteral(node, contextualMapper) {
- var elements = node.elements;
- if (!elements.length) {
- return createArrayType(undefinedType);
- }
- 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 === 174) {
- var restArrayType = checkExpression(e.expression, contextualMapper);
- var restElementType = getIndexTypeOfType(restArrayType, 1) ||
- (languageVersion >= 2 ? checkIteratedType(restArrayType, undefined) : undefined);
- if (restElementType) {
- elementTypes.push(restElementType);
- }
- }
- else {
- var type = checkExpression(e, contextualMapper);
- elementTypes.push(type);
- }
- hasSpreadElement = hasSpreadElement || e.kind === 174;
- }
- if (!hasSpreadElement) {
- var contextualType = getContextualType(node);
- if (contextualType && contextualTypeIsTupleLikeType(contextualType) || inDestructuringPattern) {
- return createTupleType(elementTypes);
- }
- }
- return createArrayType(getUnionType(elementTypes));
- }
- function isNumericName(name) {
- return name.kind === 128 ? isNumericComputedName(name) : isNumericLiteralName(name.text);
- }
- function isNumericComputedName(name) {
- return allConstituentTypesHaveKind(checkComputedPropertyName(name), 1 | 132);
- }
- function isNumericLiteralName(name) {
- return (+name).toString() === name;
- }
- function checkComputedPropertyName(node) {
- var links = getNodeLinks(node.expression);
- if (!links.resolvedType) {
- links.resolvedType = checkExpression(node.expression);
- if (!allConstituentTypesHaveKind(links.resolvedType, 1 | 132 | 258 | 1048576)) {
- 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) {
- checkGrammarObjectLiteralExpression(node);
- var propertiesTable = {};
- var propertiesArray = [];
- var contextualType = getContextualType(node);
- var typeFlags;
- for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
- var memberDecl = _a[_i];
- var member = memberDecl.symbol;
- if (memberDecl.kind === 225 ||
- memberDecl.kind === 226 ||
- ts.isObjectLiteralMethod(memberDecl)) {
- var type = void 0;
- if (memberDecl.kind === 225) {
- type = checkPropertyAssignment(memberDecl, contextualMapper);
- }
- else if (memberDecl.kind === 135) {
- type = checkObjectLiteralMethod(memberDecl, contextualMapper);
- }
- else {
- ts.Debug.assert(memberDecl.kind === 226);
- type = checkExpression(memberDecl.name, contextualMapper);
- }
- typeFlags |= type.flags;
- var prop = createSymbol(4 | 67108864 | member.flags, member.name);
- 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 === 137 || memberDecl.kind === 138);
- checkAccessorDeclaration(memberDecl);
- }
- if (!ts.hasDynamicName(memberDecl)) {
- propertiesTable[member.name] = member;
- }
- propertiesArray.push(member);
- }
- var stringIndexType = getIndexType(0);
- var numberIndexType = getIndexType(1);
- var result = createAnonymousType(node.symbol, propertiesTable, emptyArray, emptyArray, stringIndexType, numberIndexType);
- result.flags |= 131072 | 524288 | (typeFlags & 262144);
- 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 getDeclarationKindFromSymbol(s) {
- return s.valueDeclaration ? s.valueDeclaration.kind : 133;
- }
- 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);
- if (!(flags & (32 | 64))) {
- return;
- }
- var enclosingClassDeclaration = ts.getAncestor(node, 202);
- var enclosingClass = enclosingClassDeclaration ? getDeclaredTypeOfSymbol(getSymbolOfNode(enclosingClassDeclaration)) : undefined;
- var declaringClass = getDeclaredTypeOfSymbol(prop.parent);
- 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;
- }
- if (left.kind === 91) {
- return;
- }
- 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;
- }
- if (flags & 128) {
- return;
- }
- 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));
- }
- }
- 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 = checkExpressionOrQualifiedName(left);
- if (type === unknownType)
- return type;
- if (type !== anyType) {
- 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));
- }
- return unknownType;
- }
- getNodeLinks(node).resolvedSymbol = prop;
- if (prop.parent && prop.parent.flags & 32) {
- if (left.kind === 91 && getDeclarationKindFromSymbol(prop) !== 135) {
- error(right, ts.Diagnostics.Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword);
- }
- else {
- checkClassPropertyAccess(node, left, type, prop);
- }
- }
- return getTypeOfSymbol(prop);
- }
- return anyType;
- }
- function isValidPropertyAccess(node, propertyName) {
- var left = node.kind === 156
- ? node.expression
- : node.left;
- var type = checkExpressionOrQualifiedName(left);
- if (type !== unknownType && type !== anyType) {
- var prop = getPropertyOfType(getWidenedType(type), propertyName);
- if (prop && prop.parent && prop.parent.flags & 32) {
- if (left.kind === 91 && getDeclarationKindFromSymbol(prop) !== 135) {
- return false;
- }
- else {
- var modificationCount = diagnostics.getModificationCount();
- checkClassPropertyAccess(node, left, type, prop);
- return diagnostics.getModificationCount() === modificationCount;
- }
- }
- }
- return true;
- }
- function checkIndexedAccess(node) {
- if (!node.argumentExpression) {
- var sourceFile = getSourceFile(node);
- if (node.parent.kind === 159 && 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 !== 8)) {
- error(node.argumentExpression, ts.Diagnostics.A_const_enum_member_can_only_be_accessed_using_a_string_literal);
- return unknownType;
- }
- if (node.argumentExpression) {
- var name_6 = getPropertyNameForIndexedAccess(node.argumentExpression, indexType);
- if (name_6 !== undefined) {
- var prop = getPropertyOfType(objectType, name_6);
- 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_6, symbolToString(objectType.symbol));
- return unknownType;
- }
- }
- }
- if (allConstituentTypesHaveKind(indexType, 1 | 258 | 132 | 1048576)) {
- if (allConstituentTypesHaveKind(indexType, 1 | 132)) {
- var numberIndexType = getIndexTypeOfType(objectType, 1);
- if (numberIndexType) {
- return numberIndexType;
- }
- }
- var stringIndexType = getIndexTypeOfType(objectType, 0);
- if (stringIndexType) {
- return stringIndexType;
- }
- if (compilerOptions.noImplicitAny && !compilerOptions.suppressImplicitAnyIndexErrors && objectType !== anyType) {
- 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 === 8 || indexArgumentExpression.kind === 7) {
- return indexArgumentExpression.text;
- }
- 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 & 1048576) === 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 === 160) {
- checkExpression(node.template);
- }
- else {
- 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_4 = signature.declaration && signature.declaration.parent;
- if (!lastSymbol || symbol === lastSymbol) {
- if (lastParent && parent_4 === lastParent) {
- index++;
- }
- else {
- lastParent = parent_4;
- index = cutoffIndex;
- }
- }
- else {
- index = cutoffIndex = result.length;
- lastParent = parent_4;
- }
- 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++) {
- if (args[i].kind === 174) {
- return i;
- }
- }
- return -1;
- }
- function hasCorrectArity(node, args, signature) {
- var adjustedArgCount;
- var typeArguments;
- var callIsIncomplete;
- if (node.kind === 160) {
- var tagExpression = node;
- adjustedArgCount = args.length;
- typeArguments = undefined;
- if (tagExpression.template.kind === 172) {
- 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 === 10);
- callIsIncomplete = !!templateLiteral.isUnterminated;
- }
- }
- else {
- var callExpression = node;
- if (!callExpression.arguments) {
- ts.Debug.assert(callExpression.kind === 159);
- return signature.minArgumentCount === 0;
- }
- adjustedArgCount = callExpression.arguments.hasTrailingComma ? args.length + 1 : args.length;
- callIsIncomplete = callExpression.arguments.end === callExpression.end;
- typeArguments = callExpression.typeArguments;
- }
- var hasRightNumberOfTypeArgs = !typeArguments ||
- (signature.typeParameters && typeArguments.length === signature.typeParameters.length);
- if (!hasRightNumberOfTypeArgs) {
- return false;
- }
- var spreadArgIndex = getSpreadArgumentIndex(args);
- if (spreadArgIndex >= 0) {
- return signature.hasRestParameter && spreadArgIndex >= signature.parameters.length - 1;
- }
- if (!signature.hasRestParameter && adjustedArgCount > signature.parameters.length) {
- return false;
- }
- var hasEnoughArguments = adjustedArgCount >= signature.minArgumentCount;
- return callIsIncomplete || hasEnoughArguments;
- }
- function getSingleCallSignature(type) {
- if (type.flags & 48128) {
- var resolved = resolveObjectOrUnionTypeMembers(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(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;
- }
- for (var i = 0; i < args.length; i++) {
- var arg = args[i];
- if (arg.kind !== 176) {
- var paramType = getTypeAtPosition(signature, i);
- var argType = void 0;
- if (i === 0 && args[i].parent.kind === 160) {
- argType = globalTemplateStringsArrayType;
- }
- else {
- var mapper = excludeArgument && excludeArgument[i] !== undefined ? identityMapper : inferenceMapper;
- argType = checkExpressionWithContextualType(arg, paramType, mapper);
- }
- inferTypes(context, argType, paramType);
- }
- }
- if (excludeArgument) {
- for (var i = 0; i < args.length; 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) {
- 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) {
- typeArgumentsAreAssignable = checkTypeAssignableTo(typeArgument, constraint, reportErrors ? typeArgNode : undefined, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1);
- }
- }
- }
- return typeArgumentsAreAssignable;
- }
- function checkApplicableSignature(node, args, signature, relation, excludeArgument, reportErrors) {
- for (var i = 0; i < args.length; i++) {
- var arg = args[i];
- if (arg.kind !== 176) {
- var paramType = getTypeAtPosition(signature, i);
- var argType = i === 0 && node.kind === 160
- ? globalTemplateStringsArrayType
- : arg.kind === 8 && !reportErrors
- ? getStringLiteralType(arg)
- : checkExpressionWithContextualType(arg, paramType, excludeArgument && excludeArgument[i] ? identityMapper : undefined);
- if (!checkTypeRelatedTo(argType, paramType, relation, reportErrors ? arg : undefined, ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1)) {
- return false;
- }
- }
- }
- return true;
- }
- function getEffectiveCallArguments(node) {
- var args;
- if (node.kind === 160) {
- var template = node.template;
- args = [template];
- if (template.kind === 172) {
- ts.forEach(template.templateSpans, function (span) {
- args.push(span.expression);
- });
- }
- }
- else {
- args = node.arguments || emptyArray;
- }
- return args;
- }
- function getEffectiveTypeArguments(callExpression) {
- if (callExpression.expression.kind === 91) {
- var containingClass = ts.getAncestor(callExpression, 202);
- var baseClassTypeNode = containingClass && ts.getClassExtendsHeritageClauseElement(containingClass);
- return baseClassTypeNode && baseClassTypeNode.typeArguments;
- }
- else {
- return callExpression.typeArguments;
- }
- }
- function resolveCall(node, signatures, candidatesOutArray) {
- var isTaggedTemplate = node.kind === 160;
- var typeArguments;
- if (!isTaggedTemplate) {
- typeArguments = getEffectiveTypeArguments(node);
- if (node.expression.kind !== 91) {
- ts.forEach(typeArguments, checkSourceElement);
- }
- }
- var candidates = candidatesOutArray || [];
- reorderCandidates(signatures, candidates);
- if (!candidates.length) {
- error(node, ts.Diagnostics.Supplied_parameters_do_not_match_any_signature_of_call_target);
- return resolveErrorCall(node);
- }
- var args = getEffectiveCallArguments(node);
- var excludeArgument;
- 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 && node.typeArguments) {
- checkTypeArguments(candidateForTypeArgumentError, node.typeArguments, [], true);
- }
- 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));
- reportNoCommonSupertypeError(inferenceCandidates, node.expression || node.tag, diagnosticChainHead);
- }
- }
- else {
- error(node, 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)) {
- return candidate;
- }
- }
- }
- return resolveErrorCall(node);
- 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(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 === 91) {
- var superType = checkSuperExpression(node.expression);
- if (superType !== unknownType) {
- return resolveCall(node, getSignaturesOfType(superType, 1), 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 (funcType === anyType || (!callSignatures.length && !constructSignatures.length && !(funcType.flags & 16384) && isTypeAssignableTo(funcType, globalFunctionType))) {
- if (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 < 2) {
- 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_6_and_higher);
- }
- }
- var expressionType = checkExpression(node.expression);
- if (expressionType === anyType) {
- if (node.typeArguments) {
- error(node, ts.Diagnostics.Untyped_function_calls_may_not_accept_type_arguments);
- }
- return resolveUntypedCall(node);
- }
- expressionType = getApparentType(expressionType);
- if (expressionType === unknownType) {
- return resolveErrorCall(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 (tagType === anyType || (!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 getResolvedSignature(node, candidatesOutArray) {
- var links = getNodeLinks(node);
- if (!links.resolvedSignature || candidatesOutArray) {
- links.resolvedSignature = anySignature;
- if (node.kind === 158) {
- links.resolvedSignature = resolveCallExpression(node, candidatesOutArray);
- }
- else if (node.kind === 159) {
- links.resolvedSignature = resolveNewExpression(node, candidatesOutArray);
- }
- else if (node.kind === 160) {
- links.resolvedSignature = resolveTaggedTemplateExpression(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 === 91) {
- return voidType;
- }
- if (node.kind === 159) {
- var declaration = signature.declaration;
- if (declaration &&
- declaration.kind !== 136 &&
- declaration.kind !== 140 &&
- declaration.kind !== 144) {
- 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 checkTypeAssertion(node) {
- var exprType = 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 links = getSymbolLinks(parameter);
- links.type = instantiateType(getTypeAtPosition(context, i), mapper);
- }
- if (signature.hasRestParameter && context.hasRestParameter && signature.parameters.length >= context.parameters.length) {
- var parameter = ts.lastOrUndefined(signature.parameters);
- var links = getSymbolLinks(parameter);
- links.type = instantiateType(getTypeOfSymbol(ts.lastOrUndefined(context.parameters)), mapper);
- }
- }
- function getReturnTypeFromBody(func, contextualMapper) {
- var contextualSignature = getContextualSignatureForFunctionLikeDeclaration(func);
- if (!func.body) {
- return unknownType;
- }
- var type;
- if (func.body.kind !== 180) {
- type = checkExpressionCached(func.body, contextualMapper);
- }
- else {
- var types = checkAndAggregateReturnExpressionTypes(func.body, contextualMapper);
- if (types.length === 0) {
- return voidType;
- }
- type = contextualSignature ? getUnionType(types) : getCommonSupertype(types);
- if (!type) {
- error(func, ts.Diagnostics.No_best_common_type_exists_among_return_expressions);
- return unknownType;
- }
- }
- if (!contextualSignature) {
- reportErrorsFromWidening(func, type);
- }
- return getWidenedType(type);
- }
- function checkAndAggregateReturnExpressionTypes(body, contextualMapper) {
- var aggregatedTypes = [];
- ts.forEachReturnStatement(body, function (returnStatement) {
- var expr = returnStatement.expression;
- if (expr) {
- var type = checkExpressionCached(expr, contextualMapper);
- 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 === 196);
- }
- function checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(func, returnType) {
- if (!produceDiagnostics) {
- return;
- }
- if (returnType === voidType || returnType === anyType) {
- return;
- }
- if (ts.nodeIsMissing(func.body) || func.body.kind !== 180) {
- 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 !== 135 || ts.isObjectLiteralMethod(node));
- var hasGrammarError = checkGrammarDeclarationNameInStrictMode(node) || checkGrammarFunctionLikeDeclaration(node);
- if (!hasGrammarError && node.kind === 163) {
- checkGrammarFunctionName(node.name) || checkGrammarForGenerator(node);
- }
- if (contextualMapper === identityMapper && isContextSensitive(node)) {
- return anyFunctionType;
- }
- var links = getNodeLinks(node);
- var type = getTypeOfSymbol(node.symbol);
- if (!(links.flags & 64)) {
- var contextualSignature = getContextualSignature(node);
- if (!(links.flags & 64)) {
- links.flags |= 64;
- if (contextualSignature) {
- var signature = getSignaturesOfType(type, 0)[0];
- if (isContextSensitive(node)) {
- assignContextualParameterTypes(signature, contextualSignature, contextualMapper || identityMapper);
- }
- if (!node.type && !signature.resolvedReturnType) {
- var returnType = getReturnTypeFromBody(node, contextualMapper);
- if (!signature.resolvedReturnType) {
- signature.resolvedReturnType = returnType;
- }
- }
- }
- checkSignatureDeclaration(node);
- }
- }
- if (produceDiagnostics && node.kind !== 135 && node.kind !== 134) {
- checkCollisionWithCapturedSuperVariable(node, node.name);
- checkCollisionWithCapturedThisVariable(node, node.name);
- }
- return type;
- }
- function checkFunctionExpressionOrObjectLiteralMethodBody(node) {
- ts.Debug.assert(node.kind !== 135 || ts.isObjectLiteralMethod(node));
- if (node.type && !node.asteriskToken) {
- checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(node, getTypeFromTypeNode(node.type));
- }
- if (node.body) {
- if (!node.type) {
- getReturnTypeOfSignature(getSignatureFromDeclaration(node));
- }
- if (node.body.kind === 180) {
- checkSourceElement(node.body);
- }
- else {
- var exprType = checkExpression(node.body);
- if (node.type) {
- checkTypeAssignableTo(exprType, getTypeFromTypeNode(node.type), node.body, undefined);
- }
- checkFunctionExpressionBodies(node.body);
- }
- }
- }
- function checkArithmeticOperandType(operand, type, diagnostic) {
- if (!allConstituentTypesHaveKind(type, 1 | 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 65: {
- var symbol = findSymbol(n);
- return !symbol || symbol === unknownSymbol || symbol === argumentsSymbol || (symbol.flags & 3) !== 0;
- }
- case 156: {
- var symbol = findSymbol(n);
- return !symbol || symbol === unknownSymbol || (symbol.flags & ~8) !== 0;
- }
- case 157:
- return true;
- case 162:
- return isReferenceOrErrorExpression(n.expression);
- default:
- return false;
- }
- }
- function isConstVariableReference(n) {
- switch (n.kind) {
- case 65:
- case 156: {
- var symbol = findSymbol(n);
- return symbol && (symbol.flags & 3) !== 0 && (getDeclarationFlagsFromSymbol(symbol) & 8192) !== 0;
- }
- case 157: {
- var index = n.argumentExpression;
- var symbol = findSymbol(n.expression);
- if (symbol && index && index.kind === 8) {
- var name_7 = index.text;
- var prop = getPropertyOfType(getTypeOfSymbol(symbol), name_7);
- return prop && (prop.flags & 3) !== 0 && (getDeclarationFlagsFromSymbol(prop) & 8192) !== 0;
- }
- return false;
- }
- case 162:
- 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) {
- if (node.parserContextFlags & 1 && node.expression.kind === 65) {
- grammarErrorOnNode(node.expression, ts.Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode);
- }
- var operandType = checkExpression(node.expression);
- return booleanType;
- }
- function checkTypeOfExpression(node) {
- var operandType = checkExpression(node.expression);
- return stringType;
- }
- function checkVoidExpression(node) {
- var operandType = checkExpression(node.expression);
- return undefinedType;
- }
- function checkPrefixUnaryExpression(node) {
- if ((node.operator === 38 || node.operator === 39)) {
- checkGrammarEvalOrArgumentsInStrictMode(node, node.operand);
- }
- var operandType = checkExpression(node.operand);
- switch (node.operator) {
- case 33:
- case 34:
- case 47:
- if (someConstituentTypeHasKind(operandType, 1048576)) {
- error(node.operand, ts.Diagnostics.The_0_operator_cannot_be_applied_to_type_symbol, ts.tokenToString(node.operator));
- }
- return numberType;
- case 46:
- return booleanType;
- case 38:
- case 39:
- 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) {
- checkGrammarEvalOrArgumentsInStrictMode(node, node.operand);
- 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 & 16384) {
- 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 & 16384) {
- 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 & (48128 | 32768) && type.symbol && isConstEnumSymbol(type.symbol);
- }
- function isConstEnumSymbol(symbol) {
- return (symbol.flags & 128) !== 0;
- }
- function checkInstanceOfExpression(node, leftType, rightType) {
- if (allConstituentTypesHaveKind(leftType, 1049086)) {
- error(node.left, ts.Diagnostics.The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter);
- }
- if (!(rightType.flags & 1 || isTypeSubtypeOf(rightType, globalFunctionType))) {
- error(node.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(node, leftType, rightType) {
- if (!allConstituentTypesHaveKind(leftType, 1 | 258 | 132 | 1048576)) {
- error(node.left, ts.Diagnostics.The_left_hand_side_of_an_in_expression_must_be_of_type_any_string_number_or_symbol);
- }
- if (!allConstituentTypesHaveKind(rightType, 1 | 48128 | 512)) {
- error(node.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 === 225 || p.kind === 226) {
- var name_8 = p.name;
- var type = sourceType.flags & 1 ? sourceType :
- getTypeOfPropertyOfType(sourceType, name_8.text) ||
- isNumericLiteralName(name_8.text) && getIndexTypeOfType(sourceType, 1) ||
- getIndexTypeOfType(sourceType, 0);
- if (type) {
- checkDestructuringAssignment(p.initializer || name_8, type);
- }
- else {
- error(name_8, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(sourceType), ts.declarationNameToString(name_8));
- }
- }
- 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 !== 176) {
- if (e.kind !== 174) {
- var propName = "" + i;
- var type = sourceType.flags & 1 ? 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 === 170 && restExpression.operatorToken.kind === 53) {
- error(restExpression.operatorToken, ts.Diagnostics.A_rest_element_cannot_have_an_initializer);
- }
- else {
- checkDestructuringAssignment(restExpression, createArrayType(elementType), contextualMapper);
- }
- }
- }
- }
- }
- return sourceType;
- }
- function checkDestructuringAssignment(target, sourceType, contextualMapper) {
- if (target.kind === 170 && target.operatorToken.kind === 53) {
- checkBinaryExpression(target, contextualMapper);
- target = target.left;
- }
- if (target.kind === 155) {
- return checkObjectLiteralAssignment(target, sourceType, contextualMapper);
- }
- if (target.kind === 154) {
- 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) {
- if (ts.isLeftHandSideExpression(node.left) && ts.isAssignmentOperator(node.operatorToken.kind)) {
- checkGrammarEvalOrArgumentsInStrictMode(node, node.left);
- }
- var operator = node.operatorToken.kind;
- if (operator === 53 && (node.left.kind === 155 || node.left.kind === 154)) {
- return checkDestructuringAssignment(node.left, checkExpression(node.right, contextualMapper), contextualMapper);
- }
- var leftType = checkExpression(node.left, contextualMapper);
- var rightType = checkExpression(node.right, contextualMapper);
- switch (operator) {
- case 35:
- case 56:
- case 36:
- case 57:
- case 37:
- case 58:
- case 34:
- case 55:
- case 40:
- case 59:
- case 41:
- case 60:
- case 42:
- case 61:
- case 44:
- case 63:
- case 45:
- case 64:
- case 43:
- case 62:
- 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(node.operatorToken.kind)) !== undefined) {
- error(node, ts.Diagnostics.The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead, ts.tokenToString(node.operatorToken.kind), ts.tokenToString(suggestedOperator));
- }
- else {
- var leftOk = checkArithmeticOperandType(node.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(node.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 33:
- case 54:
- 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 (leftType.flags & 1 || rightType.flags & 1) {
- resultType = anyType;
- }
- if (resultType && !checkForDisallowedESSymbolOperand(operator)) {
- return resultType;
- }
- }
- if (!resultType) {
- reportOperatorError();
- return anyType;
- }
- if (operator === 54) {
- checkAssignmentOperator(resultType);
- }
- return resultType;
- case 24:
- case 25:
- case 26:
- case 27:
- if (!checkForDisallowedESSymbolOperand(operator)) {
- return booleanType;
- }
- case 28:
- case 29:
- case 30:
- case 31:
- if (!isTypeAssignableTo(leftType, rightType) && !isTypeAssignableTo(rightType, leftType)) {
- reportOperatorError();
- }
- return booleanType;
- case 87:
- return checkInstanceOfExpression(node, leftType, rightType);
- case 86:
- return checkInExpression(node, leftType, rightType);
- case 48:
- return rightType;
- case 49:
- return getUnionType([leftType, rightType]);
- case 53:
- checkAssignmentOperator(rightType);
- return rightType;
- case 23:
- return rightType;
- }
- function checkForDisallowedESSymbolOperand(operator) {
- var offendingSymbolOperand = someConstituentTypeHasKind(leftType, 1048576) ? node.left :
- someConstituentTypeHasKind(rightType, 1048576) ? node.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 44:
- case 63:
- return 49;
- case 45:
- case 64:
- return 31;
- case 43:
- case 62:
- return 48;
- default:
- return undefined;
- }
- }
- function checkAssignmentOperator(valueType) {
- if (produceDiagnostics && operator >= 53 && operator <= 64) {
- var ok = checkReferenceExpression(node.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, node.left, undefined);
- }
- }
- }
- function reportOperatorError() {
- error(node, ts.Diagnostics.Operator_0_cannot_be_applied_to_types_1_and_2, ts.tokenToString(node.operatorToken.kind), typeToString(leftType), typeToString(rightType));
- }
- }
- function checkYieldExpression(node) {
- if (!(node.parserContextFlags & 4)) {
- grammarErrorOnFirstToken(node, ts.Diagnostics.yield_expression_must_be_contained_within_a_generator_declaration);
- }
- else {
- grammarErrorOnFirstToken(node, ts.Diagnostics.yield_expressions_are_not_currently_supported);
- }
- }
- 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 === 128) {
- checkComputedPropertyName(node.name);
- }
- return checkExpression(node.initializer, contextualMapper);
- }
- function checkObjectLiteralMethod(node, contextualMapper) {
- checkGrammarMethod(node);
- if (node.name.kind === 128) {
- checkComputedPropertyName(node.name);
- }
- var uninstantiatedType = checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper);
- return instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, contextualMapper);
- }
- function instantiateTypeWithSingleGenericCallSignature(node, type, contextualMapper) {
- if (contextualMapper && contextualMapper !== identityMapper) {
- 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) {
- checkGrammarIdentifierInStrictMode(node);
- return checkExpressionOrQualifiedName(node, contextualMapper);
- }
- function checkExpressionOrQualifiedName(node, contextualMapper) {
- var type;
- if (node.kind == 127) {
- type = checkQualifiedName(node);
- }
- else {
- var uninstantiatedType = checkExpressionWorker(node, contextualMapper);
- type = instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, contextualMapper);
- }
- if (isConstEnumObjectType(type)) {
- var ok = (node.parent.kind === 156 && node.parent.expression === node) ||
- (node.parent.kind === 157 && node.parent.expression === node) ||
- ((node.kind === 65 || node.kind === 127) && 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 65:
- return checkIdentifier(node);
- case 93:
- return checkThisExpression(node);
- case 91:
- return checkSuperExpression(node);
- case 89:
- return nullType;
- case 95:
- case 80:
- return booleanType;
- case 7:
- return checkNumericLiteral(node);
- case 172:
- return checkTemplateExpression(node);
- case 8:
- case 10:
- return stringType;
- case 9:
- return globalRegExpType;
- case 154:
- return checkArrayLiteral(node, contextualMapper);
- case 155:
- return checkObjectLiteral(node, contextualMapper);
- case 156:
- return checkPropertyAccessExpression(node);
- case 157:
- return checkIndexedAccess(node);
- case 158:
- case 159:
- return checkCallExpression(node);
- case 160:
- return checkTaggedTemplateExpression(node);
- case 161:
- return checkTypeAssertion(node);
- case 162:
- return checkExpression(node.expression, contextualMapper);
- case 175:
- return checkClassExpression(node);
- case 163:
- case 164:
- return checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper);
- case 166:
- return checkTypeOfExpression(node);
- case 165:
- return checkDeleteExpression(node);
- case 167:
- return checkVoidExpression(node);
- case 168:
- return checkPrefixUnaryExpression(node);
- case 169:
- return checkPostfixUnaryExpression(node);
- case 170:
- return checkBinaryExpression(node, contextualMapper);
- case 171:
- return checkConditionalExpression(node, contextualMapper);
- case 174:
- return checkSpreadElementExpression(node, contextualMapper);
- case 176:
- return undefinedType;
- case 173:
- checkYieldExpression(node);
- return unknownType;
- }
- return unknownType;
- }
- function checkTypeParameter(node) {
- checkGrammarDeclarationNameInStrictMode(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) {
- // Grammar checking
- // It is a SyntaxError if the Identifier "eval" or the Identifier "arguments" occurs as the
- // Identifier in a PropertySetParameterList of a PropertyAssignment that is contained in strict code
- // or if its FunctionBody is strict code(11.1.5).
- // It is a SyntaxError if the identifier eval or arguments appears within a FormalParameterList of a
- // strict mode FunctionLikeDeclaration or FunctionExpression(13.1)
- checkGrammarDecorators(node) || checkGrammarModifiers(node) || checkGrammarEvalOrArgumentsInStrictMode(node, node.name);
- checkVariableLikeDeclaration(node);
- var func = ts.getContainingFunction(node);
- if (node.flags & 112) {
- func = ts.getContainingFunction(node);
- if (!(func.kind === 136 && 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 checkSignatureDeclaration(node) {
- if (node.kind === 141) {
- checkGrammarIndexSignature(node);
- }
- else if (node.kind === 143 || node.kind === 201 || node.kind === 144 ||
- node.kind === 139 || node.kind === 136 ||
- node.kind === 140) {
- checkGrammarFunctionLikeDeclaration(node);
- }
- checkTypeParameters(node.typeParameters);
- ts.forEach(node.parameters, checkParameter);
- if (node.type) {
- checkSourceElement(node.type);
- }
- if (produceDiagnostics) {
- checkCollisionWithArgumentsInGeneratedCode(node);
- if (compilerOptions.noImplicitAny && !node.type) {
- switch (node.kind) {
- case 140:
- error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);
- break;
- case 139:
- error(node, ts.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);
- break;
- }
- }
- }
- checkSpecializedSignatureDeclaration(node);
- }
- function checkTypeForDuplicateIndexSignatures(node) {
- if (node.kind === 203) {
- 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 122:
- if (!seenStringIndexer) {
- seenStringIndexer = true;
- }
- else {
- error(declaration, ts.Diagnostics.Duplicate_string_index_signature);
- }
- break;
- case 120:
- 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);
- }
- 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 === 158 && n.expression.kind === 91;
- }
- function containsSuperCall(n) {
- if (isSuperCallExpression(n)) {
- return true;
- }
- switch (n.kind) {
- case 163:
- case 201:
- case 164:
- case 155: return false;
- default: return ts.forEachChild(n, containsSuperCall);
- }
- }
- function markThisReferencesAsErrors(n) {
- if (n.kind === 93) {
- error(n, ts.Diagnostics.this_cannot_be_referenced_in_current_location);
- }
- else if (n.kind !== 163 && n.kind !== 201) {
- ts.forEachChild(n, markThisReferencesAsErrors);
- }
- }
- function isInstancePropertyWithInitializer(n) {
- return n.kind === 133 &&
- !(n.flags & 128) &&
- !!n.initializer;
- }
- if (ts.getClassExtendsHeritageClauseElement(node.parent)) {
- if (containsSuperCall(node.body)) {
- 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;
- if (!statements.length || statements[0].kind !== 183 || !isSuperCallExpression(statements[0].expression)) {
- 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(statements[0].expression);
- }
- }
- }
- else {
- 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 === 137) {
- 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 === 137 ? 138 : 137;
- 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 checkTypeReferenceNode(node) {
- checkGrammarTypeReferenceInStrictMode(node.typeName);
- return checkTypeReferenceOrExpressionWithTypeArguments(node);
- }
- function checkExpressionWithTypeArguments(node) {
- checkGrammarExpressionWithTypeArgumentsInStrictMode(node.expression);
- return checkTypeReferenceOrExpressionWithTypeArguments(node);
- }
- function checkTypeReferenceOrExpressionWithTypeArguments(node) {
- checkGrammarTypeArguments(node, node.typeArguments);
- var type = getTypeFromTypeReferenceOrExpressionWithTypeArguments(node);
- if (type !== unknownType && node.typeArguments) {
- var len = node.typeArguments.length;
- for (var i = 0; i < len; i++) {
- checkSourceElement(node.typeArguments[i]);
- var constraint = getConstraintOfTypeParameter(type.target.typeParameters[i]);
- if (produceDiagnostics && constraint) {
- var typeArgument = type.typeArguments[i];
- checkTypeAssignableTo(typeArgument, constraint, node, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1);
- }
- }
- }
- }
- 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 checkUnionType(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 === 203) {
- ts.Debug.assert(signatureDeclarationNode.kind === 139 || signatureDeclarationNode.kind === 140);
- var signatureKind = signatureDeclarationNode.kind === 139 ? 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 !== 203 && 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);
- }
- });
- }
- }
- 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;
- 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) {
- ts.Debug.assert(node.kind === 135 || node.kind === 134);
- ts.Debug.assert((node.flags & 128) !== (subsequentNode.flags & 128));
- 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 {
- 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 === 203 || node.parent.kind === 146 || inAmbientContext;
- if (inAmbientContextOrInterface) {
- previousDeclaration = undefined;
- }
- if (node.kind === 201 || node.kind === 135 || node.kind === 134 || node.kind === 136) {
- 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) {
- 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;
- ts.forEach(symbol.declarations, function (d) {
- var declarationSpaces = getDeclarationSpaces(d);
- if (getEffectiveDeclarationFlags(d, 1)) {
- exportedDeclarationSpaces |= declarationSpaces;
- }
- else {
- nonExportedDeclarationSpaces |= declarationSpaces;
- }
- });
- var commonDeclarationSpace = exportedDeclarationSpaces & nonExportedDeclarationSpaces;
- if (commonDeclarationSpace) {
- ts.forEach(symbol.declarations, function (d) {
- if (getDeclarationSpaces(d) & commonDeclarationSpace) {
- 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 203:
- return 2097152;
- case 206:
- return d.name.kind === 8 || ts.getModuleInstanceState(d) !== 0
- ? 4194304 | 1048576
- : 4194304;
- case 202:
- case 205:
- return 2097152 | 1048576;
- case 209:
- var result = 0;
- var target = resolveAlias(getSymbolOfNode(d));
- ts.forEach(target.declarations, function (d) { result |= getDeclarationSpaces(d); });
- return result;
- default:
- return 1048576;
- }
- }
- }
- function checkDecorator(node) {
- var expression = node.expression;
- var exprType = checkExpression(expression);
- switch (node.parent.kind) {
- case 202:
- var classSymbol = getSymbolOfNode(node.parent);
- var classConstructorType = getTypeOfSymbol(classSymbol);
- var classDecoratorType = instantiateSingleCallFunctionType(getGlobalClassDecoratorType(), [classConstructorType]);
- checkTypeAssignableTo(exprType, classDecoratorType, node);
- break;
- case 133:
- checkTypeAssignableTo(exprType, getGlobalPropertyDecoratorType(), node);
- break;
- case 135:
- case 137:
- case 138:
- var methodType = getTypeOfNode(node.parent);
- var methodDecoratorType = instantiateSingleCallFunctionType(getGlobalMethodDecoratorType(), [methodType]);
- checkTypeAssignableTo(exprType, methodDecoratorType, node);
- break;
- case 130:
- checkTypeAssignableTo(exprType, getGlobalParameterDecoratorType(), node);
- break;
- }
- }
- function checkTypeNodeAsExpression(node) {
- if (node && node.kind === 142) {
- var type = getTypeFromTypeNode(node);
- var shouldCheckIfUnknownType = type === unknownType && compilerOptions.isolatedModules;
- if (!type || (!shouldCheckIfUnknownType && type.flags & (1048703 | 132 | 258))) {
- return;
- }
- if (shouldCheckIfUnknownType || type.symbol.valueDeclaration) {
- checkExpressionOrQualifiedName(node.typeName);
- }
- }
- }
- function checkTypeAnnotationAsExpression(node) {
- switch (node.kind) {
- case 133:
- checkTypeNodeAsExpression(node.type);
- break;
- case 130:
- checkTypeNodeAsExpression(node.type);
- break;
- case 135:
- checkTypeNodeAsExpression(node.type);
- break;
- case 137:
- checkTypeNodeAsExpression(node.type);
- break;
- case 138:
- checkTypeNodeAsExpression(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 202:
- var constructor = ts.getFirstConstructorWithBody(node);
- if (constructor) {
- checkParameterTypeAnnotationsAsExpressions(constructor);
- }
- break;
- case 135:
- checkParameterTypeAnnotationsAsExpressions(node);
- case 138:
- case 137:
- case 133:
- case 130:
- checkTypeAnnotationAsExpression(node);
- break;
- }
- }
- emitDecorate = true;
- if (node.kind === 130) {
- emitParam = true;
- }
- ts.forEach(node.decorators, checkDecorator);
- }
- function checkFunctionDeclaration(node) {
- if (produceDiagnostics) {
- checkFunctionLikeDeclaration(node) ||
- checkGrammarDisallowedModifiersInBlockOrObjectLiteralExpression(node) ||
- checkGrammarFunctionName(node.name) ||
- checkGrammarForGenerator(node);
- checkCollisionWithCapturedSuperVariable(node, node.name);
- checkCollisionWithCapturedThisVariable(node, node.name);
- checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
- }
- }
- function checkFunctionLikeDeclaration(node) {
- checkGrammarDeclarationNameInStrictMode(node);
- checkDecorators(node);
- checkSignatureDeclaration(node);
- if (node.name && node.name.kind === 128) {
- 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) {
- checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(node, getTypeFromTypeNode(node.type));
- }
- if (compilerOptions.noImplicitAny && ts.nodeIsMissing(node.body) && !node.type && !isPrivateWithinAmbient(node)) {
- reportImplicitAnyError(node, anyType);
- }
- }
- function checkBlock(node) {
- if (node.kind === 180) {
- checkGrammarStatementInAmbientContext(node);
- }
- ts.forEach(node.statements, checkSourceElement);
- if (ts.isFunctionBlock(node) || node.kind === 207) {
- checkFunctionExpressionBodies(node);
- }
- }
- function checkCollisionWithArgumentsInGeneratedCode(node) {
- if (!ts.hasRestParameters(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 === 133 ||
- node.kind === 132 ||
- node.kind === 135 ||
- node.kind === 134 ||
- node.kind === 137 ||
- node.kind === 138) {
- return false;
- }
- if (ts.isInAmbientContext(node)) {
- return false;
- }
- var root = getRootDeclaration(node);
- if (root.kind === 130 && 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 !== 65;
- 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.getAncestor(node, 202);
- if (!enclosingClass || ts.isInAmbientContext(enclosingClass)) {
- return;
- }
- if (ts.getClassExtendsHeritageClauseElement(enclosingClass)) {
- var isDeclaration_2 = node.kind !== 65;
- 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 === 206 && ts.getModuleInstanceState(node) !== 1) {
- return;
- }
- var parent = getDeclarationContainer(node);
- if (parent.kind === 228 && 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) {
- // - ScriptBody : StatementList
- // It is a Syntax Error if any element of the LexicallyDeclaredNames of StatementList
- // also occurs in the VarDeclaredNames of StatementList.
- if ((ts.getCombinedNodeFlags(node) & 12288) !== 0 || isParameterDeclaration(node)) {
- return;
- }
- if (node.kind === 199 && !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) & 12288) {
- var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 200);
- var container = varDeclList.parent.kind === 181 && varDeclList.parent.parent
- ? varDeclList.parent.parent
- : undefined;
- var namesShareScope = container &&
- (container.kind === 180 && ts.isFunctionLike(container.parent) ||
- container.kind === 207 ||
- container.kind === 206 ||
- container.kind === 228);
- if (!namesShareScope) {
- var name_9 = symbolToString(localDeclarationSymbol);
- error(node, ts.Diagnostics.Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1, name_9, name_9);
- }
- }
- }
- }
- }
- function isParameterDeclaration(node) {
- while (node.kind === 153) {
- node = node.parent.parent;
- }
- return node.kind === 130;
- }
- function checkParameterInitializer(node) {
- if (getRootDeclaration(node).kind !== 130) {
- return;
- }
- var func = ts.getContainingFunction(node);
- visit(node.initializer);
- function visit(n) {
- if (n.kind === 65) {
- var referencedSymbol = getNodeLinks(n).resolvedSymbol;
- if (referencedSymbol && referencedSymbol !== unknownSymbol && getSymbol(func.locals, referencedSymbol.name, 107455) === referencedSymbol) {
- if (referencedSymbol.valueDeclaration.kind === 130) {
- 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) {
- checkGrammarDeclarationNameInStrictMode(node);
- checkDecorators(node);
- checkSourceElement(node.type);
- if (node.name.kind === 128) {
- checkComputedPropertyName(node.name);
- if (node.initializer) {
- checkExpressionCached(node.initializer);
- }
- }
- if (ts.isBindingPattern(node.name)) {
- ts.forEach(node.name.elements, checkSourceElement);
- }
- if (node.initializer && getRootDeclaration(node).kind === 130 && 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 !== 133 && node.kind !== 132) {
- checkExportsOnMergedDeclarations(node);
- if (node.kind === 199 || node.kind === 153) {
- 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) || checkGrammarDisallowedModifiersInBlockOrObjectLiteralExpression(node) || checkGrammarModifiers(node) || checkGrammarVariableDeclarationList(node.declarationList) || checkGrammarForDisallowedLetOrConstStatement(node);
- ts.forEach(node.declarationList.declarations, checkSourceElement);
- }
- function checkGrammarDisallowedModifiersInBlockOrObjectLiteralExpression(node) {
- if (node.modifiers) {
- if (inBlockOrObjectLiteralExpression(node)) {
- return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here);
- }
- }
- }
- function inBlockOrObjectLiteralExpression(node) {
- while (node) {
- if (node.kind === 180 || node.kind === 155) {
- return true;
- }
- node = node.parent;
- }
- }
- 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 == 200) {
- checkGrammarVariableDeclarationList(node.initializer);
- }
- }
- if (node.initializer) {
- if (node.initializer.kind === 200) {
- 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 === 200) {
- checkForInOrForOfVariableDeclaration(node);
- }
- else {
- var varExpr = node.initializer;
- var iteratedType = checkRightHandSideOfForOf(node.expression);
- if (varExpr.kind === 154 || varExpr.kind === 155) {
- 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 === 200) {
- 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 === 154 || varExpr.kind === 155) {
- error(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern);
- }
- else if (!allConstituentTypesHaveKind(leftType, 1 | 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 (!allConstituentTypesHaveKind(rightType, 1 | 48128 | 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 (inputType.flags & 1) {
- return inputType;
- }
- if (languageVersion >= 2) {
- return checkIteratedType(inputType, errorNode) || anyType;
- }
- 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 checkIteratedType(iterable, errorNode) {
- ts.Debug.assert(languageVersion >= 2);
- var iteratedType = getIteratedType(iterable, errorNode);
- if (errorNode && iteratedType) {
- checkTypeAssignableTo(iterable, createIterableType(iteratedType), errorNode);
- }
- return iteratedType;
- function getIteratedType(iterable, errorNode) {
- // We want to treat type as an iterable, and get the type it is an iterable of. The iterable
- // must have the following structure (annotated with the names of the variables below):
- //
- // { // iterable
- // [Symbol.iterator]: { // iteratorFunction
- // (): { // iterator
- // next: { // iteratorNextFunction
- // (): { // iteratorNextResult
- // value: T // iteratorNextValue
- // }
- // }
- // }
- // }
- // }
- //
- // T is the type we are after. At every level that involves analyzing return types
- // of signatures, we union the return types of all the signatures.
- //
- // Another thing to note is that at any step of this process, we could run into a dead end,
- // meaning either the property is missing, or we run into the anyType. If either of these things
- // happens, we return undefined to signal that we could not find the iterated type. If a property
- // is missing, and the previous step did not result in 'any', then we also give an error if the
- // caller requested it. Then the caller can decide what to do in the case where there is no iterated
- // type. This is different from returning anyType, because that would signify that we have matched the
- // whole pattern and that T (above) is 'any'.
- if (allConstituentTypesHaveKind(iterable, 1)) {
- return undefined;
- }
- if ((iterable.flags & 4096) && iterable.target === globalIterableType) {
- return iterable.typeArguments[0];
- }
- var iteratorFunction = getTypeOfPropertyOfType(iterable, ts.getPropertyNameForKnownSymbolName("iterator"));
- if (iteratorFunction && allConstituentTypesHaveKind(iteratorFunction, 1)) {
- 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;
- }
- var iterator = getUnionType(ts.map(iteratorFunctionSignatures, getReturnTypeOfSignature));
- if (allConstituentTypesHaveKind(iterator, 1)) {
- return undefined;
- }
- var iteratorNextFunction = getTypeOfPropertyOfType(iterator, "next");
- if (iteratorNextFunction && allConstituentTypesHaveKind(iteratorNextFunction, 1)) {
- 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 (allConstituentTypesHaveKind(iteratorNextResult, 1)) {
- 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;
- }
- return iteratorNextValue;
- }
- }
- 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 === 137 && getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(node.symbol, 138)));
- }
- 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 returnType = getReturnTypeOfSignature(getSignatureFromDeclaration(func));
- var exprType = checkExpressionCached(node.expression);
- if (func.kind === 138) {
- error(node.expression, ts.Diagnostics.Setters_cannot_return_a_value);
- }
- else {
- if (func.kind === 136) {
- 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)) {
- checkTypeAssignableTo(exprType, returnType, node.expression, undefined);
- }
- }
- }
- }
- }
- function checkWithStatement(node) {
- if (!checkGrammarStatementInAmbientContext(node)) {
- if (node.parserContextFlags & 1) {
- grammarErrorOnFirstToken(node, ts.Diagnostics.with_statements_are_not_allowed_in_strict_mode);
- }
- }
- 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 === 222 && !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 === 221) {
- 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 === 195 && 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 !== 65) {
- 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);
- }
- }
- checkGrammarEvalOrArgumentsInStrictMode(node, catchClause.variableDeclaration.name);
- }
- }
- 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 && type.symbol.valueDeclaration.kind === 202) {
- 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 === 128 || 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) {
- grammarErrorOnNode(node, ts.Diagnostics.class_expressions_are_not_currently_supported);
- ts.forEach(node.members, checkSourceElement);
- return unknownType;
- }
- function checkClassDeclaration(node) {
- checkGrammarDeclarationNameInStrictMode(node);
- if (node.parent.kind !== 207 && node.parent.kind !== 228) {
- grammarErrorOnNode(node, ts.Diagnostics.class_declarations_are_only_supported_directly_inside_a_module_or_as_a_top_level_declaration);
- }
- if (!node.name && !(node.flags & 256)) {
- grammarErrorOnFirstToken(node, ts.Diagnostics.A_class_declaration_without_the_default_modifier_must_have_a_name);
- }
- 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 staticType = getTypeOfSymbol(symbol);
- var baseTypeNode = ts.getClassExtendsHeritageClauseElement(node);
- if (baseTypeNode) {
- if (!ts.isSupportedExpressionWithTypeArguments(baseTypeNode)) {
- error(baseTypeNode.expression, ts.Diagnostics.Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_class_extends_clauses);
- }
- emitExtends = emitExtends || !ts.isInAmbientContext(node);
- checkExpressionWithTypeArguments(baseTypeNode);
- }
- var baseTypes = getBaseTypes(type);
- if (baseTypes.length) {
- if (produceDiagnostics) {
- var baseType = baseTypes[0];
- checkTypeAssignableTo(type, baseType, node.name || node, ts.Diagnostics.Class_0_incorrectly_extends_base_class_1);
- var staticBaseType = getTypeOfSymbol(baseType.symbol);
- checkTypeAssignableTo(staticType, getTypeWithoutConstructors(staticBaseType), node.name || node, ts.Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1);
- if (baseType.symbol !== resolveEntityName(baseTypeNode.expression, 107455)) {
- error(baseTypeNode, ts.Diagnostics.Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0, typeToString(baseType));
- }
- checkKindsOfPropertyMemberOverrides(type, baseType);
- }
- }
- if (baseTypes.length || (baseTypeNode && compilerOptions.isolatedModules)) {
- checkExpressionOrQualifiedName(baseTypeNode.expression);
- }
- var implementedTypeNodes = ts.getClassImplementsHeritageClauseElements(node);
- if (implementedTypeNodes) {
- ts.forEach(implementedTypeNodes, function (typeRefNode) {
- if (!ts.isSupportedExpressionWithTypeArguments(typeRefNode)) {
- error(typeRefNode.expression, ts.Diagnostics.A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments);
- }
- checkExpressionWithTypeArguments(typeRefNode);
- if (produceDiagnostics) {
- var t = getTypeFromTypeNode(typeRefNode);
- if (t !== unknownType) {
- var declaredType = (t.flags & 4096) ? t.target : t;
- if (declaredType.flags & (1024 | 2048)) {
- checkTypeAssignableTo(type, t, 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);
- }
- }
- }
- });
- }
- ts.forEach(node.members, checkSourceElement);
- if (produceDiagnostics) {
- checkIndexConstraints(type);
- checkTypeForDuplicateIndexSignatures(node);
- }
- }
- function getTargetSymbol(s) {
- return s.flags & 16777216 ? getSymbolLinks(s).target : s;
- }
- function checkKindsOfPropertyMemberOverrides(type, baseType) {
- // TypeScript 1.0 spec (April 2014): 8.2.3
- // A derived class inherits all members from its base class it doesn't override.
- // Inheritance means that a derived class implicitly contains all non - overridden members of the base class.
- // Both public and private property members are inherited, but only public property members can be overridden.
- // A property member in a derived class is said to override a property member in a base class
- // when the derived class property member has the same name and kind(instance or static)
- // as the base class property member.
- // The type of an overriding property member must be assignable(section 3.8.4)
- // to the type of the overridden property member, or otherwise a compile - time error occurs.
- // Base class instance member functions can be overridden by derived class instance member functions,
- // but not by other kinds of members.
- // Base class instance member variables and accessors can be overridden by
- // derived class instance member variables and accessors, but not by other kinds of members.
- 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));
- if (derived) {
- var baseDeclarationFlags = getDeclarationFlagsFromSymbol(base);
- 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 === 137 || kind === 138;
- }
- 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(base);
- 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) {
- checkGrammarDeclarationNameInStrictMode(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, 203);
- 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);
- if (checkInheritedPropertiesAreIdentical(type, node.name)) {
- ts.forEach(getBaseTypes(type), function (baseType) {
- checkTypeAssignableTo(type, baseType, 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);
- }
- checkExpressionWithTypeArguments(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 & 128)) {
- var enumSymbol = getSymbolOfNode(node);
- var enumType = getDeclaredTypeOfSymbol(enumSymbol);
- var autoValue = 0;
- var ambient = ts.isInAmbientContext(node);
- var enumIsConst = ts.isConst(node);
- ts.forEach(node.members, function (member) {
- if (member.name.kind !== 128 && isNumericLiteralName(member.name.text)) {
- error(member.name, ts.Diagnostics.An_enum_member_cannot_have_a_numeric_name);
- }
- var initializer = member.initializer;
- if (initializer) {
- autoValue = getConstantValueForEnumMemberInitializer(initializer);
- if (autoValue === undefined) {
- if (enumIsConst) {
- error(initializer, ts.Diagnostics.In_const_enum_declarations_member_initializer_must_be_constant_expression);
- }
- else if (!ambient) {
- checkTypeAssignableTo(checkExpression(initializer), enumType, initializer, undefined);
- }
- }
- else if (enumIsConst) {
- if (isNaN(autoValue)) {
- error(initializer, ts.Diagnostics.const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN);
- }
- else if (!isFinite(autoValue)) {
- error(initializer, ts.Diagnostics.const_enum_member_initializer_was_evaluated_to_a_non_finite_value);
- }
- }
- }
- else if (ambient && !enumIsConst) {
- autoValue = undefined;
- }
- if (autoValue !== undefined) {
- getNodeLinks(member).enumMemberValue = autoValue++;
- }
- });
- nodeLinks.flags |= 128;
- }
- function getConstantValueForEnumMemberInitializer(initializer) {
- return evalConstant(initializer);
- function evalConstant(e) {
- switch (e.kind) {
- case 168:
- var value = evalConstant(e.operand);
- if (value === undefined) {
- return undefined;
- }
- switch (e.operator) {
- case 33: return value;
- case 34: return -value;
- case 47: return ~value;
- }
- return undefined;
- case 170:
- 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 44: return left | right;
- case 43: return left & right;
- case 41: return left >> right;
- case 42: return left >>> right;
- case 40: return left << right;
- case 45: return left ^ right;
- case 35: return left * right;
- case 36: return left / right;
- case 33: return left + right;
- case 34: return left - right;
- case 37: return left % right;
- }
- return undefined;
- case 7:
- return +e.text;
- case 162:
- return evalConstant(e.expression);
- case 65:
- case 157:
- case 156:
- var member = initializer.parent;
- var currentType = getTypeOfSymbol(getSymbolOfNode(member.parent));
- var enumType;
- var propertyName;
- if (e.kind === 65) {
- enumType = currentType;
- propertyName = e.text;
- }
- else {
- var expression;
- if (e.kind === 157) {
- if (e.argumentExpression === undefined ||
- e.argumentExpression.kind !== 8) {
- 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 === 65) {
- break;
- }
- else if (current.kind === 156) {
- current = current.expression;
- }
- else {
- return undefined;
- }
- }
- enumType = checkExpression(expression);
- if (!(enumType.symbol && (enumType.symbol.flags & 384))) {
- return undefined;
- }
- }
- if (propertyName === undefined) {
- return undefined;
- }
- var property = getPropertyOfObjectType(enumType, propertyName);
- if (!property || !(property.flags & 8)) {
- return undefined;
- }
- var propertyDecl = property.valueDeclaration;
- if (member === propertyDecl) {
- return undefined;
- }
- if (!isDefinedBefore(propertyDecl, member)) {
- return undefined;
- }
- return getNodeLinks(propertyDecl).enumMemberValue;
- }
- }
- }
- }
- function checkEnumDeclaration(node) {
- if (!produceDiagnostics) {
- return;
- }
- checkGrammarDeclarationNameInStrictMode(node) || checkGrammarDecorators(node) || checkGrammarModifiers(node) || checkGrammarEnumDeclaration(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 !== 205) {
- 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 === 202 ||
- (declaration.kind === 201 && 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) {
- if (!checkGrammarDeclarationNameInStrictMode(node) && !checkGrammarDecorators(node) && !checkGrammarModifiers(node)) {
- if (!ts.isInAmbientContext(node) && node.name.kind === 8) {
- 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, 202);
- if (mergedClass &&
- inSameLexicalScope(node, mergedClass)) {
- getNodeLinks(node).flags |= 2048;
- }
- }
- if (node.name.kind === 8) {
- if (!isGlobalSourceFile(node.parent)) {
- error(node.name, ts.Diagnostics.Ambient_modules_cannot_be_nested_in_other_modules);
- }
- if (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 === 127) {
- node = node.left;
- }
- else if (node.kind === 156) {
- node = node.expression;
- }
- else {
- break;
- }
- }
- ts.Debug.assert(node.kind === 65);
- return node;
- }
- function checkExternalImportOrExportDeclaration(node) {
- var moduleName = ts.getExternalModuleName(node);
- if (!ts.nodeIsMissing(moduleName) && moduleName.kind !== 8) {
- error(moduleName, ts.Diagnostics.String_literal_expected);
- return false;
- }
- var inAmbientExternalModule = node.parent.kind === 207 && node.parent.parent.name.kind === 8;
- if (node.parent.kind !== 228 && !inAmbientExternalModule) {
- error(moduleName, node.kind === 216 ?
- 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 && 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 === 218 ?
- 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 (!checkGrammarImportDeclarationNameInStrictMode(node) && !checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 499)) {
- 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 === 212) {
- checkImportBinding(importClause.namedBindings);
- }
- else {
- ts.forEach(importClause.namedBindings.elements, checkImportBinding);
- }
- }
- }
- }
- }
- function checkImportEqualsDeclaration(node) {
- checkGrammarDeclarationNameInStrictMode(node) || 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 (languageVersion >= 2) {
- grammarErrorOnNode(node, ts.Diagnostics.Import_assignment_cannot_be_used_when_targeting_ECMAScript_6_or_higher_Consider_using_import_Asterisk_as_ns_from_mod_import_a_from_mod_or_import_d_from_mod_instead);
- }
- }
- }
- }
- function checkExportDeclaration(node) {
- if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 499)) {
- 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 === 207 && node.parent.parent.name.kind === 8;
- if (node.parent.kind !== 228 && !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 checkExportSpecifier(node) {
- checkAliasSymbol(node);
- if (!node.parent.parent.moduleSpecifier) {
- markExportAsReferenced(node);
- }
- }
- function checkExportAssignment(node) {
- var container = node.parent.kind === 228 ? node.parent : node.parent.parent;
- if (container.kind === 206 && container.name.kind === 65) {
- error(node, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_namespace);
- return;
- }
- if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 499)) {
- grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_assignment_cannot_have_modifiers);
- }
- if (node.expression.kind === 65) {
- markExportAsReferenced(node);
- }
- else {
- checkExpressionCached(node.expression);
- }
- checkExternalModuleExports(container);
- if (node.isExportEquals && !ts.isInAmbientContext(node)) {
- if (languageVersion >= 2) {
- grammarErrorOnNode(node, ts.Diagnostics.Export_assignment_cannot_be_used_when_targeting_ECMAScript_6_or_higher_Consider_using_export_default_instead);
- }
- else if (compilerOptions.module === 4) {
- grammarErrorOnNode(node, ts.Diagnostics.Export_assignment_is_not_supported_when_module_flag_is_system);
- }
- }
- }
- function getModuleStatements(node) {
- if (node.kind === 228) {
- return node.statements;
- }
- if (node.kind === 206 && node.body.kind === 207) {
- 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 checkSourceElement(node) {
- if (!node)
- return;
- switch (node.kind) {
- case 129:
- return checkTypeParameter(node);
- case 130:
- return checkParameter(node);
- case 133:
- case 132:
- return checkPropertyDeclaration(node);
- case 143:
- case 144:
- case 139:
- case 140:
- return checkSignatureDeclaration(node);
- case 141:
- return checkSignatureDeclaration(node);
- case 135:
- case 134:
- return checkMethodDeclaration(node);
- case 136:
- return checkConstructorDeclaration(node);
- case 137:
- case 138:
- return checkAccessorDeclaration(node);
- case 142:
- return checkTypeReferenceNode(node);
- case 145:
- return checkTypeQuery(node);
- case 146:
- return checkTypeLiteral(node);
- case 147:
- return checkArrayType(node);
- case 148:
- return checkTupleType(node);
- case 149:
- return checkUnionType(node);
- case 150:
- return checkSourceElement(node.type);
- case 201:
- return checkFunctionDeclaration(node);
- case 180:
- case 207:
- return checkBlock(node);
- case 181:
- return checkVariableStatement(node);
- case 183:
- return checkExpressionStatement(node);
- case 184:
- return checkIfStatement(node);
- case 185:
- return checkDoStatement(node);
- case 186:
- return checkWhileStatement(node);
- case 187:
- return checkForStatement(node);
- case 188:
- return checkForInStatement(node);
- case 189:
- return checkForOfStatement(node);
- case 190:
- case 191:
- return checkBreakOrContinueStatement(node);
- case 192:
- return checkReturnStatement(node);
- case 193:
- return checkWithStatement(node);
- case 194:
- return checkSwitchStatement(node);
- case 195:
- return checkLabeledStatement(node);
- case 196:
- return checkThrowStatement(node);
- case 197:
- return checkTryStatement(node);
- case 199:
- return checkVariableDeclaration(node);
- case 153:
- return checkBindingElement(node);
- case 202:
- return checkClassDeclaration(node);
- case 203:
- return checkInterfaceDeclaration(node);
- case 204:
- return checkTypeAliasDeclaration(node);
- case 205:
- return checkEnumDeclaration(node);
- case 206:
- return checkModuleDeclaration(node);
- case 210:
- return checkImportDeclaration(node);
- case 209:
- return checkImportEqualsDeclaration(node);
- case 216:
- return checkExportDeclaration(node);
- case 215:
- return checkExportAssignment(node);
- case 182:
- checkGrammarStatementInAmbientContext(node);
- return;
- case 198:
- checkGrammarStatementInAmbientContext(node);
- return;
- case 219:
- return checkMissingDeclaration(node);
- }
- }
- function checkFunctionExpressionBodies(node) {
- switch (node.kind) {
- case 163:
- case 164:
- ts.forEach(node.parameters, checkFunctionExpressionBodies);
- checkFunctionExpressionOrObjectLiteralMethodBody(node);
- break;
- case 135:
- case 134:
- ts.forEach(node.decorators, checkFunctionExpressionBodies);
- ts.forEach(node.parameters, checkFunctionExpressionBodies);
- if (ts.isObjectLiteralMethod(node)) {
- checkFunctionExpressionOrObjectLiteralMethodBody(node);
- }
- break;
- case 136:
- case 137:
- case 138:
- case 201:
- ts.forEach(node.parameters, checkFunctionExpressionBodies);
- break;
- case 193:
- checkFunctionExpressionBodies(node.expression);
- break;
- case 131:
- case 130:
- case 133:
- case 132:
- case 151:
- case 152:
- case 153:
- case 154:
- case 155:
- case 225:
- case 156:
- case 157:
- case 158:
- case 159:
- case 160:
- case 172:
- case 178:
- case 161:
- case 162:
- case 166:
- case 167:
- case 165:
- case 168:
- case 169:
- case 170:
- case 171:
- case 174:
- case 180:
- case 207:
- case 181:
- case 183:
- case 184:
- case 185:
- case 186:
- case 187:
- case 188:
- case 189:
- case 190:
- case 191:
- case 192:
- case 194:
- case 208:
- case 221:
- case 222:
- case 195:
- case 196:
- case 197:
- case 224:
- case 199:
- case 200:
- case 202:
- case 205:
- case 227:
- case 215:
- case 228:
- ts.forEachChild(node, checkFunctionExpressionBodies);
- 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)) {
- checkGrammarSourceFile(node);
- emitExtends = false;
- emitDecorate = false;
- emitParam = false;
- potentialThisCollisions.length = 0;
- ts.forEach(node.statements, checkSourceElement);
- checkFunctionExpressionBodies(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 |= 512;
- }
- if (emitParam) {
- links.flags |= 1024;
- }
- links.flags |= 1;
- }
- }
- function getDiagnostics(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 === 193 && 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 228:
- if (!ts.isExternalModule(location)) {
- break;
- }
- case 206:
- copySymbols(getSymbolOfNode(location).exports, meaning & 8914931);
- break;
- case 205:
- copySymbols(getSymbolOfNode(location).exports, meaning & 8);
- break;
- case 202:
- case 203:
- if (!(memberFlags & 128)) {
- copySymbols(getSymbolOfNode(location).members, meaning & 793056);
- }
- break;
- case 163:
- if (location.name) {
- copySymbol(location.symbol, meaning);
- }
- break;
- }
- memberFlags = location.flags;
- location = location.parent;
- }
- copySymbols(globals, meaning);
- }
- function copySymbol(symbol, meaning) {
- if (symbol.flags & meaning) {
- var id = symbol.name;
- if (!isReservedMemberName(id) && !ts.hasProperty(symbols, id)) {
- symbols[id] = symbol;
- }
- }
- }
- function copySymbols(source, meaning) {
- if (meaning) {
- for (var id in source) {
- if (ts.hasProperty(source, id)) {
- copySymbol(source[id], meaning);
- }
- }
- }
- }
- if (isInsideWithStatementBody(location)) {
- return [];
- }
- while (location) {
- if (location.locals && !isGlobalSourceFile(location)) {
- copySymbols(location.locals, meaning);
- }
- switch (location.kind) {
- case 228:
- if (!ts.isExternalModule(location))
- break;
- case 206:
- copySymbols(getSymbolOfNode(location).exports, meaning & 8914931);
- break;
- case 205:
- copySymbols(getSymbolOfNode(location).exports, meaning & 8);
- break;
- case 202:
- case 203:
- if (!(memberFlags & 128)) {
- copySymbols(getSymbolOfNode(location).members, meaning & 793056);
- }
- break;
- case 163:
- if (location.name) {
- copySymbol(location.symbol, meaning);
- }
- break;
- }
- memberFlags = location.flags;
- location = location.parent;
- }
- copySymbols(globals, meaning);
- return symbolsToArray(symbols);
- }
- function isTypeDeclarationName(name) {
- return name.kind == 65 &&
- isTypeDeclaration(name.parent) &&
- name.parent.name === name;
- }
- function isTypeDeclaration(node) {
- switch (node.kind) {
- case 129:
- case 202:
- case 203:
- case 204:
- case 205:
- return true;
- }
- }
- function isTypeReferenceIdentifier(entityName) {
- var node = entityName;
- while (node.parent && node.parent.kind === 127) {
- node = node.parent;
- }
- return node.parent && node.parent.kind === 142;
- }
- function isHeritageClauseElementIdentifier(entityName) {
- var node = entityName;
- while (node.parent && node.parent.kind === 156) {
- node = node.parent;
- }
- return node.parent && node.parent.kind === 177;
- }
- function isTypeNode(node) {
- if (142 <= node.kind && node.kind <= 150) {
- return true;
- }
- switch (node.kind) {
- case 112:
- case 120:
- case 122:
- case 113:
- case 123:
- return true;
- case 99:
- return node.parent.kind !== 167;
- case 8:
- return node.parent.kind === 130;
- case 177:
- return true;
- case 65:
- if (node.parent.kind === 127 && node.parent.right === node) {
- node = node.parent;
- }
- else if (node.parent.kind === 156 && node.parent.name === node) {
- node = node.parent;
- }
- case 127:
- case 156:
- ts.Debug.assert(node.kind === 65 || node.kind === 127 || node.kind === 156, "'node' was expected to be a qualified name, identifier or property access in 'isTypeNode'.");
- var parent_5 = node.parent;
- if (parent_5.kind === 145) {
- return false;
- }
- if (142 <= parent_5.kind && parent_5.kind <= 150) {
- return true;
- }
- switch (parent_5.kind) {
- case 177:
- return true;
- case 129:
- return node === parent_5.constraint;
- case 133:
- case 132:
- case 130:
- case 199:
- return node === parent_5.type;
- case 201:
- case 163:
- case 164:
- case 136:
- case 135:
- case 134:
- case 137:
- case 138:
- return node === parent_5.type;
- case 139:
- case 140:
- case 141:
- return node === parent_5.type;
- case 161:
- return node === parent_5.type;
- case 158:
- case 159:
- return parent_5.typeArguments && ts.indexOf(parent_5.typeArguments, node) >= 0;
- case 160:
- return false;
- }
- }
- return false;
- }
- function getLeftSideOfImportEqualsOrExportAssignment(nodeOnRightSide) {
- while (nodeOnRightSide.parent.kind === 127) {
- nodeOnRightSide = nodeOnRightSide.parent;
- }
- if (nodeOnRightSide.parent.kind === 209) {
- return nodeOnRightSide.parent.moduleReference === nodeOnRightSide && nodeOnRightSide.parent;
- }
- if (nodeOnRightSide.parent.kind === 215) {
- 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 === 215) {
- return resolveEntityName(entityName, 107455 | 793056 | 1536 | 8388608);
- }
- if (entityName.kind !== 156) {
- if (isInRightSideOfImportOrExportAssignment(entityName)) {
- return getSymbolOfPartOfRightHandSideOfImportEquals(entityName);
- }
- }
- if (ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) {
- entityName = entityName.parent;
- }
- if (isHeritageClauseElementIdentifier(entityName)) {
- var meaning = entityName.parent.kind === 177 ? 793056 : 1536;
- meaning |= 8388608;
- return resolveEntityName(entityName, meaning);
- }
- else if (ts.isExpression(entityName)) {
- if (ts.nodeIsMissing(entityName)) {
- return undefined;
- }
- if (entityName.kind === 65) {
- var meaning = 107455 | 8388608;
- return resolveEntityName(entityName, meaning);
- }
- else if (entityName.kind === 156) {
- var symbol = getNodeLinks(entityName).resolvedSymbol;
- if (!symbol) {
- checkPropertyAccessExpression(entityName);
- }
- return getNodeLinks(entityName).resolvedSymbol;
- }
- else if (entityName.kind === 127) {
- var symbol = getNodeLinks(entityName).resolvedSymbol;
- if (!symbol) {
- checkQualifiedName(entityName);
- }
- return getNodeLinks(entityName).resolvedSymbol;
- }
- }
- else if (isTypeReferenceIdentifier(entityName)) {
- var meaning = entityName.parent.kind === 142 ? 793056 : 1536;
- meaning |= 8388608;
- return resolveEntityName(entityName, meaning);
- }
- return undefined;
- }
- function getSymbolInfo(node) {
- if (isInsideWithStatementBody(node)) {
- return undefined;
- }
- if (ts.isDeclarationName(node)) {
- return getSymbolOfNode(node.parent);
- }
- if (node.kind === 65 && isInRightSideOfImportOrExportAssignment(node)) {
- return node.parent.kind === 215
- ? getSymbolOfEntityNameOrPropertyAccessExpression(node)
- : getSymbolOfPartOfRightHandSideOfImportEquals(node);
- }
- switch (node.kind) {
- case 65:
- case 156:
- case 127:
- return getSymbolOfEntityNameOrPropertyAccessExpression(node);
- case 93:
- case 91:
- var type = checkExpression(node);
- return type.symbol;
- case 114:
- var constructorDeclaration = node.parent;
- if (constructorDeclaration && constructorDeclaration.kind === 136) {
- return constructorDeclaration.parent.symbol;
- }
- return undefined;
- case 8:
- var moduleName;
- if ((ts.isExternalModuleImportEqualsDeclaration(node.parent.parent) &&
- ts.getExternalModuleImportEqualsDeclarationExpression(node.parent.parent) === node) ||
- ((node.parent.kind === 210 || node.parent.kind === 216) &&
- node.parent.moduleSpecifier === node)) {
- return resolveExternalModuleName(node, node);
- }
- case 7:
- if (node.parent.kind == 157 && 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 === 226) {
- return resolveEntityName(location.name, 107455);
- }
- return undefined;
- }
- function getTypeOfNode(node) {
- if (isInsideWithStatementBody(node)) {
- return unknownType;
- }
- if (isTypeNode(node)) {
- return getTypeFromTypeNode(node);
- }
- if (ts.isExpression(node)) {
- return getTypeOfExpression(node);
- }
- if (isTypeDeclaration(node)) {
- var symbol = getSymbolOfNode(node);
- return getDeclaredTypeOfSymbol(symbol);
- }
- if (isTypeDeclarationName(node)) {
- var symbol = getSymbolInfo(node);
- return symbol && getDeclaredTypeOfSymbol(symbol);
- }
- if (ts.isDeclaration(node)) {
- var symbol = getSymbolOfNode(node);
- return getTypeOfSymbol(symbol);
- }
- if (ts.isDeclarationName(node)) {
- var symbol = getSymbolInfo(node);
- return symbol && getTypeOfSymbol(symbol);
- }
- if (isInRightSideOfImportOrExportAssignment(node)) {
- var symbol = getSymbolInfo(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 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_10 = symbol.name;
- ts.forEach(getSymbolLinks(symbol).unionType.types, function (t) {
- symbols.push(getPropertyOfType(t, name_10));
- });
- return symbols;
- }
- else if (symbol.flags & 67108864) {
- var target = getSymbolLinks(symbol).target;
- if (target) {
- return [target];
- }
- }
- return [symbol];
- }
- function isExternalModuleSymbol(symbol) {
- return symbol.flags & 512 && symbol.declarations.length === 1 && symbol.declarations[0].kind === 228;
- }
- function getAliasNameSubstitution(symbol, getGeneratedNameForNode) {
- if (languageVersion >= 2) {
- return undefined;
- }
- var node = getDeclarationOfAliasSymbol(symbol);
- if (node) {
- if (node.kind === 211) {
- var defaultKeyword;
- if (languageVersion === 0) {
- defaultKeyword = "[\"default\"]";
- }
- else {
- defaultKeyword = ".default";
- }
- return getGeneratedNameForNode(node.parent) + defaultKeyword;
- }
- if (node.kind === 214) {
- var moduleName = getGeneratedNameForNode(node.parent.parent.parent);
- var propertyName = node.propertyName || node.name;
- return moduleName + "." + ts.unescapeIdentifier(propertyName.text);
- }
- }
- }
- function getExportNameSubstitution(symbol, location, getGeneratedNameForNode) {
- if (isExternalModuleSymbol(symbol.parent)) {
- if (languageVersion >= 2 || compilerOptions.module === 4) {
- return undefined;
- }
- return "exports." + ts.unescapeIdentifier(symbol.name);
- }
- var node = location;
- var containerSymbol = getParentOfSymbol(symbol);
- while (node) {
- if ((node.kind === 206 || node.kind === 205) && getSymbolOfNode(node) === containerSymbol) {
- return getGeneratedNameForNode(node) + "." + ts.unescapeIdentifier(symbol.name);
- }
- node = node.parent;
- }
- }
- function getExpressionNameSubstitution(node, getGeneratedNameForNode) {
- var symbol = getNodeLinks(node).resolvedSymbol || (ts.isDeclarationName(node) ? getSymbolOfNode(node.parent) : undefined);
- if (symbol) {
- if (symbol.parent) {
- return getExportNameSubstitution(symbol, node.parent, getGeneratedNameForNode);
- }
- var exportSymbol = getExportSymbolOfValueSymbolIfExported(symbol);
- if (symbol !== exportSymbol && !(exportSymbol.flags & 944)) {
- return getExportNameSubstitution(exportSymbol, node.parent, getGeneratedNameForNode);
- }
- if (symbol.flags & 8388608) {
- return getAliasNameSubstitution(symbol, getGeneratedNameForNode);
- }
- }
- }
- function isValueAliasDeclaration(node) {
- switch (node.kind) {
- case 209:
- case 211:
- case 212:
- case 214:
- case 218:
- return isAliasResolvedToValue(getSymbolOfNode(node));
- case 216:
- var exportClause = node.exportClause;
- return exportClause && ts.forEach(exportClause.elements, isValueAliasDeclaration);
- case 215:
- return node.expression && node.expression.kind === 65 ? isAliasResolvedToValue(getSymbolOfNode(node)) : true;
- }
- return false;
- }
- function isTopLevelValueImportEqualsWithEntityName(node) {
- if (node.parent.kind !== 228 || !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 && !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 === 227) {
- 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 serializeEntityName(node, getGeneratedNameForNode, fallbackPath) {
- if (node.kind === 65) {
- var substitution = getExpressionNameSubstitution(node, getGeneratedNameForNode);
- var text = substitution || node.text;
- if (fallbackPath) {
- fallbackPath.push(text);
- }
- else {
- return text;
- }
- }
- else {
- var left = serializeEntityName(node.left, getGeneratedNameForNode, fallbackPath);
- var right = serializeEntityName(node.right, getGeneratedNameForNode, fallbackPath);
- if (!fallbackPath) {
- return left + "." + right;
- }
- }
- }
- function serializeTypeReferenceNode(node, getGeneratedNameForNode) {
- var type = getTypeFromTypeNode(node);
- if (type.flags & 16) {
- return "void 0";
- }
- else if (type.flags & 8) {
- return "Boolean";
- }
- else if (type.flags & 132) {
- return "Number";
- }
- else if (type.flags & 258) {
- return "String";
- }
- else if (type.flags & 8192) {
- return "Array";
- }
- else if (type.flags & 1048576) {
- return "Symbol";
- }
- else if (type === unknownType) {
- var fallbackPath = [];
- serializeEntityName(node.typeName, getGeneratedNameForNode, fallbackPath);
- return fallbackPath;
- }
- else if (type.symbol && type.symbol.valueDeclaration) {
- return serializeEntityName(node.typeName, getGeneratedNameForNode);
- }
- else if (typeHasCallOrConstructSignatures(type)) {
- return "Function";
- }
- return "Object";
- }
- function serializeTypeNode(node, getGeneratedNameForNode) {
- if (node) {
- switch (node.kind) {
- case 99:
- return "void 0";
- case 150:
- return serializeTypeNode(node.type, getGeneratedNameForNode);
- case 143:
- case 144:
- return "Function";
- case 147:
- case 148:
- return "Array";
- case 113:
- return "Boolean";
- case 122:
- case 8:
- return "String";
- case 120:
- return "Number";
- case 142:
- return serializeTypeReferenceNode(node, getGeneratedNameForNode);
- case 145:
- case 146:
- case 149:
- case 112:
- break;
- default:
- ts.Debug.fail("Cannot serialize unexpected type node.");
- break;
- }
- }
- return "Object";
- }
- function serializeTypeOfNode(node, getGeneratedNameForNode) {
- switch (node.kind) {
- case 202: return "Function";
- case 133: return serializeTypeNode(node.type, getGeneratedNameForNode);
- case 130: return serializeTypeNode(node.type, getGeneratedNameForNode);
- case 137: return serializeTypeNode(node.type, getGeneratedNameForNode);
- case 138: return serializeTypeNode(getSetAccessorTypeAnnotationNode(node), getGeneratedNameForNode);
- }
- if (ts.isFunctionLike(node)) {
- return "Function";
- }
- return "void 0";
- }
- function serializeParameterTypesOfNode(node, getGeneratedNameForNode) {
- if (node) {
- var valueDeclaration;
- if (node.kind === 202) {
- valueDeclaration = ts.getFirstConstructorWithBody(node);
- }
- else if (ts.isFunctionLike(node) && ts.nodeIsPresent(node.body)) {
- valueDeclaration = node;
- }
- if (valueDeclaration) {
- var result;
- var parameters = valueDeclaration.parameters;
- var parameterCount = parameters.length;
- if (parameterCount > 0) {
- result = new Array(parameterCount);
- for (var i = 0; i < parameterCount; i++) {
- if (parameters[i].dotDotDotToken) {
- var parameterType = parameters[i].type;
- if (parameterType.kind === 147) {
- parameterType = parameterType.elementType;
- }
- else if (parameterType.kind === 142 && parameterType.typeArguments && parameterType.typeArguments.length === 1) {
- parameterType = parameterType.typeArguments[0];
- }
- else {
- parameterType = undefined;
- }
- result[i] = serializeTypeNode(parameterType, getGeneratedNameForNode);
- }
- else {
- result[i] = serializeTypeOfNode(parameters[i], getGeneratedNameForNode);
- }
- }
- return result;
- }
- }
- }
- return emptyArray;
- }
- function serializeReturnTypeOfNode(node, getGeneratedNameForNode) {
- if (node && ts.isFunctionLike(node)) {
- return serializeTypeNode(node.type, getGeneratedNameForNode);
- }
- return "void 0";
- }
- 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 resolvesToSomeValue(location, name) {
- ts.Debug.assert(!ts.nodeIsSynthesized(location), "resolvesToSomeValue called with a synthesized location");
- return !!resolveName(location, name, 107455, undefined, undefined);
- }
- function getReferencedValueDeclaration(reference) {
- ts.Debug.assert(!ts.nodeIsSynthesized(reference));
- var symbol = getNodeLinks(reference).resolvedSymbol ||
- resolveName(reference, reference.text, 107455 | 8388608, undefined, undefined);
- return symbol && getExportSymbolOfValueSymbolIfExported(symbol).valueDeclaration;
- }
- function getBlockScopedVariableId(n) {
- ts.Debug.assert(!ts.nodeIsSynthesized(n));
- var isVariableDeclarationOrBindingElement = n.parent.kind === 153 || (n.parent.kind === 199 && n.parent.name === n);
- var symbol = (isVariableDeclarationOrBindingElement ? getSymbolOfNode(n.parent) : undefined) ||
- getNodeLinks(n).resolvedSymbol ||
- resolveName(n, n.text, 107455 | 8388608, undefined, undefined);
- var isLetOrConst = symbol &&
- (symbol.flags & 2) &&
- symbol.valueDeclaration.parent.kind !== 224;
- if (isLetOrConst) {
- getSymbolLinks(symbol);
- return symbol.id;
- }
- return undefined;
- }
- 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 {
- getExpressionNameSubstitution: getExpressionNameSubstitution,
- 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,
- resolvesToSomeValue: resolvesToSomeValue,
- collectLinkedAliases: collectLinkedAliases,
- getBlockScopedVariableId: getBlockScopedVariableId,
- getReferencedValueDeclaration: getReferencedValueDeclaration,
- serializeTypeOfNode: serializeTypeOfNode,
- serializeParameterTypesOfNode: serializeParameterTypesOfNode,
- serializeReturnTypeOfNode: serializeReturnTypeOfNode
- };
- }
- 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;
- globalArraySymbol = getGlobalTypeSymbol("Array");
- globalArrayType = getTypeOfGlobalSymbol(globalArraySymbol, 1);
- globalObjectType = getGlobalType("Object");
- globalFunctionType = getGlobalType("Function");
- globalStringType = getGlobalType("String");
- globalNumberType = getGlobalType("Number");
- globalBooleanType = getGlobalType("Boolean");
- globalRegExpType = getGlobalType("RegExp");
- 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"); });
- if (languageVersion >= 2) {
- globalTemplateStringsArrayType = getGlobalType("TemplateStringsArray");
- globalESSymbolType = getGlobalType("Symbol");
- globalESSymbolConstructorSymbol = getGlobalValueSymbol("Symbol");
- globalIterableType = getGlobalType("Iterable", 1);
- }
- else {
- globalTemplateStringsArrayType = unknownType;
- globalESSymbolType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
- globalESSymbolConstructorSymbol = undefined;
- }
- anyArrayType = createArrayType(anyType);
- }
- function isReservedWordInStrictMode(node) {
- return (node.parserContextFlags & 1) &&
- (102 <= node.originalKeywordKind && node.originalKeywordKind <= 110);
- }
- function reportStrictModeGrammarErrorInClassDeclaration(identifier, message, arg0, arg1, arg2) {
- if (ts.getAncestor(identifier, 202) || ts.getAncestor(identifier, 175)) {
- return grammarErrorOnNode(identifier, message, arg0);
- }
- return false;
- }
- function checkGrammarImportDeclarationNameInStrictMode(node) {
- if (node.importClause) {
- var impotClause = node.importClause;
- if (impotClause.namedBindings) {
- var nameBindings = impotClause.namedBindings;
- if (nameBindings.kind === 212) {
- var name_11 = nameBindings.name;
- if (isReservedWordInStrictMode(name_11)) {
- var nameText = ts.declarationNameToString(name_11);
- return grammarErrorOnNode(name_11, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode, nameText);
- }
- }
- else if (nameBindings.kind === 213) {
- var reportError = false;
- for (var _i = 0, _a = nameBindings.elements; _i < _a.length; _i++) {
- var element = _a[_i];
- var name_12 = element.name;
- if (isReservedWordInStrictMode(name_12)) {
- var nameText = ts.declarationNameToString(name_12);
- reportError = reportError || grammarErrorOnNode(name_12, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode, nameText);
- }
- }
- return reportError;
- }
- }
- }
- return false;
- }
- function checkGrammarDeclarationNameInStrictMode(node) {
- var name = node.name;
- if (name && name.kind === 65 && isReservedWordInStrictMode(name)) {
- var nameText = ts.declarationNameToString(name);
- switch (node.kind) {
- case 130:
- case 199:
- case 201:
- case 129:
- case 153:
- case 203:
- case 204:
- case 205:
- return checkGrammarIdentifierInStrictMode(name);
- case 202:
- return grammarErrorOnNode(name, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode, nameText);
- case 206:
- return grammarErrorOnNode(name, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode, nameText);
- case 209:
- return grammarErrorOnNode(name, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode, nameText);
- }
- }
- return false;
- }
- function checkGrammarTypeReferenceInStrictMode(typeName) {
- if (typeName.kind === 65) {
- checkGrammarTypeNameInStrictMode(typeName);
- }
- else if (typeName.kind === 127) {
- checkGrammarTypeNameInStrictMode(typeName.right);
- checkGrammarTypeReferenceInStrictMode(typeName.left);
- }
- }
- function checkGrammarExpressionWithTypeArgumentsInStrictMode(expression) {
- if (expression && expression.kind === 65) {
- return checkGrammarIdentifierInStrictMode(expression);
- }
- else if (expression && expression.kind === 156) {
- checkGrammarExpressionWithTypeArgumentsInStrictMode(expression.expression);
- }
- }
- function checkGrammarIdentifierInStrictMode(node, nameText) {
- if (node && node.kind === 65 && isReservedWordInStrictMode(node)) {
- if (!nameText) {
- nameText = ts.declarationNameToString(node);
- }
- var errorReport = reportStrictModeGrammarErrorInClassDeclaration(node, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode, nameText) ||
- grammarErrorOnNode(node, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode, nameText);
- return errorReport;
- }
- return false;
- }
- function checkGrammarTypeNameInStrictMode(node) {
- if (node && node.kind === 65 && isReservedWordInStrictMode(node)) {
- var nameText = ts.declarationNameToString(node);
- var errorReport = reportStrictModeGrammarErrorInClassDeclaration(node, ts.Diagnostics.Type_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode, nameText) ||
- grammarErrorOnNode(node, ts.Diagnostics.Type_expected_0_is_a_reserved_word_in_strict_mode, nameText);
- return errorReport;
- }
- return false;
- }
- function checkGrammarDecorators(node) {
- if (!node.decorators) {
- return false;
- }
- if (!ts.nodeCanBeDecorated(node)) {
- return grammarErrorOnFirstToken(node, ts.Diagnostics.Decorators_are_not_valid_here);
- }
- else if (languageVersion < 1) {
- return grammarErrorOnFirstToken(node, ts.Diagnostics.Decorators_are_only_available_when_targeting_ECMAScript_5_and_higher);
- }
- else if (node.kind === 137 || node.kind === 138) {
- 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 137:
- case 138:
- case 136:
- case 133:
- case 132:
- case 135:
- case 134:
- case 141:
- case 202:
- case 203:
- case 206:
- case 205:
- case 181:
- case 201:
- case 204:
- case 210:
- case 209:
- case 216:
- case 215:
- case 130:
- break;
- default:
- return false;
- }
- if (!node.modifiers) {
- return;
- }
- var lastStatic, lastPrivate, lastProtected, lastDeclare;
- var flags = 0;
- for (var _i = 0, _a = node.modifiers; _i < _a.length; _i++) {
- var modifier = _a[_i];
- switch (modifier.kind) {
- case 108:
- case 107:
- case 106:
- var text = void 0;
- if (modifier.kind === 108) {
- text = "public";
- }
- else if (modifier.kind === 107) {
- 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 (node.parent.kind === 207 || node.parent.kind === 228) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, text);
- }
- flags |= ts.modifierToFlag(modifier.kind);
- break;
- case 109:
- if (flags & 128) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "static");
- }
- else if (node.parent.kind === 207 || node.parent.kind === 228) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "static");
- }
- else if (node.kind === 130) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static");
- }
- flags |= 128;
- lastStatic = modifier;
- break;
- case 78:
- 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 (node.parent.kind === 202) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "export");
- }
- else if (node.kind === 130) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export");
- }
- flags |= 1;
- break;
- case 115:
- if (flags & 2) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "declare");
- }
- else if (node.parent.kind === 202) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "declare");
- }
- else if (node.kind === 130) {
- return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare");
- }
- else if (ts.isInAmbientContext(node.parent) && node.parent.kind === 207) {
- return grammarErrorOnNode(modifier, ts.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context);
- }
- flags |= 2;
- lastDeclare = modifier;
- break;
- }
- }
- if (node.kind === 136) {
- if (flags & 128) {
- return grammarErrorOnNode(lastStatic, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static");
- }
- 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 ((node.kind === 210 || node.kind === 209) && flags & 2) {
- return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_declare_modifier_cannot_be_used_with_an_import_declaration, "declare");
- }
- else if (node.kind === 203 && flags & 2) {
- return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_declare_modifier_cannot_be_used_with_an_interface_declaration, "declare");
- }
- else if (node.kind === 130 && (flags & 112) && ts.isBindingPattern(node.name)) {
- return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_may_not_be_a_binding_pattern);
- }
- }
- 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 || parameter.initializer) {
- seenOptionalParameter = true;
- if (parameter.questionToken && parameter.initializer) {
- return grammarErrorOnNode(parameter.name, ts.Diagnostics.Parameter_cannot_have_question_mark_and_initializer);
- }
- }
- else {
- if (seenOptionalParameter) {
- 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 === 164) {
- 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 & 499) {
- 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 !== 122 && parameter.type.kind !== 120) {
- 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 & 499) {
- 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, arguments) {
- if (arguments) {
- var sourceFile = ts.getSourceFileOfNode(node);
- for (var _i = 0; _i < arguments.length; _i++) {
- var arg = arguments[_i];
- if (arg.kind === 176) {
- return grammarErrorAtPos(sourceFile, arg.pos, 0, ts.Diagnostics.Argument_expression_expected);
- }
- }
- }
- }
- function checkGrammarArguments(node, arguments) {
- return checkGrammarForDisallowedTrailingComma(arguments) ||
- checkGrammarForOmittedArgument(node, arguments);
- }
- 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 === 79) {
- 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 === 102);
- 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 === 79) {
- if (seenExtendsClause) {
- return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen);
- }
- seenExtendsClause = true;
- }
- else {
- ts.Debug.assert(heritageClause.token === 102);
- return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.Interface_declaration_cannot_have_implements_clause);
- }
- checkGrammarHeritageClause(heritageClause);
- }
- }
- return false;
- }
- function checkGrammarComputedPropertyName(node) {
- if (node.kind !== 128) {
- return false;
- }
- var computedPropertyName = node;
- if (computedPropertyName.expression.kind === 170 && computedPropertyName.expression.operatorToken.kind === 23) {
- return grammarErrorOnNode(computedPropertyName.expression, ts.Diagnostics.A_comma_expression_is_not_allowed_in_a_computed_property_name);
- }
- }
- function checkGrammarForGenerator(node) {
- if (node.asteriskToken) {
- return grammarErrorOnNode(node.asteriskToken, ts.Diagnostics.Generators_are_not_currently_supported);
- }
- }
- function checkGrammarFunctionName(name) {
- return checkGrammarEvalOrArgumentsInStrictMode(name, name);
- }
- function checkGrammarForInvalidQuestionMark(node, questionToken, message) {
- if (questionToken) {
- return grammarErrorOnNode(questionToken, message);
- }
- }
- function checkGrammarObjectLiteralExpression(node) {
- var seen = {};
- var Property = 1;
- var GetAccessor = 2;
- var SetAccesor = 4;
- var GetOrSetAccessor = GetAccessor | SetAccesor;
- var inStrictMode = (node.parserContextFlags & 1) !== 0;
- for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
- var prop = _a[_i];
- var name_13 = prop.name;
- if (prop.kind === 176 ||
- name_13.kind === 128) {
- checkGrammarComputedPropertyName(name_13);
- continue;
- }
- var currentKind = void 0;
- if (prop.kind === 225 || prop.kind === 226) {
- checkGrammarForInvalidQuestionMark(prop, prop.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional);
- if (name_13.kind === 7) {
- checkGrammarNumericLiteral(name_13);
- }
- currentKind = Property;
- }
- else if (prop.kind === 135) {
- currentKind = Property;
- }
- else if (prop.kind === 137) {
- currentKind = GetAccessor;
- }
- else if (prop.kind === 138) {
- currentKind = SetAccesor;
- }
- else {
- ts.Debug.fail("Unexpected syntax kind:" + prop.kind);
- }
- if (!ts.hasProperty(seen, name_13.text)) {
- seen[name_13.text] = currentKind;
- }
- else {
- var existingKind = seen[name_13.text];
- if (currentKind === Property && existingKind === Property) {
- if (inStrictMode) {
- grammarErrorOnNode(name_13, ts.Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode);
- }
- }
- else if ((currentKind & GetOrSetAccessor) && (existingKind & GetOrSetAccessor)) {
- if (existingKind !== GetOrSetAccessor && currentKind !== existingKind) {
- seen[name_13.text] = currentKind | existingKind;
- }
- else {
- return grammarErrorOnNode(name_13, ts.Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name);
- }
- }
- else {
- return grammarErrorOnNode(name_13, ts.Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name);
- }
- }
- }
- }
- function checkGrammarForInOrForOfStatement(forInOrOfStatement) {
- if (checkGrammarStatementInAmbientContext(forInOrOfStatement)) {
- return true;
- }
- if (forInOrOfStatement.initializer.kind === 200) {
- var variableList = forInOrOfStatement.initializer;
- if (!checkGrammarVariableDeclarationList(variableList)) {
- if (variableList.declarations.length > 1) {
- var diagnostic = forInOrOfStatement.kind === 188
- ? 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 === 188
- ? 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 === 188
- ? 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 === 137 && accessor.parameters.length) {
- return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_get_accessor_cannot_have_parameters);
- }
- else if (kind === 138) {
- 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 & 499) {
- 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 === 128 && !ts.isWellKnownSymbolSyntactically(node.expression)) {
- return grammarErrorOnNode(node, message);
- }
- }
- function checkGrammarMethod(node) {
- if (checkGrammarDisallowedModifiersInBlockOrObjectLiteralExpression(node) ||
- checkGrammarFunctionLikeDeclaration(node) ||
- checkGrammarForGenerator(node)) {
- return true;
- }
- if (node.parent.kind === 155) {
- 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 (node.parent.kind === 202) {
- 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 === 203) {
- 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 === 146) {
- 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 187:
- case 188:
- case 189:
- case 185:
- case 186:
- return true;
- case 195:
- 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 195:
- if (node.label && current.label.text === node.label.text) {
- var isMisplacedContinueLabel = node.kind === 190
- && !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 194:
- if (node.kind === 191 && !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 === 191
- ? 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 === 191
- ? 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 === 152 || node.name.kind === 151) {
- 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);
- }
- }
- return checkGrammarEvalOrArgumentsInStrictMode(node, node.name);
- }
- function checkGrammarVariableDeclaration(node) {
- if (node.parent.parent.kind !== 188 && node.parent.parent.kind !== 189) {
- 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)) ||
- checkGrammarEvalOrArgumentsInStrictMode(node, node.name);
- }
- function checkGrammarNameInLetOrConstDeclarations(name) {
- if (name.kind === 65) {
- 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 !== 176) {
- 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 184:
- case 185:
- case 186:
- case 193:
- case 187:
- case 188:
- case 189:
- return false;
- case 195:
- 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 === 168) {
- var unaryExpression = expression;
- if (unaryExpression.operator === 33 || unaryExpression.operator === 34) {
- expression = unaryExpression.operand;
- }
- }
- if (expression.kind === 7) {
- return /^[0-9]+([eE]\+?[0-9]+)?$/.test(expression.text);
- }
- return false;
- }
- function checkGrammarEnumDeclaration(enumDecl) {
- var enumIsConst = (enumDecl.flags & 8192) !== 0;
- var hasError = false;
- if (!enumIsConst) {
- var inConstantEnumMemberSection = true;
- var inAmbientContext = ts.isInAmbientContext(enumDecl);
- for (var _i = 0, _a = enumDecl.members; _i < _a.length; _i++) {
- var node = _a[_i];
- if (node.name.kind === 128) {
- hasError = grammarErrorOnNode(node.name, ts.Diagnostics.Computed_property_names_are_not_allowed_in_enums);
- }
- else if (inAmbientContext) {
- if (node.initializer && !isIntegerLiteral(node.initializer)) {
- hasError = grammarErrorOnNode(node.name, ts.Diagnostics.Ambient_enum_elements_can_only_have_integer_literal_initializers) || hasError;
- }
- }
- else if (node.initializer) {
- inConstantEnumMemberSection = isIntegerLiteral(node.initializer);
- }
- else if (!inConstantEnumMemberSection) {
- hasError = grammarErrorOnNode(node.name, ts.Diagnostics.Enum_member_must_have_initializer) || hasError;
- }
- }
- }
- return hasError;
- }
- 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 checkGrammarEvalOrArgumentsInStrictMode(contextNode, name) {
- if (name && name.kind === 65) {
- var identifier = name;
- if (contextNode && (contextNode.parserContextFlags & 1) && isEvalOrArgumentsIdentifier(identifier)) {
- var nameText = ts.declarationNameToString(identifier);
- var reportErrorInClassDeclaration = reportStrictModeGrammarErrorInClassDeclaration(identifier, ts.Diagnostics.Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode, nameText);
- if (!reportErrorInClassDeclaration) {
- return grammarErrorOnNode(identifier, ts.Diagnostics.Invalid_use_of_0_in_strict_mode, nameText);
- }
- return reportErrorInClassDeclaration;
- }
- }
- }
- function isEvalOrArgumentsIdentifier(node) {
- return node.kind === 65 &&
- (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 (node.parent.kind === 202) {
- 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 === 203) {
- 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 === 146) {
- 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 === 203 ||
- node.kind === 210 ||
- node.kind === 209 ||
- node.kind === 216 ||
- node.kind === 215 ||
- (node.flags & 2) ||
- (node.flags & (1 | 256))) {
- 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 === 181) {
- 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 === 180 || node.parent.kind === 207 || node.parent.kind === 228) {
- 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 & 16384) {
- if (node.parserContextFlags & 1) {
- return grammarErrorOnNode(node, ts.Diagnostics.Octal_literals_are_not_allowed_in_strict_mode);
- }
- else if (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;
- }
- }
- initializeTypeChecker();
- return checker;
- }
- ts.createTypeChecker = createTypeChecker;
- })(ts || (ts = {}));
- /// <reference path="checker.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 languageVersion = compilerOptions.target || 0;
- var write;
- var writeLine;
- var increaseIndent;
- var decreaseIndent;
- var writeTextOfNode;
- var writer = createAndSetNewTextWriterWithSymbolWriter();
- var enclosingDeclaration;
- var currentSourceFile;
- var reportedDeclarationError = false;
- 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 & 2048) ||
- 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 === 210);
- 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.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 === 199) {
- nodeToCheck = declaration.parent.parent;
- }
- else if (declaration.kind === 213 || declaration.kind === 214 || declaration.kind === 211) {
- 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 === 210) {
- moduleElementEmitInfo.isVisible = true;
- }
- else {
- createAndSetNewTextWriterWithSymbolWriter();
- for (var declarationIndent = moduleElementEmitInfo.indent; declarationIndent; declarationIndent--) {
- increaseIndent();
- }
- if (nodeToCheck.kind === 206) {
- ts.Debug.assert(asynchronousSubModuleDeclarationEmitInfo === undefined);
- asynchronousSubModuleDeclarationEmitInfo = [];
- }
- writeModuleElement(nodeToCheck);
- if (nodeToCheck.kind === 206) {
- 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 writeTypeOfDeclaration(declaration, type, getSymbolAccessibilityDiagnostic) {
- writer.getSymbolAccessibilityDiagnostic = getSymbolAccessibilityDiagnostic;
- write(": ");
- if (type) {
- emitType(type);
- }
- else {
- resolver.writeTypeOfDeclaration(declaration, enclosingDeclaration, 2, writer);
- }
- }
- function writeReturnTypeAtSignature(signature, getSymbolAccessibilityDiagnostic) {
- writer.getSymbolAccessibilityDiagnostic = getSymbolAccessibilityDiagnostic;
- write(": ");
- if (signature.type) {
- emitType(signature.type);
- }
- else {
- resolver.writeReturnTypeOfSignatureDeclaration(signature, enclosingDeclaration, 2, writer);
- }
- }
- 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 112:
- case 122:
- case 120:
- case 113:
- case 123:
- case 99:
- case 8:
- return writeTextOfNode(currentSourceFile, type);
- case 177:
- return emitExpressionWithTypeArguments(type);
- case 142:
- return emitTypeReference(type);
- case 145:
- return emitTypeQuery(type);
- case 147:
- return emitArrayType(type);
- case 148:
- return emitTupleType(type);
- case 149:
- return emitUnionType(type);
- case 150:
- return emitParenType(type);
- case 143:
- case 144:
- return emitSignatureDeclarationWithJsDocComments(type);
- case 146:
- return emitTypeLiteral(type);
- case 65:
- return emitEntityName(type);
- case 127:
- return emitEntityName(type);
- }
- function emitEntityName(entityName) {
- var visibilityResult = resolver.isEntityNameVisible(entityName, entityName.parent.kind === 209 ? entityName.parent : enclosingDeclaration);
- handleSymbolAccessibilityError(visibilityResult);
- writeEntityName(entityName);
- function writeEntityName(entityName) {
- if (entityName.kind === 65) {
- writeTextOfNode(currentSourceFile, entityName);
- }
- else {
- var left = entityName.kind === 127 ? entityName.left : entityName.expression;
- var right = entityName.kind === 127 ? entityName.right : entityName.name;
- writeEntityName(left);
- write(".");
- writeTextOfNode(currentSourceFile, right);
- }
- }
- }
- function emitExpressionWithTypeArguments(node) {
- if (ts.isSupportedExpressionWithTypeArguments(node)) {
- ts.Debug.assert(node.expression.kind === 65 || node.expression.kind === 156);
- 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 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 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_14 = baseName + "_" + (++count);
- if (!ts.hasProperty(currentSourceFile.identifiers, name_14)) {
- return name_14;
- }
- }
- }
- function emitExportAssignment(node) {
- if (node.expression.kind === 65) {
- 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 === 65) {
- 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 === 209 ||
- (node.parent.kind === 228 && ts.isExternalModule(currentSourceFile))) {
- var isVisible;
- if (asynchronousSubModuleDeclarationEmitInfo && node.parent.kind !== 228) {
- asynchronousSubModuleDeclarationEmitInfo.push({
- node: node,
- outputPos: writer.getTextPos(),
- indent: writer.getIndent(),
- isVisible: isVisible
- });
- }
- else {
- if (node.kind === 210) {
- 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 201:
- return writeFunctionDeclaration(node);
- case 181:
- return writeVariableStatement(node);
- case 203:
- return writeInterfaceDeclaration(node);
- case 202:
- return writeClassDeclaration(node);
- case 204:
- return writeTypeAliasDeclaration(node);
- case 205:
- return writeEnumDeclaration(node);
- case 206:
- return writeModuleDeclaration(node);
- case 209:
- return writeImportEqualsDeclaration(node);
- case 210:
- 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 & 256) {
- write("default ");
- }
- else if (node.kind !== 203) {
- write("declare ");
- }
- }
- }
- function emitClassMemberDeclarationFlags(node) {
- if (node.flags & 32) {
- write("private ");
- }
- else if (node.flags & 64) {
- write("protected ");
- }
- if (node.flags & 128) {
- write("static ");
- }
- }
- 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 === 212) {
- 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 === 212) {
- 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);
- write("module ");
- writeTextOfNode(currentSourceFile, node.name);
- while (node.body.kind !== 207) {
- 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) {
- emitJsDocComments(node);
- emitModuleElementDeclarationFlags(node);
- write("type ");
- writeTextOfNode(currentSourceFile, node.name);
- write(" = ");
- emitTypeWithNewGetSymbolAccessibilityDiagnostic(node.type, getTypeAliasDeclarationVisibilityError);
- write(";");
- writeLine();
- 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 === 135 && (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 === 143 ||
- node.parent.kind === 144 ||
- (node.parent.parent && node.parent.parent.kind === 146)) {
- ts.Debug.assert(node.parent.kind === 135 ||
- node.parent.kind === 134 ||
- node.parent.kind === 143 ||
- node.parent.kind === 144 ||
- node.parent.kind === 139 ||
- node.parent.kind === 140);
- emitType(node.constraint);
- }
- else {
- emitTypeWithNewGetSymbolAccessibilityDiagnostic(node.constraint, getTypeParameterConstraintVisibilityError);
- }
- }
- function getTypeParameterConstraintVisibilityError(symbolAccesibilityResult) {
- var diagnosticMessage;
- switch (node.parent.kind) {
- case 202:
- diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1;
- break;
- case 203:
- diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1;
- break;
- case 140:
- diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;
- break;
- case 139:
- diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;
- break;
- case 135:
- case 134:
- 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 === 202) {
- 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 201:
- 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);
- }
- function getHeritageClauseVisibilityError(symbolAccesibilityResult) {
- var diagnosticMessage;
- if (node.parent.parent.kind === 202) {
- 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);
- 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 !== 199 || resolver.isDeclarationVisible(node)) {
- if (ts.isBindingPattern(node.name)) {
- emitBindingPattern(node.name);
- }
- else {
- writeTextOfNode(currentSourceFile, node.name);
- if ((node.kind === 133 || node.kind === 132) && ts.hasQuestionToken(node)) {
- write("?");
- }
- if ((node.kind === 133 || node.kind === 132) && node.parent.kind === 146) {
- emitTypeOfVariableDeclarationFromTypeLiteral(node);
- }
- else if (!(node.flags & 32)) {
- writeTypeOfDeclaration(node, node.type, getVariableDeclarationTypeVisibilityError);
- }
- }
- }
- function getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccesibilityResult) {
- if (node.kind === 199) {
- 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 === 133 || node.kind === 132) {
- 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 === 202) {
- 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 !== 176) {
- 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 === 137 ? 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 === 137
- ? accessor.type
- : accessor.parameters.length > 0
- ? accessor.parameters[0].type
- : undefined;
- }
- }
- function getAccessorDeclarationTypeVisibilityError(symbolAccesibilityResult) {
- var diagnosticMessage;
- if (accessorWithTypeAnnotation.kind === 138) {
- 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 === 201) {
- emitModuleElementDeclarationFlags(node);
- }
- else if (node.kind === 135) {
- emitClassMemberDeclarationFlags(node);
- }
- if (node.kind === 201) {
- write("function ");
- writeTextOfNode(currentSourceFile, node.name);
- }
- else if (node.kind === 136) {
- 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 === 140 || node.kind === 144) {
- write("new ");
- }
- emitTypeParameters(node.typeParameters);
- if (node.kind === 141) {
- write("[");
- }
- else {
- write("(");
- }
- var prevEnclosingDeclaration = enclosingDeclaration;
- enclosingDeclaration = node;
- emitCommaList(node.parameters, emitParameterDeclaration);
- if (node.kind === 141) {
- write("]");
- }
- else {
- write(")");
- }
- var isFunctionTypeOrConstructorType = node.kind === 143 || node.kind === 144;
- if (isFunctionTypeOrConstructorType || node.parent.kind === 146) {
- if (node.type) {
- write(isFunctionTypeOrConstructorType ? " => " : ": ");
- emitType(node.type);
- }
- }
- else if (node.kind !== 136 && !(node.flags & 32)) {
- writeReturnTypeAtSignature(node, getReturnTypeVisibilityError);
- }
- enclosingDeclaration = prevEnclosingDeclaration;
- if (!isFunctionTypeOrConstructorType) {
- write(";");
- writeLine();
- }
- function getReturnTypeVisibilityError(symbolAccesibilityResult) {
- var diagnosticMessage;
- switch (node.kind) {
- case 140:
- 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 139:
- 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 141:
- 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 135:
- case 134:
- 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 === 202) {
- 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 201:
- 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 (node.initializer || ts.hasQuestionToken(node)) {
- write("?");
- }
- decreaseIndent();
- if (node.parent.kind === 143 ||
- node.parent.kind === 144 ||
- node.parent.parent.kind === 146) {
- 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 136:
- 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 140:
- 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 139:
- 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 135:
- case 134:
- 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 === 202) {
- 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 201:
- 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 === 151) {
- write("{");
- emitCommaList(bindingPattern.elements, emitBindingElement);
- write("}");
- }
- else if (bindingPattern.kind === 152) {
- 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 === 176) {
- write(" ");
- }
- else if (bindingElement.kind === 153) {
- if (bindingElement.propertyName) {
- writeTextOfNode(currentSourceFile, bindingElement.propertyName);
- write(": ");
- emitBindingPattern(bindingElement.name);
- }
- else if (bindingElement.name) {
- if (ts.isBindingPattern(bindingElement.name)) {
- emitBindingPattern(bindingElement.name);
- }
- else {
- ts.Debug.assert(bindingElement.name.kind === 65);
- if (bindingElement.dotDotDotToken) {
- write("...");
- }
- writeTextOfNode(currentSourceFile, bindingElement.name);
- }
- }
- }
- }
- }
- function emitNode(node) {
- switch (node.kind) {
- case 201:
- case 206:
- case 209:
- case 203:
- case 202:
- case 204:
- case 205:
- return emitModuleElement(node, isModuleElementVisible(node));
- case 181:
- return emitModuleElement(node, isVariableStatementVisible(node));
- case 210:
- return emitModuleElement(node, !node.importClause);
- case 216:
- return emitExportDeclaration(node);
- case 136:
- case 135:
- case 134:
- return writeFunctionDeclaration(node);
- case 140:
- case 139:
- case 141:
- return emitSignatureDeclarationWithJsDocComments(node);
- case 137:
- case 138:
- return emitAccessorDeclaration(node);
- case 133:
- case 132:
- return emitPropertyDeclaration(node);
- case 227:
- return emitEnumMemberDeclaration(node);
- case 215:
- return emitExportAssignment(node);
- case 228:
- return emitSourceFile(node);
- }
- }
- function writeReferencePath(referencedFile) {
- var declFileName = referencedFile.flags & 2048
- ? referencedFile.fileName
- : ts.shouldEmitToOwnFile(referencedFile, compilerOptions)
- ? ts.getOwnEmitOutputFilePath(referencedFile, host, ".d.ts")
- : ts.removeFileExtension(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 = {}));
- /// <reference path="checker.ts"/>
- /// <reference path="declarationEmitter.ts"/>
- var ts;
- (function (ts) {
- function isExternalModuleOrDeclarationFile(sourceFile) {
- return ts.isExternalModule(sourceFile) || ts.isDeclarationFile(sourceFile);
- }
- ts.isExternalModuleOrDeclarationFile = isExternalModuleOrDeclarationFile;
- 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 __.prototype = b.prototype;\n d.prototype = new __();\n};";
- var decorateHelper = "\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n switch (arguments.length) {\n case 2: return decorators.reduceRight(function(o, d) { return (d && d(o)) || o; }, target);\n case 3: return decorators.reduceRight(function(o, d) { return (d && d(target, key)), void 0; }, void 0);\n case 4: return decorators.reduceRight(function(o, d) { return (d && d(target, key, o)) || o; }, desc);\n }\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 compilerOptions = host.getCompilerOptions();
- var languageVersion = compilerOptions.target || 0;
- var sourceMapDataList = compilerOptions.sourceMap || compilerOptions.inlineSourceMap ? [] : undefined;
- var diagnostics = [];
- var newLine = host.getNewLine();
- if (targetSourceFile === undefined) {
- ts.forEach(host.getSourceFiles(), function (sourceFile) {
- if (ts.shouldEmitToOwnFile(sourceFile, compilerOptions)) {
- var jsFilePath = ts.getOwnEmitOutputFilePath(sourceFile, host, ".js");
- emitFile(jsFilePath, sourceFile);
- }
- });
- if (compilerOptions.out) {
- emitFile(compilerOptions.out);
- }
- }
- else {
- if (ts.shouldEmitToOwnFile(targetSourceFile, compilerOptions)) {
- var jsFilePath = ts.getOwnEmitOutputFilePath(targetSourceFile, host, ".js");
- emitFile(jsFilePath, targetSourceFile);
- }
- else if (!ts.isDeclarationFile(targetSourceFile) && compilerOptions.out) {
- emitFile(compilerOptions.out);
- }
- }
- diagnostics = ts.sortAndDeduplicateDiagnostics(diagnostics);
- return {
- emitSkipped: false,
- diagnostics: diagnostics,
- sourceMaps: sourceMapDataList
- };
- function isNodeDescendentOf(node, ancestor) {
- while (node) {
- if (node === ancestor)
- return true;
- node = node.parent;
- }
- return false;
- }
- function isUniqueLocalName(name, container) {
- for (var node = container; 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;
- var writeTextOfNode = writer.writeTextOfNode;
- var writeLine = writer.writeLine;
- var increaseIndent = writer.increaseIndent;
- var decreaseIndent = writer.decreaseIndent;
- var currentSourceFile;
- var exportFunctionForFile;
- var generatedNameSet = {};
- var nodeToGeneratedName = [];
- var blockScopedVariableToGeneratedName;
- var computedPropertyNamesToGeneratedNames;
- var extendsEmitted = false;
- var decorateEmitted = false;
- var paramEmitted = 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 = emitNodeWithoutSourceMap;
- var emitStart = function (node) { };
- var emitEnd = function (node) { };
- var emitToken = emitTokenText;
- var scopeEmitStart = function (scopeDeclaration, scopeName) { };
- var scopeEmitEnd = function () { };
- var sourceMapData;
- 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 = flags === 268435456 ? "_i" : "_n";
- if (isUniqueName(name)) {
- tempFlags |= flags;
- return name;
- }
- }
- while (true) {
- var count = tempFlags & 268435455;
- tempFlags++;
- if (count !== 8 && count !== 13) {
- var name_15 = count < 26 ? "_" + String.fromCharCode(97 + count) : "_" + (count - 26);
- if (isUniqueName(name_15)) {
- return name_15;
- }
- }
- }
- }
- 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 assignGeneratedName(node, name) {
- nodeToGeneratedName[ts.getNodeId(node)] = ts.unescapeIdentifier(name);
- }
- function generateNameForFunctionOrClassDeclaration(node) {
- if (!node.name) {
- assignGeneratedName(node, makeUniqueName("default"));
- }
- }
- function generateNameForModuleOrEnum(node) {
- if (node.name.kind === 65) {
- var name_16 = node.name.text;
- assignGeneratedName(node, isUniqueLocalName(name_16, node) ? name_16 : makeUniqueName(name_16));
- }
- }
- function generateNameForImportOrExportDeclaration(node) {
- var expr = ts.getExternalModuleName(node);
- var baseName = expr.kind === 8 ?
- ts.escapeIdentifier(ts.makeIdentifierFromModuleName(expr.text)) : "module";
- assignGeneratedName(node, makeUniqueName(baseName));
- }
- function generateNameForImportDeclaration(node) {
- if (node.importClause) {
- generateNameForImportOrExportDeclaration(node);
- }
- }
- function generateNameForExportDeclaration(node) {
- if (node.moduleSpecifier) {
- generateNameForImportOrExportDeclaration(node);
- }
- }
- function generateNameForExportAssignment(node) {
- if (node.expression && node.expression.kind !== 65) {
- assignGeneratedName(node, makeUniqueName("default"));
- }
- }
- function generateNameForNode(node) {
- switch (node.kind) {
- case 201:
- case 202:
- case 175:
- generateNameForFunctionOrClassDeclaration(node);
- break;
- case 206:
- generateNameForModuleOrEnum(node);
- generateNameForNode(node.body);
- break;
- case 205:
- generateNameForModuleOrEnum(node);
- break;
- case 210:
- generateNameForImportDeclaration(node);
- break;
- case 216:
- generateNameForExportDeclaration(node);
- break;
- case 215:
- generateNameForExportAssignment(node);
- break;
- }
- }
- function getGeneratedNameForNode(node) {
- var nodeId = ts.getNodeId(node);
- if (!nodeToGeneratedName[nodeId]) {
- generateNameForNode(node);
- }
- return nodeToGeneratedName[nodeId];
- }
- 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_17 = node.name;
- if (!name_17 || name_17.kind !== 128) {
- 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 === 201 ||
- node.kind === 163 ||
- node.kind === 135 ||
- node.kind === 134 ||
- node.kind === 137 ||
- node.kind === 138 ||
- node.kind === 206 ||
- node.kind === 202 ||
- node.kind === 205) {
- if (node.name) {
- var name_18 = node.name;
- scopeName = name_18.kind === 128
- ? ts.getTextOfNode(name_18)
- : 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, allowGeneratedIdentifiers) {
- if (node) {
- if (ts.nodeIsSynthesized(node)) {
- return emitNodeWithoutSourceMap(node, false);
- }
- if (node.kind != 228) {
- recordEmitNodeStartSpan(node);
- emitNodeWithoutSourceMap(node, allowGeneratedIdentifiers);
- recordEmitNodeEndSpan(node);
- }
- else {
- recordNewSourceFileStart(node);
- emitNodeWithoutSourceMap(node, false);
- }
- }
- }
- writeEmittedFiles = writeJavaScriptAndSourceMapFile;
- emit = emitNodeWithSourceMap;
- 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(65);
- 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(", ");
- }
- }
- emitNode(nodes[start + i]);
- 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 === 7 && 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 === 8 || 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 8:
- return getQuotedEscapedLiteralText('"', node.text, '"');
- case 10:
- return getQuotedEscapedLiteralText('`', node.text, '`');
- case 11:
- return getQuotedEscapedLiteralText('`', node.text, '${');
- case 12:
- return getQuotedEscapedLiteralText('}', node.text, '${');
- case 13:
- return getQuotedEscapedLiteralText('}', node.text, '`');
- case 7:
- 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 === 10 || node.kind === 13;
- 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 === 10) {
- 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 === 172) {
- ts.forEach(node.template.templateSpans, function (templateSpan) {
- write(", ");
- var needsParens = templateSpan.expression.kind === 170
- && templateSpan.expression.operatorToken.kind === 23;
- 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 !== 162
- && 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() {
- // If this expression has an empty head literal and the first template span has a non-empty
- // literal, then emitting the empty head literal is not necessary.
- // `${ foo } and ${ bar }`
- // can be emitted as
- // foo + " and " + bar
- // This is because it is only required that one of the first two operands in the emit
- // output must be a string literal, so that the other operand and all following operands
- // are forced into strings.
- //
- // If the first template span has an empty literal, then the head must still be emitted.
- // `${ foo }${ bar }`
- // must still be emitted as
- // "" + foo + bar
- 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 158:
- case 159:
- return parent.expression === template;
- case 160:
- case 162:
- return false;
- default:
- return comparePrecedenceToBinaryPlus(parent) !== -1;
- }
- }
- function comparePrecedenceToBinaryPlus(expression) {
- switch (expression.kind) {
- case 170:
- switch (expression.operatorToken.kind) {
- case 35:
- case 36:
- case 37:
- return 1;
- case 33:
- case 34:
- return 0;
- default:
- return -1;
- }
- case 173:
- case 171:
- return -1;
- default:
- return 1;
- }
- }
- }
- function emitTemplateSpan(span) {
- emit(span.expression);
- emit(span.literal);
- }
- function emitExpressionForPropertyName(node) {
- ts.Debug.assert(node.kind !== 153);
- if (node.kind === 8) {
- emitLiteral(node);
- }
- else if (node.kind === 128) {
- 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 === 7) {
- write(node.text);
- }
- else {
- writeTextOfNode(currentSourceFile, node);
- }
- write("\"");
- }
- }
- function isNotExpressionIdentifier(node) {
- var parent = node.parent;
- switch (parent.kind) {
- case 130:
- case 199:
- case 153:
- case 133:
- case 132:
- case 225:
- case 226:
- case 227:
- case 135:
- case 134:
- case 201:
- case 137:
- case 138:
- case 163:
- case 202:
- case 203:
- case 205:
- case 206:
- case 209:
- case 211:
- case 212:
- return parent.name === node;
- case 214:
- case 218:
- return parent.name === node || parent.propertyName === node;
- case 191:
- case 190:
- case 215:
- return false;
- case 195:
- return node.parent.label === node;
- }
- }
- function emitExpressionIdentifier(node) {
- var substitution = resolver.getExpressionNameSubstitution(node, getGeneratedNameForNode);
- if (substitution) {
- write(substitution);
- }
- else {
- writeTextOfNode(currentSourceFile, node);
- }
- }
- function getGeneratedNameForIdentifier(node) {
- if (ts.nodeIsSynthesized(node) || !blockScopedVariableToGeneratedName) {
- return undefined;
- }
- var variableId = resolver.getBlockScopedVariableId(node);
- if (variableId === undefined) {
- return undefined;
- }
- return blockScopedVariableToGeneratedName[variableId];
- }
- function emitIdentifier(node, allowGeneratedIdentifiers) {
- if (allowGeneratedIdentifiers) {
- var generatedName = getGeneratedNameForIdentifier(node);
- if (generatedName) {
- write(generatedName);
- return;
- }
- }
- if (!node.parent) {
- write(node.text);
- }
- else if (!isNotExpressionIdentifier(node)) {
- emitExpressionIdentifier(node);
- }
- 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 & 16) {
- 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, false);
- 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(110));
- if (node.asteriskToken) {
- write("*");
- }
- if (node.expression) {
- write(" ");
- emit(node.expression);
- }
- }
- function needsParenthesisForPropertyAccessOrInvocation(node) {
- switch (node.kind) {
- case 65:
- case 154:
- case 156:
- case 157:
- case 158:
- case 162:
- return false;
- }
- return true;
- }
- function emitListWithSpread(elements, alwaysCopy, multiLine, trailingComma) {
- var pos = 0;
- var group = 0;
- var length = elements.length;
- while (pos < length) {
- if (group === 1) {
- write(".concat(");
- }
- else if (group > 1) {
- write(", ");
- }
- var e = elements[pos];
- if (e.kind === 174) {
- e = e.expression;
- emitParenthesizedIf(e, group === 0 && needsParenthesisForPropertyAccessOrInvocation(e));
- pos++;
- if (pos === length && group === 0 && alwaysCopy && e.kind !== 154) {
- write(".slice()");
- }
- }
- else {
- var i = pos;
- while (i < length && elements[i].kind !== 174) {
- i++;
- }
- write("[");
- if (multiLine) {
- increaseIndent();
- }
- emitList(elements, pos, i - pos, multiLine, trailingComma && i === length);
- if (multiLine) {
- decreaseIndent();
- }
- write("]");
- pos = i;
- }
- group++;
- }
- if (group > 1) {
- write(")");
- }
- }
- function isSpreadElementExpression(node) {
- return node.kind === 174;
- }
- 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 & 512) !== 0, elements.hasTrailingComma);
- }
- }
- 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 & 512) !== 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 & 512) !== 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 === 137 || property.kind === 138) {
- 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 === 225) {
- emit(property.initializer);
- }
- else if (property.kind === 226) {
- emitExpressionIdentifier(property.name);
- }
- else if (property.kind === 135) {
- 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 === 128) {
- 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(170, startsOnNewLine);
- result.operatorToken = ts.createSynthesizedNode(operator);
- result.left = left;
- result.right = right;
- return result;
- }
- function createPropertyAccessExpression(expression, name) {
- var result = ts.createSynthesizedNode(156);
- result.expression = parenthesizeForAccess(expression);
- result.dotToken = ts.createSynthesizedNode(20);
- result.name = name;
- return result;
- }
- function createElementAccessExpression(expression, argumentExpression) {
- var result = ts.createSynthesizedNode(157);
- result.expression = parenthesizeForAccess(expression);
- result.argumentExpression = argumentExpression;
- return result;
- }
- function parenthesizeForAccess(expr) {
- while (expr.kind === 161) {
- expr = expr.expression;
- }
- if (ts.isLeftHandSideExpression(expr) &&
- expr.kind !== 159 &&
- expr.kind !== 7) {
- return expr;
- }
- var node = ts.createSynthesizedNode(162);
- node.expression = expr;
- return node;
- }
- function emitComputedPropertyName(node) {
- write("[");
- emitExpressionForPropertyName(node);
- write("]");
- }
- function emitMethod(node) {
- if (languageVersion >= 2 && node.asteriskToken) {
- write("*");
- }
- emit(node.name, false);
- if (languageVersion < 2) {
- write(": function ");
- }
- emitSignatureAndBody(node);
- }
- function emitPropertyAssignment(node) {
- emit(node.name, false);
- write(": ");
- emit(node.initializer);
- }
- function emitShorthandPropertyAssignment(node) {
- emit(node.name, false);
- if (languageVersion < 2) {
- write(": ");
- var generatedName = getGeneratedNameForIdentifier(node.name);
- if (generatedName) {
- write(generatedName);
- }
- else {
- emitExpressionIdentifier(node.name);
- }
- }
- else if (resolver.getExpressionNameSubstitution(node.name, getGeneratedNameForNode)) {
- write(": ");
- emitExpressionIdentifier(node.name);
- }
- }
- function tryEmitConstantValue(node) {
- if (compilerOptions.isolatedModules) {
- return false;
- }
- var constantValue = resolver.getConstantValue(node);
- if (constantValue !== undefined) {
- write(constantValue.toString());
- if (!compilerOptions.removeComments) {
- var propertyName = node.kind === 156 ? ts.declarationNameToString(node.name) : ts.getTextOfNode(node.argumentExpression);
- write(" /* " + propertyName + " */");
- }
- return true;
- }
- return false;
- }
- 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);
- write(".");
- var indentedAfterDot = indentIfOnDifferentLines(node, node.dotToken, node.name);
- emit(node.name, false);
- decreaseIndentIf(indentedBeforeDot, indentedAfterDot);
- }
- function emitQualifiedName(node) {
- emit(node.left);
- write(".");
- emit(node.right);
- }
- 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 === 174; });
- }
- function skipParentheses(node) {
- while (node.kind === 162 || node.kind === 161) {
- node = node.expression;
- }
- return node;
- }
- function emitCallTarget(node) {
- if (node.kind === 65 || node.kind === 93 || node.kind === 91) {
- 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 === 156) {
- target = emitCallTarget(expr.expression);
- write(".");
- emit(expr.name);
- }
- else if (expr.kind === 157) {
- target = emitCallTarget(expr.expression);
- write("[");
- emit(expr.argumentExpression);
- write("]");
- }
- else if (expr.kind === 91) {
- target = expr;
- write("_super");
- }
- else {
- emit(node.expression);
- }
- write(".apply(");
- if (target) {
- if (target.kind === 91) {
- emitThis(target);
- }
- else {
- emit(target);
- }
- }
- else {
- write("void 0");
- }
- write(", ");
- emitListWithSpread(node.arguments, false, false, false);
- write(")");
- }
- function emitCallExpression(node) {
- if (languageVersion < 2 && hasSpreadElement(node.arguments)) {
- emitCallWithSpread(node);
- return;
- }
- var superCall = false;
- if (node.expression.kind === 91) {
- emitSuper(node.expression);
- superCall = true;
- }
- else {
- emit(node.expression);
- superCall = node.expression.kind === 156 && node.expression.expression.kind === 91;
- }
- 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 ");
- 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 !== 164) {
- if (node.expression.kind === 161) {
- var operand = node.expression.expression;
- while (operand.kind == 161) {
- operand = operand.expression;
- }
- if (operand.kind !== 168 &&
- operand.kind !== 167 &&
- operand.kind !== 166 &&
- operand.kind !== 165 &&
- operand.kind !== 169 &&
- operand.kind !== 159 &&
- !(operand.kind === 158 && node.parent.kind === 159) &&
- !(operand.kind === 163 && node.parent.kind === 158)) {
- emit(operand);
- return;
- }
- }
- }
- write("(");
- emit(node.expression);
- write(")");
- }
- function emitDeleteExpression(node) {
- write(ts.tokenToString(74));
- write(" ");
- emit(node.expression);
- }
- function emitVoidExpression(node) {
- write(ts.tokenToString(99));
- write(" ");
- emit(node.expression);
- }
- function emitTypeOfExpression(node) {
- write(ts.tokenToString(97));
- write(" ");
- emit(node.expression);
- }
- function isNameOfExportedSourceLevelDeclarationInSystemExternalModule(node) {
- if (!isCurrentFileSystemExternalModule() || node.kind !== 65 || ts.nodeIsSynthesized(node)) {
- return false;
- }
- var isVariableDeclarationOrBindingElement = node.parent && (node.parent.kind === 199 || node.parent.kind === 153);
- 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 === 168) {
- var operand = node.operand;
- if (node.operator === 33 && (operand.operator === 33 || operand.operator === 38)) {
- write(" ");
- }
- else if (node.operator === 34 && (operand.operator === 34 || operand.operator === 39)) {
- 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 === 38) {
- 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 === 228) {
- return !isExported || ((ts.getCombinedNodeFlags(node) & 1) !== 0);
- }
- else if (ts.isFunctionLike(current) || current.kind === 207) {
- return false;
- }
- else {
- current = current.parent;
- }
- }
- }
- function emitBinaryExpression(node) {
- if (languageVersion < 2 && node.operatorToken.kind === 53 &&
- (node.left.kind === 155 || node.left.kind === 154)) {
- emitDestructuring(node, node.parent.kind === 183);
- }
- else {
- var exportChanged = node.operatorToken.kind >= 53 &&
- node.operatorToken.kind <= 64 &&
- isNameOfExportedSourceLevelDeclarationInSystemExternalModule(node.left);
- if (exportChanged) {
- write(exportFunctionForFile + "(\"");
- emitNodeWithoutSourceMap(node.left);
- write("\", ");
- }
- emit(node.left);
- var indentedBeforeOperator = indentIfOnDifferentLines(node, node.left, node.operatorToken, node.operatorToken.kind !== 23 ? " " : 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 === 180) {
- var block = node;
- return block.statements.length === 0 && nodeEndIsOnSameLineAsNodeStart(block, block);
- }
- }
- function emitBlock(node) {
- if (isSingleLineEmptyBlock(node)) {
- emitToken(14, node.pos);
- write(" ");
- emitToken(15, node.statements.end);
- return;
- }
- emitToken(14, node.pos);
- increaseIndent();
- scopeEmitStart(node.parent);
- if (node.kind === 207) {
- ts.Debug.assert(node.parent.kind === 206);
- emitCaptureThisForNodeIfNecessary(node.parent);
- }
- emitLines(node.statements);
- if (node.kind === 207) {
- emitTempDeclarations(true);
- }
- decreaseIndent();
- writeLine();
- emitToken(15, node.statements.end);
- scopeEmitEnd();
- }
- function emitEmbeddedStatement(node) {
- if (node.kind === 180) {
- write(" ");
- emit(node);
- }
- else {
- increaseIndent();
- writeLine();
- emit(node);
- decreaseIndent();
- }
- }
- function emitExpressionStatement(node) {
- emitParenthesizedIf(node.expression, node.expression.kind === 164);
- write(";");
- }
- function emitIfStatement(node) {
- var endPos = emitToken(84, node.pos);
- write(" ");
- endPos = emitToken(16, endPos);
- emit(node.expression);
- emitToken(17, node.expression.end);
- emitEmbeddedStatement(node.thenStatement);
- if (node.elseStatement) {
- writeLine();
- emitToken(76, node.thenStatement.end);
- if (node.elseStatement.kind === 184) {
- write(" ");
- emit(node.elseStatement);
- }
- else {
- emitEmbeddedStatement(node.elseStatement);
- }
- }
- }
- function emitDoStatement(node) {
- write("do");
- emitEmbeddedStatement(node.statement);
- if (node.statement.kind === 180) {
- 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 = 98;
- if (decl && languageVersion >= 2) {
- if (ts.isLet(decl)) {
- tokenKind = 104;
- }
- else if (ts.isConst(decl)) {
- tokenKind = 70;
- }
- }
- if (startPos !== undefined) {
- emitToken(tokenKind, startPos);
- write(" ");
- }
- else {
- switch (tokenKind) {
- case 98:
- write("var ");
- break;
- case 104:
- write("let ");
- break;
- case 70:
- 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(82, node.pos);
- write(" ");
- endPos = emitToken(16, endPos);
- if (node.initializer && node.initializer.kind === 200) {
- 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 === 189) {
- return emitDownLevelForOfStatement(node);
- }
- var endPos = emitToken(82, node.pos);
- write(" ");
- endPos = emitToken(16, endPos);
- if (node.initializer.kind === 200) {
- var variableDeclarationList = node.initializer;
- if (variableDeclarationList.declarations.length >= 1) {
- tryEmitStartOfVariableDeclarationList(variableDeclarationList, endPos);
- emit(variableDeclarationList.declarations[0]);
- }
- }
- else {
- emit(node.initializer);
- }
- if (node.kind === 188) {
- write(" in ");
- }
- else {
- write(" of ");
- }
- emit(node.expression);
- emitToken(17, node.expression.end);
- emitEmbeddedStatement(node.statement);
- }
- function emitDownLevelForOfStatement(node) {
- // The following ES6 code:
- //
- // for (let v of expr) { }
- //
- // should be emitted as
- //
- // for (let _i = 0, _a = expr; _i < _a.length; _i++) {
- // let v = _a[_i];
- // }
- //
- // where _a and _i are temps emitted to capture the RHS and the counter,
- // respectively.
- // When the left hand side is an expression instead of a let declaration,
- // the "let v" is not emitted.
- // When the left hand side is a let/const, the v is renamed if there is
- // another v in scope.
- // Note that all assignments to the LHS are emitted in the body, including
- // all destructuring.
- // Note also that because an extra statement is needed to assign to the LHS,
- // for-of bodies are always emitted as blocks.
- var endPos = emitToken(82, node.pos);
- write(" ");
- endPos = emitToken(16, endPos);
- var rhsIsIdentifier = node.expression.kind === 65;
- 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(" < ");
- emitNodeWithoutSourceMap(rhsReference);
- write(".length");
- emitEnd(node.initializer);
- write("; ");
- emitStart(node.initializer);
- emitNodeWithoutSourceMap(counter);
- write("++");
- emitEnd(node.initializer);
- emitToken(17, node.expression.end);
- write(" {");
- writeLine();
- increaseIndent();
- var rhsIterationValue = createElementAccessExpression(rhsReference, counter);
- emitStart(node.initializer);
- if (node.initializer.kind === 200) {
- 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 {
- emitNodeWithoutSourceMap(declaration);
- write(" = ");
- emitNodeWithoutSourceMap(rhsIterationValue);
- }
- }
- else {
- emitNodeWithoutSourceMap(createTempVariable(0));
- write(" = ");
- emitNodeWithoutSourceMap(rhsIterationValue);
- }
- }
- else {
- var assignmentExpression = createBinaryExpression(node.initializer, 53, rhsIterationValue, false);
- if (node.initializer.kind === 154 || node.initializer.kind === 155) {
- emitDestructuring(assignmentExpression, true, undefined);
- }
- else {
- emitNodeWithoutSourceMap(assignmentExpression);
- }
- }
- emitEnd(node.initializer);
- write(";");
- if (node.statement.kind === 180) {
- emitLines(node.statement.statements);
- }
- else {
- writeLine();
- emit(node.statement);
- }
- writeLine();
- decreaseIndent();
- write("}");
- }
- function emitBreakOrContinueStatement(node) {
- emitToken(node.kind === 191 ? 66 : 71, node.pos);
- emitOptional(" ", node.label);
- write(";");
- }
- function emitReturnStatement(node) {
- emitToken(90, node.pos);
- emitOptional(" ", node.expression);
- write(";");
- }
- function emitWithStatement(node) {
- write("with (");
- emit(node.expression);
- write(")");
- emitEmbeddedStatement(node.statement);
- }
- function emitSwitchStatement(node) {
- var endPos = emitToken(92, node.pos);
- write(" ");
- emitToken(16, endPos);
- emit(node.expression);
- endPos = emitToken(17, node.expression.end);
- write(" ");
- emitCaseBlock(node.caseBlock, endPos);
- }
- function emitCaseBlock(node, startPos) {
- emitToken(14, startPos);
- increaseIndent();
- emitLines(node.clauses);
- decreaseIndent();
- writeLine();
- emitToken(15, 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 === 221) {
- 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(68, node.pos);
- write(" ");
- emitToken(16, endPos);
- emit(node.variableDeclaration);
- emitToken(17, node.variableDeclaration ? node.variableDeclaration.end : endPos);
- write(" ");
- emitBlock(node.block);
- }
- function emitDebuggerStatement(node) {
- emitToken(72, node.pos);
- write(";");
- }
- function emitLabelledStatement(node) {
- emit(node.label);
- write(": ");
- emit(node.statement);
- }
- function getContainingModule(node) {
- do {
- node = node.parent;
- } while (node && node.kind !== 206);
- 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 (languageVersion < 2 && compilerOptions.module !== 4) {
- write("exports.");
- }
- }
- emitNodeWithoutSourceMap(node.name);
- emitEnd(node.name);
- }
- function createVoidZero() {
- var zero = ts.createSynthesizedNode(7);
- zero.text = "0";
- var result = ts.createSynthesizedNode(167);
- result.expression = zero;
- return result;
- }
- function emitExportMemberAssignment(node) {
- if (node.flags & 1) {
- writeLine();
- emitStart(node);
- if (compilerOptions.module === 4 && node.parent === currentSourceFile) {
- write(exportFunctionForFile + "(\"");
- if (node.flags & 256) {
- write("default");
- }
- else {
- emitNodeWithoutSourceMap(node.name);
- }
- write("\", ");
- emitDeclarationName(node);
- write(")");
- }
- else {
- if (node.flags & 256) {
- if (languageVersion === 0) {
- write("exports[\"default\"]");
- }
- else {
- write("exports.default");
- }
- }
- else {
- emitModuleMemberName(node);
- }
- write(" = ");
- emitDeclarationName(node);
- }
- emitEnd(node);
- write(";");
- }
- }
- function emitExportMemberAssignments(name) {
- 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();
- if (compilerOptions.module === 4) {
- emitStart(specifier.name);
- write(exportFunctionForFile + "(\"");
- emitNodeWithoutSourceMap(specifier.name);
- write("\", ");
- emitExpressionIdentifier(name);
- write(")");
- emitEnd(specifier.name);
- }
- else {
- emitStart(specifier.name);
- emitContainingModuleName(specifier);
- write(".");
- emitNodeWithoutSourceMap(specifier.name);
- emitEnd(specifier.name);
- write(" = ");
- emitExpressionIdentifier(name);
- }
- write(";");
- }
- }
- }
- function emitDestructuring(root, isAssignmentExpressionStatement, value) {
- var emitCount = 0;
- var canDefineTempVariablesInPlace = false;
- if (root.kind === 199) {
- var isExported = ts.getCombinedNodeFlags(root) & 1;
- var isSourceLevelForSystemModuleKind = shouldHoistDeclarationInSystemJsModule(root);
- canDefineTempVariablesInPlace = !isExported && !isSourceLevelForSystemModuleKind;
- }
- else if (root.kind === 130) {
- canDefineTempVariablesInPlace = true;
- }
- if (root.kind === 170) {
- emitAssignmentExpression(root);
- }
- else {
- ts.Debug.assert(!isAssignmentExpressionStatement);
- emitBindingElement(root, value);
- }
- function emitAssignment(name, value) {
- if (emitCount++) {
- write(", ");
- }
- renameNonTopLevelLetAndConst(name);
- var isVariableDeclarationOrBindingElement = name.parent && (name.parent.kind === 199 || name.parent.kind === 153);
- var exportChanged = isNameOfExportedSourceLevelDeclarationInSystemExternalModule(name);
- if (exportChanged) {
- write(exportFunctionForFile + "(\"");
- emitNodeWithoutSourceMap(name);
- write("\", ");
- }
- if (isVariableDeclarationOrBindingElement) {
- emitModuleMemberName(name.parent);
- }
- else {
- emit(name);
- }
- write(" = ");
- emit(value);
- if (exportChanged) {
- write(")");
- }
- }
- function ensureIdentifier(expr) {
- if (expr.kind !== 65) {
- var identifier = createTempVariable(0);
- if (!canDefineTempVariablesInPlace) {
- recordTempDeclaration(identifier);
- }
- emitAssignment(identifier, expr);
- expr = identifier;
- }
- return expr;
- }
- function createDefaultValueCheck(value, defaultValue) {
- value = ensureIdentifier(value);
- var equals = ts.createSynthesizedNode(170);
- equals.left = value;
- equals.operatorToken = ts.createSynthesizedNode(30);
- equals.right = createVoidZero();
- return createConditionalExpression(equals, defaultValue, value);
- }
- function createConditionalExpression(condition, whenTrue, whenFalse) {
- var cond = ts.createSynthesizedNode(171);
- cond.condition = condition;
- cond.questionToken = ts.createSynthesizedNode(50);
- cond.whenTrue = whenTrue;
- cond.colonToken = ts.createSynthesizedNode(51);
- cond.whenFalse = whenFalse;
- return cond;
- }
- function createNumericLiteral(value) {
- var node = ts.createSynthesizedNode(7);
- node.text = "" + value;
- return node;
- }
- function createPropertyAccessForDestructuringProperty(object, propName) {
- if (propName.kind !== 65) {
- return createElementAccessExpression(object, propName);
- }
- return createPropertyAccessExpression(object, propName);
- }
- function createSliceCall(value, sliceIndex) {
- var call = ts.createSynthesizedNode(158);
- var sliceIdentifier = ts.createSynthesizedNode(65);
- 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);
- }
- for (var _a = 0; _a < properties.length; _a++) {
- var p = properties[_a];
- if (p.kind === 225 || p.kind === 226) {
- var propName = (p.name);
- emitDestructuringAssignment(p.initializer || propName, createPropertyAccessForDestructuringProperty(value, propName));
- }
- }
- }
- function emitArrayLiteralAssignment(target, value) {
- var elements = target.elements;
- if (elements.length !== 1) {
- value = ensureIdentifier(value);
- }
- for (var i = 0; i < elements.length; i++) {
- var e = elements[i];
- if (e.kind !== 176) {
- if (e.kind !== 174) {
- 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 === 170 && target.operatorToken.kind === 53) {
- value = createDefaultValueCheck(value, target.right);
- target = target.left;
- }
- if (target.kind === 155) {
- emitObjectLiteralAssignment(target, value);
- }
- else if (target.kind === 154) {
- emitArrayLiteralAssignment(target, value);
- }
- else {
- emitAssignment(target, value);
- }
- }
- function emitAssignmentExpression(root) {
- var target = root.left;
- var value = root.right;
- if (isAssignmentExpressionStatement) {
- emitDestructuringAssignment(target, value);
- }
- else {
- if (root.parent.kind !== 162) {
- write("(");
- }
- value = ensureIdentifier(value);
- emitDestructuringAssignment(target, value);
- write(", ");
- emit(value);
- if (root.parent.kind !== 162) {
- 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;
- if (elements.length !== 1) {
- value = ensureIdentifier(value);
- }
- for (var i = 0; i < elements.length; i++) {
- var element = elements[i];
- if (pattern.kind === 151) {
- var propName = element.propertyName || element.name;
- emitBindingElement(element, createPropertyAccessForDestructuringProperty(value, propName));
- }
- else if (element.kind !== 176) {
- if (!element.dotDotDotToken) {
- emitBindingElement(element, createElementAccessExpression(value, createNumericLiteral(i)));
- }
- else if (i === elements.length - 1) {
- emitBindingElement(element, createSliceCall(value, i));
- }
- }
- }
- }
- else {
- emitAssignment(target.name, value);
- }
- }
- }
- function emitVariableDeclaration(node) {
- if (ts.isBindingPattern(node.name)) {
- if (languageVersion < 2) {
- emitDestructuring(node, false);
- }
- else {
- emit(node.name);
- emitOptional(" = ", node.initializer);
- }
- }
- else {
- renameNonTopLevelLetAndConst(node.name);
- var initializer = node.initializer;
- if (!initializer && languageVersion < 2) {
- var isUninitializedLet = (resolver.getNodeCheckFlags(node) & 256) &&
- (getCombinedFlagsForIdentifier(node.name) & 4096);
- if (isUninitializedLet &&
- node.parent.parent.kind !== 188 &&
- node.parent.parent.kind !== 189) {
- initializer = createVoidZero();
- }
- }
- var exportChanged = isNameOfExportedSourceLevelDeclarationInSystemExternalModule(node.name);
- if (exportChanged) {
- write(exportFunctionForFile + "(\"");
- emitNodeWithoutSourceMap(node.name);
- write("\", ");
- }
- emitModuleMemberName(node);
- emitOptional(" = ", initializer);
- if (exportChanged) {
- write(")");
- }
- }
- }
- function emitExportVariableAssignments(node) {
- if (node.kind === 176) {
- return;
- }
- var name = node.name;
- if (name.kind === 65) {
- emitExportMemberAssignments(name);
- }
- else if (ts.isBindingPattern(name)) {
- ts.forEach(name.elements, emitExportVariableAssignments);
- }
- }
- function getCombinedFlagsForIdentifier(node) {
- if (!node.parent || (node.parent.kind !== 199 && node.parent.kind !== 153)) {
- return 0;
- }
- return ts.getCombinedNodeFlags(node.parent);
- }
- function renameNonTopLevelLetAndConst(node) {
- if (languageVersion >= 2 ||
- ts.nodeIsSynthesized(node) ||
- node.kind !== 65 ||
- (node.parent.kind !== 199 && node.parent.kind !== 153)) {
- return;
- }
- var combinedFlags = getCombinedFlagsForIdentifier(node);
- if (((combinedFlags & 12288) === 0) || combinedFlags & 1) {
- return;
- }
- var list = ts.getAncestor(node, 200);
- if (list.parent.kind === 181) {
- var isSourceFileLevelBinding = list.parent.parent.kind === 228;
- var isModuleLevelBinding = list.parent.parent.kind === 207;
- var isFunctionLevelBinding = list.parent.parent.kind === 180 && ts.isFunctionLike(list.parent.parent.parent);
- if (isSourceFileLevelBinding || isModuleLevelBinding || isFunctionLevelBinding) {
- return;
- }
- }
- var blockScopeContainer = ts.getEnclosingBlockScopeContainer(node);
- var parent = blockScopeContainer.kind === 228
- ? blockScopeContainer
- : blockScopeContainer.parent;
- if (resolver.resolvesToSomeValue(parent, node.text)) {
- var variableId = resolver.getBlockScopedVariableId(node);
- if (!blockScopedVariableToGeneratedName) {
- blockScopedVariableToGeneratedName = [];
- }
- var generatedName = makeUniqueName(node.text);
- blockScopedVariableToGeneratedName[variableId] = generatedName;
- }
- }
- function isES6ExportedDeclaration(node) {
- return !!(node.flags & 1) &&
- languageVersion >= 2 &&
- node.parent.kind === 228;
- }
- function emitVariableStatement(node) {
- var startIsEmitted = true;
- if (!(node.flags & 1)) {
- startIsEmitted = tryEmitStartOfVariableDeclarationList(node.declarationList);
- }
- else if (isES6ExportedDeclaration(node)) {
- write("export ");
- startIsEmitted = tryEmitStartOfVariableDeclarationList(node.declarationList);
- }
- if (startIsEmitted) {
- emitCommaList(node.declarationList.declarations);
- write(";");
- }
- else {
- var atLeastOneItem = emitVariableDeclarationListSkippingUninitializedEntries(node.declarationList);
- if (atLeastOneItem) {
- write(";");
- }
- }
- if (languageVersion < 2 && node.parent === currentSourceFile) {
- ts.forEach(node.declarationList.declarations, emitExportVariableAssignments);
- }
- }
- function emitParameter(node) {
- if (languageVersion < 2) {
- if (ts.isBindingPattern(node.name)) {
- var name_19 = createTempVariable(0);
- if (!tempParameters) {
- tempParameters = [];
- }
- tempParameters.push(name_19);
- emit(name_19);
- }
- 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 (p) {
- if (p.dotDotDotToken) {
- return;
- }
- if (ts.isBindingPattern(p.name)) {
- writeLine();
- write("var ");
- emitDestructuring(p, false, tempParameters[tempIndex]);
- write(";");
- tempIndex++;
- }
- else if (p.initializer) {
- writeLine();
- emitStart(p);
- write("if (");
- emitNodeWithoutSourceMap(p.name);
- write(" === void 0)");
- emitEnd(p);
- write(" { ");
- emitStart(p);
- emitNodeWithoutSourceMap(p.name);
- write(" = ");
- emitNodeWithoutSourceMap(p.initializer);
- emitEnd(p);
- write("; }");
- }
- });
- }
- }
- function emitRestParameter(node) {
- if (languageVersion < 2 && ts.hasRestParameters(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 ");
- emitNodeWithoutSourceMap(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);
- emitNodeWithoutSourceMap(restParam.name);
- write("[" + tempName + " - " + restIndex + "] = arguments[" + tempName + "];");
- emitEnd(restParam);
- decreaseIndent();
- writeLine();
- write("}");
- }
- }
- function emitAccessor(node) {
- write(node.kind === 137 ? "get " : "set ");
- emit(node.name, false);
- emitSignatureAndBody(node);
- }
- function shouldEmitAsArrowFunction(node) {
- return node.kind === 164 && languageVersion >= 2;
- }
- function emitDeclarationName(node) {
- if (node.name) {
- emitNodeWithoutSourceMap(node.name);
- }
- else {
- write(getGeneratedNameForNode(node));
- }
- }
- function shouldEmitFunctionName(node) {
- if (node.kind === 163) {
- return !!node.name;
- }
- if (node.kind === 201) {
- return !!node.name || languageVersion < 2;
- }
- }
- function emitFunctionDeclaration(node) {
- if (ts.nodeIsMissing(node.body)) {
- return emitOnlyPinnedOrTripleSlashComments(node);
- }
- if (node.kind !== 135 && node.kind !== 134) {
- emitLeadingComments(node);
- }
- if (!shouldEmitAsArrowFunction(node)) {
- if (isES6ExportedDeclaration(node)) {
- write("export ");
- if (node.flags & 256) {
- write("default ");
- }
- }
- write("function");
- if (languageVersion >= 2 && node.asteriskToken) {
- write("*");
- }
- write(" ");
- }
- if (shouldEmitFunctionName(node)) {
- emitDeclarationName(node);
- }
- emitSignatureAndBody(node);
- if (languageVersion < 2 && node.kind === 201 && node.parent === currentSourceFile && node.name) {
- emitExportMemberAssignments(node.name);
- }
- if (node.kind !== 135 && node.kind !== 134) {
- 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.hasRestParameters(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 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);
- }
- if (!node.body) {
- write(" { }");
- }
- else if (node.body.kind === 180) {
- emitBlockFunctionBody(node, node.body);
- }
- else {
- emitExpressionFunctionBody(node, node.body);
- }
- 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) {
- emitDownLevelExpressionFunctionBody(node, body);
- return;
- }
- write(" ");
- var current = body;
- while (current.kind === 161) {
- current = current.expression;
- }
- emitParenthesizedIf(body, current.kind === 155);
- }
- 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(15, body.statements.end);
- scopeEmitEnd();
- }
- function findInitialSuperCall(ctor) {
- if (ctor.body) {
- var statement = ctor.body.statements[0];
- if (statement && statement.kind === 183) {
- var expr = statement.expression;
- if (expr && expr.kind === 158) {
- var func = expr.expression;
- if (func && func.kind === 91) {
- 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 === 8 || memberName.kind === 7) {
- write("[");
- emitNodeWithoutSourceMap(memberName);
- write("]");
- }
- else if (memberName.kind === 128) {
- emitComputedPropertyName(memberName);
- }
- else {
- write(".");
- emitNodeWithoutSourceMap(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 === 133 && 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 === 179) {
- writeLine();
- write(";");
- }
- else if (member.kind === 135 || node.kind === 134) {
- if (!member.body) {
- return emitOnlyPinnedOrTripleSlashComments(member);
- }
- writeLine();
- emitLeadingComments(member);
- emitStart(member);
- emitStart(member.name);
- emitClassMemberPrefix(node, member);
- emitMemberAccessForPropertyName(member.name);
- emitEnd(member.name);
- write(" = ");
- emitStart(member);
- emitFunctionDeclaration(member);
- emitEnd(member);
- emitEnd(member);
- write(";");
- emitTrailingComments(member);
- }
- else if (member.kind === 137 || member.kind === 138) {
- 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 === 135 || node.kind === 134) && !member.body) {
- emitOnlyPinnedOrTripleSlashComments(member);
- }
- else if (member.kind === 135 ||
- member.kind === 137 ||
- member.kind === 138) {
- writeLine();
- emitLeadingComments(member);
- emitStart(member);
- if (member.flags & 128) {
- write("static ");
- }
- if (member.kind === 137) {
- write("get ");
- }
- else if (member.kind === 138) {
- write("set ");
- }
- if (member.asteriskToken) {
- write("*");
- }
- emit(member.name);
- emitSignatureAndBody(member);
- emitEnd(member);
- emitTrailingComments(member);
- }
- else if (member.kind === 179) {
- 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 === 136 && !member.body) {
- emitOnlyPinnedOrTripleSlashComments(member);
- }
- if (member.kind === 133 && 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("()");
- }
- }
- }
- write(" {");
- scopeEmitStart(node, "constructor");
- increaseIndent();
- if (ctor) {
- emitDetachedComments(ctor.body.statements);
- }
- emitCaptureThisForNodeIfNecessary(node);
- if (ctor) {
- emitDefaultValueAssignments(ctor);
- emitRestParameter(ctor);
- if (baseTypeElement) {
- var 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);
- }
- emitLines(statements);
- }
- emitTempDeclarations(true);
- writeLine();
- if (ctor) {
- emitLeadingCommentsOfPosition(ctor.body.statements.end);
- }
- decreaseIndent();
- emitToken(15, 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);
- }
- }
- function emitClassLikeDeclarationForES6AndHigher(node) {
- var thisNodeIsDecorated = ts.nodeIsDecorated(node);
- if (node.kind === 202) {
- if (thisNodeIsDecorated) {
- if (isES6ExportedDeclaration(node) && !(node.flags & 256)) {
- write("export ");
- }
- write("let ");
- emitDeclarationName(node);
- write(" = ");
- }
- else if (isES6ExportedDeclaration(node)) {
- write("export ");
- if (node.flags & 256) {
- write("default ");
- }
- }
- }
- var staticProperties = getInitializedProperties(node, true);
- var isClassExpressionWithStaticProperties = staticProperties.length > 0 && node.kind === 175;
- var tempVariable;
- if (isClassExpressionWithStaticProperties) {
- tempVariable = createAndRecordTempVariable(0);
- write("(");
- increaseIndent();
- emit(tempVariable);
- write(" = ");
- }
- write("class");
- if ((node.name || !(node.flags & 256)) && !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(15, 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 & 256) && thisNodeIsDecorated) {
- writeLine();
- write("export default ");
- emitDeclarationName(node);
- write(";");
- }
- }
- function emitClassLikeDeclarationBelowES6(node) {
- if (node.kind === 202) {
- 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(15, node.members.end, function () {
- write("return ");
- emitDeclarationName(node);
- });
- write(";");
- emitTempDeclarations(true);
- tempFlags = saveTempFlags;
- tempVariables = saveTempVariables;
- tempParameters = saveTempParameters;
- computedPropertyNamesToGeneratedNames = saveComputedPropertyNamesToGeneratedNames;
- decreaseIndent();
- writeLine();
- emitToken(15, node.members.end);
- scopeEmitEnd();
- emitStart(node);
- write(")(");
- if (baseTypeNode) {
- emit(baseTypeNode.expression);
- }
- write(")");
- if (node.kind === 202) {
- write(";");
- }
- emitEnd(node);
- if (node.kind === 202) {
- emitExportMemberAssignment(node);
- }
- if (languageVersion < 2 && node.parent === currentSourceFile && node.name) {
- emitExportMemberAssignments(node.name);
- }
- }
- 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 === 135) {
- functionLikeMember = member;
- }
- }
- writeLine();
- emitStart(member);
- if (member.kind !== 133) {
- write("Object.defineProperty(");
- emitStart(member.name);
- emitClassMemberPrefix(node, member);
- write(", ");
- emitExpressionForPropertyName(member.name);
- emitEnd(member.name);
- write(",");
- increaseIndent();
- writeLine();
- }
- 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 (member.kind !== 133) {
- write(", Object.getOwnPropertyDescriptor(");
- emitStart(member.name);
- emitClassMemberPrefix(node, member);
- write(", ");
- emitExpressionForPropertyName(member.name);
- emitEnd(member.name);
- write("))");
- decreaseIndent();
- }
- 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 135:
- case 137:
- case 138:
- case 133:
- return true;
- }
- return false;
- }
- function shouldEmitReturnTypeMetadata(node) {
- switch (node.kind) {
- case 135:
- return true;
- }
- return false;
- }
- function shouldEmitParamTypesMetadata(node) {
- switch (node.kind) {
- case 202:
- case 135:
- case 138:
- return true;
- }
- return false;
- }
- function emitSerializedTypeMetadata(node, writeComma) {
- var argumentsWritten = 0;
- if (compilerOptions.emitDecoratorMetadata) {
- if (shouldEmitTypeMetadata(node)) {
- var serializedType = resolver.serializeTypeOfNode(node, getGeneratedNameForNode);
- if (serializedType) {
- if (writeComma) {
- write(", ");
- }
- writeLine();
- write("__metadata('design:type', ");
- emitSerializedType(node, serializedType);
- write(")");
- argumentsWritten++;
- }
- }
- if (shouldEmitParamTypesMetadata(node)) {
- var serializedTypes = resolver.serializeParameterTypesOfNode(node, getGeneratedNameForNode);
- if (serializedTypes) {
- if (writeComma || argumentsWritten) {
- write(", ");
- }
- writeLine();
- write("__metadata('design:paramtypes', [");
- for (var i = 0; i < serializedTypes.length; ++i) {
- if (i > 0) {
- write(", ");
- }
- emitSerializedType(node, serializedTypes[i]);
- }
- write("])");
- argumentsWritten++;
- }
- }
- if (shouldEmitReturnTypeMetadata(node)) {
- var serializedType = resolver.serializeReturnTypeOfNode(node, getGeneratedNameForNode);
- if (serializedType) {
- if (writeComma || argumentsWritten) {
- write(", ");
- }
- writeLine();
- write("__metadata('design:returntype', ");
- emitSerializedType(node, serializedType);
- write(")");
- argumentsWritten++;
- }
- }
- }
- return argumentsWritten;
- }
- function serializeTypeNameSegment(location, path, index) {
- switch (index) {
- case 0:
- return "typeof " + path[index] + " !== 'undefined' && " + path[index];
- case 1:
- return serializeTypeNameSegment(location, path, index - 1) + "." + path[index];
- default:
- var temp = createAndRecordTempVariable(0).text;
- return "(" + temp + " = " + serializeTypeNameSegment(location, path, index - 1) + ") && " + temp + "." + path[index];
- }
- }
- function emitSerializedType(location, name) {
- if (typeof name === "string") {
- write(name);
- return;
- }
- else {
- ts.Debug.assert(name.length > 0, "Invalid serialized type name");
- write("(" + serializeTypeNameSegment(location, name, name.length - 1) + ") || Object");
- }
- }
- function emitInterfaceDeclaration(node) {
- emitOnlyPinnedOrTripleSlashComments(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(15, 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 (languageVersion < 2 && node.parent === currentSourceFile) {
- if (compilerOptions.module === 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 === 206) {
- 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) & 2048);
- }
- function emitModuleDeclaration(node) {
- var shouldEmit = shouldEmitModuleDeclaration(node);
- if (!shouldEmit) {
- return emitOnlyPinnedOrTripleSlashComments(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 === 207) {
- 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(15, 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 === 65 && node.parent === currentSourceFile) {
- if (compilerOptions.module === 4 && (node.flags & 1)) {
- writeLine();
- write(exportFunctionForFile + "(\"");
- emitDeclarationName(node);
- write("\", ");
- emitDeclarationName(node);
- write(");");
- }
- emitExportMemberAssignments(node.name);
- }
- }
- function emitRequire(moduleName) {
- if (moduleName.kind === 8) {
- write("require(");
- emitStart(moduleName);
- emitLiteral(moduleName);
- emitEnd(moduleName);
- emitToken(17, moduleName.end);
- }
- else {
- write("require()");
- }
- }
- function getNamespaceDeclarationNode(node) {
- if (node.kind === 209) {
- return node;
- }
- var importClause = node.importClause;
- if (importClause && importClause.namedBindings && importClause.namedBindings.kind === 212) {
- return importClause.namedBindings;
- }
- }
- function isDefaultImport(node) {
- return node.kind === 210 && 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 (languageVersion < 2) {
- 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 === 212) {
- 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 === 209 && (node.flags & 1) !== 0;
- var namespaceDeclaration = getNamespaceDeclarationNode(node);
- if (compilerOptions.module !== 2) {
- emitLeadingComments(node);
- emitStart(node);
- if (namespaceDeclaration && !isDefaultImport(node)) {
- if (!isExportedImport)
- write("var ");
- emitModuleMemberName(namespaceDeclaration);
- write(" = ");
- }
- else {
- var isNakedImport = 210 && !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);
- if (isES6ExportedDeclaration(node)) {
- write("export ");
- write("var ");
- }
- else if (!(node.flags & 1)) {
- write("var ");
- }
- emitModuleMemberName(node);
- write(" = ");
- emit(node.moduleReference);
- write(";");
- emitEnd(node);
- emitExportImportAssignments(node);
- emitTrailingComments(node);
- }
- }
- function emitExportDeclaration(node) {
- ts.Debug.assert(compilerOptions.module !== 4);
- if (languageVersion < 2) {
- if (node.moduleSpecifier && (!node.exportClause || resolver.isValueAliasDeclaration(node))) {
- emitStart(node);
- var generatedName = getGeneratedNameForNode(node);
- if (node.exportClause) {
- if (compilerOptions.module !== 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(".");
- emitNodeWithoutSourceMap(specifier.name);
- write(" = ");
- write(generatedName);
- write(".");
- emitNodeWithoutSourceMap(specifier.propertyName || specifier.name);
- write(";");
- emitEnd(specifier);
- }
- }
- }
- else {
- writeLine();
- write("__export(");
- if (compilerOptions.module !== 2) {
- emitRequire(ts.getExternalModuleName(node));
- }
- else {
- write(generatedName);
- }
- write(");");
- }
- emitEnd(node);
- }
- }
- else {
- if (!node.exportClause || resolver.isValueAliasDeclaration(node)) {
- emitStart(node);
- write("export ");
- if (node.exportClause) {
- write("{ ");
- emitExportOrImportSpecifierList(node.exportClause.elements, resolver.isValueAliasDeclaration);
- write(" }");
- }
- else {
- write("*");
- }
- if (node.moduleSpecifier) {
- write(" from ");
- emitNodeWithoutSourceMap(node.moduleSpecifier);
- }
- write(";");
- emitEnd(node);
- }
- }
- }
- function emitExportOrImportSpecifierList(specifiers, shouldEmit) {
- ts.Debug.assert(languageVersion >= 2);
- var needsComma = false;
- for (var _a = 0; _a < specifiers.length; _a++) {
- var specifier = specifiers[_a];
- if (shouldEmit(specifier)) {
- if (needsComma) {
- write(", ");
- }
- emitStart(specifier);
- if (specifier.propertyName) {
- emitNodeWithoutSourceMap(specifier.propertyName);
- write(" as ");
- }
- emitNodeWithoutSourceMap(specifier.name);
- emitEnd(specifier);
- needsComma = true;
- }
- }
- }
- function emitExportAssignment(node) {
- if (!node.isExportEquals && resolver.isValueAliasDeclaration(node)) {
- if (languageVersion >= 2) {
- writeLine();
- emitStart(node);
- write("export default ");
- var expression = node.expression;
- emit(expression);
- if (expression.kind !== 201 &&
- expression.kind !== 202) {
- write(";");
- }
- emitEnd(node);
- }
- else {
- writeLine();
- emitStart(node);
- if (compilerOptions.module === 4) {
- write(exportFunctionForFile + "(\"default\",");
- emit(node.expression);
- write(")");
- }
- else {
- 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 210:
- if (!node.importClause ||
- resolver.isReferencedAliasDeclaration(node.importClause, true)) {
- externalImports.push(node);
- }
- break;
- case 209:
- if (node.moduleReference.kind === 220 && resolver.isReferencedAliasDeclaration(node)) {
- externalImports.push(node);
- }
- break;
- case 216:
- 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_20 = (specifier.propertyName || specifier.name).text;
- (exportSpecifiers[name_20] || (exportSpecifiers[name_20] = [])).push(specifier);
- }
- }
- break;
- case 215:
- 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(importNode) {
- var namespaceDeclaration = getNamespaceDeclarationNode(importNode);
- if (namespaceDeclaration && !isDefaultImport(importNode)) {
- return ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, namespaceDeclaration.name);
- }
- else {
- return getGeneratedNameForNode(importNode);
- }
- }
- function getExternalModuleNameText(importNode) {
- var moduleName = ts.getExternalModuleName(importNode);
- if (moduleName.kind === 8) {
- return 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 === 216 ||
- (importNode.kind === 210 && !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 === 216 && 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 !== 216) {
- 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("for(var n in m) {");
- increaseIndent();
- writeLine();
- write("if (n !== \"default\"");
- if (localNames) {
- write("&& !" + localNames + ".hasOwnProperty(n)");
- }
- write(") " + exportFunctionForFile + "(n, m[n]);");
- decreaseIndent();
- writeLine();
- write("}");
- decreaseIndent();
- writeLine();
- write("}");
- return exportStarFunction;
- }
- function writeExportedName(node) {
- if (node.kind !== 65 && node.flags & 256) {
- return;
- }
- if (started) {
- write(",");
- }
- else {
- started = true;
- }
- writeLine();
- write("'");
- if (node.kind === 65) {
- emitNodeWithoutSourceMap(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_21 = local.kind === 65
- ? local
- : local.name;
- if (name_21) {
- var text = ts.unescapeIdentifier(name_21.text);
- if (ts.hasProperty(seen, text)) {
- continue;
- }
- else {
- seen[text] = text;
- }
- }
- if (i !== 0) {
- write(", ");
- }
- if (local.kind === 202 || local.kind === 206 || local.kind === 205) {
- emitDeclarationName(local);
- }
- else {
- emit(local);
- }
- var flags = ts.getCombinedNodeFlags(local.kind === 65 ? 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 === 201) {
- if (!hoistedFunctionDeclarations) {
- hoistedFunctionDeclarations = [];
- }
- hoistedFunctionDeclarations.push(node);
- return;
- }
- if (node.kind === 202) {
- if (!hoistedVars) {
- hoistedVars = [];
- }
- hoistedVars.push(node);
- return;
- }
- if (node.kind === 205) {
- if (shouldEmitEnumDeclaration(node)) {
- if (!hoistedVars) {
- hoistedVars = [];
- }
- hoistedVars.push(node);
- }
- return;
- }
- if (node.kind === 206) {
- if (shouldEmitModuleDeclaration(node)) {
- if (!hoistedVars) {
- hoistedVars = [];
- }
- hoistedVars.push(node);
- }
- return;
- }
- if (node.kind === 199 || node.kind === 153) {
- if (shouldHoistVariable(node, false)) {
- var name_22 = node.name;
- if (name_22.kind === 65) {
- if (!hoistedVars) {
- hoistedVars = [];
- }
- hoistedVars.push(name_22);
- }
- else {
- ts.forEachChild(name_22, visit);
- }
- }
- 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) & 12288) === 0 ||
- ts.getEnclosingBlockScopeContainer(node).kind === 228;
- }
- function isCurrentFileSystemExternalModule() {
- return compilerOptions.module === 4 && ts.isExternalModule(currentSourceFile);
- }
- function emitSystemModuleBody(node, startIndex) {
- emitVariableDeclarationsForImports();
- writeLine();
- var exportedDeclarations = processTopLevelVariableAndFunctionDeclarations(node);
- var exportStarFunction = emitLocalStorageForExportedNamesIfNecessary(exportedDeclarations);
- writeLine();
- write("return {");
- increaseIndent();
- writeLine();
- emitSetters(exportStarFunction);
- writeLine();
- emitExecute(node, startIndex);
- decreaseIndent();
- writeLine();
- write("}");
- emitTempDeclarations(true);
- }
- function emitSetters(exportStarFunction) {
- write("setters:[");
- for (var i = 0; i < externalImports.length; ++i) {
- if (i !== 0) {
- write(",");
- }
- writeLine();
- increaseIndent();
- var importNode = externalImports[i];
- var importVariableName = getLocalNameForExternalImport(importNode) || "";
- var parameterName = "_" + importVariableName;
- write("function (" + parameterName + ") {");
- switch (importNode.kind) {
- case 210:
- if (!importNode.importClause) {
- break;
- }
- case 209:
- ts.Debug.assert(importVariableName !== "");
- increaseIndent();
- writeLine();
- write(importVariableName + " = " + parameterName + ";");
- writeLine();
- var defaultName = importNode.kind === 210
- ? importNode.importClause.name
- : importNode.name;
- if (defaultName) {
- emitExportMemberAssignments(defaultName);
- writeLine();
- }
- if (importNode.kind === 210 &&
- importNode.importClause.namedBindings) {
- var namedBindings = importNode.importClause.namedBindings;
- if (namedBindings.kind === 212) {
- emitExportMemberAssignments(namedBindings.name);
- writeLine();
- }
- else {
- for (var _a = 0, _b = namedBindings.elements; _a < _b.length; _a++) {
- var element = _b[_a];
- emitExportMemberAssignments(element.name || element.propertyName);
- writeLine();
- }
- }
- }
- decreaseIndent();
- break;
- case 216:
- ts.Debug.assert(importVariableName !== "");
- increaseIndent();
- if (importNode.exportClause) {
- for (var _c = 0, _d = importNode.exportClause.elements; _c < _d.length; _c++) {
- var e = _d[_c];
- writeLine();
- write(exportFunctionForFile + "(\"");
- emitNodeWithoutSourceMap(e.name);
- write("\", " + parameterName + "[\"");
- emitNodeWithoutSourceMap(e.propertyName || e.name);
- write("\"]);");
- }
- }
- else {
- writeLine();
- write(exportStarFunction + "(" + parameterName + ");");
- }
- writeLine();
- decreaseIndent();
- break;
- }
- 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 216:
- case 210:
- case 209:
- case 201:
- continue;
- }
- writeLine();
- emit(statement);
- }
- decreaseIndent();
- writeLine();
- write("}");
- }
- function emitSystemModule(node, startIndex) {
- collectExternalModuleInfo(node);
- ts.Debug.assert(!exportFunctionForFile);
- exportFunctionForFile = makeUniqueName("exports");
- write("System.register(");
- if (node.moduleName) {
- write("\"" + node.moduleName + "\", ");
- }
- write("[");
- for (var i = 0; i < externalImports.length; ++i) {
- var text = getExternalModuleNameText(externalImports[i]);
- if (i !== 0) {
- write(", ");
- }
- write(text);
- }
- write("], function(" + exportFunctionForFile + ") {");
- writeLine();
- increaseIndent();
- emitCaptureThisForNodeIfNecessary(node);
- emitSystemModuleBody(node, startIndex);
- decreaseIndent();
- writeLine();
- write("});");
- }
- function emitAMDDependencies(node, includeNonAmdDependencies) {
- // An AMD define function has the following shape:
- // define(id?, dependencies?, factory);
- //
- // This has the shape of
- // define(name, ["module1", "module2"], function (module1Alias) {
- // The location of the alias in the parameter list in the factory function needs to
- // match the position of the module name in the dependency list.
- //
- // To ensure this is true in cases of modules with no aliases, e.g.:
- // `import "module"` or `<amd-dependency path= "a.css" />`
- // we need to add modules without alias names to the end of the dependencies list
- 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);
- }
- }
- write("[\"require\", \"exports\"");
- if (aliasedModuleNames.length) {
- write(", ");
- write(aliasedModuleNames.join(", "));
- }
- if (unaliasedModuleNames.length) {
- write(", ");
- write(unaliasedModuleNames.join(", "));
- }
- write("], function (require, exports");
- if (importAliasNames.length) {
- write(", ");
- write(importAliasNames.join(", "));
- }
- }
- function emitAMDModule(node, startIndex) {
- collectExternalModuleInfo(node);
- writeLine();
- write("define(");
- if (node.moduleName) {
- write("\"" + node.moduleName + "\", ");
- }
- emitAMDDependencies(node, true);
- write(") {");
- increaseIndent();
- emitExportStarHelper();
- emitCaptureThisForNodeIfNecessary(node);
- emitLinesStartingAt(node.statements, startIndex);
- emitTempDeclarations(true);
- emitExportEquals(true);
- decreaseIndent();
- writeLine();
- write("});");
- }
- function emitCommonJSModule(node, startIndex) {
- collectExternalModuleInfo(node);
- emitExportStarHelper();
- emitCaptureThisForNodeIfNecessary(node);
- emitLinesStartingAt(node.statements, startIndex);
- emitTempDeclarations(true);
- emitExportEquals(false);
- }
- function emitUMDModule(node, startIndex) {
- collectExternalModuleInfo(node);
- writeLines("(function (deps, 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(deps, factory);\n }\n})(");
- emitAMDDependencies(node, false);
- write(") {");
- increaseIndent();
- emitExportStarHelper();
- emitCaptureThisForNodeIfNecessary(node);
- emitLinesStartingAt(node.statements, startIndex);
- emitTempDeclarations(true);
- emitExportEquals(true);
- decreaseIndent();
- writeLine();
- write("});");
- }
- function emitES6Module(node, startIndex) {
- externalImports = undefined;
- exportSpecifiers = undefined;
- exportEquals = undefined;
- hasExportStars = false;
- 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 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 emitSourceFileNode(node) {
- writeLine();
- emitDetachedComments(node);
- var startIndex = emitDirectivePrologues(node.statements, false);
- if (!compilerOptions.noEmitHelpers) {
- if ((languageVersion < 2) && (!extendsEmitted && resolver.getNodeCheckFlags(node) & 8)) {
- writeLines(extendsHelper);
- extendsEmitted = true;
- }
- if (!decorateEmitted && resolver.getNodeCheckFlags(node) & 512) {
- writeLines(decorateHelper);
- if (compilerOptions.emitDecoratorMetadata) {
- writeLines(metadataHelper);
- }
- decorateEmitted = true;
- }
- if (!paramEmitted && resolver.getNodeCheckFlags(node) & 1024) {
- writeLines(paramHelper);
- paramEmitted = true;
- }
- }
- if (ts.isExternalModule(node) || compilerOptions.isolatedModules) {
- if (languageVersion >= 2) {
- emitES6Module(node, startIndex);
- }
- else if (compilerOptions.module === 2) {
- emitAMDModule(node, startIndex);
- }
- else if (compilerOptions.module === 4) {
- emitSystemModule(node, startIndex);
- }
- else if (compilerOptions.module === 3) {
- emitUMDModule(node, startIndex);
- }
- else {
- emitCommonJSModule(node, startIndex);
- }
- }
- else {
- externalImports = undefined;
- exportSpecifiers = undefined;
- exportEquals = undefined;
- hasExportStars = false;
- emitCaptureThisForNodeIfNecessary(node);
- emitLinesStartingAt(node.statements, startIndex);
- emitTempDeclarations(true);
- }
- emitLeadingComments(node.endOfFileToken);
- }
- function emitNodeWithoutSourceMap(node, allowGeneratedIdentifiers) {
- if (!node) {
- return;
- }
- if (node.flags & 2) {
- return emitOnlyPinnedOrTripleSlashComments(node);
- }
- var emitComments = shouldEmitLeadingAndTrailingComments(node);
- if (emitComments) {
- emitLeadingComments(node);
- }
- emitJavaScriptWorker(node, allowGeneratedIdentifiers);
- if (emitComments) {
- emitTrailingComments(node);
- }
- }
- function shouldEmitLeadingAndTrailingComments(node) {
- switch (node.kind) {
- case 203:
- case 201:
- case 210:
- case 209:
- case 204:
- case 215:
- return false;
- case 206:
- return shouldEmitModuleDeclaration(node);
- case 205:
- return shouldEmitEnumDeclaration(node);
- }
- if (node.kind !== 180 &&
- node.parent &&
- node.parent.kind === 164 &&
- node.parent.body === node &&
- compilerOptions.target <= 1) {
- return false;
- }
- return true;
- }
- function emitJavaScriptWorker(node, allowGeneratedIdentifiers) {
- if (allowGeneratedIdentifiers === void 0) { allowGeneratedIdentifiers = true; }
- switch (node.kind) {
- case 65:
- return emitIdentifier(node, allowGeneratedIdentifiers);
- case 130:
- return emitParameter(node);
- case 135:
- case 134:
- return emitMethod(node);
- case 137:
- case 138:
- return emitAccessor(node);
- case 93:
- return emitThis(node);
- case 91:
- return emitSuper(node);
- case 89:
- return write("null");
- case 95:
- return write("true");
- case 80:
- return write("false");
- case 7:
- case 8:
- case 9:
- case 10:
- case 11:
- case 12:
- case 13:
- return emitLiteral(node);
- case 172:
- return emitTemplateExpression(node);
- case 178:
- return emitTemplateSpan(node);
- case 127:
- return emitQualifiedName(node);
- case 151:
- return emitObjectBindingPattern(node);
- case 152:
- return emitArrayBindingPattern(node);
- case 153:
- return emitBindingElement(node);
- case 154:
- return emitArrayLiteral(node);
- case 155:
- return emitObjectLiteral(node);
- case 225:
- return emitPropertyAssignment(node);
- case 226:
- return emitShorthandPropertyAssignment(node);
- case 128:
- return emitComputedPropertyName(node);
- case 156:
- return emitPropertyAccess(node);
- case 157:
- return emitIndexedAccess(node);
- case 158:
- return emitCallExpression(node);
- case 159:
- return emitNewExpression(node);
- case 160:
- return emitTaggedTemplateExpression(node);
- case 161:
- return emit(node.expression);
- case 162:
- return emitParenExpression(node);
- case 201:
- case 163:
- case 164:
- return emitFunctionDeclaration(node);
- case 165:
- return emitDeleteExpression(node);
- case 166:
- return emitTypeOfExpression(node);
- case 167:
- return emitVoidExpression(node);
- case 168:
- return emitPrefixUnaryExpression(node);
- case 169:
- return emitPostfixUnaryExpression(node);
- case 170:
- return emitBinaryExpression(node);
- case 171:
- return emitConditionalExpression(node);
- case 174:
- return emitSpreadElementExpression(node);
- case 173:
- return emitYieldExpression(node);
- case 176:
- return;
- case 180:
- case 207:
- return emitBlock(node);
- case 181:
- return emitVariableStatement(node);
- case 182:
- return write(";");
- case 183:
- return emitExpressionStatement(node);
- case 184:
- return emitIfStatement(node);
- case 185:
- return emitDoStatement(node);
- case 186:
- return emitWhileStatement(node);
- case 187:
- return emitForStatement(node);
- case 189:
- case 188:
- return emitForInOrForOfStatement(node);
- case 190:
- case 191:
- return emitBreakOrContinueStatement(node);
- case 192:
- return emitReturnStatement(node);
- case 193:
- return emitWithStatement(node);
- case 194:
- return emitSwitchStatement(node);
- case 221:
- case 222:
- return emitCaseOrDefaultClause(node);
- case 195:
- return emitLabelledStatement(node);
- case 196:
- return emitThrowStatement(node);
- case 197:
- return emitTryStatement(node);
- case 224:
- return emitCatchClause(node);
- case 198:
- return emitDebuggerStatement(node);
- case 199:
- return emitVariableDeclaration(node);
- case 175:
- return emitClassExpression(node);
- case 202:
- return emitClassDeclaration(node);
- case 203:
- return emitInterfaceDeclaration(node);
- case 205:
- return emitEnumDeclaration(node);
- case 227:
- return emitEnumMember(node);
- case 206:
- return emitModuleDeclaration(node);
- case 210:
- return emitImportDeclaration(node);
- case 209:
- return emitImportEqualsDeclaration(node);
- case 216:
- return emitExportDeclaration(node);
- case 215:
- return emitExportAssignment(node);
- case 228:
- 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 filterComments(ranges, onlyPinnedOrTripleSlashComments) {
- if (ranges && onlyPinnedOrTripleSlashComments) {
- ranges = ts.filter(ranges, isPinnedOrTripleSlashComment);
- if (ranges.length === 0) {
- return undefined;
- }
- }
- return ranges;
- }
- function getLeadingCommentsToEmit(node) {
- if (node.parent) {
- if (node.parent.kind === 228 || 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 === 228 || node.end !== node.parent.end) {
- return ts.getTrailingCommentRanges(currentSourceFile.text, node.end);
- }
- }
- }
- function emitOnlyPinnedOrTripleSlashComments(node) {
- emitLeadingCommentsWorker(node, true);
- }
- function emitLeadingComments(node) {
- return emitLeadingCommentsWorker(node, compilerOptions.removeComments);
- }
- function emitLeadingCommentsWorker(node, onlyPinnedOrTripleSlashComments) {
- var leadingComments = filterComments(getLeadingCommentsToEmit(node), onlyPinnedOrTripleSlashComments);
- ts.emitNewLineBeforeLeadingComments(currentSourceFile, writer, node, leadingComments);
- ts.emitComments(currentSourceFile, writer, leadingComments, true, newLine, writeComment);
- }
- function emitTrailingComments(node) {
- var trailingComments = filterComments(getTrailingCommentsToEmit(node), compilerOptions.removeComments);
- ts.emitComments(currentSourceFile, writer, trailingComments, false, newLine, writeComment);
- }
- function emitLeadingCommentsOfPosition(pos) {
- var leadingComments;
- if (hasDetachedComments(pos)) {
- leadingComments = getLeadingCommentsWithoutDetachedComments();
- }
- else {
- leadingComments = ts.getLeadingCommentRanges(currentSourceFile.text, pos);
- }
- leadingComments = filterComments(leadingComments, compilerOptions.removeComments);
- ts.emitNewLineBeforeLeadingComments(currentSourceFile, writer, { pos: pos, end: pos }, leadingComments);
- ts.emitComments(currentSourceFile, writer, leadingComments, true, newLine, writeComment);
- }
- function emitDetachedComments(node) {
- var 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 isPinnedOrTripleSlashComment(comment) {
- if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 42) {
- return currentSourceFile.text.charCodeAt(comment.pos + 2) === 33;
- }
- else if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 47 &&
- comment.pos + 2 < comment.end &&
- currentSourceFile.text.charCodeAt(comment.pos + 2) === 47 &&
- currentSourceFile.text.substring(comment.pos, comment.end).match(ts.fullTripleSlashReferencePathRegEx)) {
- return true;
- }
- }
- }
- function emitFile(jsFilePath, sourceFile) {
- emitJavaScript(jsFilePath, sourceFile);
- if (compilerOptions.declaration) {
- ts.writeDeclarationFile(jsFilePath, sourceFile, host, resolver, diagnostics);
- }
- }
- }
- ts.emitFiles = emitFiles;
- })(ts || (ts = {}));
- /// <reference path="sys.ts" />
- /// <reference path="emitter.ts" />
- var ts;
- (function (ts) {
- ts.programTime = 0;
- ts.emitTime = 0;
- ts.ioReadTime = 0;
- ts.ioWriteTime = 0;
- ts.version = "1.5.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 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; }
- };
- }
- ts.createCompilerHost = createCompilerHost;
- function getPreEmitDiagnostics(program, sourceFile) {
- var diagnostics = program.getSyntacticDiagnostics(sourceFile).concat(program.getGlobalDiagnostics()).concat(program.getSemanticDiagnostics(sourceFile));
- if (program.getCompilerOptions().declaration) {
- diagnostics.concat(program.getDeclarationDiagnostics(sourceFile));
- }
- 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) {
- var program;
- var files = [];
- var diagnostics = ts.createDiagnosticCollection();
- var seenNoDefaultLib = options.noLib;
- var commonSourceDirectory;
- var diagnosticsProducingTypeChecker;
- var noDiagnosticsTypeChecker;
- var start = new Date().getTime();
- host = host || createCompilerHost(options);
- var filesByName = ts.createFileMap(function (fileName) { return host.getCanonicalFileName(fileName); });
- ts.forEach(rootNames, function (name) { return processRootFile(name, false); });
- if (!seenNoDefaultLib) {
- processRootFile(host.getDefaultLibFileName(options), true);
- }
- verifyCompilerOptions();
- ts.programTime += new Date().getTime() - start;
- program = {
- getSourceFile: getSourceFile,
- getSourceFiles: function () { return files; },
- getCompilerOptions: function () { return options; },
- getSyntacticDiagnostics: getSyntacticDiagnostics,
- getGlobalDiagnostics: getGlobalDiagnostics,
- getSemanticDiagnostics: getSemanticDiagnostics,
- getDeclarationDiagnostics: getDeclarationDiagnostics,
- getCompilerOptionsDiagnostics: getCompilerOptionsDiagnostics,
- getTypeChecker: getTypeChecker,
- 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(); }
- };
- return program;
- 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) {
- if (options.noEmitOnError && getPreEmitDiagnostics(this).length > 0) {
- return { diagnostics: [], sourceMaps: undefined, emitSkipped: true };
- }
- var emitResolver = getDiagnosticsProducingTypeChecker().getEmitResolver(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);
- }
- function getDiagnosticsHelper(sourceFile, getDiagnostics) {
- if (sourceFile) {
- return getDiagnostics(sourceFile);
- }
- var allDiagnostics = [];
- ts.forEach(program.getSourceFiles(), function (sourceFile) {
- ts.addRange(allDiagnostics, getDiagnostics(sourceFile));
- });
- return ts.sortAndDeduplicateDiagnostics(allDiagnostics);
- }
- function getSyntacticDiagnostics(sourceFile) {
- return getDiagnosticsHelper(sourceFile, getSyntacticDiagnosticsForFile);
- }
- function getSemanticDiagnostics(sourceFile) {
- return getDiagnosticsHelper(sourceFile, getSemanticDiagnosticsForFile);
- }
- function getDeclarationDiagnostics(sourceFile) {
- return getDiagnosticsHelper(sourceFile, getDeclarationDiagnosticsForFile);
- }
- function getSyntacticDiagnosticsForFile(sourceFile) {
- return sourceFile.parseDiagnostics;
- }
- function getSemanticDiagnosticsForFile(sourceFile) {
- var typeChecker = getDiagnosticsProducingTypeChecker();
- ts.Debug.assert(!!sourceFile.bindDiagnostics);
- var bindDiagnostics = sourceFile.bindDiagnostics;
- var checkDiagnostics = typeChecker.getDiagnostics(sourceFile);
- var programDiagnostics = diagnostics.getDiagnostics(sourceFile.fileName);
- return bindDiagnostics.concat(checkDiagnostics).concat(programDiagnostics);
- }
- function getDeclarationDiagnosticsForFile(sourceFile) {
- if (!ts.isDeclarationFile(sourceFile)) {
- var resolver = getDiagnosticsProducingTypeChecker().getEmitResolver(sourceFile);
- var writeFile = function () { };
- return ts.getDeclarationDiagnostics(getEmitHost(writeFile), resolver, sourceFile);
- }
- }
- function getCompilerOptionsDiagnostics() {
- var allDiagnostics = [];
- ts.addRange(allDiagnostics, diagnostics.getGlobalDiagnostics());
- return ts.sortAndDeduplicateDiagnostics(allDiagnostics);
- }
- function getGlobalDiagnostics() {
- var typeChecker = getDiagnosticsProducingTypeChecker();
- var allDiagnostics = [];
- ts.addRange(allDiagnostics, typeChecker.getGlobalDiagnostics());
- ts.addRange(allDiagnostics, diagnostics.getGlobalDiagnostics());
- return ts.sortAndDeduplicateDiagnostics(allDiagnostics);
- }
- function hasExtension(fileName) {
- return ts.getBaseFileName(fileName).indexOf(".") >= 0;
- }
- function processRootFile(fileName, isDefaultLib) {
- processSourceFile(ts.normalizePath(fileName), isDefaultLib);
- }
- function processSourceFile(fileName, isDefaultLib, refFile, refPos, refEnd) {
- var start;
- var length;
- if (refEnd !== undefined && refPos !== undefined) {
- start = refPos;
- length = refEnd - refPos;
- }
- var diagnostic;
- if (hasExtension(fileName)) {
- if (!options.allowNonTsExtensions && !ts.fileExtensionIs(host.getCanonicalFileName(fileName), ".ts")) {
- diagnostic = ts.Diagnostics.File_0_must_have_extension_ts_or_d_ts;
- }
- else if (!findSourceFile(fileName, isDefaultLib, refFile, refPos, refEnd)) {
- diagnostic = ts.Diagnostics.File_0_not_found;
- }
- else if (refFile && host.getCanonicalFileName(fileName) === host.getCanonicalFileName(refFile.fileName)) {
- diagnostic = ts.Diagnostics.A_file_cannot_have_a_reference_to_itself;
- }
- }
- else {
- if (options.allowNonTsExtensions && !findSourceFile(fileName, isDefaultLib, refFile, refPos, refEnd)) {
- diagnostic = ts.Diagnostics.File_0_not_found;
- }
- else if (!findSourceFile(fileName + ".ts", isDefaultLib, refFile, refPos, refEnd) && !findSourceFile(fileName + ".d.ts", isDefaultLib, refFile, refPos, refEnd)) {
- diagnostic = ts.Diagnostics.File_0_not_found;
- fileName += ".ts";
- }
- }
- if (diagnostic) {
- if (refFile) {
- diagnostics.add(ts.createFileDiagnostic(refFile, start, length, diagnostic, fileName));
- }
- else {
- diagnostics.add(ts.createCompilerDiagnostic(diagnostic, fileName));
- }
- }
- }
- function findSourceFile(fileName, isDefaultLib, refFile, refStart, refLength) {
- var canonicalName = host.getCanonicalFileName(ts.normalizeSlashes(fileName));
- if (filesByName.contains(canonicalName)) {
- return getSourceFileFromCache(fileName, canonicalName, false);
- }
- else {
- var normalizedAbsolutePath = ts.getNormalizedAbsolutePath(fileName, host.getCurrentDirectory());
- var canonicalAbsolutePath = host.getCanonicalFileName(normalizedAbsolutePath);
- if (filesByName.contains(canonicalAbsolutePath)) {
- return getSourceFileFromCache(normalizedAbsolutePath, canonicalAbsolutePath, true);
- }
- var file = host.getSourceFile(fileName, options.target, function (hostErrorMessage) {
- if (refFile) {
- diagnostics.add(ts.createFileDiagnostic(refFile, refStart, refLength, ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage));
- }
- else {
- diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage));
- }
- });
- filesByName.set(canonicalName, file);
- if (file) {
- seenNoDefaultLib = seenNoDefaultLib || file.hasNoDefaultLib;
- filesByName.set(canonicalAbsolutePath, file);
- if (!options.noResolve) {
- var basePath = ts.getDirectoryPath(fileName);
- processReferencedFiles(file, basePath);
- processImportedModules(file, basePath);
- }
- if (isDefaultLib) {
- files.unshift(file);
- }
- else {
- files.push(file);
- }
- }
- return file;
- }
- function getSourceFileFromCache(fileName, canonicalName, useAbsolutePath) {
- var file = filesByName.get(canonicalName);
- if (file && host.useCaseSensitiveFileNames()) {
- var sourceFileName = useAbsolutePath ? ts.getNormalizedAbsolutePath(file.fileName, host.getCurrentDirectory()) : file.fileName;
- if (canonicalName !== sourceFileName) {
- diagnostics.add(ts.createFileDiagnostic(refFile, refStart, refLength, 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 = ts.isRootedDiskPath(ref.fileName) ? ref.fileName : ts.combinePaths(basePath, ref.fileName);
- processSourceFile(ts.normalizePath(referencedFileName), false, file, ref.pos, ref.end);
- });
- }
- function processImportedModules(file, basePath) {
- ts.forEach(file.statements, function (node) {
- if (node.kind === 210 || node.kind === 209 || node.kind === 216) {
- var moduleNameExpr = ts.getExternalModuleName(node);
- if (moduleNameExpr && moduleNameExpr.kind === 8) {
- var moduleNameText = moduleNameExpr.text;
- if (moduleNameText) {
- var searchPath = basePath;
- while (true) {
- var searchName = ts.normalizePath(ts.combinePaths(searchPath, moduleNameText));
- if (findModuleSourceFile(searchName + ".ts", moduleNameExpr) || findModuleSourceFile(searchName + ".d.ts", moduleNameExpr)) {
- break;
- }
- var parentPath = ts.getDirectoryPath(searchPath);
- if (parentPath === searchPath) {
- break;
- }
- searchPath = parentPath;
- }
- }
- }
- }
- else if (node.kind === 206 && node.name.kind === 8 && (node.flags & 2 || ts.isDeclarationFile(file))) {
- ts.forEachChild(node.body, function (node) {
- if (ts.isExternalModuleImportEqualsDeclaration(node) &&
- ts.getExternalModuleImportEqualsDeclarationExpression(node).kind === 8) {
- var nameLiteral = ts.getExternalModuleImportEqualsDeclarationExpression(node);
- var moduleName = nameLiteral.text;
- if (moduleName) {
- var searchName = ts.normalizePath(ts.combinePaths(basePath, moduleName));
- var tsFile = findModuleSourceFile(searchName + ".ts", nameLiteral);
- if (!tsFile) {
- findModuleSourceFile(searchName + ".d.ts", nameLiteral);
- }
- }
- }
- });
- }
- });
- function findModuleSourceFile(fileName, nameLiteral) {
- return findSourceFile(fileName, false, file, nameLiteral.pos, nameLiteral.end - nameLiteral.pos);
- }
- }
- 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) {
- diagnostics.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) {
- diagnostics.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.sourceMap) {
- diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_sourceMap_cannot_be_specified_with_option_isolatedModules));
- }
- if (options.declaration) {
- diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_declaration_cannot_be_specified_with_option_isolatedModules));
- }
- if (options.noEmitOnError) {
- diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_noEmitOnError_cannot_be_specified_with_option_isolatedModules));
- }
- if (options.out) {
- diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_out_cannot_be_specified_with_option_isolatedModules));
- }
- }
- if (options.inlineSourceMap) {
- if (options.sourceMap) {
- diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_sourceMap_cannot_be_specified_with_option_inlineSourceMap));
- }
- if (options.mapRoot) {
- diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_mapRoot_cannot_be_specified_with_option_inlineSourceMap));
- }
- if (options.sourceRoot) {
- diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_sourceRoot_cannot_be_specified_with_option_inlineSourceMap));
- }
- }
- if (options.inlineSources) {
- if (!options.sourceMap && !options.inlineSourceMap) {
- diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_inlineSources_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided));
- }
- }
- if (!options.sourceMap && (options.mapRoot || options.sourceRoot)) {
- if (options.mapRoot) {
- diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option));
- }
- if (options.sourceRoot) {
- diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option));
- }
- return;
- }
- var languageVersion = options.target || 0;
- var firstExternalModuleSourceFile = ts.forEach(files, function (f) { return ts.isExternalModule(f) ? f : undefined; });
- if (options.isolatedModules) {
- if (!options.module && languageVersion < 2) {
- diagnostics.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);
- diagnostics.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);
- diagnostics.add(ts.createFileDiagnostic(firstExternalModuleSourceFile, span.start, span.length, ts.Diagnostics.Cannot_compile_modules_unless_the_module_flag_is_provided));
- }
- if (options.module && languageVersion >= 2) {
- diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_compile_modules_into_commonjs_amd_system_or_umd_when_targeting_ES6_or_higher));
- }
- if (options.outDir ||
- options.sourceRoot ||
- (options.mapRoot &&
- (!options.out || 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 || options.outDir) {
- diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_noEmit_cannot_be_specified_with_option_out_or_outDir));
- }
- if (options.declaration) {
- diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_noEmit_cannot_be_specified_with_option_declaration));
- }
- }
- if (options.emitDecoratorMetadata &&
- !options.experimentalDecorators) {
- diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_experimentalDecorators_must_also_be_specified_when_option_emitDecoratorMetadata_is_specified));
- }
- }
- }
- ts.createProgram = createProgram;
- })(ts || (ts = {}));
- /// <reference path="sys.ts"/>
- /// <reference path="types.ts"/>
- /// <reference path="core.ts"/>
- /// <reference path="scanner.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: "inlineSourceMap",
- type: "boolean"
- },
- {
- name: "inlineSources",
- type: "boolean"
- },
- {
- 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
- },
- description: ts.Diagnostics.Specify_module_code_generation_Colon_commonjs_amd_system_or_umd,
- paramType: ts.Diagnostics.KIND,
- error: ts.Diagnostics.Argument_for_module_option_must_be_commonjs_amd_system_or_umd
- },
- {
- 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_type_checking_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: "out",
- type: "string",
- 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: "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 },
- 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
- }
- ];
- function parseCommandLine(commandLine) {
- var options = {};
- var fileNames = [];
- var errors = [];
- var shortOptionNames = {};
- var optionNameMap = {};
- ts.forEach(ts.optionDeclarations, function (option) {
- optionNameMap[option.name.toLowerCase()] = option;
- if (option.shortName) {
- shortOptionNames[option.shortName] = option.name;
- }
- });
- 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 = opt.type;
- var key = (args[i++] || "").toLowerCase();
- if (ts.hasProperty(map, key)) {
- options[opt.name] = map[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 = 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) {
- try {
- var text = ts.sys.readFile(fileName);
- }
- catch (e) {
- return { error: ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, e.message) };
- }
- return parseConfigFileText(fileName, text);
- }
- ts.readConfigFile = readConfigFile;
- function parseConfigFileText(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.parseConfigFileText = parseConfigFileText;
- function parseConfigFile(json, host, basePath) {
- var errors = [];
- return {
- options: getCompilerOptions(),
- fileNames: getFiles(),
- 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));
- }
- 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 getFiles() {
- var files = [];
- if (ts.hasProperty(json, "files")) {
- if (json["files"] instanceof Array) {
- var files = ts.map(json["files"], function (s) { return ts.combinePaths(basePath, s); });
- }
- }
- else {
- var sysFiles = host.readDirectory(basePath, ".ts");
- for (var i = 0; i < sysFiles.length; i++) {
- var name = sysFiles[i];
- if (!ts.fileExtensionIs(name, ".d.ts") || !ts.contains(sysFiles, name.substr(0, name.length - 5) + ".ts")) {
- files.push(name);
- }
- }
- }
- return files;
- }
- }
- ts.parseConfigFile = parseConfigFile;
- })(ts || (ts = {}));
- /// <reference path="program.ts"/>
- /// <reference path="commandLineParser.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;
- }
- try {
- var 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 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 configFileWatcher;
- var cachedProgram;
- var rootFileNames;
- var compilerOptions;
- var compilerHost;
- var hostGetSourceFile;
- var timerHandle;
- 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.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) {
- 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);
- }
- }
- performCompilation();
- function performCompilation() {
- if (!cachedProgram) {
- if (configFileName) {
- var result = ts.readConfigFile(configFileName);
- if (result.error) {
- reportDiagnostic(result.error);
- return ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
- }
- var configObject = result.config;
- var configParseResult = ts.parseConfigFile(configObject, ts.sys, ts.getDirectoryPath(configFileName));
- if (configParseResult.errors.length > 0) {
- reportDiagnostics(configParseResult.errors);
- return ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
- }
- 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);
- reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.Compilation_complete_Watching_for_file_changes));
- }
- function getSourceFile(fileName, languageVersion, onError) {
- if (cachedProgram) {
- var sourceFile = cachedProgram.getSourceFile(fileName);
- if (sourceFile && sourceFile.fileWatcher) {
- return sourceFile;
- }
- }
- var sourceFile = hostGetSourceFile(fileName, languageVersion, onError);
- if (sourceFile && compilerOptions.watch) {
- sourceFile.fileWatcher = ts.sys.watchFile(sourceFile.fileName, function () { return sourceFileChanged(sourceFile); });
- }
- 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) {
- sourceFile.fileWatcher.close();
- sourceFile.fileWatcher = undefined;
- startTimer();
- }
- function configFileChanged() {
- setCachedProgram(undefined);
- startTimer();
- }
- function startTimer() {
- if (timerHandle) {
- clearTimeout(timerHandle);
- }
- timerHandle = setTimeout(recompile, 250);
- }
- function recompile() {
- timerHandle = undefined;
- reportDiagnostic(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 = program.getSyntacticDiagnostics();
- reportDiagnostics(diagnostics);
- if (diagnostics.length === 0) {
- var diagnostics = program.getGlobalDiagnostics();
- reportDiagnostics(diagnostics);
- if (diagnostics.length === 0) {
- var 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()); });
- var marginLength = 0;
- var usageColumn = [];
- var descriptionColumn = [];
- for (var i = 0; i < optsList.length; i++) {
- var option = optsList[i];
- if (!option.description) {
- continue;
- }
- var usageText = " ";
- if (option.shortName) {
- usageText += "-" + option.shortName;
- usageText += getParamType(option);
- usageText += ", ";
- }
- usageText += "--" + option.name;
- usageText += getParamType(option);
- usageColumn.push(usageText);
- descriptionColumn.push(getDiagnosticText(option.description));
- marginLength = Math.max(usageText.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(" ");
- }
- }
- })(ts || (ts = {}));
- ts.executeCommandLine(ts.sys.args);
|