| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461124621246312464124651246612467124681246912470124711247212473124741247512476124771247812479124801248112482124831248412485124861248712488124891249012491124921249312494124951249612497124981249912500125011250212503125041250512506125071250812509125101251112512125131251412515125161251712518125191252012521125221252312524125251252612527125281252912530125311253212533125341253512536125371253812539125401254112542125431254412545125461254712548125491255012551125521255312554125551255612557125581255912560125611256212563125641256512566125671256812569125701257112572125731257412575125761257712578125791258012581125821258312584125851258612587125881258912590125911259212593125941259512596125971259812599126001260112602126031260412605126061260712608126091261012611126121261312614126151261612617126181261912620126211262212623126241262512626126271262812629126301263112632126331263412635126361263712638126391264012641126421264312644126451264612647126481264912650126511265212653126541265512656126571265812659126601266112662126631266412665126661266712668126691267012671126721267312674126751267612677126781267912680126811268212683126841268512686126871268812689126901269112692126931269412695126961269712698126991270012701127021270312704127051270612707127081270912710127111271212713127141271512716127171271812719127201272112722127231272412725127261272712728127291273012731127321273312734127351273612737127381273912740127411274212743127441274512746127471274812749127501275112752127531275412755127561275712758127591276012761127621276312764127651276612767127681276912770127711277212773127741277512776127771277812779127801278112782127831278412785127861278712788127891279012791127921279312794127951279612797127981279912800128011280212803128041280512806128071280812809128101281112812128131281412815128161281712818128191282012821128221282312824128251282612827128281282912830128311283212833128341283512836128371283812839128401284112842128431284412845128461284712848128491285012851128521285312854128551285612857128581285912860128611286212863128641286512866128671286812869128701287112872128731287412875128761287712878128791288012881128821288312884128851288612887128881288912890128911289212893128941289512896128971289812899129001290112902129031290412905129061290712908129091291012911129121291312914129151291612917129181291912920129211292212923129241292512926129271292812929129301293112932129331293412935129361293712938129391294012941129421294312944129451294612947129481294912950129511295212953129541295512956129571295812959129601296112962129631296412965129661296712968129691297012971129721297312974129751297612977129781297912980129811298212983129841298512986129871298812989129901299112992129931299412995129961299712998129991300013001130021300313004130051300613007130081300913010130111301213013130141301513016130171301813019130201302113022130231302413025130261302713028130291303013031130321303313034130351303613037130381303913040130411304213043130441304513046130471304813049130501305113052130531305413055130561305713058130591306013061130621306313064130651306613067130681306913070130711307213073130741307513076130771307813079130801308113082130831308413085130861308713088130891309013091130921309313094130951309613097130981309913100131011310213103131041310513106131071310813109131101311113112131131311413115131161311713118131191312013121131221312313124131251312613127131281312913130131311313213133131341313513136131371313813139131401314113142131431314413145131461314713148131491315013151131521315313154131551315613157131581315913160131611316213163131641316513166131671316813169131701317113172131731317413175131761317713178131791318013181131821318313184131851318613187131881318913190131911319213193131941319513196131971319813199132001320113202132031320413205132061320713208132091321013211132121321313214132151321613217132181321913220132211322213223132241322513226132271322813229132301323113232132331323413235132361323713238132391324013241132421324313244132451324613247132481324913250132511325213253132541325513256132571325813259132601326113262132631326413265132661326713268132691327013271132721327313274132751327613277132781327913280132811328213283132841328513286132871328813289132901329113292132931329413295132961329713298132991330013301133021330313304133051330613307133081330913310133111331213313133141331513316133171331813319133201332113322133231332413325133261332713328133291333013331133321333313334133351333613337133381333913340133411334213343133441334513346133471334813349133501335113352133531335413355133561335713358133591336013361133621336313364133651336613367133681336913370133711337213373133741337513376133771337813379133801338113382133831338413385133861338713388133891339013391133921339313394133951339613397133981339913400134011340213403134041340513406134071340813409134101341113412134131341413415134161341713418134191342013421134221342313424134251342613427134281342913430134311343213433134341343513436134371343813439134401344113442134431344413445134461344713448134491345013451134521345313454134551345613457134581345913460134611346213463134641346513466134671346813469134701347113472134731347413475134761347713478134791348013481134821348313484134851348613487134881348913490134911349213493134941349513496134971349813499135001350113502135031350413505135061350713508135091351013511135121351313514135151351613517135181351913520135211352213523135241352513526135271352813529135301353113532135331353413535135361353713538135391354013541135421354313544135451354613547135481354913550135511355213553135541355513556135571355813559135601356113562135631356413565135661356713568135691357013571135721357313574135751357613577135781357913580135811358213583135841358513586135871358813589135901359113592135931359413595135961359713598135991360013601136021360313604136051360613607136081360913610136111361213613136141361513616136171361813619136201362113622136231362413625136261362713628136291363013631136321363313634136351363613637136381363913640136411364213643136441364513646136471364813649136501365113652136531365413655136561365713658136591366013661136621366313664136651366613667136681366913670136711367213673136741367513676136771367813679136801368113682136831368413685136861368713688136891369013691136921369313694136951369613697136981369913700137011370213703137041370513706137071370813709137101371113712137131371413715137161371713718137191372013721137221372313724137251372613727137281372913730137311373213733137341373513736137371373813739137401374113742137431374413745137461374713748137491375013751137521375313754137551375613757137581375913760137611376213763137641376513766137671376813769137701377113772137731377413775137761377713778137791378013781137821378313784137851378613787137881378913790137911379213793137941379513796137971379813799138001380113802138031380413805138061380713808138091381013811138121381313814138151381613817138181381913820138211382213823138241382513826138271382813829138301383113832138331383413835138361383713838138391384013841138421384313844138451384613847138481384913850138511385213853138541385513856138571385813859138601386113862138631386413865138661386713868138691387013871138721387313874138751387613877138781387913880138811388213883138841388513886138871388813889138901389113892138931389413895138961389713898138991390013901139021390313904139051390613907139081390913910139111391213913139141391513916139171391813919139201392113922139231392413925139261392713928139291393013931139321393313934139351393613937139381393913940139411394213943139441394513946139471394813949139501395113952139531395413955139561395713958139591396013961139621396313964139651396613967139681396913970139711397213973139741397513976139771397813979139801398113982139831398413985139861398713988139891399013991139921399313994139951399613997139981399914000140011400214003140041400514006140071400814009140101401114012140131401414015140161401714018140191402014021140221402314024140251402614027140281402914030140311403214033140341403514036140371403814039140401404114042140431404414045140461404714048140491405014051140521405314054140551405614057140581405914060140611406214063140641406514066140671406814069140701407114072140731407414075140761407714078140791408014081140821408314084140851408614087140881408914090140911409214093140941409514096140971409814099141001410114102141031410414105141061410714108141091411014111141121411314114141151411614117141181411914120141211412214123141241412514126141271412814129141301413114132141331413414135141361413714138141391414014141141421414314144141451414614147141481414914150141511415214153141541415514156141571415814159141601416114162141631416414165141661416714168141691417014171141721417314174141751417614177141781417914180141811418214183141841418514186141871418814189141901419114192141931419414195141961419714198141991420014201142021420314204142051420614207142081420914210142111421214213142141421514216142171421814219142201422114222142231422414225142261422714228142291423014231142321423314234142351423614237142381423914240142411424214243142441424514246142471424814249142501425114252142531425414255142561425714258142591426014261142621426314264142651426614267142681426914270142711427214273142741427514276142771427814279142801428114282142831428414285142861428714288142891429014291142921429314294142951429614297142981429914300143011430214303143041430514306143071430814309143101431114312143131431414315143161431714318143191432014321143221432314324143251432614327143281432914330143311433214333143341433514336143371433814339143401434114342143431434414345143461434714348143491435014351143521435314354143551435614357143581435914360143611436214363143641436514366143671436814369143701437114372143731437414375143761437714378143791438014381143821438314384143851438614387143881438914390143911439214393143941439514396143971439814399144001440114402144031440414405144061440714408144091441014411144121441314414144151441614417144181441914420144211442214423144241442514426144271442814429144301443114432144331443414435144361443714438144391444014441144421444314444144451444614447144481444914450144511445214453144541445514456144571445814459144601446114462144631446414465144661446714468144691447014471144721447314474144751447614477144781447914480144811448214483144841448514486144871448814489144901449114492144931449414495144961449714498144991450014501145021450314504145051450614507145081450914510145111451214513145141451514516145171451814519145201452114522145231452414525145261452714528145291453014531145321453314534145351453614537145381453914540145411454214543145441454514546145471454814549145501455114552145531455414555145561455714558145591456014561145621456314564145651456614567145681456914570145711457214573145741457514576145771457814579145801458114582145831458414585145861458714588145891459014591145921459314594145951459614597145981459914600146011460214603146041460514606146071460814609146101461114612146131461414615146161461714618146191462014621146221462314624146251462614627146281462914630146311463214633146341463514636146371463814639146401464114642146431464414645146461464714648146491465014651146521465314654146551465614657146581465914660146611466214663146641466514666146671466814669146701467114672146731467414675146761467714678146791468014681146821468314684146851468614687146881468914690146911469214693146941469514696146971469814699147001470114702147031470414705147061470714708147091471014711147121471314714147151471614717147181471914720147211472214723147241472514726147271472814729147301473114732147331473414735147361473714738147391474014741147421474314744147451474614747147481474914750147511475214753147541475514756147571475814759147601476114762147631476414765147661476714768147691477014771147721477314774147751477614777147781477914780147811478214783147841478514786147871478814789147901479114792147931479414795147961479714798147991480014801148021480314804148051480614807148081480914810148111481214813148141481514816148171481814819148201482114822148231482414825148261482714828148291483014831148321483314834148351483614837148381483914840148411484214843148441484514846148471484814849148501485114852148531485414855148561485714858148591486014861148621486314864148651486614867148681486914870148711487214873148741487514876148771487814879148801488114882148831488414885148861488714888148891489014891148921489314894148951489614897148981489914900149011490214903149041490514906149071490814909149101491114912149131491414915149161491714918149191492014921149221492314924149251492614927149281492914930149311493214933149341493514936149371493814939149401494114942149431494414945149461494714948149491495014951149521495314954149551495614957149581495914960149611496214963149641496514966149671496814969149701497114972149731497414975149761497714978149791498014981149821498314984149851498614987149881498914990149911499214993149941499514996149971499814999150001500115002150031500415005150061500715008150091501015011150121501315014150151501615017150181501915020150211502215023150241502515026150271502815029150301503115032150331503415035150361503715038150391504015041150421504315044150451504615047150481504915050150511505215053150541505515056150571505815059150601506115062150631506415065150661506715068150691507015071150721507315074150751507615077150781507915080150811508215083150841508515086150871508815089150901509115092150931509415095150961509715098150991510015101151021510315104151051510615107151081510915110151111511215113151141511515116151171511815119151201512115122151231512415125151261512715128151291513015131151321513315134151351513615137151381513915140151411514215143151441514515146151471514815149151501515115152151531515415155151561515715158151591516015161151621516315164151651516615167151681516915170151711517215173151741517515176151771517815179151801518115182151831518415185151861518715188151891519015191151921519315194151951519615197151981519915200152011520215203152041520515206152071520815209152101521115212152131521415215152161521715218152191522015221152221522315224152251522615227152281522915230152311523215233152341523515236152371523815239152401524115242152431524415245152461524715248152491525015251152521525315254152551525615257152581525915260152611526215263152641526515266152671526815269152701527115272152731527415275152761527715278152791528015281152821528315284152851528615287152881528915290152911529215293152941529515296152971529815299153001530115302153031530415305153061530715308153091531015311153121531315314153151531615317153181531915320153211532215323153241532515326153271532815329153301533115332153331533415335153361533715338153391534015341153421534315344153451534615347153481534915350153511535215353153541535515356153571535815359153601536115362153631536415365153661536715368153691537015371153721537315374153751537615377153781537915380153811538215383153841538515386153871538815389153901539115392153931539415395153961539715398153991540015401154021540315404154051540615407154081540915410154111541215413154141541515416154171541815419154201542115422154231542415425154261542715428154291543015431154321543315434154351543615437154381543915440154411544215443154441544515446154471544815449154501545115452154531545415455154561545715458154591546015461154621546315464154651546615467154681546915470154711547215473154741547515476154771547815479154801548115482154831548415485154861548715488154891549015491154921549315494154951549615497154981549915500155011550215503155041550515506155071550815509155101551115512155131551415515155161551715518155191552015521155221552315524155251552615527155281552915530155311553215533155341553515536155371553815539155401554115542155431554415545155461554715548155491555015551155521555315554155551555615557155581555915560155611556215563155641556515566155671556815569155701557115572155731557415575155761557715578155791558015581155821558315584155851558615587155881558915590155911559215593155941559515596155971559815599156001560115602156031560415605156061560715608156091561015611156121561315614156151561615617156181561915620156211562215623156241562515626156271562815629156301563115632156331563415635156361563715638156391564015641156421564315644156451564615647156481564915650156511565215653156541565515656156571565815659156601566115662156631566415665156661566715668156691567015671156721567315674156751567615677156781567915680156811568215683156841568515686156871568815689156901569115692156931569415695156961569715698156991570015701157021570315704157051570615707157081570915710157111571215713157141571515716157171571815719157201572115722157231572415725157261572715728157291573015731157321573315734157351573615737157381573915740157411574215743157441574515746157471574815749157501575115752157531575415755157561575715758157591576015761157621576315764157651576615767157681576915770157711577215773157741577515776157771577815779157801578115782157831578415785157861578715788157891579015791157921579315794157951579615797157981579915800158011580215803158041580515806158071580815809158101581115812158131581415815158161581715818158191582015821158221582315824158251582615827158281582915830158311583215833158341583515836158371583815839158401584115842158431584415845158461584715848158491585015851158521585315854158551585615857158581585915860158611586215863158641586515866158671586815869158701587115872158731587415875158761587715878158791588015881158821588315884158851588615887158881588915890158911589215893158941589515896158971589815899159001590115902159031590415905159061590715908159091591015911159121591315914159151591615917159181591915920159211592215923159241592515926159271592815929159301593115932159331593415935159361593715938159391594015941159421594315944159451594615947159481594915950159511595215953159541595515956159571595815959159601596115962159631596415965159661596715968159691597015971159721597315974159751597615977159781597915980159811598215983159841598515986159871598815989159901599115992159931599415995159961599715998159991600016001160021600316004160051600616007160081600916010160111601216013160141601516016160171601816019160201602116022160231602416025160261602716028160291603016031160321603316034160351603616037160381603916040160411604216043160441604516046160471604816049160501605116052160531605416055160561605716058160591606016061160621606316064160651606616067160681606916070160711607216073160741607516076160771607816079160801608116082160831608416085160861608716088160891609016091160921609316094160951609616097160981609916100161011610216103161041610516106161071610816109161101611116112161131611416115161161611716118161191612016121161221612316124161251612616127161281612916130161311613216133161341613516136161371613816139161401614116142161431614416145161461614716148161491615016151161521615316154161551615616157161581615916160161611616216163161641616516166161671616816169161701617116172161731617416175161761617716178161791618016181161821618316184161851618616187161881618916190161911619216193161941619516196161971619816199162001620116202162031620416205162061620716208162091621016211162121621316214162151621616217162181621916220162211622216223162241622516226162271622816229162301623116232162331623416235162361623716238162391624016241162421624316244162451624616247162481624916250162511625216253162541625516256162571625816259162601626116262162631626416265162661626716268162691627016271162721627316274162751627616277162781627916280162811628216283162841628516286162871628816289162901629116292162931629416295162961629716298162991630016301163021630316304163051630616307163081630916310163111631216313163141631516316163171631816319163201632116322163231632416325163261632716328163291633016331163321633316334163351633616337163381633916340163411634216343163441634516346163471634816349163501635116352163531635416355163561635716358163591636016361163621636316364163651636616367163681636916370163711637216373163741637516376163771637816379163801638116382163831638416385163861638716388163891639016391163921639316394163951639616397163981639916400164011640216403164041640516406164071640816409164101641116412164131641416415164161641716418164191642016421164221642316424164251642616427164281642916430164311643216433164341643516436164371643816439164401644116442164431644416445164461644716448164491645016451164521645316454164551645616457164581645916460164611646216463164641646516466164671646816469164701647116472164731647416475164761647716478164791648016481164821648316484164851648616487164881648916490164911649216493164941649516496164971649816499165001650116502165031650416505165061650716508165091651016511165121651316514165151651616517165181651916520165211652216523165241652516526165271652816529165301653116532165331653416535165361653716538165391654016541165421654316544165451654616547165481654916550165511655216553165541655516556165571655816559165601656116562165631656416565165661656716568165691657016571165721657316574165751657616577165781657916580165811658216583165841658516586165871658816589165901659116592165931659416595165961659716598165991660016601166021660316604166051660616607166081660916610166111661216613166141661516616166171661816619166201662116622166231662416625166261662716628166291663016631166321663316634166351663616637166381663916640166411664216643166441664516646166471664816649166501665116652166531665416655166561665716658166591666016661166621666316664166651666616667166681666916670166711667216673166741667516676166771667816679166801668116682166831668416685166861668716688166891669016691166921669316694166951669616697166981669916700167011670216703167041670516706167071670816709167101671116712167131671416715167161671716718167191672016721167221672316724167251672616727167281672916730167311673216733167341673516736167371673816739167401674116742167431674416745167461674716748167491675016751167521675316754167551675616757167581675916760167611676216763167641676516766167671676816769167701677116772167731677416775167761677716778167791678016781167821678316784167851678616787167881678916790167911679216793167941679516796167971679816799168001680116802168031680416805168061680716808168091681016811168121681316814168151681616817168181681916820168211682216823168241682516826168271682816829168301683116832168331683416835168361683716838168391684016841168421684316844168451684616847168481684916850168511685216853168541685516856168571685816859168601686116862168631686416865168661686716868168691687016871168721687316874168751687616877168781687916880168811688216883168841688516886168871688816889168901689116892168931689416895168961689716898168991690016901169021690316904169051690616907169081690916910169111691216913169141691516916169171691816919169201692116922169231692416925169261692716928169291693016931169321693316934169351693616937169381693916940169411694216943169441694516946169471694816949169501695116952169531695416955169561695716958169591696016961169621696316964169651696616967169681696916970169711697216973169741697516976169771697816979169801698116982169831698416985169861698716988169891699016991169921699316994169951699616997169981699917000170011700217003170041700517006170071700817009170101701117012170131701417015170161701717018170191702017021170221702317024170251702617027170281702917030170311703217033170341703517036170371703817039170401704117042170431704417045170461704717048170491705017051170521705317054170551705617057170581705917060170611706217063170641706517066170671706817069170701707117072170731707417075170761707717078170791708017081170821708317084170851708617087170881708917090170911709217093170941709517096170971709817099171001710117102171031710417105171061710717108171091711017111171121711317114171151711617117171181711917120171211712217123171241712517126171271712817129171301713117132171331713417135171361713717138171391714017141171421714317144171451714617147171481714917150171511715217153171541715517156171571715817159171601716117162171631716417165171661716717168171691717017171171721717317174171751717617177171781717917180171811718217183171841718517186171871718817189171901719117192171931719417195171961719717198171991720017201172021720317204172051720617207172081720917210172111721217213172141721517216172171721817219172201722117222172231722417225172261722717228172291723017231172321723317234172351723617237172381723917240172411724217243172441724517246172471724817249172501725117252172531725417255172561725717258172591726017261172621726317264172651726617267172681726917270172711727217273172741727517276172771727817279172801728117282172831728417285172861728717288172891729017291172921729317294172951729617297172981729917300173011730217303173041730517306173071730817309173101731117312173131731417315173161731717318173191732017321173221732317324173251732617327173281732917330173311733217333173341733517336173371733817339173401734117342173431734417345173461734717348173491735017351173521735317354173551735617357173581735917360173611736217363173641736517366173671736817369173701737117372173731737417375173761737717378173791738017381173821738317384173851738617387173881738917390173911739217393173941739517396173971739817399174001740117402174031740417405174061740717408174091741017411174121741317414174151741617417174181741917420174211742217423174241742517426174271742817429174301743117432174331743417435174361743717438174391744017441174421744317444174451744617447174481744917450174511745217453174541745517456174571745817459174601746117462174631746417465174661746717468174691747017471174721747317474174751747617477174781747917480174811748217483174841748517486174871748817489174901749117492174931749417495174961749717498174991750017501175021750317504175051750617507175081750917510175111751217513175141751517516175171751817519175201752117522175231752417525175261752717528175291753017531175321753317534175351753617537175381753917540175411754217543175441754517546175471754817549175501755117552175531755417555175561755717558175591756017561175621756317564175651756617567175681756917570175711757217573175741757517576175771757817579175801758117582175831758417585175861758717588175891759017591175921759317594175951759617597175981759917600176011760217603176041760517606176071760817609176101761117612176131761417615176161761717618176191762017621176221762317624176251762617627176281762917630176311763217633176341763517636176371763817639176401764117642176431764417645176461764717648176491765017651176521765317654176551765617657176581765917660176611766217663176641766517666176671766817669176701767117672176731767417675176761767717678176791768017681176821768317684176851768617687176881768917690176911769217693176941769517696176971769817699177001770117702177031770417705177061770717708177091771017711177121771317714177151771617717177181771917720177211772217723177241772517726177271772817729177301773117732177331773417735177361773717738177391774017741177421774317744177451774617747177481774917750177511775217753177541775517756177571775817759177601776117762177631776417765177661776717768177691777017771177721777317774177751777617777177781777917780177811778217783177841778517786177871778817789177901779117792177931779417795177961779717798177991780017801178021780317804178051780617807178081780917810178111781217813178141781517816178171781817819178201782117822178231782417825178261782717828178291783017831178321783317834178351783617837178381783917840178411784217843178441784517846178471784817849178501785117852178531785417855178561785717858178591786017861178621786317864178651786617867178681786917870178711787217873178741787517876178771787817879178801788117882178831788417885178861788717888178891789017891178921789317894178951789617897178981789917900179011790217903179041790517906179071790817909179101791117912179131791417915179161791717918179191792017921179221792317924179251792617927179281792917930179311793217933179341793517936179371793817939179401794117942179431794417945179461794717948179491795017951179521795317954179551795617957179581795917960179611796217963179641796517966179671796817969179701797117972179731797417975179761797717978179791798017981179821798317984179851798617987179881798917990179911799217993179941799517996179971799817999180001800118002180031800418005180061800718008180091801018011180121801318014180151801618017180181801918020180211802218023180241802518026180271802818029180301803118032180331803418035180361803718038180391804018041180421804318044180451804618047180481804918050180511805218053180541805518056180571805818059180601806118062180631806418065180661806718068180691807018071180721807318074180751807618077180781807918080180811808218083180841808518086180871808818089180901809118092180931809418095180961809718098180991810018101181021810318104181051810618107181081810918110181111811218113181141811518116181171811818119181201812118122181231812418125181261812718128181291813018131181321813318134181351813618137181381813918140181411814218143181441814518146181471814818149181501815118152181531815418155181561815718158181591816018161181621816318164181651816618167181681816918170181711817218173181741817518176181771817818179181801818118182181831818418185181861818718188181891819018191181921819318194181951819618197181981819918200182011820218203182041820518206182071820818209182101821118212182131821418215182161821718218182191822018221182221822318224182251822618227182281822918230182311823218233182341823518236182371823818239182401824118242182431824418245182461824718248182491825018251182521825318254182551825618257182581825918260182611826218263182641826518266182671826818269182701827118272182731827418275182761827718278182791828018281182821828318284182851828618287182881828918290182911829218293182941829518296182971829818299183001830118302183031830418305183061830718308183091831018311183121831318314183151831618317183181831918320183211832218323183241832518326183271832818329183301833118332183331833418335183361833718338183391834018341183421834318344183451834618347183481834918350183511835218353183541835518356183571835818359183601836118362183631836418365183661836718368183691837018371183721837318374183751837618377183781837918380183811838218383183841838518386183871838818389183901839118392183931839418395183961839718398183991840018401184021840318404184051840618407184081840918410184111841218413184141841518416184171841818419184201842118422184231842418425184261842718428184291843018431184321843318434184351843618437184381843918440184411844218443184441844518446184471844818449184501845118452184531845418455184561845718458184591846018461184621846318464184651846618467184681846918470184711847218473184741847518476184771847818479184801848118482184831848418485184861848718488184891849018491184921849318494184951849618497184981849918500185011850218503185041850518506185071850818509185101851118512185131851418515185161851718518185191852018521185221852318524185251852618527185281852918530185311853218533185341853518536185371853818539185401854118542185431854418545185461854718548185491855018551185521855318554185551855618557185581855918560185611856218563185641856518566185671856818569185701857118572185731857418575185761857718578185791858018581185821858318584185851858618587185881858918590185911859218593185941859518596185971859818599186001860118602186031860418605186061860718608186091861018611186121861318614186151861618617186181861918620186211862218623186241862518626186271862818629186301863118632186331863418635186361863718638186391864018641186421864318644186451864618647186481864918650186511865218653186541865518656186571865818659186601866118662186631866418665186661866718668186691867018671186721867318674186751867618677186781867918680186811868218683186841868518686186871868818689186901869118692186931869418695186961869718698186991870018701187021870318704187051870618707187081870918710187111871218713187141871518716187171871818719187201872118722187231872418725187261872718728187291873018731187321873318734187351873618737187381873918740187411874218743187441874518746187471874818749187501875118752187531875418755187561875718758187591876018761187621876318764187651876618767187681876918770187711877218773187741877518776187771877818779187801878118782187831878418785187861878718788187891879018791187921879318794187951879618797187981879918800188011880218803188041880518806188071880818809188101881118812188131881418815188161881718818188191882018821188221882318824188251882618827188281882918830188311883218833188341883518836188371883818839188401884118842188431884418845188461884718848188491885018851188521885318854188551885618857188581885918860188611886218863188641886518866188671886818869188701887118872188731887418875188761887718878188791888018881188821888318884188851888618887188881888918890188911889218893188941889518896188971889818899189001890118902189031890418905189061890718908189091891018911189121891318914189151891618917189181891918920189211892218923189241892518926189271892818929189301893118932189331893418935189361893718938189391894018941189421894318944189451894618947189481894918950189511895218953189541895518956189571895818959189601896118962189631896418965189661896718968189691897018971189721897318974189751897618977189781897918980189811898218983189841898518986189871898818989189901899118992189931899418995189961899718998189991900019001190021900319004190051900619007190081900919010190111901219013190141901519016190171901819019190201902119022190231902419025190261902719028190291903019031190321903319034190351903619037190381903919040190411904219043190441904519046190471904819049190501905119052190531905419055190561905719058190591906019061190621906319064190651906619067190681906919070190711907219073190741907519076190771907819079190801908119082190831908419085190861908719088190891909019091190921909319094190951909619097190981909919100191011910219103191041910519106191071910819109191101911119112191131911419115191161911719118191191912019121191221912319124191251912619127191281912919130191311913219133191341913519136191371913819139191401914119142191431914419145191461914719148191491915019151191521915319154191551915619157191581915919160191611916219163191641916519166191671916819169191701917119172191731917419175191761917719178191791918019181191821918319184191851918619187191881918919190191911919219193191941919519196191971919819199192001920119202192031920419205192061920719208192091921019211192121921319214192151921619217192181921919220192211922219223192241922519226192271922819229192301923119232192331923419235192361923719238192391924019241192421924319244192451924619247192481924919250192511925219253192541925519256192571925819259192601926119262192631926419265192661926719268192691927019271192721927319274192751927619277192781927919280192811928219283192841928519286192871928819289192901929119292192931929419295192961929719298192991930019301193021930319304193051930619307193081930919310193111931219313193141931519316193171931819319193201932119322193231932419325193261932719328193291933019331193321933319334193351933619337193381933919340193411934219343193441934519346193471934819349193501935119352193531935419355193561935719358193591936019361193621936319364193651936619367193681936919370193711937219373193741937519376193771937819379193801938119382193831938419385193861938719388193891939019391193921939319394193951939619397193981939919400194011940219403194041940519406194071940819409194101941119412194131941419415194161941719418194191942019421194221942319424194251942619427194281942919430194311943219433194341943519436194371943819439194401944119442194431944419445194461944719448194491945019451194521945319454194551945619457194581945919460194611946219463194641946519466194671946819469194701947119472194731947419475194761947719478194791948019481194821948319484194851948619487194881948919490194911949219493194941949519496194971949819499195001950119502195031950419505195061950719508195091951019511195121951319514195151951619517195181951919520195211952219523195241952519526195271952819529195301953119532195331953419535195361953719538195391954019541195421954319544195451954619547195481954919550195511955219553195541955519556195571955819559195601956119562195631956419565195661956719568195691957019571195721957319574195751957619577195781957919580195811958219583195841958519586195871958819589195901959119592195931959419595195961959719598195991960019601196021960319604196051960619607196081960919610196111961219613196141961519616196171961819619196201962119622196231962419625196261962719628196291963019631196321963319634196351963619637196381963919640196411964219643196441964519646196471964819649196501965119652196531965419655196561965719658196591966019661196621966319664196651966619667196681966919670196711967219673196741967519676196771967819679196801968119682196831968419685196861968719688196891969019691196921969319694196951969619697196981969919700197011970219703197041970519706197071970819709197101971119712197131971419715197161971719718197191972019721197221972319724197251972619727197281972919730197311973219733197341973519736197371973819739197401974119742197431974419745197461974719748197491975019751197521975319754197551975619757197581975919760197611976219763197641976519766197671976819769197701977119772197731977419775197761977719778197791978019781197821978319784197851978619787197881978919790197911979219793197941979519796197971979819799198001980119802198031980419805198061980719808198091981019811198121981319814198151981619817198181981919820198211982219823198241982519826198271982819829198301983119832198331983419835198361983719838198391984019841198421984319844198451984619847198481984919850198511985219853198541985519856198571985819859198601986119862198631986419865198661986719868198691987019871198721987319874198751987619877198781987919880198811988219883198841988519886198871988819889198901989119892198931989419895198961989719898198991990019901199021990319904199051990619907199081990919910199111991219913199141991519916199171991819919199201992119922199231992419925199261992719928199291993019931199321993319934199351993619937199381993919940199411994219943199441994519946199471994819949199501995119952199531995419955199561995719958199591996019961199621996319964199651996619967199681996919970199711997219973199741997519976199771997819979199801998119982199831998419985199861998719988199891999019991199921999319994199951999619997199981999920000200012000220003200042000520006200072000820009200102001120012200132001420015200162001720018200192002020021200222002320024200252002620027200282002920030200312003220033200342003520036200372003820039200402004120042200432004420045200462004720048200492005020051200522005320054200552005620057200582005920060200612006220063200642006520066200672006820069200702007120072200732007420075200762007720078200792008020081200822008320084200852008620087200882008920090200912009220093200942009520096200972009820099201002010120102201032010420105201062010720108201092011020111201122011320114201152011620117201182011920120201212012220123201242012520126201272012820129201302013120132201332013420135201362013720138201392014020141201422014320144201452014620147201482014920150201512015220153201542015520156201572015820159201602016120162201632016420165201662016720168201692017020171201722017320174201752017620177201782017920180201812018220183201842018520186201872018820189201902019120192201932019420195201962019720198201992020020201202022020320204202052020620207202082020920210202112021220213202142021520216202172021820219202202022120222202232022420225202262022720228202292023020231202322023320234202352023620237202382023920240202412024220243202442024520246202472024820249202502025120252202532025420255202562025720258202592026020261202622026320264202652026620267202682026920270202712027220273202742027520276202772027820279202802028120282202832028420285202862028720288202892029020291202922029320294202952029620297202982029920300203012030220303203042030520306203072030820309203102031120312203132031420315203162031720318203192032020321203222032320324203252032620327203282032920330203312033220333203342033520336203372033820339203402034120342203432034420345203462034720348203492035020351203522035320354203552035620357203582035920360203612036220363203642036520366203672036820369203702037120372203732037420375203762037720378203792038020381203822038320384203852038620387203882038920390203912039220393203942039520396203972039820399204002040120402204032040420405204062040720408204092041020411204122041320414204152041620417204182041920420204212042220423204242042520426204272042820429204302043120432204332043420435204362043720438204392044020441204422044320444204452044620447204482044920450204512045220453204542045520456204572045820459204602046120462204632046420465204662046720468204692047020471204722047320474204752047620477204782047920480204812048220483204842048520486204872048820489204902049120492204932049420495204962049720498204992050020501205022050320504205052050620507205082050920510205112051220513205142051520516205172051820519205202052120522205232052420525205262052720528205292053020531205322053320534205352053620537205382053920540205412054220543205442054520546205472054820549205502055120552205532055420555205562055720558205592056020561205622056320564205652056620567205682056920570205712057220573205742057520576205772057820579205802058120582205832058420585205862058720588205892059020591205922059320594205952059620597205982059920600206012060220603206042060520606206072060820609206102061120612206132061420615206162061720618206192062020621206222062320624206252062620627206282062920630206312063220633206342063520636206372063820639206402064120642206432064420645206462064720648206492065020651206522065320654206552065620657206582065920660206612066220663206642066520666206672066820669206702067120672206732067420675206762067720678206792068020681206822068320684206852068620687206882068920690206912069220693206942069520696206972069820699207002070120702207032070420705207062070720708207092071020711207122071320714207152071620717207182071920720207212072220723207242072520726207272072820729207302073120732207332073420735207362073720738207392074020741207422074320744207452074620747207482074920750207512075220753207542075520756207572075820759207602076120762207632076420765207662076720768207692077020771207722077320774207752077620777207782077920780207812078220783207842078520786207872078820789207902079120792207932079420795207962079720798207992080020801208022080320804208052080620807208082080920810208112081220813208142081520816208172081820819208202082120822208232082420825208262082720828208292083020831208322083320834208352083620837208382083920840208412084220843208442084520846208472084820849208502085120852208532085420855208562085720858208592086020861208622086320864208652086620867208682086920870208712087220873208742087520876208772087820879208802088120882208832088420885208862088720888208892089020891208922089320894208952089620897208982089920900209012090220903209042090520906209072090820909209102091120912209132091420915209162091720918209192092020921209222092320924209252092620927209282092920930209312093220933209342093520936209372093820939209402094120942209432094420945209462094720948209492095020951209522095320954209552095620957209582095920960209612096220963209642096520966209672096820969209702097120972209732097420975209762097720978209792098020981209822098320984209852098620987209882098920990209912099220993209942099520996209972099820999210002100121002210032100421005210062100721008210092101021011210122101321014210152101621017210182101921020210212102221023210242102521026210272102821029210302103121032210332103421035210362103721038210392104021041210422104321044210452104621047210482104921050210512105221053210542105521056210572105821059210602106121062210632106421065210662106721068210692107021071210722107321074210752107621077210782107921080210812108221083210842108521086210872108821089210902109121092210932109421095210962109721098210992110021101211022110321104211052110621107211082110921110211112111221113211142111521116211172111821119211202112121122211232112421125211262112721128211292113021131211322113321134211352113621137211382113921140211412114221143211442114521146211472114821149211502115121152211532115421155211562115721158211592116021161211622116321164211652116621167211682116921170211712117221173211742117521176211772117821179211802118121182211832118421185211862118721188211892119021191211922119321194211952119621197211982119921200212012120221203212042120521206212072120821209212102121121212212132121421215212162121721218212192122021221212222122321224212252122621227212282122921230212312123221233212342123521236212372123821239212402124121242212432124421245212462124721248212492125021251212522125321254212552125621257212582125921260212612126221263212642126521266212672126821269212702127121272212732127421275212762127721278212792128021281212822128321284212852128621287212882128921290212912129221293212942129521296212972129821299213002130121302213032130421305213062130721308213092131021311213122131321314213152131621317213182131921320213212132221323213242132521326213272132821329213302133121332213332133421335213362133721338213392134021341213422134321344213452134621347213482134921350213512135221353213542135521356213572135821359213602136121362213632136421365213662136721368213692137021371213722137321374213752137621377213782137921380213812138221383213842138521386213872138821389213902139121392213932139421395213962139721398213992140021401214022140321404214052140621407214082140921410214112141221413214142141521416214172141821419214202142121422214232142421425214262142721428214292143021431214322143321434214352143621437214382143921440214412144221443214442144521446214472144821449214502145121452214532145421455214562145721458214592146021461214622146321464214652146621467214682146921470214712147221473214742147521476214772147821479214802148121482214832148421485214862148721488214892149021491214922149321494214952149621497214982149921500215012150221503215042150521506215072150821509215102151121512215132151421515215162151721518215192152021521215222152321524215252152621527215282152921530215312153221533215342153521536215372153821539215402154121542215432154421545215462154721548215492155021551215522155321554215552155621557215582155921560215612156221563215642156521566215672156821569215702157121572215732157421575215762157721578215792158021581215822158321584215852158621587215882158921590215912159221593215942159521596215972159821599216002160121602216032160421605216062160721608216092161021611216122161321614216152161621617216182161921620216212162221623216242162521626216272162821629216302163121632216332163421635216362163721638216392164021641216422164321644216452164621647216482164921650216512165221653216542165521656216572165821659216602166121662216632166421665216662166721668216692167021671216722167321674216752167621677216782167921680216812168221683216842168521686216872168821689216902169121692216932169421695216962169721698216992170021701217022170321704217052170621707217082170921710217112171221713217142171521716217172171821719217202172121722217232172421725217262172721728217292173021731217322173321734217352173621737217382173921740217412174221743217442174521746217472174821749217502175121752217532175421755217562175721758217592176021761217622176321764217652176621767217682176921770217712177221773217742177521776217772177821779217802178121782217832178421785217862178721788217892179021791217922179321794217952179621797217982179921800218012180221803218042180521806218072180821809218102181121812218132181421815218162181721818218192182021821218222182321824218252182621827218282182921830218312183221833218342183521836218372183821839218402184121842218432184421845218462184721848218492185021851218522185321854218552185621857218582185921860218612186221863218642186521866218672186821869218702187121872218732187421875218762187721878218792188021881218822188321884218852188621887218882188921890218912189221893218942189521896218972189821899219002190121902219032190421905219062190721908219092191021911219122191321914219152191621917219182191921920219212192221923219242192521926219272192821929219302193121932219332193421935219362193721938219392194021941219422194321944219452194621947219482194921950219512195221953219542195521956219572195821959219602196121962219632196421965219662196721968219692197021971219722197321974219752197621977219782197921980219812198221983219842198521986219872198821989219902199121992219932199421995219962199721998219992200022001220022200322004220052200622007220082200922010220112201222013220142201522016220172201822019220202202122022220232202422025220262202722028220292203022031220322203322034220352203622037220382203922040220412204222043220442204522046220472204822049220502205122052220532205422055220562205722058220592206022061220622206322064220652206622067220682206922070220712207222073220742207522076220772207822079220802208122082220832208422085220862208722088220892209022091220922209322094220952209622097220982209922100221012210222103221042210522106221072210822109221102211122112221132211422115221162211722118221192212022121221222212322124221252212622127221282212922130221312213222133221342213522136221372213822139221402214122142221432214422145221462214722148221492215022151221522215322154221552215622157221582215922160221612216222163221642216522166221672216822169221702217122172221732217422175221762217722178221792218022181221822218322184221852218622187221882218922190221912219222193221942219522196221972219822199222002220122202222032220422205222062220722208222092221022211222122221322214222152221622217222182221922220222212222222223222242222522226222272222822229222302223122232222332223422235222362223722238222392224022241222422224322244222452224622247222482224922250222512225222253222542225522256222572225822259222602226122262222632226422265222662226722268222692227022271222722227322274222752227622277222782227922280222812228222283222842228522286222872228822289222902229122292222932229422295222962229722298222992230022301223022230322304223052230622307223082230922310223112231222313223142231522316223172231822319223202232122322223232232422325223262232722328223292233022331223322233322334223352233622337223382233922340223412234222343223442234522346223472234822349223502235122352223532235422355223562235722358223592236022361223622236322364223652236622367223682236922370223712237222373223742237522376223772237822379223802238122382223832238422385223862238722388223892239022391223922239322394223952239622397223982239922400224012240222403224042240522406224072240822409224102241122412224132241422415224162241722418224192242022421224222242322424224252242622427224282242922430224312243222433224342243522436224372243822439224402244122442224432244422445224462244722448224492245022451224522245322454224552245622457224582245922460224612246222463224642246522466224672246822469224702247122472224732247422475224762247722478224792248022481224822248322484224852248622487224882248922490224912249222493224942249522496224972249822499225002250122502225032250422505225062250722508225092251022511225122251322514225152251622517225182251922520225212252222523225242252522526225272252822529225302253122532225332253422535225362253722538225392254022541225422254322544225452254622547225482254922550225512255222553225542255522556225572255822559225602256122562225632256422565225662256722568225692257022571225722257322574225752257622577225782257922580225812258222583225842258522586225872258822589225902259122592225932259422595225962259722598225992260022601226022260322604226052260622607226082260922610226112261222613226142261522616226172261822619226202262122622226232262422625226262262722628226292263022631226322263322634226352263622637226382263922640226412264222643226442264522646226472264822649226502265122652226532265422655226562265722658226592266022661226622266322664226652266622667226682266922670226712267222673226742267522676226772267822679226802268122682226832268422685226862268722688226892269022691226922269322694226952269622697226982269922700227012270222703227042270522706227072270822709227102271122712227132271422715227162271722718227192272022721227222272322724227252272622727227282272922730227312273222733227342273522736227372273822739227402274122742227432274422745227462274722748227492275022751227522275322754227552275622757227582275922760227612276222763227642276522766227672276822769227702277122772227732277422775227762277722778227792278022781227822278322784227852278622787227882278922790227912279222793227942279522796227972279822799228002280122802228032280422805228062280722808228092281022811228122281322814228152281622817228182281922820228212282222823228242282522826228272282822829228302283122832228332283422835228362283722838228392284022841228422284322844228452284622847228482284922850228512285222853228542285522856228572285822859228602286122862228632286422865228662286722868228692287022871228722287322874228752287622877228782287922880228812288222883228842288522886228872288822889228902289122892228932289422895228962289722898228992290022901229022290322904229052290622907229082290922910229112291222913229142291522916229172291822919229202292122922229232292422925229262292722928229292293022931229322293322934229352293622937229382293922940229412294222943229442294522946229472294822949229502295122952229532295422955229562295722958229592296022961229622296322964229652296622967229682296922970229712297222973229742297522976229772297822979229802298122982229832298422985229862298722988229892299022991229922299322994229952299622997229982299923000230012300223003230042300523006230072300823009230102301123012230132301423015230162301723018230192302023021230222302323024230252302623027230282302923030230312303223033230342303523036230372303823039230402304123042230432304423045230462304723048230492305023051230522305323054230552305623057230582305923060230612306223063230642306523066230672306823069230702307123072230732307423075230762307723078230792308023081230822308323084230852308623087230882308923090230912309223093230942309523096230972309823099231002310123102231032310423105231062310723108231092311023111231122311323114231152311623117231182311923120231212312223123231242312523126231272312823129231302313123132231332313423135231362313723138231392314023141231422314323144231452314623147231482314923150231512315223153231542315523156231572315823159231602316123162231632316423165231662316723168231692317023171231722317323174231752317623177231782317923180231812318223183231842318523186231872318823189231902319123192231932319423195231962319723198231992320023201232022320323204232052320623207232082320923210232112321223213232142321523216232172321823219232202322123222232232322423225232262322723228232292323023231232322323323234232352323623237232382323923240232412324223243232442324523246232472324823249232502325123252232532325423255232562325723258232592326023261232622326323264232652326623267232682326923270232712327223273232742327523276232772327823279232802328123282232832328423285232862328723288232892329023291232922329323294232952329623297232982329923300233012330223303233042330523306233072330823309233102331123312233132331423315233162331723318233192332023321233222332323324233252332623327233282332923330233312333223333233342333523336233372333823339233402334123342233432334423345233462334723348233492335023351233522335323354233552335623357233582335923360233612336223363233642336523366233672336823369233702337123372233732337423375233762337723378233792338023381233822338323384233852338623387233882338923390233912339223393233942339523396233972339823399234002340123402234032340423405234062340723408234092341023411234122341323414234152341623417234182341923420234212342223423234242342523426234272342823429234302343123432234332343423435234362343723438234392344023441234422344323444234452344623447234482344923450234512345223453234542345523456234572345823459234602346123462234632346423465234662346723468234692347023471234722347323474234752347623477234782347923480234812348223483234842348523486234872348823489234902349123492234932349423495234962349723498234992350023501235022350323504235052350623507235082350923510235112351223513235142351523516235172351823519235202352123522235232352423525235262352723528235292353023531235322353323534235352353623537235382353923540235412354223543235442354523546235472354823549235502355123552235532355423555235562355723558235592356023561235622356323564235652356623567235682356923570235712357223573235742357523576235772357823579235802358123582235832358423585235862358723588235892359023591235922359323594235952359623597235982359923600236012360223603236042360523606236072360823609236102361123612236132361423615236162361723618236192362023621236222362323624236252362623627236282362923630236312363223633236342363523636236372363823639236402364123642236432364423645236462364723648236492365023651236522365323654236552365623657236582365923660236612366223663236642366523666236672366823669236702367123672236732367423675236762367723678236792368023681236822368323684236852368623687236882368923690236912369223693236942369523696236972369823699237002370123702237032370423705237062370723708237092371023711237122371323714237152371623717237182371923720237212372223723237242372523726237272372823729237302373123732237332373423735237362373723738237392374023741237422374323744237452374623747237482374923750237512375223753237542375523756237572375823759237602376123762237632376423765237662376723768237692377023771237722377323774237752377623777237782377923780237812378223783237842378523786237872378823789237902379123792237932379423795237962379723798237992380023801238022380323804238052380623807238082380923810238112381223813238142381523816238172381823819238202382123822238232382423825238262382723828238292383023831238322383323834238352383623837238382383923840238412384223843238442384523846238472384823849238502385123852238532385423855238562385723858238592386023861238622386323864238652386623867238682386923870238712387223873238742387523876238772387823879238802388123882238832388423885238862388723888238892389023891238922389323894238952389623897238982389923900239012390223903239042390523906239072390823909239102391123912239132391423915239162391723918239192392023921239222392323924239252392623927239282392923930239312393223933239342393523936239372393823939239402394123942239432394423945239462394723948239492395023951239522395323954239552395623957239582395923960239612396223963239642396523966239672396823969239702397123972239732397423975239762397723978239792398023981239822398323984239852398623987239882398923990239912399223993239942399523996239972399823999240002400124002240032400424005240062400724008240092401024011240122401324014240152401624017240182401924020240212402224023240242402524026240272402824029240302403124032240332403424035240362403724038240392404024041240422404324044240452404624047240482404924050240512405224053240542405524056240572405824059240602406124062240632406424065240662406724068240692407024071240722407324074240752407624077240782407924080240812408224083240842408524086240872408824089240902409124092240932409424095240962409724098240992410024101241022410324104241052410624107241082410924110241112411224113241142411524116241172411824119241202412124122241232412424125241262412724128241292413024131241322413324134241352413624137241382413924140241412414224143241442414524146241472414824149241502415124152241532415424155241562415724158241592416024161241622416324164241652416624167241682416924170241712417224173241742417524176241772417824179241802418124182241832418424185241862418724188241892419024191241922419324194241952419624197241982419924200242012420224203242042420524206242072420824209242102421124212242132421424215242162421724218242192422024221242222422324224242252422624227242282422924230242312423224233242342423524236242372423824239242402424124242242432424424245242462424724248242492425024251242522425324254242552425624257242582425924260242612426224263242642426524266242672426824269242702427124272242732427424275242762427724278242792428024281242822428324284242852428624287242882428924290242912429224293242942429524296242972429824299243002430124302243032430424305243062430724308243092431024311243122431324314243152431624317243182431924320243212432224323243242432524326243272432824329243302433124332243332433424335243362433724338243392434024341243422434324344243452434624347243482434924350243512435224353243542435524356243572435824359243602436124362243632436424365243662436724368243692437024371243722437324374243752437624377243782437924380243812438224383243842438524386243872438824389243902439124392243932439424395243962439724398243992440024401244022440324404244052440624407244082440924410244112441224413244142441524416244172441824419244202442124422244232442424425244262442724428244292443024431244322443324434244352443624437244382443924440244412444224443244442444524446244472444824449244502445124452244532445424455244562445724458244592446024461244622446324464244652446624467244682446924470244712447224473244742447524476244772447824479244802448124482244832448424485244862448724488244892449024491244922449324494244952449624497244982449924500245012450224503245042450524506245072450824509245102451124512245132451424515245162451724518245192452024521245222452324524245252452624527245282452924530245312453224533245342453524536245372453824539245402454124542245432454424545245462454724548245492455024551245522455324554245552455624557245582455924560245612456224563245642456524566245672456824569245702457124572245732457424575245762457724578245792458024581245822458324584245852458624587245882458924590245912459224593245942459524596245972459824599246002460124602246032460424605246062460724608246092461024611246122461324614246152461624617246182461924620246212462224623246242462524626246272462824629246302463124632246332463424635246362463724638246392464024641246422464324644246452464624647246482464924650246512465224653246542465524656246572465824659246602466124662246632466424665246662466724668246692467024671246722467324674246752467624677246782467924680246812468224683246842468524686246872468824689246902469124692246932469424695246962469724698246992470024701247022470324704247052470624707247082470924710247112471224713247142471524716247172471824719247202472124722247232472424725247262472724728247292473024731247322473324734247352473624737247382473924740247412474224743247442474524746247472474824749247502475124752247532475424755247562475724758247592476024761247622476324764247652476624767247682476924770247712477224773247742477524776247772477824779247802478124782247832478424785247862478724788247892479024791247922479324794247952479624797247982479924800248012480224803248042480524806248072480824809248102481124812248132481424815248162481724818248192482024821248222482324824248252482624827248282482924830248312483224833248342483524836248372483824839248402484124842248432484424845248462484724848248492485024851248522485324854248552485624857248582485924860248612486224863248642486524866248672486824869248702487124872248732487424875248762487724878248792488024881248822488324884248852488624887248882488924890248912489224893248942489524896248972489824899249002490124902249032490424905249062490724908249092491024911249122491324914249152491624917249182491924920249212492224923249242492524926249272492824929249302493124932249332493424935249362493724938249392494024941249422494324944249452494624947249482494924950249512495224953249542495524956249572495824959249602496124962249632496424965249662496724968249692497024971249722497324974249752497624977249782497924980249812498224983249842498524986249872498824989249902499124992249932499424995249962499724998249992500025001250022500325004250052500625007250082500925010250112501225013250142501525016250172501825019250202502125022250232502425025250262502725028250292503025031250322503325034250352503625037250382503925040250412504225043250442504525046250472504825049250502505125052250532505425055250562505725058250592506025061250622506325064250652506625067250682506925070250712507225073250742507525076250772507825079250802508125082250832508425085250862508725088250892509025091250922509325094250952509625097250982509925100251012510225103251042510525106251072510825109251102511125112251132511425115251162511725118251192512025121251222512325124251252512625127251282512925130251312513225133251342513525136251372513825139251402514125142251432514425145251462514725148251492515025151251522515325154251552515625157251582515925160251612516225163251642516525166251672516825169251702517125172251732517425175251762517725178251792518025181251822518325184251852518625187251882518925190251912519225193251942519525196251972519825199252002520125202252032520425205252062520725208252092521025211252122521325214252152521625217252182521925220252212522225223252242522525226252272522825229252302523125232252332523425235252362523725238252392524025241252422524325244252452524625247252482524925250252512525225253252542525525256252572525825259252602526125262252632526425265252662526725268252692527025271252722527325274252752527625277252782527925280252812528225283252842528525286252872528825289252902529125292252932529425295252962529725298252992530025301253022530325304253052530625307253082530925310253112531225313253142531525316253172531825319253202532125322253232532425325253262532725328253292533025331253322533325334253352533625337253382533925340253412534225343253442534525346253472534825349253502535125352253532535425355253562535725358253592536025361253622536325364253652536625367253682536925370253712537225373253742537525376253772537825379253802538125382253832538425385253862538725388253892539025391253922539325394253952539625397253982539925400254012540225403254042540525406254072540825409254102541125412254132541425415254162541725418254192542025421254222542325424254252542625427254282542925430254312543225433254342543525436254372543825439254402544125442254432544425445254462544725448254492545025451254522545325454254552545625457254582545925460254612546225463254642546525466254672546825469254702547125472254732547425475254762547725478254792548025481254822548325484254852548625487254882548925490254912549225493254942549525496254972549825499255002550125502255032550425505255062550725508255092551025511255122551325514255152551625517255182551925520255212552225523255242552525526255272552825529255302553125532255332553425535255362553725538255392554025541255422554325544255452554625547255482554925550255512555225553255542555525556255572555825559255602556125562255632556425565255662556725568255692557025571255722557325574255752557625577255782557925580255812558225583255842558525586255872558825589255902559125592255932559425595255962559725598255992560025601256022560325604256052560625607256082560925610256112561225613256142561525616256172561825619256202562125622256232562425625256262562725628256292563025631256322563325634256352563625637256382563925640256412564225643256442564525646256472564825649256502565125652256532565425655256562565725658256592566025661256622566325664256652566625667256682566925670256712567225673256742567525676256772567825679256802568125682256832568425685256862568725688256892569025691256922569325694256952569625697256982569925700257012570225703257042570525706257072570825709257102571125712257132571425715257162571725718257192572025721257222572325724257252572625727257282572925730257312573225733257342573525736257372573825739257402574125742257432574425745257462574725748257492575025751257522575325754257552575625757257582575925760257612576225763257642576525766257672576825769257702577125772257732577425775257762577725778257792578025781257822578325784257852578625787257882578925790257912579225793257942579525796257972579825799258002580125802258032580425805258062580725808258092581025811258122581325814258152581625817258182581925820258212582225823258242582525826258272582825829258302583125832258332583425835258362583725838258392584025841258422584325844258452584625847258482584925850258512585225853258542585525856258572585825859258602586125862258632586425865258662586725868258692587025871258722587325874258752587625877258782587925880258812588225883258842588525886258872588825889258902589125892258932589425895258962589725898258992590025901259022590325904259052590625907259082590925910259112591225913259142591525916259172591825919259202592125922259232592425925259262592725928259292593025931259322593325934259352593625937259382593925940259412594225943259442594525946259472594825949259502595125952259532595425955259562595725958259592596025961259622596325964259652596625967259682596925970259712597225973259742597525976259772597825979259802598125982259832598425985259862598725988259892599025991259922599325994259952599625997259982599926000260012600226003260042600526006260072600826009260102601126012260132601426015260162601726018260192602026021260222602326024260252602626027260282602926030260312603226033260342603526036260372603826039260402604126042260432604426045260462604726048260492605026051260522605326054260552605626057260582605926060260612606226063260642606526066260672606826069260702607126072260732607426075260762607726078260792608026081260822608326084260852608626087260882608926090260912609226093260942609526096260972609826099261002610126102261032610426105261062610726108261092611026111261122611326114261152611626117261182611926120261212612226123261242612526126261272612826129261302613126132261332613426135261362613726138261392614026141261422614326144261452614626147261482614926150261512615226153261542615526156261572615826159261602616126162261632616426165261662616726168261692617026171261722617326174261752617626177261782617926180261812618226183261842618526186261872618826189261902619126192261932619426195261962619726198261992620026201262022620326204262052620626207262082620926210262112621226213262142621526216262172621826219262202622126222262232622426225262262622726228262292623026231262322623326234262352623626237262382623926240262412624226243262442624526246262472624826249262502625126252262532625426255262562625726258262592626026261262622626326264262652626626267262682626926270262712627226273262742627526276262772627826279262802628126282262832628426285262862628726288262892629026291262922629326294262952629626297262982629926300263012630226303263042630526306263072630826309263102631126312263132631426315263162631726318263192632026321263222632326324263252632626327263282632926330263312633226333263342633526336263372633826339263402634126342263432634426345263462634726348263492635026351263522635326354263552635626357263582635926360263612636226363263642636526366263672636826369263702637126372263732637426375263762637726378263792638026381263822638326384263852638626387263882638926390263912639226393263942639526396263972639826399264002640126402264032640426405264062640726408264092641026411264122641326414264152641626417264182641926420264212642226423264242642526426264272642826429264302643126432264332643426435264362643726438264392644026441264422644326444264452644626447264482644926450264512645226453264542645526456264572645826459264602646126462264632646426465264662646726468264692647026471264722647326474264752647626477264782647926480264812648226483264842648526486264872648826489264902649126492264932649426495264962649726498264992650026501265022650326504265052650626507265082650926510265112651226513265142651526516265172651826519265202652126522265232652426525265262652726528265292653026531265322653326534265352653626537265382653926540265412654226543265442654526546265472654826549265502655126552265532655426555265562655726558265592656026561265622656326564265652656626567265682656926570265712657226573265742657526576265772657826579265802658126582265832658426585265862658726588265892659026591265922659326594265952659626597265982659926600266012660226603266042660526606266072660826609266102661126612266132661426615266162661726618266192662026621266222662326624266252662626627266282662926630266312663226633266342663526636266372663826639266402664126642266432664426645266462664726648266492665026651266522665326654266552665626657266582665926660266612666226663266642666526666266672666826669266702667126672266732667426675266762667726678266792668026681266822668326684266852668626687266882668926690266912669226693266942669526696266972669826699267002670126702267032670426705267062670726708267092671026711267122671326714267152671626717267182671926720267212672226723267242672526726267272672826729267302673126732267332673426735267362673726738267392674026741267422674326744267452674626747267482674926750267512675226753267542675526756267572675826759267602676126762267632676426765267662676726768267692677026771267722677326774267752677626777267782677926780267812678226783267842678526786267872678826789267902679126792267932679426795267962679726798267992680026801268022680326804268052680626807268082680926810268112681226813268142681526816268172681826819268202682126822268232682426825268262682726828268292683026831268322683326834268352683626837268382683926840268412684226843268442684526846268472684826849268502685126852268532685426855268562685726858268592686026861268622686326864268652686626867268682686926870268712687226873268742687526876268772687826879268802688126882268832688426885268862688726888268892689026891268922689326894268952689626897268982689926900269012690226903269042690526906269072690826909269102691126912269132691426915269162691726918269192692026921269222692326924269252692626927269282692926930269312693226933269342693526936269372693826939269402694126942269432694426945269462694726948269492695026951269522695326954269552695626957269582695926960269612696226963269642696526966269672696826969269702697126972269732697426975269762697726978269792698026981269822698326984269852698626987269882698926990269912699226993269942699526996269972699826999270002700127002270032700427005270062700727008270092701027011270122701327014270152701627017270182701927020270212702227023270242702527026270272702827029270302703127032270332703427035270362703727038270392704027041270422704327044270452704627047270482704927050270512705227053270542705527056270572705827059270602706127062270632706427065270662706727068270692707027071270722707327074270752707627077270782707927080270812708227083270842708527086270872708827089270902709127092270932709427095270962709727098270992710027101271022710327104271052710627107271082710927110271112711227113271142711527116271172711827119271202712127122271232712427125271262712727128271292713027131271322713327134271352713627137271382713927140271412714227143271442714527146271472714827149271502715127152271532715427155271562715727158271592716027161271622716327164271652716627167271682716927170271712717227173271742717527176271772717827179271802718127182271832718427185271862718727188271892719027191271922719327194271952719627197271982719927200272012720227203272042720527206272072720827209272102721127212272132721427215272162721727218272192722027221272222722327224272252722627227272282722927230272312723227233272342723527236272372723827239272402724127242272432724427245272462724727248272492725027251272522725327254272552725627257272582725927260272612726227263272642726527266272672726827269272702727127272272732727427275272762727727278272792728027281272822728327284272852728627287272882728927290272912729227293272942729527296272972729827299273002730127302273032730427305273062730727308273092731027311273122731327314273152731627317273182731927320273212732227323273242732527326273272732827329273302733127332273332733427335273362733727338273392734027341273422734327344273452734627347273482734927350273512735227353273542735527356273572735827359273602736127362273632736427365273662736727368273692737027371273722737327374273752737627377273782737927380273812738227383273842738527386273872738827389273902739127392273932739427395273962739727398273992740027401274022740327404274052740627407274082740927410274112741227413274142741527416274172741827419274202742127422274232742427425274262742727428274292743027431274322743327434274352743627437274382743927440274412744227443274442744527446274472744827449274502745127452274532745427455274562745727458274592746027461274622746327464274652746627467274682746927470274712747227473274742747527476274772747827479274802748127482274832748427485274862748727488274892749027491274922749327494274952749627497274982749927500275012750227503275042750527506275072750827509275102751127512275132751427515275162751727518275192752027521275222752327524275252752627527275282752927530275312753227533275342753527536275372753827539275402754127542275432754427545275462754727548275492755027551275522755327554275552755627557275582755927560275612756227563275642756527566275672756827569275702757127572275732757427575275762757727578275792758027581275822758327584275852758627587275882758927590275912759227593275942759527596275972759827599276002760127602276032760427605276062760727608276092761027611276122761327614276152761627617276182761927620276212762227623276242762527626276272762827629276302763127632276332763427635276362763727638276392764027641276422764327644276452764627647276482764927650276512765227653276542765527656276572765827659276602766127662276632766427665276662766727668276692767027671276722767327674276752767627677276782767927680276812768227683276842768527686276872768827689276902769127692276932769427695276962769727698276992770027701277022770327704277052770627707277082770927710277112771227713277142771527716277172771827719277202772127722277232772427725277262772727728277292773027731277322773327734277352773627737277382773927740277412774227743277442774527746277472774827749277502775127752277532775427755277562775727758277592776027761277622776327764277652776627767277682776927770277712777227773277742777527776277772777827779277802778127782277832778427785277862778727788277892779027791277922779327794277952779627797277982779927800278012780227803278042780527806278072780827809278102781127812278132781427815278162781727818278192782027821278222782327824278252782627827278282782927830278312783227833278342783527836278372783827839278402784127842278432784427845278462784727848278492785027851278522785327854278552785627857278582785927860278612786227863278642786527866278672786827869278702787127872278732787427875278762787727878278792788027881278822788327884278852788627887278882788927890278912789227893278942789527896278972789827899279002790127902279032790427905279062790727908279092791027911279122791327914279152791627917279182791927920279212792227923279242792527926279272792827929279302793127932279332793427935279362793727938279392794027941279422794327944279452794627947279482794927950279512795227953279542795527956279572795827959279602796127962279632796427965279662796727968279692797027971279722797327974279752797627977279782797927980279812798227983279842798527986279872798827989279902799127992279932799427995279962799727998279992800028001280022800328004280052800628007280082800928010280112801228013280142801528016280172801828019280202802128022280232802428025280262802728028280292803028031280322803328034280352803628037280382803928040280412804228043280442804528046280472804828049280502805128052280532805428055280562805728058280592806028061280622806328064280652806628067280682806928070280712807228073280742807528076280772807828079280802808128082280832808428085280862808728088280892809028091280922809328094280952809628097280982809928100281012810228103281042810528106281072810828109281102811128112281132811428115281162811728118281192812028121281222812328124281252812628127281282812928130281312813228133281342813528136281372813828139281402814128142281432814428145281462814728148281492815028151281522815328154281552815628157281582815928160281612816228163281642816528166281672816828169281702817128172281732817428175281762817728178281792818028181281822818328184281852818628187281882818928190281912819228193281942819528196281972819828199282002820128202282032820428205282062820728208282092821028211282122821328214282152821628217282182821928220282212822228223282242822528226282272822828229282302823128232282332823428235282362823728238282392824028241282422824328244282452824628247282482824928250282512825228253282542825528256282572825828259282602826128262282632826428265282662826728268282692827028271282722827328274282752827628277282782827928280282812828228283282842828528286282872828828289282902829128292282932829428295282962829728298282992830028301283022830328304283052830628307283082830928310283112831228313283142831528316283172831828319283202832128322283232832428325283262832728328283292833028331283322833328334283352833628337283382833928340283412834228343283442834528346283472834828349283502835128352283532835428355283562835728358283592836028361283622836328364283652836628367283682836928370283712837228373283742837528376283772837828379283802838128382283832838428385283862838728388283892839028391283922839328394283952839628397283982839928400284012840228403284042840528406284072840828409284102841128412284132841428415284162841728418284192842028421284222842328424284252842628427284282842928430284312843228433284342843528436284372843828439284402844128442284432844428445284462844728448284492845028451284522845328454284552845628457284582845928460284612846228463284642846528466284672846828469284702847128472284732847428475284762847728478284792848028481284822848328484284852848628487284882848928490284912849228493284942849528496284972849828499285002850128502285032850428505285062850728508285092851028511285122851328514285152851628517285182851928520285212852228523285242852528526285272852828529285302853128532285332853428535285362853728538285392854028541285422854328544285452854628547285482854928550285512855228553285542855528556285572855828559285602856128562285632856428565285662856728568285692857028571285722857328574285752857628577285782857928580285812858228583285842858528586285872858828589285902859128592285932859428595285962859728598285992860028601286022860328604286052860628607286082860928610286112861228613286142861528616286172861828619286202862128622286232862428625286262862728628286292863028631286322863328634286352863628637286382863928640286412864228643286442864528646286472864828649286502865128652286532865428655286562865728658286592866028661286622866328664286652866628667286682866928670286712867228673286742867528676286772867828679286802868128682286832868428685286862868728688286892869028691286922869328694286952869628697286982869928700287012870228703287042870528706287072870828709287102871128712287132871428715287162871728718287192872028721287222872328724287252872628727287282872928730287312873228733287342873528736287372873828739287402874128742287432874428745287462874728748287492875028751287522875328754287552875628757287582875928760287612876228763287642876528766287672876828769287702877128772287732877428775287762877728778287792878028781287822878328784287852878628787287882878928790287912879228793287942879528796287972879828799288002880128802288032880428805288062880728808288092881028811288122881328814288152881628817288182881928820288212882228823288242882528826288272882828829288302883128832288332883428835288362883728838288392884028841288422884328844288452884628847288482884928850288512885228853288542885528856288572885828859288602886128862288632886428865288662886728868288692887028871288722887328874288752887628877288782887928880288812888228883288842888528886288872888828889288902889128892288932889428895288962889728898288992890028901289022890328904289052890628907289082890928910289112891228913289142891528916289172891828919289202892128922289232892428925289262892728928289292893028931289322893328934289352893628937289382893928940289412894228943289442894528946289472894828949289502895128952289532895428955289562895728958289592896028961289622896328964289652896628967289682896928970289712897228973289742897528976289772897828979289802898128982289832898428985289862898728988289892899028991289922899328994289952899628997289982899929000290012900229003290042900529006290072900829009290102901129012290132901429015290162901729018290192902029021290222902329024290252902629027290282902929030290312903229033290342903529036290372903829039290402904129042290432904429045290462904729048290492905029051290522905329054290552905629057290582905929060290612906229063290642906529066290672906829069290702907129072290732907429075290762907729078290792908029081290822908329084290852908629087290882908929090290912909229093290942909529096290972909829099291002910129102291032910429105291062910729108291092911029111291122911329114291152911629117291182911929120291212912229123291242912529126291272912829129291302913129132291332913429135291362913729138291392914029141291422914329144291452914629147291482914929150291512915229153291542915529156291572915829159291602916129162291632916429165291662916729168291692917029171291722917329174291752917629177291782917929180291812918229183291842918529186291872918829189291902919129192291932919429195291962919729198291992920029201292022920329204292052920629207292082920929210292112921229213292142921529216292172921829219292202922129222292232922429225292262922729228292292923029231292322923329234292352923629237292382923929240292412924229243292442924529246292472924829249292502925129252292532925429255292562925729258292592926029261292622926329264292652926629267292682926929270292712927229273292742927529276292772927829279292802928129282292832928429285292862928729288292892929029291292922929329294292952929629297292982929929300293012930229303293042930529306293072930829309293102931129312293132931429315293162931729318293192932029321293222932329324293252932629327293282932929330293312933229333293342933529336293372933829339293402934129342293432934429345293462934729348293492935029351293522935329354293552935629357293582935929360293612936229363293642936529366293672936829369293702937129372293732937429375293762937729378293792938029381293822938329384293852938629387293882938929390293912939229393293942939529396293972939829399294002940129402294032940429405294062940729408294092941029411294122941329414294152941629417294182941929420294212942229423294242942529426294272942829429294302943129432294332943429435294362943729438294392944029441294422944329444294452944629447294482944929450294512945229453294542945529456294572945829459294602946129462294632946429465294662946729468294692947029471294722947329474294752947629477294782947929480294812948229483294842948529486294872948829489294902949129492294932949429495294962949729498294992950029501295022950329504295052950629507295082950929510295112951229513295142951529516295172951829519295202952129522295232952429525295262952729528295292953029531295322953329534295352953629537295382953929540295412954229543295442954529546295472954829549295502955129552295532955429555295562955729558295592956029561295622956329564295652956629567295682956929570295712957229573295742957529576295772957829579295802958129582295832958429585295862958729588295892959029591295922959329594295952959629597295982959929600296012960229603296042960529606296072960829609296102961129612296132961429615296162961729618296192962029621296222962329624296252962629627296282962929630296312963229633296342963529636296372963829639296402964129642296432964429645296462964729648296492965029651296522965329654296552965629657296582965929660296612966229663296642966529666296672966829669296702967129672296732967429675296762967729678296792968029681296822968329684296852968629687296882968929690296912969229693296942969529696296972969829699297002970129702297032970429705297062970729708297092971029711297122971329714297152971629717297182971929720297212972229723297242972529726297272972829729297302973129732297332973429735297362973729738297392974029741297422974329744297452974629747297482974929750297512975229753297542975529756297572975829759297602976129762297632976429765297662976729768297692977029771297722977329774297752977629777297782977929780297812978229783297842978529786297872978829789297902979129792297932979429795297962979729798297992980029801298022980329804298052980629807298082980929810298112981229813298142981529816298172981829819298202982129822298232982429825298262982729828298292983029831298322983329834298352983629837298382983929840298412984229843298442984529846298472984829849298502985129852298532985429855298562985729858298592986029861298622986329864298652986629867298682986929870298712987229873298742987529876298772987829879298802988129882298832988429885298862988729888298892989029891298922989329894298952989629897298982989929900299012990229903299042990529906299072990829909299102991129912299132991429915299162991729918299192992029921299222992329924299252992629927299282992929930299312993229933299342993529936299372993829939299402994129942299432994429945299462994729948299492995029951299522995329954299552995629957299582995929960299612996229963299642996529966299672996829969299702997129972299732997429975299762997729978299792998029981299822998329984299852998629987299882998929990299912999229993299942999529996299972999829999300003000130002300033000430005300063000730008300093001030011300123001330014300153001630017300183001930020300213002230023300243002530026300273002830029300303003130032300333003430035300363003730038300393004030041300423004330044300453004630047300483004930050300513005230053300543005530056300573005830059300603006130062300633006430065300663006730068300693007030071300723007330074300753007630077300783007930080300813008230083300843008530086300873008830089300903009130092300933009430095300963009730098300993010030101301023010330104301053010630107301083010930110301113011230113301143011530116301173011830119301203012130122301233012430125301263012730128301293013030131301323013330134301353013630137301383013930140301413014230143301443014530146301473014830149301503015130152301533015430155301563015730158301593016030161301623016330164301653016630167301683016930170301713017230173301743017530176301773017830179301803018130182301833018430185301863018730188301893019030191301923019330194301953019630197301983019930200302013020230203302043020530206302073020830209302103021130212302133021430215302163021730218302193022030221302223022330224302253022630227302283022930230302313023230233302343023530236302373023830239302403024130242302433024430245302463024730248302493025030251302523025330254302553025630257302583025930260302613026230263302643026530266302673026830269302703027130272302733027430275302763027730278302793028030281302823028330284302853028630287302883028930290302913029230293302943029530296302973029830299303003030130302303033030430305303063030730308303093031030311303123031330314303153031630317303183031930320303213032230323303243032530326303273032830329303303033130332303333033430335303363033730338303393034030341303423034330344303453034630347303483034930350303513035230353303543035530356303573035830359303603036130362303633036430365303663036730368303693037030371303723037330374303753037630377303783037930380303813038230383303843038530386303873038830389303903039130392303933039430395303963039730398303993040030401304023040330404304053040630407304083040930410304113041230413304143041530416304173041830419304203042130422304233042430425304263042730428304293043030431304323043330434304353043630437304383043930440304413044230443304443044530446304473044830449304503045130452304533045430455304563045730458304593046030461304623046330464304653046630467304683046930470304713047230473304743047530476304773047830479304803048130482304833048430485304863048730488304893049030491304923049330494304953049630497304983049930500305013050230503305043050530506305073050830509305103051130512305133051430515305163051730518305193052030521305223052330524305253052630527305283052930530305313053230533305343053530536305373053830539305403054130542305433054430545305463054730548305493055030551305523055330554305553055630557305583055930560305613056230563305643056530566305673056830569305703057130572305733057430575305763057730578305793058030581305823058330584305853058630587305883058930590305913059230593305943059530596305973059830599306003060130602306033060430605306063060730608306093061030611306123061330614306153061630617306183061930620306213062230623306243062530626306273062830629306303063130632306333063430635306363063730638306393064030641306423064330644306453064630647306483064930650306513065230653306543065530656306573065830659306603066130662306633066430665306663066730668306693067030671306723067330674306753067630677306783067930680306813068230683306843068530686306873068830689306903069130692306933069430695306963069730698306993070030701307023070330704307053070630707307083070930710307113071230713307143071530716307173071830719307203072130722307233072430725307263072730728307293073030731307323073330734307353073630737307383073930740307413074230743307443074530746307473074830749307503075130752307533075430755307563075730758307593076030761307623076330764307653076630767307683076930770307713077230773307743077530776307773077830779307803078130782307833078430785307863078730788307893079030791307923079330794307953079630797307983079930800308013080230803308043080530806308073080830809308103081130812308133081430815308163081730818308193082030821308223082330824308253082630827308283082930830308313083230833308343083530836308373083830839308403084130842308433084430845308463084730848308493085030851308523085330854308553085630857308583085930860308613086230863308643086530866308673086830869308703087130872308733087430875308763087730878308793088030881308823088330884308853088630887308883088930890308913089230893308943089530896308973089830899309003090130902309033090430905309063090730908309093091030911309123091330914309153091630917309183091930920309213092230923309243092530926309273092830929309303093130932309333093430935309363093730938309393094030941309423094330944309453094630947309483094930950309513095230953309543095530956309573095830959309603096130962309633096430965309663096730968309693097030971309723097330974309753097630977309783097930980309813098230983309843098530986309873098830989309903099130992309933099430995309963099730998309993100031001310023100331004310053100631007310083100931010310113101231013310143101531016310173101831019310203102131022310233102431025310263102731028310293103031031310323103331034310353103631037310383103931040310413104231043310443104531046310473104831049310503105131052310533105431055310563105731058310593106031061310623106331064310653106631067310683106931070310713107231073310743107531076310773107831079310803108131082310833108431085310863108731088310893109031091310923109331094310953109631097310983109931100311013110231103311043110531106311073110831109311103111131112311133111431115311163111731118311193112031121311223112331124311253112631127311283112931130311313113231133311343113531136311373113831139311403114131142311433114431145311463114731148311493115031151311523115331154311553115631157311583115931160311613116231163311643116531166311673116831169311703117131172311733117431175311763117731178311793118031181311823118331184311853118631187311883118931190311913119231193311943119531196311973119831199312003120131202312033120431205312063120731208312093121031211312123121331214312153121631217312183121931220312213122231223312243122531226312273122831229312303123131232312333123431235312363123731238312393124031241312423124331244312453124631247312483124931250312513125231253312543125531256312573125831259312603126131262312633126431265312663126731268312693127031271312723127331274312753127631277312783127931280312813128231283312843128531286312873128831289312903129131292312933129431295312963129731298312993130031301313023130331304313053130631307313083130931310313113131231313313143131531316313173131831319313203132131322313233132431325313263132731328313293133031331313323133331334313353133631337313383133931340313413134231343313443134531346313473134831349313503135131352313533135431355313563135731358313593136031361313623136331364313653136631367313683136931370313713137231373313743137531376313773137831379313803138131382313833138431385313863138731388313893139031391313923139331394313953139631397313983139931400314013140231403314043140531406314073140831409314103141131412314133141431415314163141731418314193142031421314223142331424314253142631427314283142931430314313143231433314343143531436314373143831439314403144131442314433144431445314463144731448314493145031451314523145331454314553145631457314583145931460314613146231463314643146531466314673146831469314703147131472314733147431475314763147731478314793148031481314823148331484314853148631487314883148931490314913149231493314943149531496314973149831499315003150131502315033150431505315063150731508315093151031511315123151331514315153151631517315183151931520315213152231523315243152531526315273152831529315303153131532315333153431535315363153731538315393154031541315423154331544315453154631547315483154931550315513155231553315543155531556315573155831559315603156131562315633156431565315663156731568315693157031571315723157331574315753157631577315783157931580315813158231583315843158531586315873158831589315903159131592315933159431595315963159731598315993160031601316023160331604316053160631607316083160931610316113161231613316143161531616316173161831619316203162131622316233162431625316263162731628316293163031631316323163331634316353163631637316383163931640316413164231643316443164531646316473164831649316503165131652316533165431655316563165731658316593166031661316623166331664316653166631667316683166931670316713167231673316743167531676316773167831679316803168131682316833168431685316863168731688316893169031691316923169331694316953169631697316983169931700317013170231703317043170531706317073170831709317103171131712317133171431715317163171731718317193172031721317223172331724317253172631727317283172931730317313173231733317343173531736317373173831739317403174131742317433174431745317463174731748317493175031751317523175331754317553175631757317583175931760317613176231763317643176531766317673176831769317703177131772317733177431775317763177731778317793178031781317823178331784317853178631787317883178931790317913179231793317943179531796317973179831799318003180131802318033180431805318063180731808318093181031811318123181331814318153181631817318183181931820318213182231823318243182531826318273182831829318303183131832318333183431835318363183731838318393184031841318423184331844318453184631847318483184931850318513185231853318543185531856318573185831859318603186131862318633186431865318663186731868318693187031871318723187331874318753187631877318783187931880318813188231883318843188531886318873188831889318903189131892318933189431895318963189731898318993190031901319023190331904319053190631907319083190931910319113191231913319143191531916319173191831919319203192131922319233192431925319263192731928319293193031931319323193331934319353193631937319383193931940319413194231943319443194531946319473194831949319503195131952319533195431955319563195731958319593196031961319623196331964319653196631967319683196931970319713197231973319743197531976319773197831979319803198131982319833198431985319863198731988319893199031991319923199331994319953199631997319983199932000320013200232003320043200532006320073200832009320103201132012320133201432015320163201732018320193202032021320223202332024320253202632027320283202932030320313203232033320343203532036320373203832039320403204132042320433204432045320463204732048320493205032051320523205332054320553205632057320583205932060320613206232063320643206532066320673206832069320703207132072320733207432075320763207732078320793208032081320823208332084320853208632087320883208932090320913209232093320943209532096320973209832099321003210132102321033210432105321063210732108321093211032111321123211332114321153211632117321183211932120321213212232123321243212532126321273212832129321303213132132321333213432135321363213732138321393214032141321423214332144321453214632147321483214932150321513215232153321543215532156321573215832159321603216132162321633216432165321663216732168321693217032171321723217332174321753217632177321783217932180321813218232183321843218532186321873218832189321903219132192321933219432195321963219732198321993220032201322023220332204322053220632207322083220932210322113221232213322143221532216322173221832219322203222132222322233222432225322263222732228322293223032231322323223332234322353223632237322383223932240322413224232243322443224532246322473224832249322503225132252322533225432255322563225732258322593226032261322623226332264322653226632267322683226932270322713227232273322743227532276322773227832279322803228132282322833228432285322863228732288322893229032291322923229332294322953229632297322983229932300323013230232303323043230532306323073230832309323103231132312323133231432315323163231732318323193232032321323223232332324323253232632327323283232932330323313233232333323343233532336323373233832339323403234132342323433234432345323463234732348323493235032351323523235332354323553235632357323583235932360323613236232363323643236532366323673236832369323703237132372323733237432375323763237732378323793238032381323823238332384323853238632387323883238932390323913239232393323943239532396323973239832399324003240132402324033240432405324063240732408324093241032411324123241332414324153241632417324183241932420324213242232423324243242532426324273242832429324303243132432324333243432435324363243732438324393244032441324423244332444324453244632447324483244932450324513245232453324543245532456324573245832459324603246132462324633246432465324663246732468324693247032471324723247332474324753247632477324783247932480324813248232483324843248532486324873248832489324903249132492324933249432495324963249732498324993250032501325023250332504325053250632507325083250932510325113251232513325143251532516325173251832519325203252132522325233252432525325263252732528325293253032531325323253332534325353253632537325383253932540325413254232543325443254532546325473254832549325503255132552325533255432555325563255732558325593256032561325623256332564325653256632567325683256932570325713257232573325743257532576325773257832579325803258132582325833258432585325863258732588325893259032591325923259332594325953259632597325983259932600326013260232603326043260532606326073260832609326103261132612326133261432615326163261732618326193262032621326223262332624326253262632627326283262932630326313263232633326343263532636326373263832639326403264132642326433264432645326463264732648326493265032651326523265332654326553265632657326583265932660326613266232663326643266532666326673266832669326703267132672326733267432675326763267732678326793268032681326823268332684326853268632687326883268932690326913269232693326943269532696326973269832699327003270132702327033270432705327063270732708327093271032711327123271332714327153271632717327183271932720327213272232723327243272532726327273272832729327303273132732327333273432735327363273732738327393274032741327423274332744327453274632747327483274932750327513275232753327543275532756327573275832759327603276132762327633276432765327663276732768327693277032771327723277332774327753277632777327783277932780327813278232783327843278532786327873278832789327903279132792327933279432795327963279732798327993280032801328023280332804328053280632807328083280932810328113281232813328143281532816328173281832819328203282132822328233282432825328263282732828328293283032831328323283332834328353283632837328383283932840328413284232843328443284532846328473284832849328503285132852328533285432855328563285732858328593286032861328623286332864328653286632867328683286932870328713287232873328743287532876328773287832879328803288132882328833288432885328863288732888328893289032891328923289332894328953289632897328983289932900329013290232903329043290532906329073290832909329103291132912329133291432915329163291732918329193292032921329223292332924329253292632927329283292932930329313293232933329343293532936329373293832939329403294132942329433294432945329463294732948329493295032951329523295332954329553295632957329583295932960329613296232963329643296532966329673296832969329703297132972329733297432975329763297732978329793298032981329823298332984329853298632987329883298932990329913299232993329943299532996329973299832999330003300133002330033300433005330063300733008330093301033011330123301333014330153301633017330183301933020330213302233023330243302533026330273302833029330303303133032330333303433035330363303733038330393304033041330423304333044330453304633047330483304933050330513305233053330543305533056330573305833059330603306133062330633306433065330663306733068330693307033071330723307333074330753307633077330783307933080330813308233083330843308533086330873308833089330903309133092330933309433095330963309733098330993310033101331023310333104331053310633107331083310933110331113311233113331143311533116331173311833119331203312133122331233312433125331263312733128331293313033131331323313333134331353313633137331383313933140331413314233143331443314533146331473314833149331503315133152331533315433155331563315733158331593316033161331623316333164331653316633167331683316933170331713317233173331743317533176331773317833179331803318133182331833318433185331863318733188331893319033191331923319333194331953319633197331983319933200332013320233203332043320533206332073320833209332103321133212332133321433215332163321733218332193322033221332223322333224332253322633227332283322933230332313323233233332343323533236332373323833239332403324133242332433324433245332463324733248332493325033251332523325333254332553325633257332583325933260332613326233263332643326533266332673326833269332703327133272332733327433275332763327733278332793328033281332823328333284332853328633287332883328933290332913329233293332943329533296332973329833299333003330133302333033330433305333063330733308333093331033311333123331333314333153331633317333183331933320333213332233323333243332533326333273332833329333303333133332333333333433335333363333733338333393334033341333423334333344333453334633347333483334933350333513335233353333543335533356333573335833359333603336133362333633336433365333663336733368333693337033371333723337333374333753337633377333783337933380333813338233383333843338533386333873338833389333903339133392333933339433395333963339733398333993340033401334023340333404334053340633407334083340933410334113341233413334143341533416334173341833419334203342133422334233342433425334263342733428334293343033431334323343333434334353343633437334383343933440334413344233443334443344533446334473344833449334503345133452334533345433455334563345733458334593346033461334623346333464334653346633467334683346933470334713347233473334743347533476334773347833479334803348133482334833348433485334863348733488334893349033491334923349333494334953349633497334983349933500335013350233503335043350533506335073350833509335103351133512335133351433515335163351733518335193352033521335223352333524335253352633527335283352933530335313353233533335343353533536335373353833539335403354133542335433354433545335463354733548335493355033551335523355333554335553355633557335583355933560335613356233563335643356533566335673356833569335703357133572335733357433575335763357733578335793358033581335823358333584335853358633587335883358933590335913359233593335943359533596335973359833599336003360133602336033360433605336063360733608336093361033611336123361333614336153361633617336183361933620336213362233623336243362533626336273362833629336303363133632336333363433635336363363733638336393364033641336423364333644336453364633647336483364933650336513365233653336543365533656336573365833659336603366133662336633366433665336663366733668336693367033671336723367333674336753367633677336783367933680336813368233683336843368533686336873368833689336903369133692336933369433695336963369733698336993370033701337023370333704337053370633707337083370933710337113371233713337143371533716337173371833719337203372133722337233372433725337263372733728337293373033731337323373333734337353373633737337383373933740337413374233743337443374533746337473374833749337503375133752337533375433755337563375733758337593376033761337623376333764337653376633767337683376933770337713377233773337743377533776337773377833779337803378133782337833378433785337863378733788337893379033791337923379333794337953379633797337983379933800338013380233803338043380533806338073380833809338103381133812338133381433815338163381733818338193382033821338223382333824338253382633827338283382933830338313383233833338343383533836338373383833839338403384133842338433384433845338463384733848338493385033851338523385333854338553385633857338583385933860338613386233863338643386533866338673386833869338703387133872338733387433875338763387733878338793388033881338823388333884338853388633887338883388933890338913389233893338943389533896338973389833899339003390133902339033390433905339063390733908339093391033911339123391333914339153391633917339183391933920339213392233923339243392533926339273392833929339303393133932339333393433935339363393733938339393394033941339423394333944339453394633947339483394933950339513395233953339543395533956339573395833959339603396133962339633396433965339663396733968339693397033971339723397333974339753397633977339783397933980339813398233983339843398533986339873398833989339903399133992339933399433995339963399733998339993400034001340023400334004340053400634007340083400934010340113401234013340143401534016340173401834019340203402134022340233402434025340263402734028340293403034031340323403334034340353403634037340383403934040340413404234043340443404534046340473404834049340503405134052340533405434055340563405734058340593406034061340623406334064340653406634067340683406934070340713407234073340743407534076340773407834079340803408134082340833408434085340863408734088340893409034091340923409334094340953409634097340983409934100341013410234103341043410534106341073410834109341103411134112341133411434115341163411734118341193412034121341223412334124341253412634127341283412934130341313413234133341343413534136341373413834139341403414134142341433414434145341463414734148341493415034151341523415334154341553415634157341583415934160341613416234163341643416534166341673416834169341703417134172341733417434175341763417734178341793418034181341823418334184341853418634187341883418934190341913419234193341943419534196341973419834199342003420134202342033420434205342063420734208342093421034211342123421334214342153421634217342183421934220342213422234223342243422534226342273422834229342303423134232342333423434235342363423734238342393424034241342423424334244342453424634247342483424934250342513425234253342543425534256342573425834259342603426134262342633426434265342663426734268342693427034271342723427334274342753427634277342783427934280342813428234283342843428534286342873428834289342903429134292342933429434295342963429734298342993430034301343023430334304343053430634307343083430934310343113431234313343143431534316343173431834319343203432134322343233432434325343263432734328343293433034331343323433334334343353433634337343383433934340343413434234343343443434534346343473434834349343503435134352343533435434355343563435734358343593436034361343623436334364343653436634367343683436934370343713437234373343743437534376343773437834379343803438134382343833438434385343863438734388343893439034391343923439334394343953439634397343983439934400344013440234403344043440534406344073440834409344103441134412344133441434415344163441734418344193442034421344223442334424344253442634427344283442934430344313443234433344343443534436344373443834439344403444134442344433444434445344463444734448344493445034451344523445334454344553445634457344583445934460344613446234463344643446534466344673446834469344703447134472344733447434475344763447734478344793448034481344823448334484344853448634487344883448934490344913449234493344943449534496344973449834499345003450134502345033450434505345063450734508345093451034511345123451334514345153451634517345183451934520345213452234523345243452534526345273452834529345303453134532345333453434535345363453734538345393454034541345423454334544345453454634547345483454934550345513455234553345543455534556345573455834559345603456134562345633456434565345663456734568345693457034571345723457334574345753457634577345783457934580345813458234583345843458534586345873458834589345903459134592345933459434595345963459734598345993460034601346023460334604346053460634607346083460934610346113461234613346143461534616346173461834619346203462134622346233462434625346263462734628346293463034631346323463334634346353463634637346383463934640346413464234643346443464534646346473464834649346503465134652346533465434655346563465734658346593466034661346623466334664346653466634667346683466934670346713467234673346743467534676346773467834679346803468134682346833468434685346863468734688346893469034691346923469334694346953469634697346983469934700347013470234703347043470534706347073470834709347103471134712347133471434715347163471734718347193472034721347223472334724347253472634727347283472934730347313473234733347343473534736347373473834739347403474134742347433474434745347463474734748347493475034751347523475334754347553475634757347583475934760347613476234763347643476534766347673476834769347703477134772347733477434775347763477734778347793478034781347823478334784347853478634787347883478934790347913479234793347943479534796347973479834799348003480134802348033480434805348063480734808348093481034811348123481334814348153481634817348183481934820348213482234823348243482534826348273482834829348303483134832348333483434835348363483734838348393484034841348423484334844348453484634847348483484934850348513485234853348543485534856348573485834859348603486134862348633486434865348663486734868348693487034871348723487334874348753487634877348783487934880348813488234883348843488534886348873488834889348903489134892348933489434895348963489734898348993490034901349023490334904349053490634907349083490934910349113491234913349143491534916349173491834919349203492134922349233492434925349263492734928349293493034931349323493334934349353493634937349383493934940349413494234943349443494534946349473494834949349503495134952349533495434955349563495734958349593496034961349623496334964349653496634967349683496934970349713497234973349743497534976349773497834979349803498134982349833498434985349863498734988349893499034991349923499334994349953499634997349983499935000350013500235003350043500535006350073500835009350103501135012350133501435015350163501735018350193502035021350223502335024350253502635027350283502935030350313503235033350343503535036350373503835039350403504135042350433504435045350463504735048350493505035051350523505335054350553505635057350583505935060350613506235063350643506535066350673506835069350703507135072350733507435075350763507735078350793508035081350823508335084350853508635087350883508935090350913509235093350943509535096350973509835099351003510135102351033510435105351063510735108351093511035111351123511335114351153511635117351183511935120351213512235123351243512535126351273512835129351303513135132351333513435135351363513735138351393514035141351423514335144351453514635147351483514935150351513515235153351543515535156351573515835159351603516135162351633516435165351663516735168351693517035171351723517335174351753517635177351783517935180351813518235183351843518535186351873518835189351903519135192351933519435195351963519735198351993520035201352023520335204352053520635207352083520935210352113521235213352143521535216352173521835219352203522135222352233522435225352263522735228352293523035231352323523335234352353523635237352383523935240352413524235243352443524535246352473524835249352503525135252352533525435255352563525735258352593526035261352623526335264352653526635267352683526935270352713527235273352743527535276352773527835279352803528135282352833528435285352863528735288352893529035291352923529335294352953529635297352983529935300353013530235303353043530535306353073530835309353103531135312353133531435315353163531735318353193532035321353223532335324353253532635327353283532935330353313533235333353343533535336353373533835339353403534135342353433534435345353463534735348353493535035351353523535335354353553535635357353583535935360353613536235363353643536535366353673536835369353703537135372353733537435375353763537735378353793538035381353823538335384353853538635387353883538935390353913539235393353943539535396353973539835399354003540135402354033540435405354063540735408354093541035411354123541335414354153541635417354183541935420354213542235423354243542535426354273542835429354303543135432354333543435435354363543735438354393544035441354423544335444354453544635447354483544935450354513545235453354543545535456354573545835459354603546135462354633546435465354663546735468354693547035471354723547335474354753547635477354783547935480354813548235483354843548535486354873548835489354903549135492354933549435495354963549735498354993550035501355023550335504355053550635507355083550935510355113551235513355143551535516355173551835519355203552135522355233552435525355263552735528355293553035531355323553335534355353553635537355383553935540355413554235543355443554535546355473554835549355503555135552355533555435555355563555735558355593556035561355623556335564355653556635567355683556935570355713557235573355743557535576355773557835579355803558135582355833558435585355863558735588355893559035591355923559335594355953559635597355983559935600356013560235603356043560535606356073560835609356103561135612356133561435615356163561735618356193562035621356223562335624356253562635627356283562935630356313563235633356343563535636356373563835639356403564135642356433564435645356463564735648356493565035651356523565335654356553565635657356583565935660356613566235663356643566535666356673566835669356703567135672356733567435675356763567735678356793568035681356823568335684356853568635687356883568935690356913569235693356943569535696356973569835699357003570135702357033570435705357063570735708357093571035711357123571335714357153571635717357183571935720357213572235723357243572535726357273572835729357303573135732357333573435735357363573735738357393574035741357423574335744357453574635747357483574935750357513575235753357543575535756357573575835759357603576135762357633576435765357663576735768357693577035771357723577335774357753577635777357783577935780357813578235783357843578535786357873578835789357903579135792357933579435795357963579735798357993580035801358023580335804358053580635807358083580935810358113581235813358143581535816358173581835819358203582135822358233582435825358263582735828358293583035831358323583335834358353583635837358383583935840358413584235843358443584535846358473584835849358503585135852358533585435855358563585735858358593586035861358623586335864358653586635867358683586935870358713587235873358743587535876358773587835879358803588135882358833588435885358863588735888358893589035891358923589335894358953589635897358983589935900359013590235903359043590535906359073590835909359103591135912359133591435915359163591735918359193592035921359223592335924359253592635927359283592935930359313593235933359343593535936359373593835939359403594135942359433594435945359463594735948359493595035951359523595335954359553595635957359583595935960359613596235963359643596535966359673596835969359703597135972359733597435975359763597735978359793598035981359823598335984359853598635987359883598935990359913599235993359943599535996359973599835999360003600136002360033600436005360063600736008360093601036011360123601336014360153601636017360183601936020360213602236023360243602536026360273602836029360303603136032360333603436035360363603736038360393604036041360423604336044360453604636047360483604936050360513605236053360543605536056360573605836059360603606136062360633606436065360663606736068360693607036071360723607336074360753607636077360783607936080360813608236083360843608536086360873608836089360903609136092360933609436095360963609736098360993610036101361023610336104361053610636107361083610936110361113611236113361143611536116361173611836119361203612136122361233612436125361263612736128361293613036131361323613336134361353613636137361383613936140361413614236143361443614536146361473614836149361503615136152361533615436155361563615736158361593616036161361623616336164361653616636167361683616936170361713617236173361743617536176361773617836179361803618136182361833618436185361863618736188361893619036191361923619336194361953619636197361983619936200362013620236203362043620536206362073620836209362103621136212362133621436215362163621736218362193622036221362223622336224362253622636227362283622936230362313623236233362343623536236362373623836239362403624136242362433624436245362463624736248362493625036251362523625336254362553625636257362583625936260362613626236263362643626536266362673626836269362703627136272362733627436275362763627736278362793628036281362823628336284362853628636287362883628936290362913629236293362943629536296362973629836299363003630136302363033630436305363063630736308363093631036311363123631336314363153631636317363183631936320363213632236323363243632536326363273632836329363303633136332363333633436335363363633736338363393634036341363423634336344363453634636347363483634936350363513635236353363543635536356363573635836359363603636136362363633636436365363663636736368363693637036371363723637336374363753637636377363783637936380363813638236383363843638536386363873638836389363903639136392363933639436395363963639736398363993640036401364023640336404364053640636407364083640936410364113641236413364143641536416364173641836419364203642136422364233642436425364263642736428364293643036431364323643336434364353643636437364383643936440364413644236443364443644536446364473644836449364503645136452364533645436455364563645736458364593646036461364623646336464364653646636467364683646936470364713647236473364743647536476364773647836479364803648136482364833648436485364863648736488364893649036491364923649336494364953649636497364983649936500365013650236503365043650536506365073650836509365103651136512365133651436515365163651736518365193652036521365223652336524365253652636527365283652936530365313653236533365343653536536365373653836539365403654136542365433654436545365463654736548365493655036551365523655336554365553655636557365583655936560365613656236563365643656536566365673656836569365703657136572365733657436575365763657736578365793658036581365823658336584365853658636587365883658936590365913659236593365943659536596365973659836599366003660136602366033660436605366063660736608366093661036611366123661336614366153661636617366183661936620366213662236623366243662536626366273662836629366303663136632366333663436635366363663736638366393664036641366423664336644366453664636647366483664936650366513665236653366543665536656366573665836659366603666136662366633666436665366663666736668366693667036671366723667336674366753667636677366783667936680366813668236683366843668536686366873668836689366903669136692366933669436695366963669736698366993670036701367023670336704367053670636707367083670936710367113671236713367143671536716367173671836719367203672136722367233672436725367263672736728367293673036731367323673336734367353673636737367383673936740367413674236743367443674536746367473674836749367503675136752367533675436755367563675736758367593676036761367623676336764367653676636767367683676936770367713677236773367743677536776367773677836779367803678136782367833678436785367863678736788367893679036791367923679336794367953679636797367983679936800368013680236803368043680536806368073680836809368103681136812368133681436815368163681736818368193682036821368223682336824368253682636827368283682936830368313683236833368343683536836368373683836839368403684136842368433684436845368463684736848368493685036851368523685336854368553685636857368583685936860368613686236863368643686536866368673686836869368703687136872368733687436875368763687736878368793688036881368823688336884368853688636887368883688936890368913689236893368943689536896368973689836899369003690136902369033690436905369063690736908369093691036911369123691336914369153691636917369183691936920369213692236923369243692536926369273692836929369303693136932369333693436935369363693736938369393694036941369423694336944369453694636947369483694936950369513695236953369543695536956369573695836959369603696136962369633696436965369663696736968369693697036971369723697336974369753697636977369783697936980369813698236983369843698536986369873698836989369903699136992369933699436995369963699736998369993700037001370023700337004370053700637007370083700937010370113701237013370143701537016370173701837019370203702137022370233702437025370263702737028370293703037031370323703337034370353703637037370383703937040370413704237043370443704537046370473704837049370503705137052370533705437055370563705737058370593706037061370623706337064370653706637067370683706937070370713707237073370743707537076370773707837079370803708137082370833708437085370863708737088370893709037091370923709337094370953709637097370983709937100371013710237103371043710537106371073710837109371103711137112371133711437115371163711737118371193712037121371223712337124371253712637127371283712937130371313713237133371343713537136371373713837139371403714137142371433714437145371463714737148371493715037151371523715337154371553715637157371583715937160371613716237163371643716537166371673716837169371703717137172371733717437175371763717737178371793718037181371823718337184371853718637187371883718937190371913719237193371943719537196371973719837199372003720137202372033720437205372063720737208372093721037211372123721337214372153721637217372183721937220372213722237223372243722537226372273722837229372303723137232372333723437235372363723737238372393724037241372423724337244372453724637247372483724937250372513725237253372543725537256372573725837259372603726137262372633726437265372663726737268372693727037271372723727337274372753727637277372783727937280372813728237283372843728537286372873728837289372903729137292372933729437295372963729737298372993730037301373023730337304373053730637307373083730937310373113731237313373143731537316373173731837319373203732137322373233732437325373263732737328373293733037331373323733337334373353733637337373383733937340373413734237343373443734537346373473734837349373503735137352373533735437355373563735737358373593736037361373623736337364373653736637367373683736937370373713737237373373743737537376373773737837379373803738137382373833738437385373863738737388373893739037391373923739337394373953739637397373983739937400374013740237403374043740537406374073740837409374103741137412374133741437415374163741737418374193742037421374223742337424374253742637427374283742937430374313743237433374343743537436374373743837439374403744137442374433744437445374463744737448374493745037451374523745337454374553745637457374583745937460374613746237463374643746537466374673746837469374703747137472374733747437475374763747737478374793748037481374823748337484374853748637487374883748937490374913749237493374943749537496374973749837499375003750137502375033750437505375063750737508375093751037511375123751337514375153751637517375183751937520375213752237523375243752537526375273752837529375303753137532375333753437535375363753737538375393754037541375423754337544375453754637547375483754937550375513755237553375543755537556375573755837559375603756137562375633756437565375663756737568375693757037571375723757337574375753757637577375783757937580375813758237583375843758537586375873758837589375903759137592375933759437595375963759737598375993760037601376023760337604376053760637607376083760937610376113761237613376143761537616376173761837619376203762137622376233762437625376263762737628376293763037631376323763337634376353763637637376383763937640376413764237643376443764537646376473764837649376503765137652376533765437655376563765737658376593766037661376623766337664376653766637667376683766937670376713767237673376743767537676376773767837679376803768137682376833768437685376863768737688376893769037691376923769337694376953769637697376983769937700377013770237703377043770537706377073770837709377103771137712377133771437715377163771737718377193772037721377223772337724377253772637727377283772937730377313773237733377343773537736377373773837739377403774137742377433774437745377463774737748377493775037751377523775337754377553775637757377583775937760377613776237763377643776537766377673776837769377703777137772377733777437775377763777737778377793778037781377823778337784377853778637787377883778937790377913779237793377943779537796377973779837799378003780137802378033780437805378063780737808378093781037811378123781337814378153781637817378183781937820378213782237823378243782537826378273782837829378303783137832378333783437835378363783737838378393784037841378423784337844378453784637847378483784937850378513785237853378543785537856378573785837859378603786137862378633786437865378663786737868378693787037871378723787337874378753787637877378783787937880378813788237883378843788537886378873788837889378903789137892378933789437895378963789737898378993790037901379023790337904379053790637907379083790937910379113791237913379143791537916379173791837919379203792137922379233792437925379263792737928379293793037931379323793337934379353793637937379383793937940379413794237943379443794537946379473794837949379503795137952379533795437955379563795737958379593796037961379623796337964379653796637967379683796937970379713797237973379743797537976379773797837979379803798137982379833798437985379863798737988379893799037991379923799337994379953799637997379983799938000380013800238003380043800538006380073800838009380103801138012380133801438015380163801738018380193802038021380223802338024380253802638027380283802938030380313803238033380343803538036380373803838039380403804138042380433804438045380463804738048380493805038051380523805338054380553805638057380583805938060380613806238063380643806538066380673806838069380703807138072380733807438075380763807738078380793808038081380823808338084380853808638087380883808938090380913809238093380943809538096380973809838099381003810138102381033810438105381063810738108381093811038111381123811338114381153811638117381183811938120381213812238123381243812538126381273812838129381303813138132381333813438135381363813738138381393814038141381423814338144381453814638147381483814938150381513815238153381543815538156381573815838159381603816138162381633816438165381663816738168381693817038171381723817338174381753817638177381783817938180381813818238183381843818538186381873818838189381903819138192381933819438195381963819738198381993820038201382023820338204382053820638207382083820938210382113821238213382143821538216382173821838219382203822138222382233822438225382263822738228382293823038231382323823338234382353823638237382383823938240382413824238243382443824538246382473824838249382503825138252382533825438255382563825738258382593826038261382623826338264382653826638267382683826938270382713827238273382743827538276382773827838279382803828138282382833828438285382863828738288382893829038291382923829338294382953829638297382983829938300383013830238303383043830538306383073830838309383103831138312383133831438315383163831738318383193832038321383223832338324383253832638327383283832938330383313833238333383343833538336383373833838339383403834138342383433834438345383463834738348383493835038351383523835338354383553835638357383583835938360383613836238363383643836538366383673836838369383703837138372383733837438375383763837738378383793838038381383823838338384383853838638387383883838938390383913839238393383943839538396383973839838399384003840138402384033840438405384063840738408384093841038411384123841338414384153841638417384183841938420384213842238423384243842538426384273842838429384303843138432384333843438435384363843738438384393844038441384423844338444384453844638447384483844938450384513845238453384543845538456384573845838459384603846138462384633846438465384663846738468384693847038471384723847338474384753847638477384783847938480384813848238483384843848538486384873848838489384903849138492384933849438495384963849738498384993850038501385023850338504385053850638507385083850938510385113851238513385143851538516385173851838519385203852138522385233852438525385263852738528385293853038531385323853338534385353853638537385383853938540385413854238543385443854538546385473854838549385503855138552385533855438555385563855738558385593856038561385623856338564385653856638567385683856938570385713857238573385743857538576385773857838579385803858138582385833858438585385863858738588385893859038591385923859338594385953859638597385983859938600386013860238603386043860538606386073860838609386103861138612386133861438615386163861738618386193862038621386223862338624386253862638627386283862938630386313863238633386343863538636386373863838639386403864138642386433864438645386463864738648386493865038651386523865338654386553865638657386583865938660386613866238663386643866538666386673866838669386703867138672386733867438675386763867738678386793868038681386823868338684386853868638687386883868938690386913869238693386943869538696386973869838699387003870138702387033870438705387063870738708387093871038711387123871338714387153871638717387183871938720387213872238723387243872538726387273872838729387303873138732387333873438735387363873738738387393874038741387423874338744387453874638747387483874938750387513875238753387543875538756387573875838759387603876138762387633876438765387663876738768387693877038771387723877338774387753877638777387783877938780387813878238783387843878538786387873878838789387903879138792387933879438795387963879738798387993880038801388023880338804388053880638807388083880938810388113881238813388143881538816388173881838819388203882138822388233882438825388263882738828388293883038831388323883338834388353883638837388383883938840388413884238843388443884538846388473884838849388503885138852388533885438855388563885738858388593886038861388623886338864388653886638867388683886938870388713887238873388743887538876388773887838879388803888138882388833888438885388863888738888388893889038891388923889338894388953889638897388983889938900389013890238903389043890538906389073890838909389103891138912389133891438915389163891738918389193892038921389223892338924389253892638927389283892938930389313893238933389343893538936389373893838939389403894138942389433894438945389463894738948389493895038951389523895338954389553895638957389583895938960389613896238963389643896538966389673896838969389703897138972389733897438975389763897738978389793898038981389823898338984389853898638987389883898938990389913899238993389943899538996389973899838999390003900139002390033900439005390063900739008390093901039011390123901339014390153901639017390183901939020390213902239023390243902539026390273902839029390303903139032390333903439035390363903739038390393904039041390423904339044390453904639047390483904939050390513905239053390543905539056390573905839059390603906139062390633906439065390663906739068390693907039071390723907339074390753907639077390783907939080390813908239083390843908539086390873908839089390903909139092390933909439095390963909739098390993910039101391023910339104391053910639107391083910939110391113911239113391143911539116391173911839119391203912139122391233912439125391263912739128391293913039131391323913339134391353913639137391383913939140391413914239143391443914539146391473914839149391503915139152391533915439155391563915739158391593916039161391623916339164391653916639167391683916939170391713917239173391743917539176391773917839179391803918139182391833918439185391863918739188391893919039191391923919339194391953919639197391983919939200392013920239203392043920539206392073920839209392103921139212392133921439215392163921739218392193922039221392223922339224392253922639227392283922939230392313923239233392343923539236392373923839239392403924139242392433924439245392463924739248392493925039251392523925339254392553925639257392583925939260392613926239263392643926539266392673926839269392703927139272392733927439275392763927739278392793928039281392823928339284392853928639287392883928939290392913929239293392943929539296392973929839299393003930139302393033930439305393063930739308393093931039311393123931339314393153931639317393183931939320393213932239323393243932539326393273932839329393303933139332393333933439335393363933739338393393934039341393423934339344393453934639347393483934939350393513935239353393543935539356393573935839359393603936139362393633936439365393663936739368393693937039371393723937339374393753937639377393783937939380393813938239383393843938539386393873938839389393903939139392393933939439395393963939739398393993940039401394023940339404394053940639407394083940939410394113941239413394143941539416394173941839419394203942139422394233942439425394263942739428394293943039431394323943339434394353943639437394383943939440394413944239443394443944539446394473944839449394503945139452394533945439455394563945739458394593946039461394623946339464394653946639467394683946939470394713947239473394743947539476394773947839479394803948139482394833948439485394863948739488394893949039491394923949339494394953949639497394983949939500395013950239503395043950539506395073950839509395103951139512395133951439515395163951739518395193952039521395223952339524395253952639527395283952939530395313953239533395343953539536395373953839539395403954139542395433954439545395463954739548395493955039551395523955339554395553955639557395583955939560395613956239563395643956539566395673956839569395703957139572395733957439575395763957739578395793958039581395823958339584395853958639587395883958939590395913959239593395943959539596395973959839599396003960139602396033960439605396063960739608396093961039611396123961339614396153961639617396183961939620396213962239623396243962539626396273962839629396303963139632396333963439635396363963739638396393964039641396423964339644396453964639647396483964939650396513965239653396543965539656396573965839659396603966139662396633966439665396663966739668396693967039671396723967339674396753967639677396783967939680396813968239683396843968539686396873968839689396903969139692396933969439695396963969739698396993970039701397023970339704397053970639707397083970939710397113971239713397143971539716397173971839719397203972139722397233972439725397263972739728397293973039731397323973339734397353973639737397383973939740397413974239743397443974539746397473974839749397503975139752397533975439755397563975739758397593976039761397623976339764397653976639767397683976939770397713977239773397743977539776397773977839779397803978139782397833978439785397863978739788397893979039791397923979339794397953979639797397983979939800398013980239803398043980539806398073980839809398103981139812398133981439815398163981739818398193982039821398223982339824398253982639827398283982939830398313983239833398343983539836398373983839839398403984139842398433984439845398463984739848398493985039851398523985339854398553985639857398583985939860398613986239863398643986539866398673986839869398703987139872398733987439875398763987739878398793988039881398823988339884398853988639887398883988939890398913989239893398943989539896398973989839899399003990139902399033990439905399063990739908399093991039911399123991339914399153991639917399183991939920399213992239923399243992539926399273992839929399303993139932399333993439935399363993739938399393994039941399423994339944399453994639947399483994939950399513995239953399543995539956399573995839959399603996139962399633996439965399663996739968399693997039971399723997339974399753997639977399783997939980399813998239983399843998539986399873998839989399903999139992399933999439995399963999739998399994000040001400024000340004400054000640007400084000940010400114001240013400144001540016400174001840019400204002140022400234002440025400264002740028400294003040031400324003340034400354003640037400384003940040400414004240043400444004540046400474004840049400504005140052400534005440055400564005740058400594006040061400624006340064400654006640067400684006940070400714007240073400744007540076400774007840079400804008140082400834008440085400864008740088400894009040091400924009340094400954009640097400984009940100401014010240103401044010540106401074010840109401104011140112401134011440115401164011740118401194012040121401224012340124401254012640127401284012940130401314013240133401344013540136401374013840139401404014140142401434014440145401464014740148401494015040151401524015340154401554015640157401584015940160401614016240163401644016540166401674016840169401704017140172401734017440175401764017740178401794018040181401824018340184401854018640187401884018940190401914019240193401944019540196401974019840199402004020140202402034020440205402064020740208402094021040211402124021340214402154021640217402184021940220402214022240223402244022540226402274022840229402304023140232402334023440235402364023740238402394024040241402424024340244402454024640247402484024940250402514025240253402544025540256402574025840259402604026140262402634026440265402664026740268402694027040271402724027340274402754027640277402784027940280402814028240283402844028540286402874028840289402904029140292402934029440295402964029740298402994030040301403024030340304403054030640307403084030940310403114031240313403144031540316403174031840319403204032140322403234032440325403264032740328403294033040331403324033340334403354033640337403384033940340403414034240343403444034540346403474034840349403504035140352403534035440355403564035740358403594036040361403624036340364403654036640367403684036940370403714037240373403744037540376403774037840379403804038140382403834038440385403864038740388403894039040391403924039340394403954039640397403984039940400404014040240403404044040540406404074040840409404104041140412404134041440415404164041740418404194042040421404224042340424404254042640427404284042940430404314043240433404344043540436404374043840439404404044140442404434044440445404464044740448404494045040451404524045340454404554045640457404584045940460404614046240463404644046540466404674046840469404704047140472404734047440475404764047740478404794048040481404824048340484404854048640487404884048940490404914049240493404944049540496404974049840499405004050140502405034050440505405064050740508405094051040511405124051340514405154051640517405184051940520405214052240523405244052540526405274052840529405304053140532405334053440535405364053740538405394054040541405424054340544405454054640547405484054940550405514055240553405544055540556405574055840559405604056140562405634056440565405664056740568405694057040571405724057340574405754057640577405784057940580405814058240583405844058540586405874058840589405904059140592405934059440595405964059740598405994060040601406024060340604406054060640607406084060940610406114061240613406144061540616406174061840619406204062140622406234062440625406264062740628406294063040631406324063340634406354063640637406384063940640406414064240643406444064540646406474064840649406504065140652406534065440655406564065740658406594066040661406624066340664406654066640667406684066940670406714067240673406744067540676406774067840679406804068140682406834068440685406864068740688406894069040691406924069340694406954069640697406984069940700407014070240703407044070540706407074070840709407104071140712407134071440715407164071740718407194072040721407224072340724407254072640727407284072940730407314073240733407344073540736407374073840739407404074140742407434074440745407464074740748407494075040751407524075340754407554075640757407584075940760407614076240763407644076540766407674076840769407704077140772407734077440775407764077740778407794078040781407824078340784407854078640787407884078940790407914079240793407944079540796407974079840799408004080140802408034080440805408064080740808408094081040811408124081340814408154081640817408184081940820408214082240823408244082540826408274082840829408304083140832408334083440835408364083740838408394084040841408424084340844408454084640847408484084940850408514085240853408544085540856408574085840859408604086140862408634086440865408664086740868408694087040871408724087340874408754087640877408784087940880408814088240883408844088540886408874088840889408904089140892408934089440895408964089740898408994090040901409024090340904409054090640907409084090940910409114091240913409144091540916409174091840919409204092140922409234092440925409264092740928409294093040931409324093340934409354093640937409384093940940409414094240943409444094540946409474094840949409504095140952409534095440955409564095740958409594096040961409624096340964409654096640967409684096940970409714097240973409744097540976409774097840979409804098140982409834098440985409864098740988409894099040991409924099340994409954099640997409984099941000410014100241003410044100541006410074100841009410104101141012410134101441015410164101741018410194102041021410224102341024410254102641027410284102941030410314103241033410344103541036410374103841039410404104141042410434104441045410464104741048410494105041051410524105341054410554105641057410584105941060410614106241063410644106541066410674106841069410704107141072410734107441075410764107741078410794108041081410824108341084410854108641087410884108941090410914109241093410944109541096410974109841099411004110141102411034110441105411064110741108411094111041111411124111341114411154111641117411184111941120411214112241123411244112541126411274112841129411304113141132411334113441135411364113741138411394114041141411424114341144411454114641147411484114941150411514115241153411544115541156411574115841159411604116141162411634116441165411664116741168411694117041171411724117341174411754117641177411784117941180411814118241183411844118541186411874118841189411904119141192411934119441195411964119741198411994120041201412024120341204412054120641207412084120941210412114121241213412144121541216412174121841219412204122141222412234122441225412264122741228412294123041231412324123341234412354123641237412384123941240412414124241243412444124541246412474124841249412504125141252412534125441255412564125741258412594126041261412624126341264412654126641267412684126941270412714127241273412744127541276412774127841279412804128141282412834128441285412864128741288412894129041291412924129341294412954129641297412984129941300413014130241303413044130541306413074130841309413104131141312413134131441315413164131741318413194132041321413224132341324413254132641327413284132941330413314133241333413344133541336413374133841339413404134141342413434134441345413464134741348413494135041351413524135341354413554135641357413584135941360413614136241363413644136541366413674136841369413704137141372413734137441375413764137741378413794138041381413824138341384413854138641387413884138941390413914139241393413944139541396413974139841399414004140141402414034140441405414064140741408414094141041411414124141341414414154141641417414184141941420414214142241423414244142541426414274142841429414304143141432414334143441435414364143741438414394144041441414424144341444414454144641447414484144941450414514145241453414544145541456414574145841459414604146141462414634146441465414664146741468414694147041471414724147341474414754147641477414784147941480414814148241483414844148541486414874148841489414904149141492414934149441495414964149741498414994150041501415024150341504415054150641507415084150941510415114151241513415144151541516415174151841519415204152141522415234152441525415264152741528415294153041531415324153341534415354153641537415384153941540415414154241543415444154541546415474154841549415504155141552415534155441555415564155741558415594156041561415624156341564415654156641567415684156941570415714157241573415744157541576415774157841579415804158141582415834158441585415864158741588415894159041591415924159341594415954159641597415984159941600416014160241603416044160541606416074160841609416104161141612416134161441615416164161741618416194162041621416224162341624416254162641627416284162941630416314163241633416344163541636416374163841639416404164141642416434164441645416464164741648416494165041651416524165341654416554165641657416584165941660416614166241663416644166541666416674166841669416704167141672416734167441675416764167741678416794168041681416824168341684416854168641687416884168941690416914169241693416944169541696416974169841699417004170141702417034170441705417064170741708417094171041711417124171341714417154171641717417184171941720417214172241723417244172541726417274172841729417304173141732417334173441735417364173741738417394174041741417424174341744417454174641747417484174941750417514175241753417544175541756417574175841759417604176141762417634176441765417664176741768417694177041771417724177341774417754177641777417784177941780417814178241783417844178541786417874178841789417904179141792417934179441795417964179741798417994180041801418024180341804418054180641807418084180941810418114181241813418144181541816418174181841819418204182141822418234182441825418264182741828418294183041831418324183341834418354183641837418384183941840418414184241843418444184541846418474184841849418504185141852418534185441855418564185741858418594186041861418624186341864418654186641867418684186941870418714187241873418744187541876418774187841879418804188141882418834188441885418864188741888418894189041891418924189341894418954189641897418984189941900419014190241903419044190541906419074190841909419104191141912419134191441915419164191741918419194192041921419224192341924419254192641927419284192941930419314193241933419344193541936419374193841939419404194141942419434194441945419464194741948419494195041951419524195341954419554195641957419584195941960419614196241963419644196541966419674196841969419704197141972419734197441975419764197741978419794198041981419824198341984419854198641987419884198941990419914199241993419944199541996419974199841999420004200142002420034200442005420064200742008420094201042011420124201342014420154201642017420184201942020420214202242023420244202542026420274202842029420304203142032420334203442035420364203742038420394204042041420424204342044420454204642047420484204942050420514205242053420544205542056420574205842059420604206142062420634206442065420664206742068420694207042071420724207342074420754207642077420784207942080420814208242083420844208542086420874208842089420904209142092420934209442095420964209742098420994210042101421024210342104421054210642107421084210942110421114211242113421144211542116421174211842119421204212142122421234212442125421264212742128421294213042131421324213342134421354213642137421384213942140421414214242143421444214542146421474214842149421504215142152421534215442155421564215742158421594216042161421624216342164421654216642167421684216942170421714217242173421744217542176421774217842179421804218142182421834218442185421864218742188421894219042191421924219342194421954219642197421984219942200422014220242203422044220542206422074220842209422104221142212422134221442215422164221742218422194222042221422224222342224422254222642227422284222942230422314223242233422344223542236422374223842239422404224142242422434224442245422464224742248422494225042251422524225342254422554225642257422584225942260422614226242263422644226542266422674226842269422704227142272422734227442275422764227742278422794228042281422824228342284422854228642287422884228942290422914229242293422944229542296422974229842299423004230142302423034230442305423064230742308423094231042311423124231342314423154231642317423184231942320423214232242323423244232542326423274232842329423304233142332423334233442335423364233742338423394234042341423424234342344423454234642347423484234942350423514235242353423544235542356423574235842359423604236142362423634236442365423664236742368423694237042371423724237342374423754237642377423784237942380423814238242383423844238542386423874238842389423904239142392423934239442395423964239742398423994240042401424024240342404424054240642407424084240942410424114241242413424144241542416424174241842419424204242142422424234242442425424264242742428424294243042431424324243342434424354243642437424384243942440424414244242443424444244542446424474244842449424504245142452424534245442455424564245742458424594246042461424624246342464424654246642467424684246942470424714247242473424744247542476424774247842479424804248142482424834248442485424864248742488424894249042491424924249342494424954249642497424984249942500425014250242503425044250542506425074250842509425104251142512425134251442515425164251742518425194252042521425224252342524425254252642527425284252942530425314253242533425344253542536425374253842539425404254142542425434254442545425464254742548425494255042551425524255342554425554255642557425584255942560425614256242563425644256542566425674256842569425704257142572425734257442575425764257742578425794258042581425824258342584425854258642587425884258942590425914259242593425944259542596425974259842599426004260142602426034260442605426064260742608426094261042611426124261342614426154261642617426184261942620426214262242623426244262542626426274262842629426304263142632426334263442635426364263742638426394264042641426424264342644426454264642647426484264942650426514265242653426544265542656426574265842659426604266142662426634266442665426664266742668426694267042671426724267342674426754267642677426784267942680426814268242683426844268542686426874268842689426904269142692426934269442695426964269742698426994270042701427024270342704427054270642707427084270942710427114271242713427144271542716427174271842719427204272142722427234272442725427264272742728427294273042731427324273342734427354273642737427384273942740427414274242743427444274542746427474274842749427504275142752427534275442755427564275742758427594276042761427624276342764427654276642767427684276942770427714277242773427744277542776427774277842779427804278142782427834278442785427864278742788427894279042791427924279342794427954279642797427984279942800428014280242803428044280542806428074280842809428104281142812428134281442815428164281742818428194282042821428224282342824428254282642827428284282942830428314283242833428344283542836428374283842839428404284142842428434284442845428464284742848428494285042851428524285342854428554285642857428584285942860428614286242863428644286542866428674286842869428704287142872428734287442875428764287742878428794288042881428824288342884428854288642887428884288942890428914289242893428944289542896428974289842899429004290142902429034290442905429064290742908429094291042911429124291342914429154291642917429184291942920429214292242923429244292542926429274292842929429304293142932429334293442935429364293742938429394294042941429424294342944429454294642947429484294942950429514295242953429544295542956429574295842959429604296142962429634296442965429664296742968429694297042971429724297342974429754297642977429784297942980429814298242983429844298542986429874298842989429904299142992429934299442995429964299742998429994300043001430024300343004430054300643007430084300943010430114301243013430144301543016430174301843019430204302143022430234302443025430264302743028430294303043031430324303343034430354303643037430384303943040430414304243043430444304543046430474304843049430504305143052430534305443055430564305743058430594306043061430624306343064430654306643067430684306943070430714307243073430744307543076430774307843079430804308143082430834308443085430864308743088430894309043091430924309343094430954309643097430984309943100431014310243103431044310543106431074310843109431104311143112431134311443115431164311743118431194312043121431224312343124431254312643127431284312943130431314313243133431344313543136431374313843139431404314143142431434314443145431464314743148431494315043151431524315343154431554315643157431584315943160431614316243163431644316543166431674316843169431704317143172431734317443175431764317743178431794318043181431824318343184431854318643187431884318943190431914319243193431944319543196431974319843199432004320143202432034320443205432064320743208432094321043211432124321343214432154321643217432184321943220432214322243223432244322543226432274322843229432304323143232432334323443235432364323743238432394324043241432424324343244432454324643247432484324943250432514325243253432544325543256432574325843259432604326143262432634326443265432664326743268432694327043271432724327343274432754327643277432784327943280432814328243283432844328543286432874328843289432904329143292432934329443295432964329743298432994330043301433024330343304433054330643307433084330943310433114331243313433144331543316433174331843319433204332143322433234332443325433264332743328433294333043331433324333343334433354333643337433384333943340433414334243343433444334543346433474334843349433504335143352433534335443355433564335743358433594336043361433624336343364433654336643367433684336943370433714337243373433744337543376433774337843379433804338143382433834338443385433864338743388433894339043391433924339343394433954339643397433984339943400434014340243403434044340543406434074340843409434104341143412434134341443415434164341743418434194342043421434224342343424434254342643427434284342943430434314343243433434344343543436434374343843439434404344143442434434344443445434464344743448434494345043451434524345343454434554345643457434584345943460434614346243463434644346543466434674346843469434704347143472434734347443475434764347743478434794348043481434824348343484434854348643487434884348943490434914349243493434944349543496434974349843499435004350143502435034350443505435064350743508435094351043511435124351343514435154351643517435184351943520435214352243523435244352543526435274352843529435304353143532435334353443535435364353743538435394354043541435424354343544435454354643547435484354943550435514355243553435544355543556435574355843559435604356143562435634356443565435664356743568435694357043571435724357343574435754357643577435784357943580435814358243583435844358543586435874358843589435904359143592435934359443595435964359743598435994360043601436024360343604436054360643607436084360943610436114361243613436144361543616436174361843619436204362143622436234362443625436264362743628436294363043631436324363343634436354363643637436384363943640436414364243643436444364543646436474364843649436504365143652436534365443655436564365743658436594366043661436624366343664436654366643667436684366943670436714367243673436744367543676436774367843679436804368143682436834368443685436864368743688436894369043691436924369343694436954369643697436984369943700437014370243703437044370543706437074370843709437104371143712437134371443715437164371743718437194372043721437224372343724437254372643727437284372943730437314373243733437344373543736437374373843739437404374143742437434374443745437464374743748437494375043751437524375343754437554375643757437584375943760437614376243763437644376543766437674376843769437704377143772437734377443775437764377743778437794378043781437824378343784437854378643787437884378943790437914379243793437944379543796437974379843799438004380143802438034380443805438064380743808438094381043811438124381343814438154381643817438184381943820438214382243823438244382543826438274382843829438304383143832438334383443835438364383743838438394384043841438424384343844438454384643847438484384943850438514385243853438544385543856438574385843859438604386143862438634386443865438664386743868438694387043871438724387343874438754387643877438784387943880438814388243883438844388543886438874388843889438904389143892438934389443895438964389743898438994390043901439024390343904439054390643907439084390943910439114391243913439144391543916439174391843919439204392143922439234392443925439264392743928439294393043931439324393343934439354393643937439384393943940439414394243943439444394543946439474394843949439504395143952439534395443955439564395743958439594396043961439624396343964439654396643967439684396943970439714397243973439744397543976439774397843979439804398143982439834398443985439864398743988439894399043991439924399343994439954399643997439984399944000440014400244003440044400544006440074400844009440104401144012440134401444015440164401744018440194402044021440224402344024440254402644027440284402944030440314403244033440344403544036440374403844039440404404144042440434404444045440464404744048440494405044051440524405344054440554405644057440584405944060440614406244063440644406544066440674406844069440704407144072440734407444075440764407744078440794408044081440824408344084440854408644087440884408944090440914409244093440944409544096440974409844099441004410144102441034410444105441064410744108441094411044111441124411344114441154411644117441184411944120441214412244123441244412544126441274412844129441304413144132441334413444135441364413744138441394414044141441424414344144441454414644147441484414944150441514415244153441544415544156441574415844159441604416144162441634416444165441664416744168441694417044171441724417344174441754417644177441784417944180441814418244183441844418544186441874418844189441904419144192441934419444195441964419744198441994420044201442024420344204442054420644207442084420944210442114421244213442144421544216442174421844219442204422144222442234422444225442264422744228442294423044231442324423344234442354423644237442384423944240442414424244243442444424544246442474424844249442504425144252442534425444255442564425744258442594426044261442624426344264442654426644267442684426944270442714427244273442744427544276442774427844279442804428144282442834428444285442864428744288442894429044291442924429344294442954429644297442984429944300443014430244303443044430544306443074430844309443104431144312443134431444315443164431744318443194432044321443224432344324443254432644327443284432944330443314433244333443344433544336443374433844339443404434144342443434434444345443464434744348443494435044351443524435344354443554435644357443584435944360443614436244363443644436544366443674436844369443704437144372443734437444375443764437744378443794438044381443824438344384443854438644387443884438944390443914439244393443944439544396443974439844399444004440144402444034440444405444064440744408444094441044411444124441344414444154441644417444184441944420444214442244423444244442544426444274442844429444304443144432444334443444435444364443744438444394444044441444424444344444444454444644447444484444944450444514445244453444544445544456444574445844459444604446144462444634446444465444664446744468444694447044471444724447344474444754447644477444784447944480444814448244483444844448544486444874448844489444904449144492444934449444495444964449744498444994450044501445024450344504445054450644507445084450944510445114451244513445144451544516445174451844519445204452144522445234452444525445264452744528445294453044531445324453344534445354453644537445384453944540445414454244543445444454544546445474454844549445504455144552445534455444555445564455744558445594456044561445624456344564445654456644567445684456944570445714457244573445744457544576445774457844579445804458144582445834458444585445864458744588445894459044591445924459344594445954459644597445984459944600446014460244603446044460544606446074460844609446104461144612446134461444615446164461744618446194462044621446224462344624446254462644627446284462944630446314463244633446344463544636446374463844639446404464144642446434464444645446464464744648446494465044651446524465344654446554465644657446584465944660446614466244663446644466544666446674466844669446704467144672446734467444675446764467744678446794468044681446824468344684446854468644687446884468944690446914469244693446944469544696446974469844699447004470144702447034470444705447064470744708447094471044711447124471344714447154471644717447184471944720447214472244723447244472544726447274472844729447304473144732447334473444735447364473744738447394474044741447424474344744447454474644747447484474944750447514475244753447544475544756447574475844759447604476144762447634476444765447664476744768447694477044771447724477344774447754477644777447784477944780447814478244783447844478544786447874478844789447904479144792447934479444795447964479744798447994480044801448024480344804448054480644807448084480944810448114481244813448144481544816448174481844819448204482144822448234482444825448264482744828448294483044831448324483344834448354483644837448384483944840448414484244843448444484544846448474484844849448504485144852448534485444855448564485744858448594486044861448624486344864448654486644867448684486944870448714487244873448744487544876448774487844879448804488144882448834488444885448864488744888448894489044891448924489344894448954489644897448984489944900449014490244903449044490544906449074490844909449104491144912449134491444915449164491744918449194492044921449224492344924449254492644927449284492944930449314493244933449344493544936449374493844939449404494144942449434494444945449464494744948449494495044951449524495344954449554495644957449584495944960449614496244963449644496544966449674496844969449704497144972449734497444975449764497744978449794498044981449824498344984449854498644987449884498944990449914499244993449944499544996449974499844999450004500145002450034500445005450064500745008450094501045011450124501345014450154501645017450184501945020450214502245023450244502545026450274502845029450304503145032450334503445035450364503745038450394504045041450424504345044450454504645047450484504945050450514505245053450544505545056450574505845059450604506145062450634506445065450664506745068450694507045071450724507345074450754507645077450784507945080450814508245083450844508545086450874508845089450904509145092450934509445095450964509745098450994510045101451024510345104451054510645107451084510945110451114511245113451144511545116451174511845119451204512145122451234512445125451264512745128451294513045131451324513345134451354513645137451384513945140451414514245143451444514545146451474514845149451504515145152451534515445155451564515745158451594516045161451624516345164451654516645167451684516945170451714517245173451744517545176451774517845179451804518145182451834518445185451864518745188451894519045191451924519345194451954519645197451984519945200452014520245203452044520545206452074520845209452104521145212452134521445215452164521745218452194522045221452224522345224452254522645227452284522945230452314523245233452344523545236452374523845239452404524145242452434524445245452464524745248452494525045251452524525345254452554525645257452584525945260452614526245263452644526545266452674526845269452704527145272452734527445275452764527745278452794528045281452824528345284452854528645287452884528945290452914529245293452944529545296452974529845299453004530145302453034530445305453064530745308453094531045311453124531345314453154531645317453184531945320453214532245323453244532545326453274532845329453304533145332453334533445335453364533745338453394534045341453424534345344453454534645347453484534945350453514535245353453544535545356453574535845359453604536145362453634536445365453664536745368453694537045371453724537345374453754537645377453784537945380453814538245383453844538545386453874538845389453904539145392453934539445395453964539745398453994540045401454024540345404454054540645407454084540945410454114541245413454144541545416454174541845419454204542145422454234542445425454264542745428454294543045431454324543345434454354543645437454384543945440454414544245443454444544545446454474544845449454504545145452454534545445455454564545745458454594546045461454624546345464454654546645467454684546945470454714547245473454744547545476454774547845479454804548145482454834548445485454864548745488454894549045491454924549345494454954549645497454984549945500455014550245503455044550545506455074550845509455104551145512455134551445515455164551745518455194552045521455224552345524455254552645527455284552945530455314553245533455344553545536455374553845539455404554145542455434554445545455464554745548455494555045551455524555345554455554555645557455584555945560455614556245563455644556545566455674556845569455704557145572455734557445575455764557745578455794558045581455824558345584455854558645587455884558945590455914559245593455944559545596455974559845599456004560145602456034560445605456064560745608456094561045611456124561345614456154561645617456184561945620456214562245623456244562545626456274562845629456304563145632456334563445635456364563745638456394564045641456424564345644456454564645647456484564945650456514565245653456544565545656456574565845659456604566145662456634566445665456664566745668456694567045671456724567345674456754567645677456784567945680456814568245683456844568545686456874568845689456904569145692456934569445695456964569745698456994570045701457024570345704457054570645707457084570945710457114571245713457144571545716457174571845719457204572145722457234572445725457264572745728457294573045731457324573345734457354573645737457384573945740457414574245743457444574545746457474574845749457504575145752457534575445755457564575745758457594576045761457624576345764457654576645767457684576945770457714577245773457744577545776457774577845779457804578145782457834578445785457864578745788457894579045791457924579345794457954579645797457984579945800458014580245803458044580545806458074580845809458104581145812458134581445815458164581745818458194582045821458224582345824458254582645827458284582945830458314583245833458344583545836458374583845839458404584145842458434584445845458464584745848458494585045851458524585345854458554585645857458584585945860458614586245863458644586545866458674586845869458704587145872458734587445875458764587745878458794588045881458824588345884458854588645887458884588945890458914589245893458944589545896458974589845899459004590145902459034590445905459064590745908459094591045911459124591345914459154591645917459184591945920459214592245923459244592545926459274592845929459304593145932459334593445935459364593745938459394594045941459424594345944459454594645947459484594945950459514595245953459544595545956459574595845959459604596145962459634596445965459664596745968459694597045971459724597345974459754597645977459784597945980459814598245983459844598545986459874598845989459904599145992459934599445995459964599745998459994600046001460024600346004460054600646007460084600946010460114601246013460144601546016460174601846019460204602146022460234602446025460264602746028460294603046031460324603346034460354603646037460384603946040460414604246043460444604546046460474604846049460504605146052460534605446055460564605746058460594606046061460624606346064460654606646067460684606946070460714607246073460744607546076460774607846079460804608146082460834608446085460864608746088460894609046091460924609346094460954609646097460984609946100461014610246103461044610546106461074610846109461104611146112461134611446115461164611746118461194612046121461224612346124461254612646127461284612946130461314613246133461344613546136461374613846139461404614146142461434614446145461464614746148461494615046151461524615346154461554615646157461584615946160461614616246163461644616546166461674616846169461704617146172461734617446175461764617746178461794618046181461824618346184461854618646187461884618946190461914619246193461944619546196461974619846199462004620146202462034620446205462064620746208462094621046211462124621346214462154621646217462184621946220462214622246223462244622546226462274622846229462304623146232462334623446235462364623746238462394624046241462424624346244462454624646247462484624946250462514625246253462544625546256462574625846259462604626146262462634626446265462664626746268462694627046271462724627346274462754627646277462784627946280462814628246283462844628546286462874628846289462904629146292462934629446295462964629746298462994630046301463024630346304463054630646307463084630946310463114631246313463144631546316463174631846319463204632146322463234632446325463264632746328463294633046331463324633346334463354633646337463384633946340463414634246343463444634546346463474634846349463504635146352463534635446355463564635746358463594636046361463624636346364463654636646367463684636946370463714637246373463744637546376463774637846379463804638146382463834638446385463864638746388463894639046391463924639346394463954639646397463984639946400464014640246403464044640546406464074640846409464104641146412464134641446415464164641746418464194642046421464224642346424464254642646427464284642946430464314643246433464344643546436464374643846439464404644146442464434644446445464464644746448464494645046451464524645346454464554645646457464584645946460464614646246463464644646546466464674646846469464704647146472464734647446475464764647746478464794648046481464824648346484464854648646487464884648946490464914649246493464944649546496464974649846499465004650146502465034650446505465064650746508465094651046511465124651346514465154651646517465184651946520465214652246523465244652546526465274652846529465304653146532465334653446535465364653746538465394654046541465424654346544465454654646547465484654946550465514655246553465544655546556465574655846559465604656146562465634656446565465664656746568465694657046571465724657346574465754657646577465784657946580465814658246583465844658546586465874658846589465904659146592465934659446595465964659746598465994660046601466024660346604466054660646607466084660946610466114661246613466144661546616466174661846619466204662146622466234662446625466264662746628466294663046631466324663346634466354663646637466384663946640466414664246643466444664546646466474664846649466504665146652466534665446655466564665746658466594666046661466624666346664466654666646667466684666946670466714667246673466744667546676466774667846679466804668146682466834668446685466864668746688466894669046691466924669346694466954669646697466984669946700467014670246703467044670546706467074670846709467104671146712467134671446715467164671746718467194672046721467224672346724467254672646727467284672946730467314673246733467344673546736467374673846739467404674146742467434674446745467464674746748467494675046751467524675346754467554675646757467584675946760467614676246763467644676546766467674676846769467704677146772467734677446775467764677746778467794678046781467824678346784467854678646787467884678946790467914679246793467944679546796467974679846799468004680146802468034680446805468064680746808468094681046811468124681346814468154681646817468184681946820468214682246823468244682546826468274682846829468304683146832468334683446835468364683746838468394684046841468424684346844468454684646847468484684946850468514685246853468544685546856468574685846859468604686146862468634686446865468664686746868468694687046871468724687346874468754687646877468784687946880468814688246883468844688546886468874688846889468904689146892468934689446895468964689746898468994690046901469024690346904469054690646907469084690946910469114691246913469144691546916469174691846919469204692146922469234692446925469264692746928469294693046931469324693346934469354693646937469384693946940469414694246943469444694546946469474694846949469504695146952469534695446955469564695746958469594696046961469624696346964469654696646967469684696946970469714697246973469744697546976469774697846979469804698146982469834698446985469864698746988469894699046991469924699346994469954699646997469984699947000470014700247003470044700547006470074700847009470104701147012470134701447015470164701747018470194702047021470224702347024470254702647027470284702947030470314703247033470344703547036470374703847039470404704147042470434704447045470464704747048470494705047051470524705347054470554705647057470584705947060470614706247063470644706547066470674706847069470704707147072470734707447075470764707747078470794708047081470824708347084470854708647087470884708947090470914709247093470944709547096470974709847099471004710147102471034710447105471064710747108471094711047111471124711347114471154711647117471184711947120471214712247123471244712547126471274712847129471304713147132471334713447135471364713747138471394714047141471424714347144471454714647147471484714947150471514715247153471544715547156471574715847159471604716147162471634716447165471664716747168471694717047171471724717347174471754717647177471784717947180471814718247183471844718547186471874718847189471904719147192471934719447195471964719747198471994720047201472024720347204472054720647207472084720947210472114721247213472144721547216472174721847219472204722147222472234722447225472264722747228472294723047231472324723347234472354723647237472384723947240472414724247243472444724547246472474724847249472504725147252472534725447255472564725747258472594726047261472624726347264472654726647267472684726947270472714727247273472744727547276472774727847279472804728147282472834728447285472864728747288472894729047291472924729347294472954729647297472984729947300473014730247303473044730547306473074730847309473104731147312473134731447315473164731747318473194732047321473224732347324473254732647327473284732947330473314733247333473344733547336473374733847339473404734147342473434734447345473464734747348473494735047351473524735347354473554735647357473584735947360473614736247363473644736547366473674736847369473704737147372473734737447375473764737747378473794738047381473824738347384473854738647387473884738947390473914739247393473944739547396473974739847399474004740147402474034740447405474064740747408474094741047411474124741347414474154741647417474184741947420474214742247423474244742547426474274742847429474304743147432474334743447435474364743747438474394744047441474424744347444474454744647447474484744947450474514745247453474544745547456474574745847459474604746147462474634746447465474664746747468474694747047471474724747347474474754747647477474784747947480474814748247483474844748547486474874748847489474904749147492474934749447495474964749747498474994750047501475024750347504475054750647507475084750947510475114751247513475144751547516475174751847519475204752147522475234752447525475264752747528475294753047531475324753347534475354753647537475384753947540475414754247543475444754547546475474754847549475504755147552475534755447555475564755747558475594756047561475624756347564475654756647567475684756947570475714757247573475744757547576475774757847579475804758147582475834758447585475864758747588475894759047591475924759347594475954759647597475984759947600476014760247603476044760547606476074760847609476104761147612476134761447615476164761747618476194762047621476224762347624476254762647627476284762947630476314763247633476344763547636476374763847639476404764147642476434764447645476464764747648476494765047651476524765347654476554765647657476584765947660476614766247663476644766547666476674766847669476704767147672476734767447675476764767747678476794768047681476824768347684476854768647687476884768947690476914769247693476944769547696476974769847699477004770147702477034770447705477064770747708477094771047711477124771347714477154771647717477184771947720477214772247723477244772547726477274772847729477304773147732477334773447735477364773747738477394774047741477424774347744477454774647747477484774947750477514775247753477544775547756477574775847759477604776147762477634776447765477664776747768477694777047771477724777347774477754777647777477784777947780477814778247783477844778547786477874778847789477904779147792477934779447795477964779747798477994780047801478024780347804478054780647807478084780947810478114781247813478144781547816478174781847819478204782147822478234782447825478264782747828478294783047831478324783347834478354783647837478384783947840478414784247843478444784547846478474784847849478504785147852478534785447855478564785747858478594786047861478624786347864478654786647867478684786947870478714787247873478744787547876478774787847879478804788147882478834788447885478864788747888478894789047891478924789347894478954789647897478984789947900479014790247903479044790547906479074790847909479104791147912479134791447915479164791747918479194792047921479224792347924479254792647927479284792947930479314793247933479344793547936479374793847939479404794147942479434794447945479464794747948479494795047951479524795347954479554795647957479584795947960479614796247963479644796547966479674796847969479704797147972479734797447975479764797747978479794798047981479824798347984479854798647987479884798947990479914799247993479944799547996479974799847999480004800148002480034800448005480064800748008480094801048011480124801348014480154801648017480184801948020480214802248023480244802548026480274802848029480304803148032480334803448035480364803748038480394804048041480424804348044480454804648047480484804948050480514805248053480544805548056480574805848059480604806148062480634806448065480664806748068480694807048071480724807348074480754807648077480784807948080480814808248083480844808548086480874808848089480904809148092480934809448095480964809748098480994810048101481024810348104481054810648107481084810948110481114811248113481144811548116481174811848119481204812148122481234812448125481264812748128481294813048131481324813348134481354813648137481384813948140481414814248143481444814548146481474814848149481504815148152481534815448155481564815748158481594816048161481624816348164481654816648167481684816948170481714817248173481744817548176481774817848179481804818148182481834818448185481864818748188481894819048191481924819348194481954819648197481984819948200482014820248203482044820548206482074820848209482104821148212482134821448215482164821748218482194822048221482224822348224482254822648227482284822948230482314823248233482344823548236482374823848239482404824148242482434824448245482464824748248482494825048251482524825348254482554825648257482584825948260482614826248263482644826548266482674826848269482704827148272482734827448275482764827748278482794828048281482824828348284482854828648287482884828948290482914829248293482944829548296482974829848299483004830148302483034830448305483064830748308483094831048311483124831348314483154831648317483184831948320483214832248323483244832548326483274832848329483304833148332483334833448335483364833748338483394834048341483424834348344483454834648347483484834948350483514835248353483544835548356483574835848359483604836148362483634836448365483664836748368483694837048371483724837348374483754837648377483784837948380483814838248383483844838548386483874838848389483904839148392483934839448395483964839748398483994840048401484024840348404484054840648407484084840948410484114841248413484144841548416484174841848419484204842148422484234842448425484264842748428484294843048431484324843348434484354843648437484384843948440484414844248443484444844548446484474844848449484504845148452484534845448455484564845748458484594846048461484624846348464484654846648467484684846948470484714847248473484744847548476484774847848479484804848148482484834848448485484864848748488484894849048491484924849348494484954849648497484984849948500485014850248503485044850548506485074850848509485104851148512485134851448515485164851748518485194852048521485224852348524485254852648527485284852948530485314853248533485344853548536485374853848539485404854148542485434854448545485464854748548485494855048551485524855348554485554855648557485584855948560485614856248563485644856548566485674856848569485704857148572485734857448575485764857748578485794858048581485824858348584485854858648587485884858948590485914859248593485944859548596485974859848599486004860148602486034860448605486064860748608486094861048611486124861348614486154861648617486184861948620486214862248623486244862548626486274862848629486304863148632486334863448635486364863748638486394864048641486424864348644486454864648647486484864948650486514865248653486544865548656486574865848659486604866148662486634866448665486664866748668486694867048671486724867348674486754867648677486784867948680486814868248683486844868548686486874868848689486904869148692486934869448695486964869748698486994870048701487024870348704487054870648707487084870948710487114871248713487144871548716487174871848719487204872148722487234872448725487264872748728487294873048731487324873348734487354873648737487384873948740487414874248743487444874548746487474874848749487504875148752487534875448755487564875748758487594876048761487624876348764487654876648767487684876948770487714877248773487744877548776487774877848779487804878148782487834878448785487864878748788487894879048791487924879348794487954879648797487984879948800488014880248803488044880548806488074880848809488104881148812488134881448815488164881748818488194882048821488224882348824488254882648827488284882948830488314883248833488344883548836488374883848839488404884148842488434884448845488464884748848488494885048851488524885348854488554885648857488584885948860488614886248863488644886548866488674886848869488704887148872488734887448875488764887748878488794888048881488824888348884488854888648887488884888948890488914889248893488944889548896488974889848899489004890148902489034890448905489064890748908489094891048911489124891348914489154891648917489184891948920489214892248923489244892548926489274892848929489304893148932489334893448935489364893748938489394894048941489424894348944489454894648947489484894948950489514895248953489544895548956489574895848959489604896148962489634896448965489664896748968489694897048971489724897348974489754897648977489784897948980489814898248983489844898548986489874898848989489904899148992489934899448995489964899748998489994900049001490024900349004490054900649007490084900949010490114901249013490144901549016490174901849019490204902149022490234902449025490264902749028490294903049031490324903349034490354903649037490384903949040490414904249043490444904549046490474904849049490504905149052490534905449055490564905749058490594906049061490624906349064490654906649067490684906949070490714907249073490744907549076490774907849079490804908149082490834908449085490864908749088490894909049091490924909349094490954909649097490984909949100491014910249103491044910549106491074910849109491104911149112491134911449115491164911749118491194912049121491224912349124491254912649127491284912949130491314913249133491344913549136491374913849139491404914149142491434914449145491464914749148491494915049151491524915349154491554915649157491584915949160491614916249163491644916549166491674916849169491704917149172491734917449175491764917749178491794918049181491824918349184491854918649187491884918949190491914919249193491944919549196491974919849199492004920149202492034920449205492064920749208492094921049211492124921349214492154921649217492184921949220492214922249223492244922549226492274922849229492304923149232492334923449235492364923749238492394924049241492424924349244492454924649247492484924949250492514925249253492544925549256492574925849259492604926149262492634926449265492664926749268492694927049271492724927349274492754927649277492784927949280492814928249283492844928549286492874928849289492904929149292492934929449295492964929749298492994930049301493024930349304493054930649307493084930949310493114931249313493144931549316493174931849319493204932149322493234932449325493264932749328493294933049331493324933349334493354933649337493384933949340493414934249343493444934549346493474934849349493504935149352493534935449355493564935749358493594936049361493624936349364493654936649367493684936949370493714937249373493744937549376493774937849379493804938149382493834938449385493864938749388493894939049391493924939349394493954939649397493984939949400494014940249403494044940549406494074940849409494104941149412494134941449415494164941749418494194942049421494224942349424494254942649427494284942949430494314943249433494344943549436494374943849439494404944149442494434944449445494464944749448494494945049451494524945349454494554945649457494584945949460494614946249463494644946549466494674946849469494704947149472494734947449475494764947749478494794948049481494824948349484494854948649487494884948949490494914949249493494944949549496494974949849499495004950149502495034950449505495064950749508495094951049511495124951349514495154951649517495184951949520495214952249523495244952549526495274952849529495304953149532495334953449535495364953749538495394954049541495424954349544495454954649547495484954949550495514955249553495544955549556495574955849559495604956149562495634956449565495664956749568495694957049571495724957349574495754957649577495784957949580495814958249583495844958549586495874958849589495904959149592495934959449595495964959749598495994960049601496024960349604496054960649607496084960949610496114961249613496144961549616496174961849619496204962149622496234962449625496264962749628496294963049631496324963349634496354963649637496384963949640496414964249643496444964549646496474964849649496504965149652496534965449655496564965749658496594966049661496624966349664496654966649667496684966949670496714967249673496744967549676496774967849679496804968149682496834968449685496864968749688496894969049691496924969349694496954969649697496984969949700497014970249703497044970549706497074970849709497104971149712497134971449715497164971749718497194972049721497224972349724497254972649727497284972949730497314973249733497344973549736497374973849739497404974149742497434974449745497464974749748497494975049751497524975349754497554975649757497584975949760497614976249763497644976549766497674976849769497704977149772497734977449775497764977749778497794978049781497824978349784497854978649787497884978949790497914979249793497944979549796497974979849799498004980149802498034980449805498064980749808498094981049811498124981349814498154981649817498184981949820498214982249823498244982549826498274982849829498304983149832498334983449835498364983749838498394984049841498424984349844498454984649847498484984949850498514985249853498544985549856498574985849859498604986149862498634986449865498664986749868498694987049871498724987349874498754987649877498784987949880498814988249883498844988549886498874988849889498904989149892498934989449895498964989749898498994990049901499024990349904499054990649907499084990949910499114991249913499144991549916499174991849919499204992149922499234992449925499264992749928499294993049931499324993349934499354993649937499384993949940499414994249943499444994549946499474994849949499504995149952499534995449955499564995749958499594996049961499624996349964499654996649967499684996949970499714997249973499744997549976499774997849979499804998149982499834998449985499864998749988499894999049991499924999349994499954999649997499984999950000500015000250003500045000550006500075000850009500105001150012500135001450015500165001750018500195002050021500225002350024500255002650027500285002950030500315003250033500345003550036500375003850039500405004150042500435004450045500465004750048500495005050051500525005350054500555005650057500585005950060500615006250063500645006550066500675006850069500705007150072500735007450075500765007750078500795008050081500825008350084500855008650087500885008950090500915009250093500945009550096500975009850099501005010150102501035010450105501065010750108501095011050111501125011350114501155011650117501185011950120501215012250123501245012550126501275012850129501305013150132501335013450135501365013750138501395014050141501425014350144501455014650147501485014950150501515015250153501545015550156501575015850159501605016150162501635016450165501665016750168501695017050171501725017350174501755017650177501785017950180501815018250183501845018550186501875018850189501905019150192501935019450195501965019750198501995020050201502025020350204502055020650207502085020950210502115021250213502145021550216502175021850219502205022150222502235022450225502265022750228502295023050231502325023350234502355023650237502385023950240502415024250243502445024550246502475024850249502505025150252502535025450255502565025750258502595026050261502625026350264502655026650267502685026950270502715027250273502745027550276502775027850279502805028150282502835028450285502865028750288502895029050291502925029350294502955029650297502985029950300503015030250303503045030550306503075030850309503105031150312503135031450315503165031750318503195032050321503225032350324503255032650327503285032950330503315033250333503345033550336503375033850339503405034150342503435034450345503465034750348503495035050351503525035350354503555035650357503585035950360503615036250363503645036550366503675036850369503705037150372503735037450375503765037750378503795038050381503825038350384503855038650387503885038950390503915039250393503945039550396503975039850399504005040150402504035040450405504065040750408504095041050411504125041350414504155041650417504185041950420504215042250423504245042550426504275042850429504305043150432504335043450435504365043750438504395044050441504425044350444504455044650447504485044950450504515045250453504545045550456504575045850459504605046150462504635046450465504665046750468504695047050471504725047350474504755047650477504785047950480504815048250483504845048550486504875048850489504905049150492504935049450495504965049750498504995050050501505025050350504505055050650507505085050950510505115051250513505145051550516505175051850519505205052150522505235052450525505265052750528505295053050531505325053350534505355053650537505385053950540505415054250543505445054550546505475054850549505505055150552505535055450555505565055750558505595056050561505625056350564505655056650567505685056950570505715057250573505745057550576505775057850579505805058150582505835058450585505865058750588505895059050591505925059350594505955059650597505985059950600506015060250603506045060550606506075060850609506105061150612506135061450615506165061750618506195062050621506225062350624506255062650627506285062950630506315063250633506345063550636506375063850639506405064150642506435064450645506465064750648506495065050651506525065350654506555065650657506585065950660506615066250663506645066550666506675066850669506705067150672506735067450675506765067750678506795068050681506825068350684506855068650687506885068950690506915069250693506945069550696506975069850699507005070150702507035070450705507065070750708507095071050711507125071350714507155071650717507185071950720507215072250723507245072550726507275072850729507305073150732507335073450735507365073750738507395074050741507425074350744507455074650747507485074950750507515075250753507545075550756507575075850759507605076150762507635076450765507665076750768507695077050771507725077350774507755077650777507785077950780507815078250783507845078550786507875078850789507905079150792507935079450795507965079750798507995080050801508025080350804508055080650807508085080950810508115081250813508145081550816508175081850819508205082150822508235082450825508265082750828508295083050831508325083350834508355083650837508385083950840508415084250843508445084550846508475084850849508505085150852508535085450855508565085750858508595086050861508625086350864508655086650867508685086950870508715087250873508745087550876508775087850879508805088150882508835088450885508865088750888508895089050891508925089350894508955089650897508985089950900509015090250903509045090550906509075090850909509105091150912509135091450915509165091750918509195092050921509225092350924509255092650927509285092950930509315093250933509345093550936509375093850939509405094150942509435094450945509465094750948509495095050951509525095350954509555095650957509585095950960509615096250963509645096550966509675096850969509705097150972509735097450975509765097750978509795098050981509825098350984509855098650987509885098950990509915099250993509945099550996509975099850999510005100151002510035100451005510065100751008510095101051011510125101351014510155101651017510185101951020510215102251023510245102551026510275102851029510305103151032510335103451035510365103751038510395104051041510425104351044510455104651047510485104951050510515105251053510545105551056510575105851059510605106151062510635106451065510665106751068510695107051071510725107351074510755107651077510785107951080510815108251083510845108551086510875108851089510905109151092510935109451095510965109751098510995110051101511025110351104511055110651107511085110951110511115111251113511145111551116511175111851119511205112151122511235112451125511265112751128511295113051131511325113351134511355113651137511385113951140511415114251143511445114551146511475114851149511505115151152511535115451155511565115751158511595116051161511625116351164511655116651167511685116951170511715117251173511745117551176511775117851179511805118151182511835118451185511865118751188511895119051191511925119351194511955119651197511985119951200512015120251203512045120551206512075120851209512105121151212512135121451215512165121751218512195122051221512225122351224512255122651227512285122951230512315123251233512345123551236512375123851239512405124151242512435124451245512465124751248512495125051251512525125351254512555125651257512585125951260512615126251263512645126551266512675126851269512705127151272512735127451275512765127751278512795128051281512825128351284512855128651287512885128951290512915129251293512945129551296512975129851299513005130151302513035130451305513065130751308513095131051311513125131351314513155131651317513185131951320513215132251323513245132551326513275132851329513305133151332513335133451335513365133751338513395134051341513425134351344513455134651347513485134951350513515135251353513545135551356513575135851359513605136151362513635136451365513665136751368513695137051371513725137351374513755137651377513785137951380513815138251383513845138551386513875138851389513905139151392513935139451395513965139751398513995140051401514025140351404514055140651407514085140951410514115141251413514145141551416514175141851419514205142151422514235142451425514265142751428514295143051431514325143351434514355143651437514385143951440514415144251443514445144551446514475144851449514505145151452514535145451455514565145751458514595146051461514625146351464514655146651467514685146951470514715147251473514745147551476514775147851479514805148151482514835148451485514865148751488514895149051491514925149351494514955149651497514985149951500515015150251503515045150551506515075150851509515105151151512515135151451515515165151751518515195152051521515225152351524515255152651527515285152951530515315153251533515345153551536515375153851539515405154151542515435154451545515465154751548515495155051551515525155351554515555155651557515585155951560515615156251563515645156551566515675156851569515705157151572515735157451575515765157751578515795158051581515825158351584515855158651587515885158951590515915159251593515945159551596515975159851599516005160151602516035160451605516065160751608516095161051611516125161351614516155161651617516185161951620516215162251623516245162551626516275162851629516305163151632516335163451635516365163751638516395164051641516425164351644516455164651647516485164951650516515165251653516545165551656516575165851659516605166151662516635166451665516665166751668516695167051671516725167351674516755167651677516785167951680516815168251683516845168551686516875168851689516905169151692516935169451695516965169751698516995170051701517025170351704517055170651707517085170951710517115171251713517145171551716517175171851719517205172151722517235172451725517265172751728517295173051731517325173351734517355173651737517385173951740517415174251743517445174551746517475174851749517505175151752517535175451755517565175751758517595176051761517625176351764517655176651767517685176951770517715177251773517745177551776517775177851779517805178151782517835178451785517865178751788517895179051791517925179351794517955179651797517985179951800518015180251803518045180551806518075180851809518105181151812518135181451815518165181751818518195182051821518225182351824518255182651827518285182951830518315183251833518345183551836518375183851839518405184151842518435184451845518465184751848518495185051851518525185351854518555185651857518585185951860518615186251863518645186551866518675186851869518705187151872518735187451875518765187751878518795188051881518825188351884518855188651887518885188951890518915189251893518945189551896518975189851899519005190151902519035190451905519065190751908519095191051911519125191351914519155191651917519185191951920519215192251923519245192551926519275192851929519305193151932519335193451935519365193751938519395194051941519425194351944519455194651947519485194951950519515195251953519545195551956519575195851959519605196151962519635196451965519665196751968519695197051971519725197351974519755197651977519785197951980519815198251983519845198551986519875198851989519905199151992519935199451995519965199751998519995200052001520025200352004520055200652007520085200952010520115201252013520145201552016520175201852019520205202152022520235202452025520265202752028520295203052031520325203352034520355203652037520385203952040520415204252043520445204552046520475204852049520505205152052520535205452055520565205752058520595206052061520625206352064520655206652067520685206952070520715207252073520745207552076520775207852079520805208152082520835208452085520865208752088520895209052091520925209352094520955209652097520985209952100521015210252103521045210552106521075210852109521105211152112521135211452115521165211752118521195212052121521225212352124521255212652127521285212952130521315213252133521345213552136521375213852139521405214152142521435214452145521465214752148521495215052151521525215352154521555215652157521585215952160521615216252163521645216552166521675216852169521705217152172521735217452175521765217752178521795218052181521825218352184521855218652187521885218952190521915219252193521945219552196521975219852199522005220152202522035220452205522065220752208522095221052211522125221352214522155221652217522185221952220522215222252223522245222552226522275222852229522305223152232522335223452235522365223752238522395224052241522425224352244522455224652247522485224952250522515225252253522545225552256522575225852259522605226152262522635226452265522665226752268522695227052271522725227352274522755227652277522785227952280522815228252283522845228552286522875228852289522905229152292522935229452295522965229752298522995230052301523025230352304523055230652307523085230952310523115231252313523145231552316523175231852319523205232152322523235232452325523265232752328523295233052331523325233352334523355233652337523385233952340523415234252343523445234552346523475234852349523505235152352523535235452355523565235752358523595236052361523625236352364523655236652367523685236952370523715237252373523745237552376523775237852379523805238152382523835238452385523865238752388523895239052391523925239352394523955239652397523985239952400524015240252403524045240552406524075240852409524105241152412524135241452415524165241752418524195242052421524225242352424524255242652427524285242952430524315243252433524345243552436524375243852439524405244152442524435244452445524465244752448524495245052451524525245352454524555245652457524585245952460524615246252463524645246552466524675246852469524705247152472524735247452475524765247752478524795248052481524825248352484524855248652487524885248952490524915249252493524945249552496524975249852499525005250152502525035250452505525065250752508525095251052511525125251352514525155251652517525185251952520525215252252523525245252552526525275252852529525305253152532525335253452535525365253752538525395254052541525425254352544525455254652547525485254952550525515255252553525545255552556525575255852559525605256152562525635256452565525665256752568525695257052571525725257352574525755257652577525785257952580525815258252583525845258552586525875258852589525905259152592525935259452595525965259752598525995260052601526025260352604526055260652607526085260952610526115261252613526145261552616526175261852619526205262152622526235262452625526265262752628526295263052631526325263352634526355263652637526385263952640526415264252643526445264552646526475264852649526505265152652526535265452655526565265752658526595266052661526625266352664526655266652667526685266952670526715267252673526745267552676526775267852679526805268152682526835268452685526865268752688526895269052691526925269352694526955269652697526985269952700527015270252703527045270552706527075270852709527105271152712527135271452715527165271752718527195272052721527225272352724527255272652727527285272952730527315273252733527345273552736527375273852739527405274152742527435274452745527465274752748527495275052751527525275352754527555275652757527585275952760527615276252763527645276552766527675276852769527705277152772527735277452775527765277752778527795278052781527825278352784527855278652787527885278952790527915279252793527945279552796527975279852799528005280152802528035280452805528065280752808528095281052811528125281352814528155281652817528185281952820528215282252823528245282552826528275282852829528305283152832528335283452835528365283752838528395284052841528425284352844528455284652847528485284952850528515285252853528545285552856528575285852859528605286152862528635286452865528665286752868528695287052871528725287352874528755287652877528785287952880528815288252883528845288552886528875288852889528905289152892528935289452895528965289752898528995290052901529025290352904529055290652907529085290952910529115291252913529145291552916529175291852919529205292152922529235292452925529265292752928529295293052931529325293352934529355293652937529385293952940529415294252943529445294552946529475294852949529505295152952529535295452955529565295752958529595296052961529625296352964529655296652967529685296952970529715297252973529745297552976529775297852979529805298152982529835298452985529865298752988529895299052991529925299352994529955299652997529985299953000530015300253003530045300553006530075300853009530105301153012530135301453015530165301753018530195302053021530225302353024530255302653027530285302953030530315303253033530345303553036530375303853039530405304153042530435304453045530465304753048530495305053051530525305353054530555305653057530585305953060530615306253063530645306553066530675306853069530705307153072530735307453075530765307753078530795308053081530825308353084530855308653087530885308953090530915309253093530945309553096530975309853099531005310153102531035310453105531065310753108531095311053111531125311353114531155311653117531185311953120531215312253123531245312553126531275312853129531305313153132531335313453135531365313753138531395314053141531425314353144531455314653147531485314953150531515315253153531545315553156531575315853159531605316153162531635316453165531665316753168531695317053171531725317353174531755317653177531785317953180531815318253183531845318553186531875318853189531905319153192531935319453195531965319753198531995320053201532025320353204532055320653207532085320953210532115321253213532145321553216532175321853219532205322153222532235322453225532265322753228532295323053231532325323353234532355323653237532385323953240532415324253243532445324553246532475324853249532505325153252532535325453255532565325753258532595326053261532625326353264532655326653267532685326953270532715327253273532745327553276532775327853279532805328153282532835328453285532865328753288532895329053291532925329353294532955329653297532985329953300533015330253303533045330553306533075330853309533105331153312533135331453315533165331753318533195332053321533225332353324533255332653327533285332953330533315333253333533345333553336533375333853339533405334153342533435334453345533465334753348533495335053351533525335353354533555335653357533585335953360533615336253363533645336553366533675336853369533705337153372533735337453375533765337753378533795338053381533825338353384533855338653387533885338953390533915339253393533945339553396533975339853399534005340153402534035340453405534065340753408534095341053411534125341353414534155341653417534185341953420534215342253423534245342553426534275342853429534305343153432534335343453435534365343753438534395344053441534425344353444534455344653447534485344953450534515345253453534545345553456534575345853459534605346153462534635346453465534665346753468534695347053471534725347353474534755347653477534785347953480534815348253483534845348553486534875348853489534905349153492534935349453495534965349753498534995350053501535025350353504535055350653507535085350953510535115351253513535145351553516535175351853519535205352153522535235352453525535265352753528535295353053531535325353353534535355353653537535385353953540535415354253543535445354553546535475354853549535505355153552535535355453555535565355753558535595356053561535625356353564535655356653567535685356953570535715357253573535745357553576535775357853579535805358153582535835358453585535865358753588535895359053591535925359353594535955359653597535985359953600536015360253603536045360553606536075360853609536105361153612536135361453615536165361753618536195362053621536225362353624536255362653627536285362953630536315363253633536345363553636536375363853639536405364153642536435364453645536465364753648536495365053651536525365353654536555365653657536585365953660536615366253663536645366553666536675366853669536705367153672536735367453675536765367753678536795368053681536825368353684536855368653687536885368953690536915369253693536945369553696536975369853699537005370153702537035370453705537065370753708537095371053711537125371353714537155371653717537185371953720537215372253723537245372553726537275372853729537305373153732537335373453735537365373753738537395374053741537425374353744537455374653747537485374953750537515375253753537545375553756537575375853759537605376153762537635376453765537665376753768537695377053771537725377353774537755377653777537785377953780537815378253783537845378553786537875378853789537905379153792537935379453795537965379753798537995380053801538025380353804538055380653807538085380953810538115381253813538145381553816538175381853819538205382153822538235382453825538265382753828538295383053831538325383353834538355383653837538385383953840538415384253843538445384553846538475384853849538505385153852538535385453855538565385753858538595386053861538625386353864538655386653867538685386953870538715387253873538745387553876538775387853879538805388153882538835388453885538865388753888538895389053891538925389353894538955389653897538985389953900539015390253903539045390553906539075390853909539105391153912539135391453915539165391753918539195392053921539225392353924539255392653927539285392953930539315393253933539345393553936539375393853939539405394153942539435394453945539465394753948539495395053951539525395353954539555395653957539585395953960539615396253963539645396553966539675396853969539705397153972539735397453975539765397753978539795398053981539825398353984539855398653987539885398953990539915399253993539945399553996539975399853999540005400154002540035400454005540065400754008540095401054011540125401354014540155401654017540185401954020540215402254023540245402554026540275402854029540305403154032540335403454035540365403754038540395404054041540425404354044540455404654047540485404954050540515405254053540545405554056540575405854059540605406154062540635406454065540665406754068540695407054071540725407354074540755407654077540785407954080540815408254083540845408554086540875408854089540905409154092540935409454095540965409754098540995410054101541025410354104541055410654107541085410954110541115411254113541145411554116541175411854119541205412154122541235412454125541265412754128541295413054131541325413354134541355413654137541385413954140541415414254143541445414554146541475414854149541505415154152541535415454155541565415754158541595416054161541625416354164541655416654167541685416954170541715417254173541745417554176541775417854179541805418154182541835418454185541865418754188541895419054191541925419354194541955419654197541985419954200542015420254203542045420554206542075420854209542105421154212542135421454215542165421754218542195422054221542225422354224542255422654227542285422954230542315423254233542345423554236542375423854239542405424154242542435424454245542465424754248542495425054251542525425354254542555425654257542585425954260542615426254263542645426554266542675426854269542705427154272542735427454275542765427754278542795428054281542825428354284542855428654287542885428954290542915429254293542945429554296542975429854299543005430154302543035430454305543065430754308543095431054311543125431354314543155431654317543185431954320543215432254323543245432554326543275432854329543305433154332543335433454335543365433754338543395434054341543425434354344543455434654347543485434954350543515435254353543545435554356543575435854359543605436154362543635436454365543665436754368543695437054371543725437354374543755437654377543785437954380543815438254383543845438554386543875438854389543905439154392543935439454395543965439754398543995440054401544025440354404544055440654407544085440954410544115441254413544145441554416544175441854419544205442154422544235442454425544265442754428544295443054431544325443354434544355443654437544385443954440544415444254443544445444554446544475444854449544505445154452544535445454455544565445754458544595446054461544625446354464544655446654467544685446954470544715447254473544745447554476544775447854479544805448154482544835448454485544865448754488544895449054491544925449354494544955449654497544985449954500545015450254503545045450554506545075450854509545105451154512545135451454515545165451754518545195452054521545225452354524545255452654527545285452954530545315453254533545345453554536545375453854539545405454154542545435454454545545465454754548545495455054551545525455354554545555455654557545585455954560545615456254563545645456554566545675456854569545705457154572545735457454575545765457754578545795458054581545825458354584545855458654587545885458954590545915459254593545945459554596545975459854599546005460154602546035460454605546065460754608546095461054611546125461354614546155461654617546185461954620546215462254623546245462554626546275462854629546305463154632546335463454635546365463754638546395464054641546425464354644546455464654647546485464954650546515465254653546545465554656546575465854659546605466154662546635466454665546665466754668546695467054671546725467354674546755467654677546785467954680546815468254683546845468554686546875468854689546905469154692546935469454695546965469754698546995470054701547025470354704547055470654707547085470954710547115471254713547145471554716547175471854719547205472154722547235472454725547265472754728547295473054731547325473354734547355473654737547385473954740547415474254743547445474554746547475474854749547505475154752547535475454755547565475754758547595476054761547625476354764547655476654767547685476954770547715477254773547745477554776547775477854779547805478154782547835478454785547865478754788547895479054791547925479354794547955479654797547985479954800548015480254803548045480554806548075480854809548105481154812548135481454815548165481754818548195482054821548225482354824548255482654827548285482954830548315483254833548345483554836548375483854839548405484154842548435484454845548465484754848548495485054851548525485354854548555485654857548585485954860548615486254863548645486554866548675486854869548705487154872548735487454875548765487754878548795488054881548825488354884548855488654887548885488954890548915489254893548945489554896548975489854899549005490154902549035490454905549065490754908549095491054911549125491354914549155491654917549185491954920549215492254923549245492554926549275492854929549305493154932549335493454935549365493754938549395494054941549425494354944549455494654947549485494954950549515495254953549545495554956549575495854959549605496154962549635496454965549665496754968549695497054971549725497354974549755497654977549785497954980549815498254983549845498554986549875498854989549905499154992549935499454995549965499754998549995500055001550025500355004550055500655007550085500955010550115501255013550145501555016550175501855019550205502155022550235502455025550265502755028550295503055031550325503355034550355503655037550385503955040550415504255043550445504555046550475504855049550505505155052550535505455055550565505755058550595506055061550625506355064550655506655067550685506955070550715507255073550745507555076550775507855079550805508155082550835508455085550865508755088550895509055091550925509355094550955509655097550985509955100551015510255103551045510555106551075510855109551105511155112551135511455115551165511755118551195512055121551225512355124551255512655127551285512955130551315513255133551345513555136551375513855139551405514155142551435514455145551465514755148551495515055151551525515355154551555515655157551585515955160551615516255163551645516555166551675516855169551705517155172551735517455175551765517755178551795518055181551825518355184551855518655187551885518955190551915519255193551945519555196551975519855199552005520155202552035520455205552065520755208552095521055211552125521355214552155521655217552185521955220552215522255223552245522555226552275522855229552305523155232552335523455235552365523755238552395524055241552425524355244552455524655247552485524955250552515525255253552545525555256552575525855259552605526155262552635526455265552665526755268552695527055271552725527355274552755527655277552785527955280552815528255283552845528555286552875528855289552905529155292552935529455295552965529755298552995530055301553025530355304553055530655307553085530955310553115531255313553145531555316553175531855319553205532155322553235532455325553265532755328553295533055331553325533355334553355533655337553385533955340553415534255343553445534555346553475534855349553505535155352553535535455355553565535755358553595536055361553625536355364553655536655367553685536955370553715537255373553745537555376553775537855379553805538155382553835538455385553865538755388553895539055391553925539355394553955539655397553985539955400554015540255403554045540555406554075540855409554105541155412554135541455415554165541755418554195542055421554225542355424554255542655427554285542955430554315543255433554345543555436554375543855439554405544155442554435544455445554465544755448554495545055451554525545355454554555545655457554585545955460554615546255463554645546555466554675546855469554705547155472554735547455475554765547755478554795548055481554825548355484554855548655487554885548955490554915549255493554945549555496554975549855499555005550155502555035550455505555065550755508555095551055511555125551355514555155551655517555185551955520555215552255523555245552555526555275552855529555305553155532555335553455535555365553755538555395554055541555425554355544555455554655547555485554955550555515555255553555545555555556555575555855559555605556155562555635556455565555665556755568555695557055571555725557355574555755557655577555785557955580555815558255583555845558555586555875558855589555905559155592555935559455595555965559755598555995560055601556025560355604556055560655607556085560955610556115561255613556145561555616556175561855619556205562155622556235562455625556265562755628556295563055631556325563355634556355563655637556385563955640556415564255643556445564555646556475564855649556505565155652556535565455655556565565755658556595566055661556625566355664556655566655667556685566955670556715567255673556745567555676556775567855679556805568155682556835568455685556865568755688556895569055691556925569355694556955569655697556985569955700557015570255703557045570555706557075570855709557105571155712557135571455715557165571755718557195572055721557225572355724557255572655727557285572955730557315573255733557345573555736557375573855739557405574155742557435574455745557465574755748557495575055751557525575355754557555575655757557585575955760557615576255763557645576555766557675576855769557705577155772557735577455775557765577755778557795578055781557825578355784557855578655787557885578955790557915579255793557945579555796557975579855799558005580155802558035580455805558065580755808558095581055811558125581355814558155581655817558185581955820558215582255823558245582555826558275582855829558305583155832558335583455835558365583755838558395584055841558425584355844558455584655847558485584955850558515585255853558545585555856558575585855859558605586155862558635586455865558665586755868558695587055871558725587355874558755587655877558785587955880558815588255883558845588555886558875588855889558905589155892558935589455895558965589755898558995590055901559025590355904559055590655907559085590955910559115591255913559145591555916559175591855919559205592155922559235592455925559265592755928559295593055931559325593355934559355593655937559385593955940559415594255943559445594555946559475594855949559505595155952559535595455955559565595755958559595596055961559625596355964559655596655967559685596955970559715597255973559745597555976559775597855979559805598155982559835598455985559865598755988559895599055991559925599355994559955599655997559985599956000560015600256003560045600556006560075600856009560105601156012560135601456015560165601756018560195602056021560225602356024560255602656027560285602956030560315603256033560345603556036560375603856039560405604156042560435604456045560465604756048560495605056051560525605356054560555605656057560585605956060560615606256063560645606556066560675606856069560705607156072560735607456075560765607756078560795608056081560825608356084560855608656087560885608956090560915609256093560945609556096560975609856099561005610156102561035610456105561065610756108561095611056111561125611356114561155611656117561185611956120561215612256123561245612556126561275612856129561305613156132561335613456135561365613756138561395614056141561425614356144561455614656147561485614956150561515615256153561545615556156561575615856159561605616156162561635616456165561665616756168561695617056171561725617356174561755617656177561785617956180561815618256183561845618556186561875618856189561905619156192561935619456195561965619756198561995620056201562025620356204562055620656207562085620956210562115621256213562145621556216562175621856219562205622156222562235622456225562265622756228562295623056231562325623356234562355623656237562385623956240562415624256243562445624556246562475624856249562505625156252562535625456255562565625756258562595626056261562625626356264562655626656267562685626956270562715627256273562745627556276562775627856279562805628156282562835628456285562865628756288562895629056291562925629356294562955629656297562985629956300563015630256303563045630556306563075630856309563105631156312563135631456315563165631756318563195632056321563225632356324563255632656327563285632956330563315633256333563345633556336563375633856339563405634156342563435634456345563465634756348563495635056351563525635356354563555635656357563585635956360563615636256363563645636556366563675636856369563705637156372563735637456375563765637756378563795638056381563825638356384563855638656387563885638956390563915639256393563945639556396563975639856399564005640156402564035640456405564065640756408564095641056411564125641356414564155641656417564185641956420564215642256423564245642556426564275642856429564305643156432564335643456435564365643756438564395644056441564425644356444564455644656447564485644956450564515645256453564545645556456564575645856459564605646156462564635646456465564665646756468564695647056471564725647356474564755647656477564785647956480564815648256483564845648556486564875648856489564905649156492564935649456495564965649756498564995650056501565025650356504565055650656507565085650956510565115651256513565145651556516565175651856519565205652156522565235652456525565265652756528565295653056531565325653356534565355653656537565385653956540565415654256543565445654556546565475654856549565505655156552565535655456555565565655756558565595656056561565625656356564565655656656567565685656956570565715657256573565745657556576565775657856579565805658156582565835658456585565865658756588565895659056591565925659356594565955659656597565985659956600566015660256603566045660556606566075660856609566105661156612566135661456615566165661756618566195662056621566225662356624566255662656627566285662956630566315663256633566345663556636566375663856639566405664156642566435664456645566465664756648566495665056651566525665356654566555665656657566585665956660566615666256663566645666556666566675666856669566705667156672566735667456675566765667756678566795668056681566825668356684566855668656687566885668956690566915669256693566945669556696566975669856699567005670156702567035670456705567065670756708567095671056711567125671356714567155671656717567185671956720567215672256723567245672556726567275672856729567305673156732567335673456735567365673756738567395674056741567425674356744567455674656747567485674956750567515675256753567545675556756567575675856759567605676156762567635676456765567665676756768567695677056771567725677356774567755677656777567785677956780567815678256783567845678556786567875678856789567905679156792567935679456795567965679756798567995680056801568025680356804568055680656807568085680956810568115681256813568145681556816568175681856819568205682156822568235682456825568265682756828568295683056831568325683356834568355683656837568385683956840568415684256843568445684556846568475684856849568505685156852568535685456855568565685756858568595686056861568625686356864568655686656867568685686956870568715687256873568745687556876568775687856879568805688156882568835688456885568865688756888568895689056891568925689356894568955689656897568985689956900569015690256903569045690556906569075690856909569105691156912569135691456915569165691756918569195692056921569225692356924569255692656927569285692956930569315693256933569345693556936569375693856939569405694156942569435694456945569465694756948569495695056951569525695356954569555695656957569585695956960569615696256963569645696556966569675696856969569705697156972569735697456975569765697756978569795698056981569825698356984569855698656987569885698956990569915699256993569945699556996569975699856999570005700157002570035700457005570065700757008570095701057011570125701357014570155701657017570185701957020570215702257023570245702557026570275702857029570305703157032570335703457035570365703757038570395704057041570425704357044570455704657047570485704957050570515705257053570545705557056570575705857059570605706157062570635706457065570665706757068570695707057071570725707357074570755707657077570785707957080570815708257083570845708557086570875708857089570905709157092570935709457095570965709757098570995710057101571025710357104571055710657107571085710957110571115711257113571145711557116571175711857119571205712157122571235712457125571265712757128571295713057131571325713357134571355713657137571385713957140571415714257143571445714557146571475714857149571505715157152571535715457155571565715757158571595716057161571625716357164571655716657167571685716957170571715717257173571745717557176571775717857179571805718157182571835718457185571865718757188571895719057191571925719357194571955719657197571985719957200572015720257203572045720557206572075720857209572105721157212572135721457215572165721757218572195722057221572225722357224572255722657227572285722957230572315723257233572345723557236572375723857239572405724157242572435724457245572465724757248572495725057251572525725357254572555725657257572585725957260572615726257263572645726557266572675726857269572705727157272572735727457275572765727757278572795728057281572825728357284572855728657287572885728957290572915729257293572945729557296572975729857299573005730157302573035730457305573065730757308573095731057311573125731357314573155731657317573185731957320573215732257323573245732557326573275732857329573305733157332573335733457335573365733757338573395734057341573425734357344573455734657347573485734957350573515735257353573545735557356573575735857359573605736157362573635736457365573665736757368573695737057371573725737357374573755737657377573785737957380573815738257383573845738557386573875738857389573905739157392573935739457395573965739757398573995740057401574025740357404574055740657407574085740957410574115741257413574145741557416574175741857419574205742157422574235742457425574265742757428574295743057431574325743357434574355743657437574385743957440574415744257443574445744557446574475744857449574505745157452574535745457455574565745757458574595746057461574625746357464574655746657467574685746957470574715747257473574745747557476574775747857479574805748157482574835748457485574865748757488574895749057491574925749357494574955749657497574985749957500575015750257503575045750557506575075750857509575105751157512575135751457515575165751757518575195752057521575225752357524575255752657527575285752957530575315753257533575345753557536575375753857539575405754157542575435754457545575465754757548575495755057551575525755357554575555755657557575585755957560575615756257563575645756557566575675756857569575705757157572575735757457575575765757757578575795758057581575825758357584575855758657587575885758957590575915759257593575945759557596575975759857599576005760157602576035760457605576065760757608576095761057611576125761357614576155761657617576185761957620576215762257623576245762557626576275762857629576305763157632576335763457635576365763757638576395764057641576425764357644576455764657647576485764957650576515765257653576545765557656576575765857659576605766157662576635766457665576665766757668576695767057671576725767357674576755767657677576785767957680576815768257683576845768557686576875768857689576905769157692576935769457695576965769757698576995770057701577025770357704577055770657707577085770957710577115771257713577145771557716577175771857719577205772157722577235772457725577265772757728577295773057731577325773357734577355773657737577385773957740577415774257743577445774557746577475774857749577505775157752577535775457755577565775757758577595776057761577625776357764577655776657767577685776957770577715777257773577745777557776577775777857779577805778157782577835778457785577865778757788577895779057791577925779357794577955779657797577985779957800578015780257803578045780557806578075780857809578105781157812578135781457815578165781757818578195782057821578225782357824578255782657827578285782957830578315783257833578345783557836578375783857839578405784157842578435784457845578465784757848578495785057851578525785357854578555785657857578585785957860578615786257863578645786557866578675786857869578705787157872578735787457875578765787757878578795788057881578825788357884578855788657887578885788957890578915789257893578945789557896578975789857899579005790157902579035790457905579065790757908579095791057911579125791357914579155791657917579185791957920579215792257923579245792557926579275792857929579305793157932579335793457935579365793757938579395794057941579425794357944579455794657947579485794957950579515795257953579545795557956579575795857959579605796157962579635796457965579665796757968579695797057971579725797357974579755797657977579785797957980579815798257983579845798557986579875798857989579905799157992579935799457995579965799757998579995800058001580025800358004580055800658007580085800958010580115801258013580145801558016580175801858019580205802158022580235802458025580265802758028580295803058031580325803358034580355803658037580385803958040580415804258043580445804558046580475804858049580505805158052580535805458055580565805758058580595806058061580625806358064580655806658067580685806958070580715807258073580745807558076580775807858079580805808158082580835808458085580865808758088580895809058091580925809358094580955809658097580985809958100581015810258103581045810558106581075810858109581105811158112581135811458115581165811758118581195812058121581225812358124581255812658127581285812958130581315813258133581345813558136581375813858139581405814158142581435814458145581465814758148581495815058151581525815358154581555815658157581585815958160581615816258163581645816558166581675816858169581705817158172581735817458175581765817758178581795818058181581825818358184581855818658187581885818958190581915819258193581945819558196581975819858199582005820158202582035820458205582065820758208582095821058211582125821358214582155821658217582185821958220582215822258223582245822558226582275822858229582305823158232582335823458235582365823758238582395824058241582425824358244582455824658247582485824958250582515825258253582545825558256582575825858259582605826158262582635826458265582665826758268582695827058271582725827358274582755827658277582785827958280582815828258283582845828558286582875828858289582905829158292582935829458295582965829758298582995830058301583025830358304583055830658307583085830958310583115831258313583145831558316583175831858319583205832158322583235832458325583265832758328583295833058331583325833358334583355833658337583385833958340583415834258343583445834558346583475834858349583505835158352583535835458355583565835758358583595836058361583625836358364583655836658367583685836958370583715837258373583745837558376583775837858379583805838158382583835838458385583865838758388583895839058391583925839358394583955839658397583985839958400584015840258403584045840558406584075840858409584105841158412584135841458415584165841758418584195842058421584225842358424584255842658427584285842958430584315843258433584345843558436584375843858439584405844158442584435844458445584465844758448584495845058451584525845358454584555845658457584585845958460584615846258463584645846558466584675846858469584705847158472584735847458475584765847758478584795848058481584825848358484584855848658487584885848958490584915849258493584945849558496584975849858499585005850158502585035850458505585065850758508585095851058511585125851358514585155851658517585185851958520585215852258523585245852558526585275852858529585305853158532585335853458535585365853758538585395854058541585425854358544585455854658547585485854958550585515855258553585545855558556585575855858559585605856158562585635856458565585665856758568585695857058571585725857358574585755857658577585785857958580585815858258583585845858558586585875858858589585905859158592585935859458595585965859758598585995860058601586025860358604586055860658607586085860958610586115861258613586145861558616586175861858619586205862158622586235862458625586265862758628586295863058631586325863358634586355863658637586385863958640586415864258643586445864558646586475864858649586505865158652586535865458655586565865758658586595866058661586625866358664586655866658667586685866958670586715867258673586745867558676586775867858679586805868158682586835868458685586865868758688586895869058691586925869358694586955869658697586985869958700587015870258703587045870558706587075870858709587105871158712587135871458715587165871758718587195872058721587225872358724587255872658727587285872958730587315873258733587345873558736587375873858739587405874158742587435874458745587465874758748587495875058751587525875358754587555875658757587585875958760587615876258763587645876558766587675876858769587705877158772587735877458775587765877758778587795878058781587825878358784587855878658787587885878958790587915879258793587945879558796587975879858799588005880158802588035880458805588065880758808588095881058811588125881358814588155881658817588185881958820588215882258823588245882558826588275882858829588305883158832588335883458835588365883758838588395884058841588425884358844588455884658847588485884958850588515885258853588545885558856588575885858859588605886158862588635886458865588665886758868588695887058871588725887358874588755887658877588785887958880588815888258883588845888558886588875888858889588905889158892588935889458895588965889758898588995890058901589025890358904589055890658907589085890958910589115891258913589145891558916589175891858919589205892158922589235892458925589265892758928589295893058931589325893358934589355893658937589385893958940589415894258943589445894558946589475894858949589505895158952589535895458955589565895758958589595896058961589625896358964589655896658967589685896958970589715897258973589745897558976589775897858979589805898158982589835898458985589865898758988589895899058991589925899358994589955899658997589985899959000590015900259003590045900559006590075900859009590105901159012590135901459015590165901759018590195902059021590225902359024590255902659027590285902959030590315903259033590345903559036590375903859039590405904159042590435904459045590465904759048590495905059051590525905359054590555905659057590585905959060590615906259063590645906559066590675906859069590705907159072590735907459075590765907759078590795908059081590825908359084590855908659087590885908959090590915909259093590945909559096590975909859099591005910159102591035910459105591065910759108591095911059111591125911359114591155911659117591185911959120591215912259123591245912559126591275912859129591305913159132591335913459135591365913759138591395914059141591425914359144591455914659147591485914959150591515915259153591545915559156591575915859159591605916159162591635916459165591665916759168591695917059171591725917359174591755917659177591785917959180591815918259183591845918559186591875918859189591905919159192591935919459195591965919759198591995920059201592025920359204592055920659207592085920959210592115921259213592145921559216592175921859219592205922159222592235922459225592265922759228592295923059231592325923359234592355923659237592385923959240592415924259243592445924559246592475924859249592505925159252592535925459255592565925759258592595926059261592625926359264592655926659267592685926959270592715927259273592745927559276592775927859279592805928159282592835928459285592865928759288592895929059291592925929359294592955929659297592985929959300593015930259303593045930559306593075930859309593105931159312593135931459315593165931759318593195932059321593225932359324593255932659327593285932959330593315933259333593345933559336593375933859339593405934159342593435934459345593465934759348593495935059351593525935359354593555935659357593585935959360593615936259363593645936559366593675936859369593705937159372593735937459375593765937759378593795938059381593825938359384593855938659387593885938959390593915939259393593945939559396593975939859399594005940159402594035940459405594065940759408594095941059411594125941359414594155941659417594185941959420594215942259423594245942559426594275942859429594305943159432594335943459435594365943759438594395944059441594425944359444594455944659447594485944959450594515945259453594545945559456594575945859459594605946159462594635946459465594665946759468594695947059471594725947359474594755947659477594785947959480594815948259483594845948559486594875948859489594905949159492594935949459495594965949759498594995950059501595025950359504595055950659507595085950959510595115951259513595145951559516595175951859519595205952159522595235952459525595265952759528595295953059531595325953359534595355953659537595385953959540595415954259543595445954559546595475954859549595505955159552595535955459555595565955759558595595956059561595625956359564595655956659567595685956959570595715957259573595745957559576595775957859579595805958159582595835958459585595865958759588595895959059591595925959359594595955959659597595985959959600596015960259603596045960559606596075960859609596105961159612596135961459615596165961759618596195962059621596225962359624596255962659627596285962959630596315963259633596345963559636596375963859639596405964159642596435964459645596465964759648596495965059651596525965359654596555965659657596585965959660596615966259663596645966559666596675966859669596705967159672596735967459675596765967759678596795968059681596825968359684596855968659687596885968959690596915969259693596945969559696596975969859699597005970159702597035970459705597065970759708597095971059711597125971359714597155971659717597185971959720597215972259723597245972559726597275972859729597305973159732597335973459735597365973759738597395974059741597425974359744597455974659747597485974959750597515975259753597545975559756597575975859759597605976159762597635976459765597665976759768597695977059771597725977359774597755977659777597785977959780597815978259783597845978559786597875978859789597905979159792597935979459795597965979759798597995980059801598025980359804598055980659807598085980959810598115981259813598145981559816598175981859819598205982159822598235982459825598265982759828598295983059831598325983359834598355983659837598385983959840598415984259843598445984559846598475984859849598505985159852598535985459855598565985759858598595986059861598625986359864598655986659867598685986959870598715987259873598745987559876598775987859879598805988159882598835988459885598865988759888598895989059891598925989359894598955989659897598985989959900599015990259903599045990559906599075990859909599105991159912599135991459915599165991759918599195992059921599225992359924599255992659927599285992959930599315993259933599345993559936599375993859939599405994159942599435994459945599465994759948599495995059951599525995359954599555995659957599585995959960599615996259963599645996559966599675996859969599705997159972599735997459975599765997759978599795998059981599825998359984599855998659987599885998959990599915999259993599945999559996599975999859999600006000160002600036000460005600066000760008600096001060011600126001360014600156001660017600186001960020600216002260023600246002560026600276002860029600306003160032600336003460035600366003760038600396004060041600426004360044600456004660047600486004960050600516005260053600546005560056600576005860059600606006160062600636006460065600666006760068600696007060071600726007360074600756007660077600786007960080600816008260083600846008560086600876008860089600906009160092600936009460095600966009760098600996010060101601026010360104601056010660107601086010960110601116011260113601146011560116601176011860119601206012160122601236012460125601266012760128601296013060131601326013360134601356013660137601386013960140601416014260143601446014560146601476014860149601506015160152601536015460155601566015760158601596016060161601626016360164601656016660167601686016960170601716017260173601746017560176601776017860179601806018160182601836018460185601866018760188601896019060191601926019360194601956019660197601986019960200602016020260203602046020560206602076020860209602106021160212602136021460215602166021760218602196022060221602226022360224602256022660227602286022960230602316023260233602346023560236602376023860239602406024160242602436024460245602466024760248602496025060251602526025360254602556025660257602586025960260602616026260263602646026560266602676026860269602706027160272602736027460275602766027760278602796028060281602826028360284602856028660287602886028960290602916029260293602946029560296602976029860299603006030160302603036030460305603066030760308603096031060311603126031360314603156031660317603186031960320603216032260323603246032560326603276032860329603306033160332603336033460335603366033760338603396034060341603426034360344603456034660347603486034960350603516035260353603546035560356603576035860359603606036160362603636036460365603666036760368603696037060371603726037360374603756037660377603786037960380603816038260383603846038560386603876038860389603906039160392603936039460395603966039760398603996040060401604026040360404604056040660407604086040960410604116041260413604146041560416604176041860419604206042160422604236042460425604266042760428604296043060431604326043360434604356043660437604386043960440604416044260443604446044560446604476044860449604506045160452604536045460455604566045760458604596046060461604626046360464604656046660467604686046960470604716047260473604746047560476604776047860479604806048160482604836048460485604866048760488604896049060491604926049360494604956049660497604986049960500605016050260503605046050560506605076050860509605106051160512605136051460515605166051760518605196052060521605226052360524605256052660527605286052960530605316053260533605346053560536605376053860539605406054160542605436054460545605466054760548605496055060551605526055360554605556055660557605586055960560605616056260563605646056560566605676056860569605706057160572605736057460575605766057760578605796058060581605826058360584605856058660587605886058960590605916059260593605946059560596605976059860599606006060160602606036060460605606066060760608606096061060611606126061360614606156061660617606186061960620606216062260623606246062560626606276062860629606306063160632606336063460635606366063760638606396064060641606426064360644606456064660647606486064960650606516065260653606546065560656606576065860659606606066160662606636066460665606666066760668606696067060671606726067360674606756067660677606786067960680606816068260683606846068560686606876068860689606906069160692606936069460695606966069760698606996070060701607026070360704607056070660707607086070960710607116071260713607146071560716607176071860719607206072160722607236072460725607266072760728607296073060731607326073360734607356073660737607386073960740607416074260743607446074560746607476074860749607506075160752607536075460755607566075760758607596076060761607626076360764607656076660767607686076960770607716077260773607746077560776607776077860779607806078160782607836078460785607866078760788607896079060791607926079360794607956079660797607986079960800608016080260803608046080560806608076080860809608106081160812608136081460815608166081760818608196082060821608226082360824608256082660827608286082960830608316083260833608346083560836608376083860839608406084160842608436084460845608466084760848608496085060851608526085360854608556085660857608586085960860608616086260863608646086560866608676086860869608706087160872608736087460875608766087760878608796088060881608826088360884608856088660887608886088960890608916089260893608946089560896608976089860899609006090160902609036090460905609066090760908609096091060911609126091360914609156091660917609186091960920609216092260923609246092560926609276092860929609306093160932609336093460935609366093760938609396094060941609426094360944609456094660947609486094960950609516095260953609546095560956609576095860959609606096160962609636096460965609666096760968609696097060971609726097360974609756097660977609786097960980609816098260983609846098560986609876098860989609906099160992609936099460995609966099760998609996100061001610026100361004610056100661007610086100961010610116101261013610146101561016610176101861019610206102161022610236102461025610266102761028610296103061031610326103361034610356103661037610386103961040610416104261043610446104561046610476104861049610506105161052610536105461055610566105761058610596106061061610626106361064610656106661067610686106961070610716107261073610746107561076610776107861079610806108161082610836108461085610866108761088610896109061091610926109361094610956109661097610986109961100611016110261103611046110561106611076110861109611106111161112611136111461115611166111761118611196112061121611226112361124611256112661127611286112961130611316113261133611346113561136611376113861139611406114161142611436114461145611466114761148611496115061151611526115361154611556115661157611586115961160611616116261163611646116561166611676116861169611706117161172611736117461175611766117761178611796118061181611826118361184611856118661187611886118961190611916119261193611946119561196611976119861199612006120161202612036120461205612066120761208612096121061211612126121361214612156121661217612186121961220612216122261223612246122561226612276122861229612306123161232612336123461235612366123761238612396124061241612426124361244612456124661247612486124961250612516125261253612546125561256612576125861259612606126161262612636126461265612666126761268612696127061271612726127361274612756127661277612786127961280612816128261283612846128561286612876128861289612906129161292612936129461295612966129761298612996130061301613026130361304613056130661307613086130961310613116131261313613146131561316613176131861319613206132161322613236132461325613266132761328613296133061331613326133361334613356133661337613386133961340613416134261343613446134561346613476134861349613506135161352613536135461355613566135761358613596136061361613626136361364613656136661367613686136961370613716137261373613746137561376613776137861379613806138161382613836138461385613866138761388613896139061391613926139361394613956139661397613986139961400614016140261403614046140561406614076140861409614106141161412614136141461415614166141761418614196142061421614226142361424614256142661427614286142961430614316143261433614346143561436614376143861439614406144161442614436144461445614466144761448614496145061451614526145361454614556145661457614586145961460614616146261463614646146561466614676146861469614706147161472614736147461475614766147761478614796148061481614826148361484614856148661487614886148961490614916149261493614946149561496614976149861499615006150161502615036150461505615066150761508615096151061511615126151361514615156151661517615186151961520615216152261523615246152561526615276152861529615306153161532615336153461535615366153761538615396154061541615426154361544615456154661547615486154961550615516155261553615546155561556615576155861559615606156161562615636156461565615666156761568615696157061571615726157361574615756157661577615786157961580615816158261583615846158561586615876158861589615906159161592615936159461595615966159761598615996160061601616026160361604616056160661607616086160961610616116161261613616146161561616616176161861619616206162161622616236162461625616266162761628616296163061631616326163361634616356163661637616386163961640616416164261643616446164561646616476164861649616506165161652616536165461655616566165761658616596166061661616626166361664616656166661667616686166961670616716167261673616746167561676616776167861679616806168161682616836168461685616866168761688616896169061691616926169361694616956169661697616986169961700617016170261703617046170561706617076170861709617106171161712617136171461715617166171761718617196172061721617226172361724617256172661727617286172961730617316173261733617346173561736617376173861739617406174161742617436174461745617466174761748617496175061751617526175361754617556175661757617586175961760617616176261763617646176561766617676176861769617706177161772617736177461775617766177761778617796178061781617826178361784617856178661787617886178961790617916179261793617946179561796617976179861799618006180161802618036180461805618066180761808618096181061811618126181361814618156181661817618186181961820618216182261823618246182561826618276182861829618306183161832618336183461835618366183761838618396184061841618426184361844618456184661847618486184961850618516185261853618546185561856618576185861859618606186161862618636186461865618666186761868618696187061871618726187361874618756187661877618786187961880618816188261883618846188561886618876188861889618906189161892618936189461895618966189761898618996190061901619026190361904619056190661907619086190961910619116191261913619146191561916619176191861919619206192161922619236192461925619266192761928619296193061931619326193361934619356193661937619386193961940619416194261943619446194561946619476194861949619506195161952619536195461955619566195761958619596196061961619626196361964619656196661967619686196961970619716197261973619746197561976619776197861979619806198161982619836198461985619866198761988619896199061991619926199361994619956199661997619986199962000620016200262003620046200562006620076200862009620106201162012620136201462015620166201762018620196202062021620226202362024620256202662027620286202962030620316203262033620346203562036620376203862039620406204162042620436204462045620466204762048620496205062051620526205362054620556205662057620586205962060620616206262063620646206562066620676206862069620706207162072620736207462075620766207762078620796208062081620826208362084620856208662087620886208962090620916209262093620946209562096620976209862099621006210162102621036210462105621066210762108621096211062111621126211362114621156211662117621186211962120621216212262123621246212562126621276212862129621306213162132621336213462135621366213762138621396214062141621426214362144621456214662147621486214962150621516215262153621546215562156621576215862159621606216162162621636216462165621666216762168621696217062171621726217362174621756217662177621786217962180621816218262183621846218562186621876218862189621906219162192621936219462195621966219762198621996220062201622026220362204622056220662207622086220962210622116221262213622146221562216622176221862219622206222162222622236222462225622266222762228622296223062231622326223362234622356223662237622386223962240622416224262243622446224562246622476224862249622506225162252622536225462255622566225762258622596226062261622626226362264622656226662267622686226962270622716227262273622746227562276622776227862279622806228162282622836228462285622866228762288622896229062291622926229362294622956229662297622986229962300623016230262303623046230562306623076230862309623106231162312623136231462315623166231762318623196232062321623226232362324623256232662327623286232962330623316233262333623346233562336623376233862339623406234162342623436234462345623466234762348623496235062351623526235362354623556235662357623586235962360623616236262363623646236562366623676236862369623706237162372623736237462375623766237762378623796238062381623826238362384623856238662387623886238962390623916239262393623946239562396623976239862399624006240162402624036240462405624066240762408624096241062411624126241362414624156241662417624186241962420624216242262423624246242562426624276242862429624306243162432624336243462435624366243762438624396244062441624426244362444624456244662447624486244962450624516245262453624546245562456624576245862459624606246162462624636246462465624666246762468624696247062471624726247362474624756247662477624786247962480624816248262483624846248562486624876248862489624906249162492624936249462495624966249762498624996250062501625026250362504625056250662507625086250962510625116251262513625146251562516625176251862519625206252162522625236252462525625266252762528625296253062531625326253362534625356253662537625386253962540625416254262543625446254562546625476254862549625506255162552625536255462555625566255762558625596256062561625626256362564625656256662567625686256962570625716257262573625746257562576625776257862579625806258162582625836258462585625866258762588625896259062591625926259362594625956259662597625986259962600626016260262603626046260562606626076260862609626106261162612626136261462615626166261762618626196262062621626226262362624626256262662627626286262962630626316263262633626346263562636626376263862639626406264162642626436264462645626466264762648626496265062651626526265362654626556265662657626586265962660626616266262663626646266562666626676266862669626706267162672626736267462675626766267762678626796268062681626826268362684626856268662687626886268962690626916269262693626946269562696626976269862699627006270162702627036270462705627066270762708627096271062711627126271362714627156271662717627186271962720627216272262723627246272562726627276272862729627306273162732627336273462735627366273762738627396274062741627426274362744627456274662747627486274962750627516275262753627546275562756627576275862759627606276162762627636276462765627666276762768627696277062771627726277362774627756277662777627786277962780627816278262783627846278562786627876278862789627906279162792627936279462795627966279762798627996280062801628026280362804628056280662807628086280962810628116281262813628146281562816628176281862819628206282162822628236282462825628266282762828628296283062831628326283362834628356283662837628386283962840628416284262843628446284562846628476284862849628506285162852628536285462855628566285762858628596286062861628626286362864628656286662867628686286962870628716287262873628746287562876628776287862879628806288162882628836288462885628866288762888628896289062891628926289362894628956289662897628986289962900629016290262903629046290562906629076290862909629106291162912629136291462915629166291762918629196292062921629226292362924629256292662927629286292962930629316293262933629346293562936629376293862939629406294162942629436294462945629466294762948629496295062951629526295362954629556295662957629586295962960629616296262963629646296562966629676296862969629706297162972629736297462975629766297762978629796298062981629826298362984629856298662987629886298962990629916299262993629946299562996629976299862999630006300163002630036300463005630066300763008630096301063011630126301363014630156301663017630186301963020630216302263023630246302563026630276302863029630306303163032630336303463035630366303763038630396304063041630426304363044630456304663047630486304963050630516305263053630546305563056630576305863059630606306163062630636306463065630666306763068630696307063071630726307363074630756307663077630786307963080630816308263083630846308563086630876308863089630906309163092630936309463095630966309763098630996310063101631026310363104631056310663107631086310963110631116311263113631146311563116631176311863119631206312163122631236312463125631266312763128631296313063131631326313363134631356313663137631386313963140631416314263143631446314563146631476314863149631506315163152631536315463155631566315763158631596316063161631626316363164631656316663167631686316963170631716317263173631746317563176631776317863179631806318163182631836318463185631866318763188631896319063191631926319363194631956319663197631986319963200632016320263203632046320563206632076320863209632106321163212632136321463215632166321763218632196322063221632226322363224632256322663227632286322963230632316323263233632346323563236632376323863239632406324163242632436324463245632466324763248632496325063251632526325363254632556325663257632586325963260632616326263263632646326563266632676326863269632706327163272632736327463275632766327763278632796328063281632826328363284632856328663287632886328963290632916329263293632946329563296632976329863299633006330163302633036330463305633066330763308633096331063311633126331363314633156331663317633186331963320633216332263323633246332563326633276332863329633306333163332633336333463335633366333763338633396334063341633426334363344633456334663347633486334963350633516335263353633546335563356633576335863359633606336163362633636336463365633666336763368633696337063371633726337363374633756337663377633786337963380633816338263383633846338563386633876338863389633906339163392633936339463395633966339763398633996340063401634026340363404634056340663407634086340963410634116341263413634146341563416634176341863419634206342163422634236342463425634266342763428634296343063431634326343363434634356343663437634386343963440634416344263443634446344563446634476344863449634506345163452634536345463455634566345763458634596346063461634626346363464634656346663467634686346963470634716347263473634746347563476634776347863479634806348163482634836348463485634866348763488634896349063491634926349363494634956349663497634986349963500635016350263503635046350563506635076350863509635106351163512635136351463515635166351763518635196352063521635226352363524635256352663527635286352963530635316353263533635346353563536635376353863539635406354163542635436354463545635466354763548635496355063551635526355363554635556355663557635586355963560635616356263563635646356563566635676356863569635706357163572635736357463575635766357763578635796358063581635826358363584635856358663587635886358963590635916359263593635946359563596635976359863599636006360163602636036360463605636066360763608636096361063611636126361363614636156361663617636186361963620636216362263623636246362563626636276362863629636306363163632636336363463635636366363763638636396364063641636426364363644636456364663647636486364963650636516365263653636546365563656636576365863659636606366163662636636366463665636666366763668636696367063671636726367363674636756367663677636786367963680636816368263683636846368563686636876368863689636906369163692636936369463695636966369763698636996370063701637026370363704637056370663707637086370963710637116371263713637146371563716637176371863719637206372163722637236372463725637266372763728637296373063731637326373363734637356373663737637386373963740637416374263743637446374563746637476374863749637506375163752637536375463755637566375763758637596376063761637626376363764637656376663767637686376963770637716377263773637746377563776637776377863779637806378163782637836378463785637866378763788637896379063791637926379363794637956379663797637986379963800638016380263803638046380563806638076380863809638106381163812638136381463815638166381763818638196382063821638226382363824638256382663827638286382963830638316383263833638346383563836638376383863839638406384163842638436384463845638466384763848638496385063851638526385363854638556385663857638586385963860638616386263863638646386563866638676386863869638706387163872638736387463875638766387763878638796388063881638826388363884638856388663887638886388963890638916389263893638946389563896638976389863899639006390163902639036390463905639066390763908639096391063911639126391363914639156391663917639186391963920639216392263923639246392563926639276392863929639306393163932639336393463935639366393763938639396394063941639426394363944639456394663947639486394963950639516395263953639546395563956639576395863959639606396163962639636396463965639666396763968639696397063971639726397363974639756397663977639786397963980639816398263983639846398563986639876398863989639906399163992639936399463995639966399763998639996400064001640026400364004640056400664007640086400964010640116401264013640146401564016640176401864019640206402164022640236402464025640266402764028640296403064031640326403364034640356403664037640386403964040640416404264043640446404564046640476404864049640506405164052640536405464055640566405764058640596406064061640626406364064640656406664067640686406964070640716407264073640746407564076640776407864079640806408164082640836408464085640866408764088640896409064091640926409364094640956409664097640986409964100641016410264103641046410564106641076410864109641106411164112641136411464115641166411764118641196412064121641226412364124641256412664127641286412964130641316413264133641346413564136641376413864139641406414164142641436414464145641466414764148641496415064151641526415364154641556415664157641586415964160641616416264163641646416564166641676416864169641706417164172641736417464175641766417764178641796418064181641826418364184641856418664187641886418964190641916419264193641946419564196641976419864199642006420164202642036420464205642066420764208642096421064211642126421364214642156421664217642186421964220642216422264223642246422564226642276422864229642306423164232642336423464235642366423764238642396424064241642426424364244642456424664247642486424964250642516425264253642546425564256642576425864259642606426164262642636426464265642666426764268642696427064271642726427364274642756427664277642786427964280642816428264283642846428564286642876428864289642906429164292642936429464295642966429764298642996430064301643026430364304643056430664307643086430964310643116431264313643146431564316643176431864319643206432164322643236432464325643266432764328643296433064331643326433364334643356433664337643386433964340643416434264343643446434564346643476434864349643506435164352643536435464355643566435764358643596436064361643626436364364643656436664367643686436964370643716437264373643746437564376643776437864379643806438164382643836438464385643866438764388643896439064391643926439364394643956439664397643986439964400644016440264403644046440564406644076440864409644106441164412644136441464415644166441764418644196442064421644226442364424644256442664427644286442964430644316443264433644346443564436644376443864439644406444164442644436444464445644466444764448644496445064451644526445364454644556445664457644586445964460644616446264463644646446564466644676446864469644706447164472644736447464475644766447764478644796448064481644826448364484644856448664487644886448964490644916449264493644946449564496644976449864499645006450164502645036450464505645066450764508645096451064511645126451364514645156451664517645186451964520645216452264523645246452564526645276452864529645306453164532645336453464535645366453764538645396454064541645426454364544645456454664547645486454964550645516455264553645546455564556645576455864559645606456164562645636456464565645666456764568645696457064571645726457364574645756457664577645786457964580645816458264583645846458564586645876458864589645906459164592645936459464595645966459764598645996460064601646026460364604646056460664607646086460964610646116461264613646146461564616646176461864619646206462164622646236462464625646266462764628646296463064631646326463364634646356463664637646386463964640646416464264643646446464564646646476464864649646506465164652646536465464655646566465764658646596466064661646626466364664646656466664667646686466964670646716467264673646746467564676646776467864679646806468164682646836468464685646866468764688646896469064691646926469364694646956469664697646986469964700647016470264703647046470564706647076470864709647106471164712647136471464715647166471764718647196472064721647226472364724647256472664727647286472964730647316473264733647346473564736647376473864739647406474164742647436474464745647466474764748647496475064751647526475364754647556475664757647586475964760647616476264763647646476564766647676476864769647706477164772647736477464775647766477764778647796478064781647826478364784647856478664787647886478964790647916479264793647946479564796647976479864799648006480164802648036480464805648066480764808648096481064811648126481364814648156481664817648186481964820648216482264823648246482564826648276482864829648306483164832648336483464835648366483764838648396484064841648426484364844648456484664847648486484964850648516485264853648546485564856648576485864859648606486164862648636486464865648666486764868648696487064871648726487364874648756487664877648786487964880648816488264883648846488564886648876488864889648906489164892648936489464895648966489764898648996490064901649026490364904649056490664907649086490964910649116491264913649146491564916649176491864919649206492164922649236492464925649266492764928649296493064931649326493364934649356493664937649386493964940649416494264943649446494564946649476494864949649506495164952649536495464955649566495764958649596496064961649626496364964649656496664967649686496964970649716497264973649746497564976649776497864979649806498164982649836498464985649866498764988649896499064991649926499364994649956499664997649986499965000650016500265003650046500565006650076500865009650106501165012650136501465015650166501765018650196502065021650226502365024650256502665027650286502965030650316503265033650346503565036650376503865039650406504165042650436504465045650466504765048650496505065051650526505365054650556505665057650586505965060650616506265063650646506565066650676506865069650706507165072650736507465075650766507765078650796508065081650826508365084650856508665087650886508965090650916509265093650946509565096650976509865099651006510165102651036510465105651066510765108651096511065111651126511365114651156511665117651186511965120651216512265123651246512565126651276512865129651306513165132651336513465135651366513765138651396514065141651426514365144651456514665147651486514965150651516515265153651546515565156651576515865159651606516165162651636516465165651666516765168651696517065171651726517365174651756517665177651786517965180651816518265183651846518565186651876518865189651906519165192651936519465195651966519765198651996520065201652026520365204652056520665207652086520965210652116521265213652146521565216652176521865219652206522165222652236522465225652266522765228652296523065231652326523365234652356523665237652386523965240652416524265243652446524565246652476524865249652506525165252652536525465255652566525765258652596526065261652626526365264652656526665267652686526965270652716527265273652746527565276652776527865279652806528165282652836528465285652866528765288652896529065291652926529365294652956529665297652986529965300653016530265303653046530565306653076530865309653106531165312653136531465315653166531765318653196532065321653226532365324653256532665327653286532965330653316533265333653346533565336653376533865339653406534165342653436534465345653466534765348653496535065351653526535365354653556535665357653586535965360653616536265363653646536565366653676536865369653706537165372653736537465375653766537765378653796538065381653826538365384653856538665387653886538965390653916539265393653946539565396653976539865399654006540165402654036540465405654066540765408654096541065411654126541365414654156541665417654186541965420654216542265423654246542565426654276542865429654306543165432654336543465435654366543765438654396544065441654426544365444654456544665447654486544965450654516545265453654546545565456654576545865459654606546165462654636546465465654666546765468654696547065471654726547365474654756547665477654786547965480654816548265483654846548565486654876548865489654906549165492654936549465495654966549765498654996550065501655026550365504655056550665507655086550965510655116551265513655146551565516655176551865519655206552165522655236552465525655266552765528655296553065531655326553365534655356553665537655386553965540655416554265543655446554565546655476554865549655506555165552655536555465555655566555765558655596556065561655626556365564655656556665567655686556965570655716557265573655746557565576655776557865579655806558165582655836558465585655866558765588655896559065591655926559365594655956559665597655986559965600656016560265603656046560565606656076560865609656106561165612656136561465615656166561765618656196562065621656226562365624656256562665627656286562965630656316563265633656346563565636656376563865639656406564165642656436564465645656466564765648656496565065651656526565365654656556565665657656586565965660656616566265663656646566565666656676566865669656706567165672656736567465675656766567765678656796568065681656826568365684656856568665687656886568965690656916569265693656946569565696656976569865699657006570165702657036570465705657066570765708657096571065711657126571365714657156571665717657186571965720657216572265723657246572565726657276572865729657306573165732657336573465735657366573765738657396574065741657426574365744657456574665747657486574965750657516575265753657546575565756657576575865759657606576165762657636576465765657666576765768657696577065771657726577365774657756577665777657786577965780657816578265783657846578565786657876578865789657906579165792657936579465795657966579765798657996580065801658026580365804658056580665807658086580965810658116581265813658146581565816658176581865819658206582165822658236582465825658266582765828658296583065831658326583365834658356583665837658386583965840658416584265843658446584565846658476584865849658506585165852658536585465855658566585765858658596586065861658626586365864658656586665867658686586965870658716587265873658746587565876658776587865879658806588165882658836588465885658866588765888658896589065891658926589365894658956589665897658986589965900659016590265903659046590565906659076590865909659106591165912659136591465915659166591765918659196592065921659226592365924659256592665927659286592965930659316593265933659346593565936659376593865939659406594165942659436594465945659466594765948659496595065951659526595365954659556595665957659586595965960659616596265963659646596565966659676596865969659706597165972659736597465975659766597765978659796598065981659826598365984659856598665987659886598965990659916599265993659946599565996659976599865999660006600166002660036600466005660066600766008660096601066011660126601366014660156601666017660186601966020660216602266023660246602566026660276602866029660306603166032660336603466035660366603766038660396604066041660426604366044660456604666047660486604966050660516605266053660546605566056660576605866059660606606166062660636606466065660666606766068660696607066071660726607366074660756607666077660786607966080660816608266083660846608566086660876608866089660906609166092660936609466095660966609766098660996610066101661026610366104661056610666107661086610966110661116611266113661146611566116661176611866119661206612166122661236612466125661266612766128661296613066131661326613366134661356613666137661386613966140661416614266143661446614566146661476614866149661506615166152661536615466155661566615766158661596616066161661626616366164661656616666167661686616966170661716617266173661746617566176661776617866179661806618166182661836618466185661866618766188661896619066191661926619366194661956619666197661986619966200662016620266203662046620566206662076620866209662106621166212662136621466215662166621766218662196622066221662226622366224662256622666227662286622966230662316623266233662346623566236662376623866239662406624166242662436624466245662466624766248662496625066251662526625366254662556625666257662586625966260662616626266263662646626566266662676626866269662706627166272662736627466275662766627766278662796628066281662826628366284662856628666287662886628966290662916629266293662946629566296662976629866299663006630166302663036630466305663066630766308663096631066311663126631366314663156631666317663186631966320663216632266323663246632566326663276632866329663306633166332663336633466335663366633766338663396634066341663426634366344663456634666347663486634966350663516635266353663546635566356663576635866359663606636166362663636636466365663666636766368663696637066371663726637366374663756637666377663786637966380663816638266383663846638566386663876638866389663906639166392663936639466395663966639766398663996640066401664026640366404664056640666407664086640966410664116641266413664146641566416664176641866419664206642166422664236642466425664266642766428664296643066431664326643366434664356643666437664386643966440664416644266443664446644566446664476644866449664506645166452664536645466455664566645766458664596646066461664626646366464664656646666467664686646966470664716647266473664746647566476664776647866479664806648166482664836648466485664866648766488664896649066491664926649366494664956649666497664986649966500665016650266503665046650566506665076650866509665106651166512665136651466515665166651766518665196652066521665226652366524665256652666527665286652966530665316653266533665346653566536665376653866539665406654166542665436654466545665466654766548665496655066551665526655366554665556655666557665586655966560665616656266563665646656566566665676656866569665706657166572665736657466575665766657766578665796658066581665826658366584665856658666587665886658966590665916659266593665946659566596665976659866599666006660166602666036660466605666066660766608666096661066611666126661366614666156661666617666186661966620666216662266623666246662566626666276662866629666306663166632666336663466635666366663766638666396664066641666426664366644666456664666647666486664966650666516665266653666546665566656666576665866659666606666166662666636666466665666666666766668666696667066671666726667366674666756667666677666786667966680666816668266683666846668566686666876668866689666906669166692666936669466695666966669766698666996670066701667026670366704667056670666707667086670966710667116671266713667146671566716667176671866719667206672166722667236672466725667266672766728667296673066731667326673366734667356673666737667386673966740667416674266743667446674566746667476674866749667506675166752667536675466755667566675766758667596676066761667626676366764667656676666767667686676966770667716677266773667746677566776667776677866779667806678166782667836678466785667866678766788667896679066791667926679366794667956679666797667986679966800668016680266803668046680566806668076680866809668106681166812668136681466815668166681766818668196682066821668226682366824668256682666827668286682966830668316683266833668346683566836668376683866839668406684166842668436684466845668466684766848668496685066851668526685366854668556685666857668586685966860668616686266863668646686566866668676686866869668706687166872668736687466875668766687766878668796688066881668826688366884668856688666887668886688966890668916689266893668946689566896668976689866899669006690166902669036690466905669066690766908669096691066911669126691366914669156691666917669186691966920669216692266923669246692566926669276692866929669306693166932669336693466935669366693766938669396694066941669426694366944669456694666947669486694966950669516695266953669546695566956669576695866959669606696166962669636696466965669666696766968669696697066971669726697366974669756697666977669786697966980669816698266983669846698566986669876698866989669906699166992669936699466995669966699766998669996700067001670026700367004670056700667007670086700967010670116701267013670146701567016670176701867019670206702167022670236702467025670266702767028670296703067031670326703367034670356703667037670386703967040670416704267043670446704567046670476704867049670506705167052670536705467055670566705767058670596706067061670626706367064670656706667067670686706967070670716707267073670746707567076670776707867079670806708167082670836708467085670866708767088670896709067091670926709367094670956709667097670986709967100671016710267103671046710567106671076710867109671106711167112671136711467115671166711767118671196712067121671226712367124671256712667127671286712967130671316713267133671346713567136671376713867139671406714167142671436714467145671466714767148671496715067151671526715367154671556715667157671586715967160671616716267163671646716567166671676716867169671706717167172671736717467175671766717767178671796718067181671826718367184671856718667187671886718967190671916719267193671946719567196671976719867199672006720167202672036720467205672066720767208672096721067211672126721367214672156721667217672186721967220672216722267223672246722567226672276722867229672306723167232672336723467235672366723767238672396724067241672426724367244672456724667247672486724967250672516725267253672546725567256672576725867259672606726167262672636726467265672666726767268672696727067271672726727367274672756727667277672786727967280672816728267283672846728567286672876728867289672906729167292672936729467295672966729767298672996730067301673026730367304673056730667307673086730967310673116731267313673146731567316673176731867319673206732167322673236732467325673266732767328673296733067331673326733367334673356733667337673386733967340673416734267343673446734567346673476734867349673506735167352673536735467355673566735767358673596736067361673626736367364673656736667367673686736967370673716737267373673746737567376673776737867379673806738167382673836738467385673866738767388673896739067391673926739367394673956739667397673986739967400674016740267403674046740567406674076740867409674106741167412674136741467415674166741767418674196742067421674226742367424674256742667427674286742967430674316743267433674346743567436674376743867439674406744167442674436744467445674466744767448674496745067451674526745367454674556745667457674586745967460674616746267463674646746567466674676746867469674706747167472674736747467475674766747767478674796748067481674826748367484674856748667487674886748967490674916749267493674946749567496674976749867499675006750167502675036750467505675066750767508675096751067511675126751367514675156751667517675186751967520675216752267523675246752567526675276752867529675306753167532675336753467535675366753767538675396754067541675426754367544675456754667547675486754967550675516755267553675546755567556675576755867559675606756167562675636756467565675666756767568675696757067571675726757367574675756757667577675786757967580675816758267583675846758567586675876758867589675906759167592675936759467595675966759767598675996760067601676026760367604676056760667607676086760967610676116761267613676146761567616676176761867619676206762167622676236762467625676266762767628676296763067631676326763367634676356763667637676386763967640676416764267643676446764567646676476764867649676506765167652676536765467655676566765767658676596766067661676626766367664676656766667667676686766967670676716767267673676746767567676676776767867679676806768167682676836768467685676866768767688676896769067691676926769367694676956769667697676986769967700677016770267703677046770567706677076770867709677106771167712677136771467715677166771767718677196772067721677226772367724677256772667727677286772967730677316773267733677346773567736677376773867739677406774167742677436774467745677466774767748677496775067751677526775367754677556775667757677586775967760677616776267763677646776567766677676776867769677706777167772677736777467775677766777767778677796778067781677826778367784677856778667787677886778967790677916779267793677946779567796677976779867799678006780167802678036780467805678066780767808678096781067811678126781367814678156781667817678186781967820678216782267823678246782567826678276782867829678306783167832678336783467835678366783767838678396784067841678426784367844678456784667847678486784967850678516785267853678546785567856678576785867859678606786167862678636786467865678666786767868678696787067871678726787367874678756787667877678786787967880678816788267883678846788567886678876788867889678906789167892678936789467895678966789767898678996790067901679026790367904679056790667907679086790967910679116791267913679146791567916679176791867919679206792167922679236792467925679266792767928679296793067931679326793367934679356793667937679386793967940679416794267943679446794567946679476794867949679506795167952679536795467955679566795767958679596796067961679626796367964679656796667967679686796967970679716797267973679746797567976679776797867979679806798167982679836798467985679866798767988679896799067991679926799367994679956799667997679986799968000680016800268003680046800568006680076800868009680106801168012680136801468015680166801768018680196802068021680226802368024680256802668027680286802968030680316803268033680346803568036680376803868039680406804168042680436804468045680466804768048680496805068051680526805368054680556805668057680586805968060680616806268063680646806568066680676806868069680706807168072680736807468075680766807768078680796808068081680826808368084680856808668087680886808968090680916809268093680946809568096680976809868099681006810168102681036810468105681066810768108681096811068111681126811368114681156811668117681186811968120681216812268123681246812568126681276812868129681306813168132681336813468135681366813768138681396814068141681426814368144681456814668147681486814968150681516815268153681546815568156681576815868159681606816168162681636816468165681666816768168681696817068171681726817368174681756817668177681786817968180681816818268183681846818568186681876818868189681906819168192681936819468195681966819768198681996820068201682026820368204682056820668207682086820968210682116821268213682146821568216682176821868219682206822168222682236822468225682266822768228682296823068231682326823368234682356823668237682386823968240682416824268243682446824568246682476824868249682506825168252682536825468255682566825768258682596826068261682626826368264682656826668267682686826968270682716827268273682746827568276682776827868279682806828168282682836828468285682866828768288682896829068291682926829368294682956829668297682986829968300683016830268303683046830568306683076830868309683106831168312683136831468315683166831768318683196832068321683226832368324683256832668327683286832968330683316833268333683346833568336683376833868339683406834168342683436834468345683466834768348683496835068351683526835368354683556835668357683586835968360683616836268363683646836568366683676836868369683706837168372683736837468375683766837768378683796838068381683826838368384683856838668387683886838968390683916839268393683946839568396683976839868399684006840168402684036840468405684066840768408684096841068411684126841368414684156841668417684186841968420684216842268423684246842568426684276842868429684306843168432684336843468435684366843768438684396844068441684426844368444684456844668447684486844968450684516845268453684546845568456684576845868459684606846168462684636846468465684666846768468684696847068471684726847368474684756847668477684786847968480684816848268483684846848568486684876848868489684906849168492684936849468495684966849768498684996850068501685026850368504685056850668507685086850968510685116851268513685146851568516685176851868519685206852168522685236852468525685266852768528685296853068531685326853368534685356853668537685386853968540685416854268543685446854568546685476854868549685506855168552685536855468555685566855768558685596856068561685626856368564685656856668567685686856968570685716857268573685746857568576685776857868579685806858168582685836858468585685866858768588685896859068591685926859368594685956859668597685986859968600686016860268603686046860568606686076860868609686106861168612686136861468615686166861768618686196862068621686226862368624686256862668627686286862968630686316863268633686346863568636686376863868639686406864168642686436864468645686466864768648686496865068651686526865368654686556865668657686586865968660686616866268663686646866568666686676866868669686706867168672686736867468675686766867768678686796868068681686826868368684686856868668687686886868968690686916869268693686946869568696686976869868699687006870168702687036870468705687066870768708687096871068711687126871368714687156871668717687186871968720687216872268723687246872568726687276872868729687306873168732687336873468735687366873768738687396874068741687426874368744687456874668747687486874968750687516875268753687546875568756687576875868759687606876168762687636876468765687666876768768687696877068771687726877368774687756877668777687786877968780687816878268783687846878568786687876878868789687906879168792687936879468795687966879768798687996880068801688026880368804688056880668807688086880968810688116881268813688146881568816688176881868819688206882168822688236882468825688266882768828688296883068831688326883368834688356883668837688386883968840688416884268843688446884568846688476884868849688506885168852688536885468855688566885768858688596886068861688626886368864688656886668867688686886968870688716887268873688746887568876688776887868879688806888168882688836888468885688866888768888688896889068891688926889368894688956889668897688986889968900689016890268903689046890568906689076890868909689106891168912689136891468915689166891768918689196892068921689226892368924689256892668927689286892968930689316893268933689346893568936689376893868939689406894168942689436894468945689466894768948689496895068951689526895368954689556895668957689586895968960689616896268963689646896568966689676896868969689706897168972689736897468975689766897768978689796898068981689826898368984689856898668987689886898968990689916899268993689946899568996689976899868999690006900169002690036900469005690066900769008690096901069011690126901369014690156901669017690186901969020690216902269023690246902569026690276902869029690306903169032690336903469035690366903769038690396904069041690426904369044690456904669047690486904969050690516905269053690546905569056690576905869059690606906169062690636906469065690666906769068690696907069071690726907369074690756907669077690786907969080690816908269083690846908569086690876908869089690906909169092690936909469095690966909769098690996910069101691026910369104691056910669107691086910969110691116911269113691146911569116691176911869119691206912169122691236912469125691266912769128691296913069131691326913369134691356913669137691386913969140691416914269143691446914569146691476914869149691506915169152691536915469155691566915769158691596916069161691626916369164691656916669167691686916969170691716917269173691746917569176691776917869179691806918169182691836918469185691866918769188691896919069191691926919369194691956919669197691986919969200692016920269203692046920569206692076920869209692106921169212692136921469215692166921769218692196922069221692226922369224692256922669227692286922969230692316923269233692346923569236692376923869239692406924169242692436924469245692466924769248692496925069251692526925369254692556925669257692586925969260692616926269263692646926569266692676926869269692706927169272692736927469275692766927769278692796928069281692826928369284692856928669287692886928969290692916929269293692946929569296692976929869299693006930169302693036930469305693066930769308693096931069311693126931369314693156931669317693186931969320693216932269323693246932569326693276932869329693306933169332693336933469335693366933769338693396934069341693426934369344693456934669347693486934969350693516935269353693546935569356693576935869359693606936169362693636936469365693666936769368693696937069371693726937369374693756937669377693786937969380693816938269383693846938569386693876938869389693906939169392693936939469395693966939769398693996940069401694026940369404694056940669407694086940969410694116941269413694146941569416694176941869419694206942169422694236942469425694266942769428694296943069431694326943369434694356943669437694386943969440694416944269443694446944569446694476944869449694506945169452694536945469455694566945769458694596946069461694626946369464694656946669467694686946969470694716947269473694746947569476694776947869479694806948169482694836948469485694866948769488694896949069491694926949369494694956949669497694986949969500695016950269503695046950569506695076950869509695106951169512695136951469515695166951769518695196952069521695226952369524695256952669527695286952969530695316953269533695346953569536695376953869539695406954169542695436954469545695466954769548695496955069551695526955369554695556955669557695586955969560695616956269563695646956569566695676956869569695706957169572695736957469575695766957769578695796958069581695826958369584695856958669587695886958969590695916959269593695946959569596695976959869599696006960169602696036960469605696066960769608696096961069611696126961369614696156961669617696186961969620696216962269623696246962569626696276962869629696306963169632696336963469635696366963769638696396964069641696426964369644696456964669647696486964969650696516965269653696546965569656696576965869659696606966169662696636966469665696666966769668696696967069671696726967369674696756967669677696786967969680696816968269683696846968569686696876968869689696906969169692696936969469695696966969769698696996970069701697026970369704697056970669707697086970969710697116971269713697146971569716697176971869719697206972169722697236972469725697266972769728697296973069731697326973369734697356973669737697386973969740697416974269743697446974569746697476974869749697506975169752697536975469755697566975769758697596976069761697626976369764697656976669767697686976969770697716977269773697746977569776697776977869779697806978169782697836978469785697866978769788697896979069791697926979369794697956979669797697986979969800698016980269803698046980569806698076980869809698106981169812698136981469815698166981769818698196982069821698226982369824698256982669827698286982969830698316983269833698346983569836698376983869839698406984169842698436984469845698466984769848698496985069851698526985369854698556985669857698586985969860698616986269863698646986569866698676986869869698706987169872698736987469875698766987769878698796988069881698826988369884698856988669887698886988969890698916989269893698946989569896698976989869899699006990169902699036990469905699066990769908699096991069911699126991369914699156991669917699186991969920699216992269923699246992569926699276992869929699306993169932699336993469935699366993769938699396994069941699426994369944699456994669947699486994969950699516995269953699546995569956699576995869959699606996169962699636996469965699666996769968699696997069971699726997369974699756997669977699786997969980699816998269983699846998569986699876998869989699906999169992699936999469995699966999769998699997000070001700027000370004700057000670007700087000970010700117001270013700147001570016700177001870019700207002170022700237002470025700267002770028700297003070031700327003370034700357003670037700387003970040700417004270043700447004570046700477004870049700507005170052700537005470055700567005770058700597006070061700627006370064700657006670067700687006970070700717007270073700747007570076700777007870079700807008170082700837008470085700867008770088700897009070091700927009370094700957009670097700987009970100701017010270103701047010570106701077010870109701107011170112701137011470115701167011770118701197012070121701227012370124701257012670127701287012970130701317013270133701347013570136701377013870139701407014170142701437014470145701467014770148701497015070151701527015370154701557015670157701587015970160701617016270163701647016570166701677016870169701707017170172701737017470175701767017770178701797018070181701827018370184701857018670187701887018970190701917019270193701947019570196701977019870199702007020170202702037020470205702067020770208702097021070211702127021370214702157021670217702187021970220702217022270223702247022570226702277022870229702307023170232702337023470235702367023770238702397024070241702427024370244702457024670247702487024970250702517025270253702547025570256702577025870259702607026170262702637026470265702667026770268702697027070271702727027370274702757027670277702787027970280702817028270283702847028570286702877028870289702907029170292702937029470295702967029770298702997030070301703027030370304703057030670307703087030970310703117031270313703147031570316703177031870319703207032170322703237032470325703267032770328703297033070331703327033370334703357033670337703387033970340703417034270343703447034570346703477034870349703507035170352703537035470355703567035770358703597036070361703627036370364703657036670367703687036970370703717037270373703747037570376703777037870379703807038170382703837038470385703867038770388703897039070391703927039370394703957039670397703987039970400704017040270403704047040570406704077040870409704107041170412704137041470415704167041770418704197042070421704227042370424704257042670427704287042970430704317043270433704347043570436704377043870439704407044170442704437044470445704467044770448704497045070451704527045370454704557045670457704587045970460704617046270463704647046570466704677046870469704707047170472704737047470475704767047770478704797048070481704827048370484704857048670487704887048970490704917049270493704947049570496704977049870499705007050170502705037050470505705067050770508705097051070511705127051370514705157051670517705187051970520705217052270523705247052570526705277052870529705307053170532705337053470535705367053770538705397054070541705427054370544705457054670547705487054970550705517055270553705547055570556705577055870559705607056170562705637056470565705667056770568705697057070571705727057370574705757057670577705787057970580705817058270583705847058570586705877058870589705907059170592705937059470595705967059770598705997060070601706027060370604706057060670607706087060970610706117061270613706147061570616706177061870619706207062170622706237062470625706267062770628706297063070631706327063370634706357063670637706387063970640706417064270643706447064570646706477064870649706507065170652706537065470655706567065770658706597066070661706627066370664706657066670667706687066970670706717067270673706747067570676706777067870679706807068170682706837068470685706867068770688706897069070691706927069370694706957069670697706987069970700707017070270703707047070570706707077070870709707107071170712707137071470715707167071770718707197072070721707227072370724707257072670727707287072970730707317073270733707347073570736707377073870739707407074170742707437074470745707467074770748707497075070751707527075370754707557075670757707587075970760707617076270763707647076570766707677076870769707707077170772707737077470775707767077770778707797078070781707827078370784707857078670787707887078970790707917079270793707947079570796707977079870799708007080170802708037080470805708067080770808708097081070811708127081370814708157081670817708187081970820708217082270823708247082570826708277082870829708307083170832708337083470835708367083770838708397084070841708427084370844708457084670847708487084970850708517085270853708547085570856708577085870859708607086170862708637086470865708667086770868708697087070871708727087370874708757087670877708787087970880708817088270883708847088570886708877088870889708907089170892708937089470895708967089770898708997090070901709027090370904709057090670907709087090970910709117091270913709147091570916709177091870919709207092170922709237092470925709267092770928709297093070931709327093370934709357093670937709387093970940709417094270943709447094570946709477094870949709507095170952709537095470955709567095770958709597096070961709627096370964709657096670967709687096970970709717097270973709747097570976709777097870979709807098170982709837098470985709867098770988709897099070991709927099370994709957099670997709987099971000710017100271003710047100571006710077100871009710107101171012710137101471015710167101771018710197102071021710227102371024710257102671027710287102971030710317103271033710347103571036710377103871039710407104171042710437104471045710467104771048710497105071051710527105371054710557105671057710587105971060710617106271063710647106571066710677106871069710707107171072710737107471075710767107771078710797108071081710827108371084710857108671087710887108971090710917109271093710947109571096710977109871099711007110171102711037110471105711067110771108711097111071111711127111371114711157111671117711187111971120711217112271123711247112571126711277112871129711307113171132711337113471135711367113771138711397114071141711427114371144711457114671147711487114971150711517115271153711547115571156711577115871159711607116171162711637116471165711667116771168711697117071171711727117371174711757117671177711787117971180711817118271183711847118571186711877118871189711907119171192711937119471195711967119771198711997120071201712027120371204712057120671207712087120971210712117121271213712147121571216712177121871219712207122171222712237122471225712267122771228712297123071231712327123371234712357123671237712387123971240712417124271243712447124571246712477124871249712507125171252712537125471255712567125771258712597126071261712627126371264712657126671267712687126971270712717127271273712747127571276712777127871279712807128171282712837128471285712867128771288712897129071291712927129371294712957129671297712987129971300713017130271303713047130571306713077130871309713107131171312713137131471315713167131771318713197132071321713227132371324713257132671327713287132971330713317133271333713347133571336713377133871339713407134171342713437134471345713467134771348713497135071351713527135371354713557135671357713587135971360713617136271363713647136571366713677136871369713707137171372713737137471375713767137771378713797138071381713827138371384713857138671387713887138971390713917139271393713947139571396713977139871399714007140171402714037140471405714067140771408714097141071411714127141371414714157141671417714187141971420714217142271423714247142571426714277142871429714307143171432714337143471435714367143771438714397144071441714427144371444714457144671447714487144971450714517145271453714547145571456714577145871459714607146171462714637146471465714667146771468714697147071471714727147371474714757147671477714787147971480714817148271483714847148571486714877148871489714907149171492714937149471495714967149771498714997150071501715027150371504715057150671507715087150971510715117151271513715147151571516715177151871519715207152171522715237152471525715267152771528715297153071531715327153371534715357153671537715387153971540715417154271543715447154571546715477154871549715507155171552715537155471555715567155771558715597156071561715627156371564715657156671567715687156971570715717157271573715747157571576715777157871579715807158171582715837158471585715867158771588715897159071591715927159371594715957159671597715987159971600716017160271603716047160571606716077160871609716107161171612716137161471615716167161771618716197162071621716227162371624716257162671627716287162971630716317163271633716347163571636716377163871639716407164171642716437164471645716467164771648716497165071651716527165371654716557165671657716587165971660716617166271663716647166571666716677166871669716707167171672716737167471675716767167771678716797168071681716827168371684716857168671687716887168971690716917169271693716947169571696716977169871699717007170171702717037170471705717067170771708717097171071711717127171371714717157171671717717187171971720717217172271723717247172571726717277172871729717307173171732717337173471735717367173771738717397174071741717427174371744717457174671747717487174971750717517175271753717547175571756717577175871759717607176171762717637176471765717667176771768717697177071771717727177371774717757177671777717787177971780717817178271783717847178571786717877178871789717907179171792717937179471795717967179771798717997180071801718027180371804718057180671807718087180971810718117181271813718147181571816718177181871819718207182171822718237182471825718267182771828718297183071831718327183371834718357183671837718387183971840718417184271843718447184571846718477184871849718507185171852718537185471855718567185771858718597186071861718627186371864718657186671867718687186971870718717187271873718747187571876718777187871879718807188171882718837188471885718867188771888718897189071891718927189371894718957189671897718987189971900719017190271903719047190571906719077190871909719107191171912719137191471915719167191771918719197192071921719227192371924719257192671927719287192971930719317193271933719347193571936719377193871939719407194171942719437194471945719467194771948719497195071951719527195371954719557195671957719587195971960719617196271963719647196571966719677196871969719707197171972719737197471975719767197771978719797198071981719827198371984719857198671987719887198971990719917199271993719947199571996719977199871999720007200172002720037200472005720067200772008720097201072011720127201372014720157201672017720187201972020720217202272023720247202572026720277202872029720307203172032720337203472035720367203772038720397204072041720427204372044720457204672047720487204972050720517205272053720547205572056720577205872059720607206172062720637206472065720667206772068720697207072071720727207372074720757207672077720787207972080720817208272083720847208572086720877208872089720907209172092720937209472095720967209772098720997210072101721027210372104721057210672107721087210972110721117211272113721147211572116721177211872119721207212172122721237212472125721267212772128721297213072131721327213372134721357213672137721387213972140721417214272143721447214572146721477214872149721507215172152721537215472155721567215772158721597216072161721627216372164721657216672167721687216972170721717217272173721747217572176721777217872179721807218172182721837218472185721867218772188721897219072191721927219372194721957219672197721987219972200722017220272203722047220572206722077220872209722107221172212722137221472215722167221772218722197222072221722227222372224722257222672227722287222972230722317223272233722347223572236722377223872239722407224172242722437224472245722467224772248722497225072251722527225372254722557225672257722587225972260722617226272263722647226572266722677226872269722707227172272722737227472275722767227772278722797228072281722827228372284722857228672287722887228972290722917229272293722947229572296722977229872299723007230172302723037230472305723067230772308723097231072311723127231372314723157231672317723187231972320723217232272323723247232572326723277232872329723307233172332723337233472335723367233772338723397234072341723427234372344723457234672347723487234972350723517235272353723547235572356723577235872359723607236172362723637236472365723667236772368723697237072371723727237372374723757237672377723787237972380723817238272383723847238572386723877238872389723907239172392723937239472395723967239772398723997240072401724027240372404724057240672407724087240972410724117241272413724147241572416724177241872419724207242172422724237242472425724267242772428724297243072431724327243372434724357243672437724387243972440724417244272443724447244572446724477244872449724507245172452724537245472455724567245772458724597246072461724627246372464724657246672467724687246972470724717247272473724747247572476724777247872479724807248172482724837248472485724867248772488724897249072491724927249372494724957249672497724987249972500725017250272503725047250572506725077250872509725107251172512725137251472515725167251772518725197252072521725227252372524725257252672527725287252972530725317253272533725347253572536725377253872539725407254172542725437254472545725467254772548725497255072551725527255372554725557255672557725587255972560725617256272563725647256572566725677256872569725707257172572725737257472575725767257772578725797258072581725827258372584725857258672587725887258972590725917259272593725947259572596725977259872599726007260172602726037260472605726067260772608726097261072611726127261372614726157261672617726187261972620726217262272623726247262572626726277262872629726307263172632726337263472635726367263772638726397264072641726427264372644726457264672647726487264972650726517265272653726547265572656726577265872659726607266172662726637266472665726667266772668726697267072671726727267372674726757267672677726787267972680726817268272683726847268572686726877268872689726907269172692726937269472695726967269772698726997270072701727027270372704727057270672707727087270972710727117271272713727147271572716727177271872719727207272172722727237272472725727267272772728727297273072731727327273372734727357273672737727387273972740727417274272743727447274572746727477274872749727507275172752727537275472755727567275772758727597276072761727627276372764727657276672767727687276972770727717277272773727747277572776727777277872779727807278172782727837278472785727867278772788727897279072791727927279372794727957279672797727987279972800728017280272803728047280572806728077280872809728107281172812728137281472815728167281772818728197282072821728227282372824728257282672827728287282972830728317283272833728347283572836728377283872839728407284172842728437284472845728467284772848728497285072851728527285372854728557285672857728587285972860728617286272863728647286572866728677286872869728707287172872728737287472875728767287772878728797288072881728827288372884728857288672887728887288972890728917289272893728947289572896728977289872899729007290172902729037290472905729067290772908729097291072911729127291372914729157291672917729187291972920729217292272923729247292572926729277292872929729307293172932729337293472935729367293772938729397294072941729427294372944729457294672947729487294972950729517295272953729547295572956729577295872959729607296172962729637296472965729667296772968729697297072971729727297372974729757297672977729787297972980729817298272983729847298572986729877298872989729907299172992729937299472995729967299772998729997300073001730027300373004730057300673007730087300973010730117301273013730147301573016730177301873019730207302173022730237302473025730267302773028730297303073031730327303373034730357303673037730387303973040730417304273043730447304573046730477304873049730507305173052730537305473055730567305773058730597306073061730627306373064730657306673067730687306973070730717307273073730747307573076730777307873079730807308173082730837308473085730867308773088730897309073091730927309373094730957309673097730987309973100731017310273103731047310573106731077310873109731107311173112731137311473115731167311773118731197312073121731227312373124731257312673127731287312973130731317313273133731347313573136731377313873139731407314173142731437314473145731467314773148731497315073151731527315373154731557315673157731587315973160731617316273163731647316573166731677316873169731707317173172731737317473175731767317773178731797318073181731827318373184731857318673187731887318973190731917319273193731947319573196731977319873199732007320173202732037320473205732067320773208732097321073211732127321373214732157321673217732187321973220732217322273223732247322573226732277322873229732307323173232732337323473235732367323773238732397324073241732427324373244732457324673247732487324973250732517325273253732547325573256732577325873259732607326173262732637326473265732667326773268732697327073271732727327373274732757327673277732787327973280732817328273283732847328573286732877328873289732907329173292732937329473295732967329773298732997330073301733027330373304733057330673307733087330973310733117331273313733147331573316733177331873319733207332173322733237332473325733267332773328733297333073331733327333373334733357333673337733387333973340733417334273343733447334573346733477334873349733507335173352733537335473355733567335773358733597336073361733627336373364733657336673367733687336973370733717337273373733747337573376733777337873379733807338173382733837338473385733867338773388733897339073391733927339373394733957339673397733987339973400734017340273403734047340573406734077340873409734107341173412734137341473415734167341773418734197342073421734227342373424734257342673427734287342973430734317343273433734347343573436734377343873439734407344173442734437344473445734467344773448734497345073451734527345373454734557345673457734587345973460734617346273463734647346573466734677346873469734707347173472734737347473475734767347773478734797348073481734827348373484734857348673487734887348973490734917349273493734947349573496734977349873499735007350173502735037350473505735067350773508735097351073511735127351373514735157351673517735187351973520735217352273523735247352573526735277352873529735307353173532735337353473535735367353773538735397354073541735427354373544735457354673547735487354973550735517355273553735547355573556735577355873559735607356173562735637356473565735667356773568735697357073571735727357373574735757357673577735787357973580735817358273583735847358573586735877358873589735907359173592735937359473595735967359773598735997360073601736027360373604736057360673607736087360973610736117361273613736147361573616736177361873619736207362173622736237362473625736267362773628736297363073631736327363373634736357363673637736387363973640736417364273643736447364573646736477364873649736507365173652736537365473655736567365773658736597366073661736627366373664736657366673667736687366973670736717367273673736747367573676736777367873679736807368173682736837368473685736867368773688736897369073691736927369373694736957369673697736987369973700737017370273703737047370573706737077370873709737107371173712737137371473715737167371773718737197372073721737227372373724737257372673727737287372973730737317373273733737347373573736737377373873739737407374173742737437374473745737467374773748737497375073751737527375373754737557375673757737587375973760737617376273763737647376573766737677376873769737707377173772737737377473775737767377773778737797378073781737827378373784737857378673787737887378973790737917379273793737947379573796737977379873799738007380173802738037380473805738067380773808738097381073811738127381373814738157381673817738187381973820738217382273823738247382573826738277382873829738307383173832738337383473835738367383773838738397384073841738427384373844738457384673847738487384973850738517385273853738547385573856738577385873859738607386173862738637386473865738667386773868738697387073871738727387373874738757387673877738787387973880738817388273883738847388573886738877388873889738907389173892738937389473895738967389773898738997390073901739027390373904739057390673907739087390973910739117391273913739147391573916739177391873919739207392173922739237392473925739267392773928739297393073931739327393373934739357393673937739387393973940739417394273943739447394573946739477394873949739507395173952739537395473955739567395773958739597396073961739627396373964739657396673967739687396973970739717397273973739747397573976739777397873979739807398173982739837398473985739867398773988739897399073991739927399373994739957399673997739987399974000740017400274003740047400574006740077400874009740107401174012740137401474015740167401774018740197402074021740227402374024740257402674027740287402974030740317403274033740347403574036740377403874039740407404174042740437404474045740467404774048740497405074051740527405374054740557405674057740587405974060740617406274063740647406574066740677406874069740707407174072740737407474075740767407774078740797408074081740827408374084740857408674087740887408974090740917409274093740947409574096740977409874099741007410174102741037410474105741067410774108741097411074111741127411374114741157411674117741187411974120741217412274123741247412574126741277412874129741307413174132741337413474135741367413774138741397414074141741427414374144741457414674147741487414974150741517415274153741547415574156741577415874159741607416174162741637416474165741667416774168741697417074171741727417374174741757417674177741787417974180741817418274183741847418574186741877418874189741907419174192741937419474195741967419774198741997420074201742027420374204742057420674207742087420974210742117421274213742147421574216742177421874219742207422174222742237422474225742267422774228742297423074231742327423374234742357423674237742387423974240742417424274243742447424574246742477424874249742507425174252742537425474255742567425774258742597426074261742627426374264742657426674267742687426974270742717427274273742747427574276742777427874279742807428174282742837428474285742867428774288742897429074291742927429374294742957429674297742987429974300743017430274303743047430574306743077430874309743107431174312743137431474315743167431774318743197432074321743227432374324743257432674327743287432974330743317433274333743347433574336743377433874339743407434174342743437434474345743467434774348743497435074351743527435374354743557435674357743587435974360743617436274363743647436574366743677436874369743707437174372743737437474375743767437774378743797438074381743827438374384743857438674387743887438974390743917439274393743947439574396743977439874399744007440174402744037440474405744067440774408744097441074411744127441374414744157441674417744187441974420744217442274423744247442574426744277442874429744307443174432744337443474435744367443774438744397444074441744427444374444744457444674447744487444974450744517445274453744547445574456744577445874459744607446174462744637446474465744667446774468744697447074471744727447374474744757447674477744787447974480744817448274483744847448574486744877448874489744907449174492744937449474495744967449774498744997450074501745027450374504745057450674507745087450974510745117451274513745147451574516745177451874519745207452174522745237452474525745267452774528745297453074531745327453374534745357453674537745387453974540745417454274543745447454574546745477454874549745507455174552745537455474555745567455774558745597456074561745627456374564745657456674567745687456974570745717457274573745747457574576745777457874579745807458174582745837458474585745867458774588745897459074591745927459374594745957459674597745987459974600746017460274603746047460574606746077460874609746107461174612746137461474615746167461774618746197462074621746227462374624746257462674627746287462974630746317463274633746347463574636746377463874639746407464174642746437464474645746467464774648746497465074651746527465374654746557465674657746587465974660746617466274663746647466574666746677466874669746707467174672746737467474675746767467774678746797468074681746827468374684746857468674687746887468974690746917469274693746947469574696746977469874699747007470174702747037470474705747067470774708747097471074711747127471374714747157471674717747187471974720747217472274723747247472574726747277472874729747307473174732747337473474735747367473774738747397474074741747427474374744747457474674747747487474974750747517475274753747547475574756747577475874759747607476174762747637476474765747667476774768747697477074771747727477374774747757477674777747787477974780747817478274783747847478574786747877478874789747907479174792747937479474795747967479774798747997480074801748027480374804748057480674807748087480974810748117481274813748147481574816748177481874819748207482174822748237482474825748267482774828748297483074831748327483374834748357483674837748387483974840748417484274843748447484574846748477484874849748507485174852748537485474855748567485774858748597486074861748627486374864748657486674867748687486974870748717487274873748747487574876748777487874879748807488174882748837488474885748867488774888748897489074891748927489374894748957489674897748987489974900749017490274903749047490574906749077490874909749107491174912749137491474915749167491774918749197492074921749227492374924749257492674927749287492974930749317493274933749347493574936749377493874939749407494174942749437494474945749467494774948749497495074951749527495374954749557495674957749587495974960749617496274963749647496574966749677496874969749707497174972749737497474975749767497774978749797498074981749827498374984749857498674987749887498974990749917499274993749947499574996749977499874999750007500175002750037500475005750067500775008750097501075011750127501375014750157501675017750187501975020750217502275023750247502575026750277502875029750307503175032750337503475035750367503775038750397504075041750427504375044750457504675047750487504975050750517505275053750547505575056750577505875059750607506175062750637506475065750667506775068750697507075071750727507375074750757507675077750787507975080750817508275083750847508575086750877508875089750907509175092750937509475095750967509775098750997510075101751027510375104751057510675107751087510975110751117511275113751147511575116751177511875119751207512175122751237512475125751267512775128751297513075131751327513375134751357513675137751387513975140751417514275143751447514575146751477514875149751507515175152751537515475155751567515775158751597516075161751627516375164751657516675167751687516975170751717517275173751747517575176751777517875179751807518175182751837518475185751867518775188751897519075191751927519375194751957519675197751987519975200752017520275203752047520575206752077520875209752107521175212752137521475215752167521775218752197522075221752227522375224752257522675227752287522975230752317523275233752347523575236752377523875239752407524175242752437524475245752467524775248752497525075251752527525375254752557525675257752587525975260752617526275263752647526575266752677526875269752707527175272752737527475275752767527775278752797528075281752827528375284752857528675287752887528975290752917529275293752947529575296752977529875299753007530175302753037530475305753067530775308753097531075311753127531375314753157531675317753187531975320753217532275323753247532575326753277532875329753307533175332753337533475335753367533775338753397534075341753427534375344753457534675347753487534975350753517535275353753547535575356753577535875359753607536175362753637536475365753667536775368753697537075371753727537375374753757537675377753787537975380753817538275383753847538575386753877538875389753907539175392753937539475395753967539775398753997540075401754027540375404754057540675407754087540975410754117541275413754147541575416754177541875419754207542175422754237542475425754267542775428754297543075431754327543375434754357543675437754387543975440754417544275443754447544575446754477544875449754507545175452754537545475455754567545775458754597546075461754627546375464754657546675467754687546975470754717547275473754747547575476754777547875479754807548175482754837548475485754867548775488754897549075491754927549375494754957549675497754987549975500755017550275503755047550575506755077550875509755107551175512755137551475515755167551775518755197552075521755227552375524755257552675527755287552975530755317553275533755347553575536755377553875539755407554175542755437554475545755467554775548755497555075551755527555375554755557555675557755587555975560755617556275563755647556575566755677556875569755707557175572755737557475575755767557775578755797558075581755827558375584755857558675587755887558975590755917559275593755947559575596755977559875599756007560175602756037560475605756067560775608756097561075611756127561375614756157561675617756187561975620756217562275623756247562575626756277562875629756307563175632756337563475635756367563775638756397564075641756427564375644756457564675647756487564975650756517565275653756547565575656756577565875659756607566175662756637566475665756667566775668756697567075671756727567375674756757567675677756787567975680756817568275683756847568575686756877568875689756907569175692756937569475695756967569775698756997570075701757027570375704757057570675707757087570975710757117571275713757147571575716757177571875719757207572175722757237572475725757267572775728757297573075731757327573375734757357573675737757387573975740757417574275743757447574575746757477574875749757507575175752757537575475755757567575775758757597576075761757627576375764757657576675767757687576975770757717577275773757747577575776757777577875779757807578175782757837578475785757867578775788757897579075791757927579375794757957579675797757987579975800758017580275803758047580575806758077580875809758107581175812758137581475815758167581775818758197582075821758227582375824758257582675827758287582975830758317583275833758347583575836758377583875839758407584175842758437584475845758467584775848758497585075851758527585375854758557585675857758587585975860758617586275863758647586575866758677586875869758707587175872758737587475875758767587775878758797588075881758827588375884758857588675887758887588975890758917589275893758947589575896758977589875899759007590175902759037590475905759067590775908759097591075911759127591375914759157591675917759187591975920759217592275923759247592575926759277592875929759307593175932759337593475935759367593775938759397594075941759427594375944759457594675947759487594975950759517595275953759547595575956759577595875959759607596175962759637596475965759667596775968759697597075971759727597375974759757597675977759787597975980759817598275983759847598575986759877598875989759907599175992759937599475995759967599775998759997600076001760027600376004760057600676007760087600976010760117601276013760147601576016760177601876019760207602176022760237602476025760267602776028760297603076031760327603376034760357603676037760387603976040760417604276043760447604576046760477604876049760507605176052760537605476055760567605776058760597606076061760627606376064760657606676067760687606976070760717607276073760747607576076760777607876079760807608176082760837608476085760867608776088760897609076091760927609376094760957609676097760987609976100761017610276103761047610576106761077610876109761107611176112761137611476115761167611776118761197612076121761227612376124761257612676127761287612976130761317613276133761347613576136761377613876139761407614176142761437614476145761467614776148761497615076151761527615376154761557615676157761587615976160761617616276163761647616576166761677616876169761707617176172761737617476175761767617776178761797618076181761827618376184761857618676187761887618976190761917619276193761947619576196761977619876199762007620176202762037620476205762067620776208762097621076211762127621376214762157621676217762187621976220762217622276223762247622576226762277622876229762307623176232762337623476235762367623776238762397624076241762427624376244762457624676247762487624976250762517625276253762547625576256762577625876259762607626176262762637626476265762667626776268762697627076271762727627376274762757627676277762787627976280762817628276283762847628576286762877628876289762907629176292762937629476295762967629776298762997630076301763027630376304763057630676307763087630976310763117631276313763147631576316763177631876319763207632176322763237632476325763267632776328763297633076331763327633376334763357633676337763387633976340763417634276343763447634576346763477634876349763507635176352763537635476355763567635776358763597636076361763627636376364763657636676367763687636976370763717637276373763747637576376763777637876379763807638176382763837638476385763867638776388763897639076391763927639376394763957639676397763987639976400764017640276403764047640576406764077640876409764107641176412764137641476415764167641776418764197642076421764227642376424764257642676427764287642976430764317643276433764347643576436764377643876439764407644176442764437644476445764467644776448764497645076451764527645376454764557645676457764587645976460764617646276463764647646576466764677646876469764707647176472764737647476475764767647776478764797648076481764827648376484764857648676487764887648976490764917649276493764947649576496764977649876499765007650176502765037650476505765067650776508765097651076511765127651376514765157651676517765187651976520765217652276523765247652576526765277652876529765307653176532765337653476535765367653776538765397654076541765427654376544765457654676547765487654976550765517655276553765547655576556765577655876559765607656176562765637656476565765667656776568765697657076571765727657376574765757657676577765787657976580765817658276583765847658576586765877658876589765907659176592765937659476595765967659776598765997660076601766027660376604766057660676607766087660976610766117661276613766147661576616766177661876619766207662176622766237662476625766267662776628766297663076631766327663376634766357663676637766387663976640766417664276643766447664576646766477664876649766507665176652766537665476655766567665776658766597666076661766627666376664766657666676667766687666976670766717667276673766747667576676766777667876679766807668176682766837668476685766867668776688766897669076691766927669376694766957669676697766987669976700767017670276703767047670576706767077670876709767107671176712767137671476715767167671776718767197672076721767227672376724767257672676727767287672976730767317673276733767347673576736767377673876739767407674176742767437674476745767467674776748767497675076751767527675376754767557675676757767587675976760767617676276763767647676576766767677676876769767707677176772767737677476775767767677776778767797678076781767827678376784767857678676787767887678976790767917679276793767947679576796767977679876799768007680176802768037680476805768067680776808768097681076811768127681376814768157681676817768187681976820768217682276823768247682576826768277682876829768307683176832768337683476835768367683776838768397684076841768427684376844768457684676847768487684976850768517685276853768547685576856768577685876859768607686176862768637686476865768667686776868768697687076871768727687376874768757687676877768787687976880768817688276883768847688576886768877688876889768907689176892768937689476895768967689776898768997690076901769027690376904769057690676907769087690976910769117691276913769147691576916769177691876919769207692176922769237692476925769267692776928769297693076931769327693376934769357693676937769387693976940769417694276943769447694576946769477694876949769507695176952769537695476955769567695776958769597696076961769627696376964769657696676967769687696976970769717697276973769747697576976769777697876979769807698176982769837698476985769867698776988769897699076991769927699376994769957699676997769987699977000770017700277003770047700577006770077700877009770107701177012770137701477015770167701777018770197702077021770227702377024770257702677027770287702977030770317703277033770347703577036770377703877039770407704177042770437704477045770467704777048770497705077051770527705377054770557705677057770587705977060770617706277063770647706577066770677706877069770707707177072770737707477075770767707777078770797708077081770827708377084770857708677087770887708977090770917709277093770947709577096770977709877099771007710177102771037710477105771067710777108771097711077111771127711377114771157711677117771187711977120771217712277123771247712577126771277712877129771307713177132771337713477135771367713777138771397714077141771427714377144771457714677147771487714977150771517715277153771547715577156771577715877159771607716177162771637716477165771667716777168771697717077171771727717377174771757717677177771787717977180771817718277183771847718577186771877718877189771907719177192771937719477195771967719777198771997720077201772027720377204772057720677207772087720977210772117721277213772147721577216772177721877219772207722177222772237722477225772267722777228772297723077231772327723377234772357723677237772387723977240772417724277243772447724577246772477724877249772507725177252772537725477255772567725777258772597726077261772627726377264772657726677267772687726977270772717727277273772747727577276772777727877279772807728177282772837728477285772867728777288772897729077291772927729377294772957729677297772987729977300773017730277303773047730577306773077730877309773107731177312773137731477315773167731777318773197732077321773227732377324773257732677327773287732977330773317733277333773347733577336773377733877339773407734177342773437734477345773467734777348773497735077351773527735377354773557735677357773587735977360773617736277363773647736577366773677736877369773707737177372773737737477375773767737777378773797738077381773827738377384773857738677387773887738977390773917739277393773947739577396773977739877399774007740177402774037740477405774067740777408774097741077411774127741377414774157741677417774187741977420774217742277423774247742577426774277742877429774307743177432774337743477435774367743777438774397744077441774427744377444774457744677447774487744977450774517745277453774547745577456774577745877459774607746177462774637746477465774667746777468774697747077471774727747377474774757747677477774787747977480774817748277483774847748577486774877748877489774907749177492774937749477495774967749777498774997750077501775027750377504775057750677507775087750977510775117751277513775147751577516775177751877519775207752177522775237752477525775267752777528775297753077531775327753377534775357753677537775387753977540775417754277543775447754577546775477754877549775507755177552775537755477555775567755777558775597756077561775627756377564775657756677567775687756977570775717757277573775747757577576775777757877579775807758177582775837758477585775867758777588775897759077591775927759377594775957759677597775987759977600776017760277603776047760577606776077760877609776107761177612776137761477615776167761777618776197762077621776227762377624776257762677627776287762977630776317763277633776347763577636776377763877639776407764177642776437764477645776467764777648776497765077651776527765377654776557765677657776587765977660776617766277663776647766577666776677766877669776707767177672776737767477675776767767777678776797768077681776827768377684776857768677687776887768977690776917769277693776947769577696776977769877699777007770177702777037770477705777067770777708777097771077711777127771377714777157771677717777187771977720777217772277723777247772577726777277772877729777307773177732777337773477735777367773777738777397774077741777427774377744777457774677747777487774977750777517775277753777547775577756777577775877759777607776177762777637776477765777667776777768777697777077771777727777377774777757777677777777787777977780777817778277783777847778577786777877778877789777907779177792777937779477795777967779777798777997780077801778027780377804778057780677807778087780977810778117781277813778147781577816778177781877819778207782177822778237782477825778267782777828778297783077831778327783377834778357783677837778387783977840778417784277843778447784577846778477784877849778507785177852778537785477855778567785777858778597786077861778627786377864778657786677867778687786977870778717787277873778747787577876778777787877879778807788177882778837788477885778867788777888778897789077891778927789377894778957789677897778987789977900779017790277903779047790577906779077790877909779107791177912779137791477915779167791777918779197792077921779227792377924779257792677927779287792977930779317793277933779347793577936779377793877939779407794177942779437794477945779467794777948779497795077951779527795377954779557795677957779587795977960779617796277963779647796577966779677796877969779707797177972779737797477975779767797777978779797798077981779827798377984779857798677987779887798977990779917799277993779947799577996779977799877999780007800178002780037800478005780067800778008780097801078011780127801378014780157801678017780187801978020780217802278023780247802578026780277802878029780307803178032780337803478035780367803778038780397804078041780427804378044780457804678047780487804978050780517805278053780547805578056780577805878059780607806178062780637806478065780667806778068780697807078071780727807378074780757807678077780787807978080780817808278083780847808578086780877808878089780907809178092780937809478095780967809778098780997810078101781027810378104781057810678107781087810978110781117811278113781147811578116781177811878119781207812178122781237812478125781267812778128781297813078131781327813378134781357813678137781387813978140781417814278143781447814578146781477814878149781507815178152781537815478155781567815778158781597816078161781627816378164781657816678167781687816978170781717817278173781747817578176781777817878179781807818178182781837818478185781867818778188781897819078191781927819378194781957819678197781987819978200782017820278203782047820578206782077820878209782107821178212782137821478215782167821778218782197822078221782227822378224782257822678227782287822978230782317823278233782347823578236782377823878239782407824178242782437824478245782467824778248782497825078251782527825378254782557825678257782587825978260782617826278263782647826578266782677826878269782707827178272782737827478275782767827778278782797828078281782827828378284782857828678287782887828978290782917829278293782947829578296782977829878299783007830178302783037830478305783067830778308783097831078311783127831378314783157831678317783187831978320783217832278323783247832578326783277832878329783307833178332783337833478335783367833778338783397834078341783427834378344783457834678347783487834978350783517835278353783547835578356783577835878359783607836178362783637836478365783667836778368783697837078371783727837378374783757837678377783787837978380783817838278383783847838578386783877838878389783907839178392783937839478395783967839778398783997840078401784027840378404784057840678407784087840978410784117841278413784147841578416784177841878419784207842178422784237842478425784267842778428784297843078431784327843378434784357843678437784387843978440784417844278443784447844578446784477844878449784507845178452784537845478455784567845778458784597846078461784627846378464784657846678467784687846978470784717847278473784747847578476784777847878479784807848178482784837848478485784867848778488784897849078491784927849378494784957849678497784987849978500785017850278503785047850578506785077850878509785107851178512785137851478515785167851778518785197852078521785227852378524785257852678527785287852978530785317853278533785347853578536785377853878539785407854178542785437854478545785467854778548785497855078551785527855378554785557855678557785587855978560785617856278563785647856578566785677856878569785707857178572785737857478575785767857778578785797858078581785827858378584785857858678587785887858978590785917859278593785947859578596785977859878599786007860178602786037860478605786067860778608786097861078611786127861378614786157861678617786187861978620786217862278623786247862578626786277862878629786307863178632786337863478635786367863778638786397864078641786427864378644786457864678647786487864978650786517865278653786547865578656786577865878659786607866178662786637866478665786667866778668786697867078671786727867378674786757867678677786787867978680786817868278683786847868578686786877868878689786907869178692786937869478695786967869778698786997870078701787027870378704787057870678707787087870978710787117871278713787147871578716787177871878719787207872178722787237872478725787267872778728787297873078731787327873378734787357873678737787387873978740787417874278743787447874578746787477874878749787507875178752787537875478755787567875778758787597876078761787627876378764787657876678767787687876978770787717877278773787747877578776787777877878779787807878178782787837878478785787867878778788787897879078791787927879378794787957879678797787987879978800788017880278803788047880578806788077880878809788107881178812788137881478815788167881778818788197882078821788227882378824788257882678827788287882978830788317883278833788347883578836788377883878839788407884178842788437884478845788467884778848788497885078851788527885378854788557885678857788587885978860788617886278863788647886578866788677886878869788707887178872788737887478875788767887778878788797888078881788827888378884788857888678887788887888978890788917889278893788947889578896788977889878899789007890178902789037890478905789067890778908789097891078911789127891378914789157891678917789187891978920789217892278923789247892578926789277892878929789307893178932789337893478935789367893778938789397894078941789427894378944789457894678947789487894978950789517895278953789547895578956789577895878959789607896178962789637896478965789667896778968789697897078971789727897378974789757897678977789787897978980789817898278983789847898578986789877898878989789907899178992789937899478995789967899778998789997900079001790027900379004790057900679007790087900979010790117901279013790147901579016790177901879019790207902179022790237902479025790267902779028790297903079031790327903379034790357903679037790387903979040790417904279043790447904579046790477904879049790507905179052790537905479055790567905779058790597906079061790627906379064790657906679067790687906979070790717907279073790747907579076790777907879079790807908179082790837908479085790867908779088790897909079091790927909379094790957909679097790987909979100791017910279103791047910579106791077910879109791107911179112791137911479115791167911779118791197912079121791227912379124791257912679127791287912979130791317913279133791347913579136791377913879139791407914179142791437914479145791467914779148791497915079151791527915379154791557915679157791587915979160791617916279163791647916579166791677916879169791707917179172791737917479175791767917779178791797918079181791827918379184791857918679187791887918979190791917919279193791947919579196791977919879199792007920179202792037920479205792067920779208792097921079211792127921379214792157921679217792187921979220792217922279223792247922579226792277922879229792307923179232792337923479235792367923779238792397924079241792427924379244792457924679247792487924979250792517925279253792547925579256792577925879259792607926179262792637926479265792667926779268792697927079271792727927379274792757927679277792787927979280792817928279283792847928579286792877928879289792907929179292792937929479295792967929779298792997930079301793027930379304793057930679307793087930979310793117931279313793147931579316793177931879319793207932179322793237932479325793267932779328793297933079331793327933379334793357933679337793387933979340793417934279343793447934579346793477934879349793507935179352793537935479355793567935779358793597936079361793627936379364793657936679367793687936979370793717937279373793747937579376793777937879379793807938179382793837938479385793867938779388793897939079391793927939379394793957939679397793987939979400794017940279403794047940579406794077940879409794107941179412794137941479415794167941779418794197942079421794227942379424794257942679427794287942979430794317943279433794347943579436794377943879439794407944179442794437944479445794467944779448794497945079451794527945379454794557945679457794587945979460794617946279463794647946579466794677946879469794707947179472794737947479475794767947779478794797948079481794827948379484794857948679487794887948979490794917949279493794947949579496794977949879499795007950179502795037950479505795067950779508795097951079511795127951379514795157951679517795187951979520795217952279523795247952579526795277952879529795307953179532795337953479535795367953779538795397954079541795427954379544795457954679547795487954979550795517955279553795547955579556795577955879559795607956179562795637956479565795667956779568795697957079571795727957379574795757957679577795787957979580795817958279583795847958579586795877958879589795907959179592795937959479595795967959779598795997960079601796027960379604796057960679607796087960979610796117961279613796147961579616796177961879619796207962179622796237962479625796267962779628796297963079631796327963379634796357963679637796387963979640796417964279643796447964579646796477964879649796507965179652796537965479655796567965779658796597966079661796627966379664796657966679667796687966979670796717967279673796747967579676796777967879679796807968179682796837968479685796867968779688796897969079691796927969379694796957969679697796987969979700797017970279703797047970579706797077970879709797107971179712797137971479715797167971779718797197972079721797227972379724797257972679727797287972979730797317973279733797347973579736797377973879739797407974179742797437974479745797467974779748797497975079751797527975379754797557975679757797587975979760797617976279763797647976579766797677976879769797707977179772797737977479775797767977779778797797978079781797827978379784797857978679787797887978979790797917979279793797947979579796797977979879799798007980179802798037980479805798067980779808798097981079811798127981379814798157981679817798187981979820798217982279823798247982579826798277982879829798307983179832798337983479835798367983779838798397984079841798427984379844798457984679847798487984979850798517985279853798547985579856798577985879859798607986179862798637986479865798667986779868798697987079871798727987379874798757987679877798787987979880798817988279883798847988579886798877988879889798907989179892798937989479895798967989779898798997990079901799027990379904799057990679907799087990979910799117991279913799147991579916799177991879919799207992179922799237992479925799267992779928799297993079931799327993379934799357993679937799387993979940799417994279943799447994579946799477994879949799507995179952799537995479955799567995779958799597996079961799627996379964799657996679967799687996979970799717997279973799747997579976799777997879979799807998179982799837998479985799867998779988799897999079991799927999379994799957999679997799987999980000800018000280003800048000580006800078000880009800108001180012800138001480015800168001780018800198002080021800228002380024800258002680027800288002980030800318003280033800348003580036800378003880039800408004180042800438004480045800468004780048800498005080051800528005380054 |
- (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.ExcelJS = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
- function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- var fs = require('fs');
- var fastCsv = require('fast-csv');
- var customParseFormat = require('dayjs/plugin/customParseFormat');
- var utc = require('dayjs/plugin/utc');
- var dayjs = require('dayjs').extend(customParseFormat).extend(utc);
- var StreamBuf = require('../utils/stream-buf');
- var _require = require('../utils/utils'),
- exists = _require.fs.exists;
- /* eslint-disable quote-props */
- var SpecialValues = {
- true: true,
- false: false,
- '#N/A': {
- error: '#N/A'
- },
- '#REF!': {
- error: '#REF!'
- },
- '#NAME?': {
- error: '#NAME?'
- },
- '#DIV/0!': {
- error: '#DIV/0!'
- },
- '#NULL!': {
- error: '#NULL!'
- },
- '#VALUE!': {
- error: '#VALUE!'
- },
- '#NUM!': {
- error: '#NUM!'
- }
- };
- /* eslint-ensable quote-props */
- var CSV = /*#__PURE__*/function () {
- function CSV(workbook) {
- _classCallCheck(this, CSV);
- this.workbook = workbook;
- this.worksheet = null;
- }
- _createClass(CSV, [{
- key: "readFile",
- value: function () {
- var _readFile = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(filename, options) {
- var stream, worksheet;
- return regeneratorRuntime.wrap(function _callee$(_context) {
- while (1) {
- switch (_context.prev = _context.next) {
- case 0:
- options = options || {};
- _context.next = 3;
- return exists(filename);
- case 3:
- if (_context.sent) {
- _context.next = 5;
- break;
- }
- throw new Error("File not found: ".concat(filename));
- case 5:
- stream = fs.createReadStream(filename);
- _context.next = 8;
- return this.read(stream, options);
- case 8:
- worksheet = _context.sent;
- stream.close();
- return _context.abrupt("return", worksheet);
- case 11:
- case "end":
- return _context.stop();
- }
- }
- }, _callee, this);
- }));
- function readFile(_x, _x2) {
- return _readFile.apply(this, arguments);
- }
- return readFile;
- }()
- }, {
- key: "read",
- value: function read(stream, options) {
- var _this = this;
- options = options || {};
- return new Promise(function (resolve, reject) {
- var worksheet = _this.workbook.addWorksheet(options.sheetName);
- var dateFormats = options.dateFormats || ['YYYY-MM-DD[T]HH:mm:ssZ', 'YYYY-MM-DD[T]HH:mm:ss', 'MM-DD-YYYY', 'YYYY-MM-DD'];
- var map = options.map || function (datum) {
- if (datum === '') {
- return null;
- }
- var datumNumber = Number(datum);
- if (!Number.isNaN(datumNumber) && datumNumber !== Infinity) {
- return datumNumber;
- }
- var dt = dateFormats.reduce(function (matchingDate, currentDateFormat) {
- if (matchingDate) {
- return matchingDate;
- }
- var dayjsObj = dayjs(datum, currentDateFormat, true);
- if (dayjsObj.isValid()) {
- return dayjsObj;
- }
- return null;
- }, null);
- if (dt) {
- return new Date(dt.valueOf());
- }
- var special = SpecialValues[datum];
- if (special !== undefined) {
- return special;
- }
- return datum;
- };
- var csvStream = fastCsv.parse(options.parserOptions).on('data', function (data) {
- worksheet.addRow(data.map(map));
- }).on('end', function () {
- csvStream.emit('worksheet', worksheet);
- });
- csvStream.on('worksheet', resolve).on('error', reject);
- stream.pipe(csvStream);
- });
- }
- /**
- * @deprecated since version 4.0. You should use `CSV#read` instead. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md
- */
- }, {
- key: "createInputStream",
- value: function createInputStream() {
- throw new Error('`CSV#createInputStream` is deprecated. You should use `CSV#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md');
- }
- }, {
- key: "write",
- value: function write(stream, options) {
- var _this2 = this;
- return new Promise(function (resolve, reject) {
- options = options || {}; // const encoding = options.encoding || 'utf8';
- // const separator = options.separator || ',';
- // const quoteChar = options.quoteChar || '\'';
- var worksheet = _this2.workbook.getWorksheet(options.sheetName || options.sheetId);
- var csvStream = fastCsv.format(options.formatterOptions);
- stream.on('finish', function () {
- resolve();
- });
- csvStream.on('error', reject);
- csvStream.pipe(stream);
- var _options = options,
- dateFormat = _options.dateFormat,
- dateUTC = _options.dateUTC;
- var map = options.map || function (value) {
- if (value) {
- if (value.text || value.hyperlink) {
- return value.hyperlink || value.text || '';
- }
- if (value.formula || value.result) {
- return value.result || '';
- }
- if (value instanceof Date) {
- if (dateFormat) {
- return dateUTC ? dayjs.utc(value).format(dateFormat) : dayjs(value).format(dateFormat);
- }
- return dateUTC ? dayjs.utc(value).format() : dayjs(value).format();
- }
- if (value.error) {
- return value.error;
- }
- if (_typeof(value) === 'object') {
- return JSON.stringify(value);
- }
- }
- return value;
- };
- var includeEmptyRows = options.includeEmptyRows === undefined || options.includeEmptyRows;
- var lastRow = 1;
- if (worksheet) {
- worksheet.eachRow(function (row, rowNumber) {
- if (includeEmptyRows) {
- while (lastRow++ < rowNumber - 1) {
- csvStream.write([]);
- }
- }
- var values = row.values;
- values.shift();
- csvStream.write(values.map(map));
- lastRow = rowNumber;
- });
- }
- csvStream.end();
- });
- }
- }, {
- key: "writeFile",
- value: function writeFile(filename, options) {
- options = options || {};
- var streamOptions = {
- encoding: options.encoding || 'utf8'
- };
- var stream = fs.createWriteStream(filename, streamOptions);
- return this.write(stream, options);
- }
- }, {
- key: "writeBuffer",
- value: function () {
- var _writeBuffer = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(options) {
- var stream;
- return regeneratorRuntime.wrap(function _callee2$(_context2) {
- while (1) {
- switch (_context2.prev = _context2.next) {
- case 0:
- stream = new StreamBuf();
- _context2.next = 3;
- return this.write(stream, options);
- case 3:
- return _context2.abrupt("return", stream.read());
- case 4:
- case "end":
- return _context2.stop();
- }
- }
- }, _callee2, this);
- }));
- function writeBuffer(_x3) {
- return _writeBuffer.apply(this, arguments);
- }
- return writeBuffer;
- }()
- }]);
- return CSV;
- }();
- module.exports = CSV;
- },{"../utils/stream-buf":23,"../utils/utils":26,"dayjs":227,"dayjs/plugin/customParseFormat":228,"dayjs/plugin/utc":229,"fast-csv":260,"fs":215}],2:[function(require,module,exports){
- 'use strict';
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- var colCache = require('../utils/col-cache');
- var Anchor = /*#__PURE__*/function () {
- function Anchor(worksheet, address) {
- var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
- _classCallCheck(this, Anchor);
- if (!address) {
- this.nativeCol = 0;
- this.nativeColOff = 0;
- this.nativeRow = 0;
- this.nativeRowOff = 0;
- } else if (typeof address === 'string') {
- var decoded = colCache.decodeAddress(address);
- this.nativeCol = decoded.col + offset;
- this.nativeColOff = 0;
- this.nativeRow = decoded.row + offset;
- this.nativeRowOff = 0;
- } else if (address.nativeCol !== undefined) {
- this.nativeCol = address.nativeCol || 0;
- this.nativeColOff = address.nativeColOff || 0;
- this.nativeRow = address.nativeRow || 0;
- this.nativeRowOff = address.nativeRowOff || 0;
- } else if (address.col !== undefined) {
- this.col = address.col + offset;
- this.row = address.row + offset;
- } else {
- this.nativeCol = 0;
- this.nativeColOff = 0;
- this.nativeRow = 0;
- this.nativeRowOff = 0;
- }
- this.worksheet = worksheet;
- }
- _createClass(Anchor, [{
- key: "col",
- get: function get() {
- return this.nativeCol + Math.min(this.colWidth - 1, this.nativeColOff) / this.colWidth;
- },
- set: function set(v) {
- this.nativeCol = Math.floor(v);
- this.nativeColOff = Math.floor((v - this.nativeCol) * this.colWidth);
- }
- }, {
- key: "row",
- get: function get() {
- return this.nativeRow + Math.min(this.rowHeight - 1, this.nativeRowOff) / this.rowHeight;
- },
- set: function set(v) {
- this.nativeRow = Math.floor(v);
- this.nativeRowOff = Math.floor((v - this.nativeRow) * this.rowHeight);
- }
- }, {
- key: "colWidth",
- get: function get() {
- return this.worksheet && this.worksheet.getColumn(this.nativeCol + 1) && this.worksheet.getColumn(this.nativeCol + 1).isCustomWidth ? Math.floor(this.worksheet.getColumn(this.nativeCol + 1).width * 10000) : 640000;
- }
- }, {
- key: "rowHeight",
- get: function get() {
- return this.worksheet && this.worksheet.getRow(this.nativeRow + 1) && this.worksheet.getRow(this.nativeRow + 1).height ? Math.floor(this.worksheet.getRow(this.nativeRow + 1).height * 10000) : 180000;
- }
- }, {
- key: "model",
- get: function get() {
- return {
- nativeCol: this.nativeCol,
- nativeColOff: this.nativeColOff,
- nativeRow: this.nativeRow,
- nativeRowOff: this.nativeRowOff
- };
- },
- set: function set(value) {
- this.nativeCol = value.nativeCol;
- this.nativeColOff = value.nativeColOff;
- this.nativeRow = value.nativeRow;
- this.nativeRowOff = value.nativeRowOff;
- }
- }], [{
- key: "asInstance",
- value: function asInstance(model) {
- return model instanceof Anchor || model == null ? model : new Anchor(model);
- }
- }]);
- return Anchor;
- }();
- module.exports = Anchor;
- },{"../utils/col-cache":19}],3:[function(require,module,exports){
- "use strict";
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- /* eslint-disable max-classes-per-file */
- var colCache = require('../utils/col-cache');
- var _ = require('../utils/under-dash');
- var Enums = require('./enums');
- var _require = require('../utils/shared-formula'),
- slideFormula = _require.slideFormula;
- var Note = require('./note'); // Cell requirements
- // Operate inside a worksheet
- // Store and retrieve a value with a range of types: text, number, date, hyperlink, reference, formula, etc.
- // Manage/use and manipulate cell format either as local to cell or inherited from column or row.
- var Cell = /*#__PURE__*/function () {
- function Cell(row, column, address) {
- _classCallCheck(this, Cell);
- if (!row || !column) {
- throw new Error('A Cell needs a Row');
- }
- this._row = row;
- this._column = column;
- colCache.validateAddress(address);
- this._address = address; // TODO: lazy evaluation of this._value
- this._value = Value.create(Cell.Types.Null, this);
- this.style = this._mergeStyle(row.style, column.style, {});
- this._mergeCount = 0;
- }
- _createClass(Cell, [{
- key: "destroy",
- // help GC by removing cyclic (and other) references
- value: function destroy() {
- delete this.style;
- delete this._value;
- delete this._row;
- delete this._column;
- delete this._address;
- } // =========================================================================
- // Styles stuff
- }, {
- key: "_mergeStyle",
- value: function _mergeStyle(rowStyle, colStyle, style) {
- var numFmt = rowStyle && rowStyle.numFmt || colStyle && colStyle.numFmt;
- if (numFmt) style.numFmt = numFmt;
- var font = rowStyle && rowStyle.font || colStyle && colStyle.font;
- if (font) style.font = font;
- var alignment = rowStyle && rowStyle.alignment || colStyle && colStyle.alignment;
- if (alignment) style.alignment = alignment;
- var border = rowStyle && rowStyle.border || colStyle && colStyle.border;
- if (border) style.border = border;
- var fill = rowStyle && rowStyle.fill || colStyle && colStyle.fill;
- if (fill) style.fill = fill;
- var protection = rowStyle && rowStyle.protection || colStyle && colStyle.protection;
- if (protection) style.protection = protection;
- return style;
- } // =========================================================================
- // return the address for this cell
- }, {
- key: "toCsvString",
- value: function toCsvString() {
- return this._value.toCsvString();
- } // =========================================================================
- // Merge stuff
- }, {
- key: "addMergeRef",
- value: function addMergeRef() {
- this._mergeCount++;
- }
- }, {
- key: "releaseMergeRef",
- value: function releaseMergeRef() {
- this._mergeCount--;
- }
- }, {
- key: "merge",
- value: function merge(master, ignoreStyle) {
- this._value.release();
- this._value = Value.create(Cell.Types.Merge, this, master);
- if (!ignoreStyle) {
- this.style = master.style;
- }
- }
- }, {
- key: "unmerge",
- value: function unmerge() {
- if (this.type === Cell.Types.Merge) {
- this._value.release();
- this._value = Value.create(Cell.Types.Null, this);
- this.style = this._mergeStyle(this._row.style, this._column.style, {});
- }
- }
- }, {
- key: "isMergedTo",
- value: function isMergedTo(master) {
- if (this._value.type !== Cell.Types.Merge) return false;
- return this._value.isMergedTo(master);
- }
- }, {
- key: "toString",
- value: function toString() {
- return this.text;
- }
- }, {
- key: "_upgradeToHyperlink",
- value: function _upgradeToHyperlink(hyperlink) {
- // if this cell is a string, turn it into a Hyperlink
- if (this.type === Cell.Types.String) {
- this._value = Value.create(Cell.Types.Hyperlink, this, {
- text: this._value.value,
- hyperlink: hyperlink
- });
- }
- } // =========================================================================
- // Formula stuff
- }, {
- key: "addName",
- value: function addName(name) {
- this.workbook.definedNames.addEx(this.fullAddress, name);
- }
- }, {
- key: "removeName",
- value: function removeName(name) {
- this.workbook.definedNames.removeEx(this.fullAddress, name);
- }
- }, {
- key: "removeAllNames",
- value: function removeAllNames() {
- this.workbook.definedNames.removeAllNames(this.fullAddress);
- } // =========================================================================
- // Data Validation stuff
- }, {
- key: "worksheet",
- get: function get() {
- return this._row.worksheet;
- }
- }, {
- key: "workbook",
- get: function get() {
- return this._row.worksheet.workbook;
- }
- }, {
- key: "numFmt",
- get: function get() {
- return this.style.numFmt;
- },
- set: function set(value) {
- this.style.numFmt = value;
- }
- }, {
- key: "font",
- get: function get() {
- return this.style.font;
- },
- set: function set(value) {
- this.style.font = value;
- }
- }, {
- key: "alignment",
- get: function get() {
- return this.style.alignment;
- },
- set: function set(value) {
- this.style.alignment = value;
- }
- }, {
- key: "border",
- get: function get() {
- return this.style.border;
- },
- set: function set(value) {
- this.style.border = value;
- }
- }, {
- key: "fill",
- get: function get() {
- return this.style.fill;
- },
- set: function set(value) {
- this.style.fill = value;
- }
- }, {
- key: "protection",
- get: function get() {
- return this.style.protection;
- },
- set: function set(value) {
- this.style.protection = value;
- }
- }, {
- key: "address",
- get: function get() {
- return this._address;
- }
- }, {
- key: "row",
- get: function get() {
- return this._row.number;
- }
- }, {
- key: "col",
- get: function get() {
- return this._column.number;
- }
- }, {
- key: "$col$row",
- get: function get() {
- return "$".concat(this._column.letter, "$").concat(this.row);
- } // =========================================================================
- // Value stuff
- }, {
- key: "type",
- get: function get() {
- return this._value.type;
- }
- }, {
- key: "effectiveType",
- get: function get() {
- return this._value.effectiveType;
- }
- }, {
- key: "isMerged",
- get: function get() {
- return this._mergeCount > 0 || this.type === Cell.Types.Merge;
- }
- }, {
- key: "master",
- get: function get() {
- if (this.type === Cell.Types.Merge) {
- return this._value.master;
- }
- return this; // an unmerged cell is its own master
- }
- }, {
- key: "isHyperlink",
- get: function get() {
- return this._value.type === Cell.Types.Hyperlink;
- }
- }, {
- key: "hyperlink",
- get: function get() {
- return this._value.hyperlink;
- } // return the value
- }, {
- key: "value",
- get: function get() {
- return this._value.value;
- } // set the value - can be number, string or raw
- ,
- set: function set(v) {
- // special case - merge cells set their master's value
- if (this.type === Cell.Types.Merge) {
- this._value.master.value = v;
- return;
- }
- this._value.release(); // assign value
- this._value = Value.create(Value.getType(v), this, v);
- }
- }, {
- key: "note",
- get: function get() {
- return this._comment && this._comment.note;
- },
- set: function set(note) {
- this._comment = new Note(note);
- }
- }, {
- key: "text",
- get: function get() {
- return this._value.toString();
- }
- }, {
- key: "html",
- get: function get() {
- return _.escapeHtml(this.text);
- }
- }, {
- key: "formula",
- get: function get() {
- return this._value.formula;
- }
- }, {
- key: "result",
- get: function get() {
- return this._value.result;
- }
- }, {
- key: "formulaType",
- get: function get() {
- return this._value.formulaType;
- } // =========================================================================
- // Name stuff
- }, {
- key: "fullAddress",
- get: function get() {
- var worksheet = this._row.worksheet;
- return {
- sheetName: worksheet.name,
- address: this.address,
- row: this.row,
- col: this.col
- };
- }
- }, {
- key: "name",
- get: function get() {
- return this.names[0];
- },
- set: function set(value) {
- this.names = [value];
- }
- }, {
- key: "names",
- get: function get() {
- return this.workbook.definedNames.getNamesEx(this.fullAddress);
- },
- set: function set(value) {
- var _this = this;
- var definedNames = this.workbook.definedNames;
- definedNames.removeAllNames(this.fullAddress);
- value.forEach(function (name) {
- definedNames.addEx(_this.fullAddress, name);
- });
- }
- }, {
- key: "_dataValidations",
- get: function get() {
- return this.worksheet.dataValidations;
- }
- }, {
- key: "dataValidation",
- get: function get() {
- return this._dataValidations.find(this.address);
- },
- set: function set(value) {
- this._dataValidations.add(this.address, value);
- } // =========================================================================
- // Model stuff
- }, {
- key: "model",
- get: function get() {
- var model = this._value.model;
- model.style = this.style;
- if (this._comment) {
- model.comment = this._comment.model;
- }
- return model;
- },
- set: function set(value) {
- this._value.release();
- this._value = Value.create(value.type, this);
- this._value.model = value;
- if (value.comment) {
- switch (value.comment.type) {
- case 'note':
- this._comment = Note.fromModel(value.comment);
- break;
- }
- }
- if (value.style) {
- this.style = value.style;
- } else {
- this.style = {};
- }
- }
- }]);
- return Cell;
- }();
- Cell.Types = Enums.ValueType; // =============================================================================
- // Internal Value Types
- var NullValue = /*#__PURE__*/function () {
- function NullValue(cell) {
- _classCallCheck(this, NullValue);
- this.model = {
- address: cell.address,
- type: Cell.Types.Null
- };
- }
- _createClass(NullValue, [{
- key: "toCsvString",
- value: function toCsvString() {
- return '';
- }
- }, {
- key: "release",
- value: function release() {}
- }, {
- key: "toString",
- value: function toString() {
- return '';
- }
- }, {
- key: "value",
- get: function get() {
- return null;
- },
- set: function set(value) {// nothing to do
- }
- }, {
- key: "type",
- get: function get() {
- return Cell.Types.Null;
- }
- }, {
- key: "effectiveType",
- get: function get() {
- return Cell.Types.Null;
- }
- }, {
- key: "address",
- get: function get() {
- return this.model.address;
- },
- set: function set(value) {
- this.model.address = value;
- }
- }]);
- return NullValue;
- }();
- var NumberValue = /*#__PURE__*/function () {
- function NumberValue(cell, value) {
- _classCallCheck(this, NumberValue);
- this.model = {
- address: cell.address,
- type: Cell.Types.Number,
- value: value
- };
- }
- _createClass(NumberValue, [{
- key: "toCsvString",
- value: function toCsvString() {
- return this.model.value.toString();
- }
- }, {
- key: "release",
- value: function release() {}
- }, {
- key: "toString",
- value: function toString() {
- return this.model.value.toString();
- }
- }, {
- key: "value",
- get: function get() {
- return this.model.value;
- },
- set: function set(value) {
- this.model.value = value;
- }
- }, {
- key: "type",
- get: function get() {
- return Cell.Types.Number;
- }
- }, {
- key: "effectiveType",
- get: function get() {
- return Cell.Types.Number;
- }
- }, {
- key: "address",
- get: function get() {
- return this.model.address;
- },
- set: function set(value) {
- this.model.address = value;
- }
- }]);
- return NumberValue;
- }();
- var StringValue = /*#__PURE__*/function () {
- function StringValue(cell, value) {
- _classCallCheck(this, StringValue);
- this.model = {
- address: cell.address,
- type: Cell.Types.String,
- value: value
- };
- }
- _createClass(StringValue, [{
- key: "toCsvString",
- value: function toCsvString() {
- return "\"".concat(this.model.value.replace(/"/g, '""'), "\"");
- }
- }, {
- key: "release",
- value: function release() {}
- }, {
- key: "toString",
- value: function toString() {
- return this.model.value;
- }
- }, {
- key: "value",
- get: function get() {
- return this.model.value;
- },
- set: function set(value) {
- this.model.value = value;
- }
- }, {
- key: "type",
- get: function get() {
- return Cell.Types.String;
- }
- }, {
- key: "effectiveType",
- get: function get() {
- return Cell.Types.String;
- }
- }, {
- key: "address",
- get: function get() {
- return this.model.address;
- },
- set: function set(value) {
- this.model.address = value;
- }
- }]);
- return StringValue;
- }();
- var RichTextValue = /*#__PURE__*/function () {
- function RichTextValue(cell, value) {
- _classCallCheck(this, RichTextValue);
- this.model = {
- address: cell.address,
- type: Cell.Types.String,
- value: value
- };
- }
- _createClass(RichTextValue, [{
- key: "toString",
- value: function toString() {
- return this.model.value.richText.map(function (t) {
- return t.text;
- }).join('');
- }
- }, {
- key: "toCsvString",
- value: function toCsvString() {
- return "\"".concat(this.text.replace(/"/g, '""'), "\"");
- }
- }, {
- key: "release",
- value: function release() {}
- }, {
- key: "value",
- get: function get() {
- return this.model.value;
- },
- set: function set(value) {
- this.model.value = value;
- }
- }, {
- key: "type",
- get: function get() {
- return Cell.Types.RichText;
- }
- }, {
- key: "effectiveType",
- get: function get() {
- return Cell.Types.RichText;
- }
- }, {
- key: "address",
- get: function get() {
- return this.model.address;
- },
- set: function set(value) {
- this.model.address = value;
- }
- }]);
- return RichTextValue;
- }();
- var DateValue = /*#__PURE__*/function () {
- function DateValue(cell, value) {
- _classCallCheck(this, DateValue);
- this.model = {
- address: cell.address,
- type: Cell.Types.Date,
- value: value
- };
- }
- _createClass(DateValue, [{
- key: "toCsvString",
- value: function toCsvString() {
- return this.model.value.toISOString();
- }
- }, {
- key: "release",
- value: function release() {}
- }, {
- key: "toString",
- value: function toString() {
- return this.model.value.toString();
- }
- }, {
- key: "value",
- get: function get() {
- return this.model.value;
- },
- set: function set(value) {
- this.model.value = value;
- }
- }, {
- key: "type",
- get: function get() {
- return Cell.Types.Date;
- }
- }, {
- key: "effectiveType",
- get: function get() {
- return Cell.Types.Date;
- }
- }, {
- key: "address",
- get: function get() {
- return this.model.address;
- },
- set: function set(value) {
- this.model.address = value;
- }
- }]);
- return DateValue;
- }();
- var HyperlinkValue = /*#__PURE__*/function () {
- function HyperlinkValue(cell, value) {
- _classCallCheck(this, HyperlinkValue);
- this.model = {
- address: cell.address,
- type: Cell.Types.Hyperlink,
- text: value ? value.text : undefined,
- hyperlink: value ? value.hyperlink : undefined
- };
- if (value && value.tooltip) {
- this.model.tooltip = value.tooltip;
- }
- }
- _createClass(HyperlinkValue, [{
- key: "toCsvString",
- value: function toCsvString() {
- return this.model.hyperlink;
- }
- }, {
- key: "release",
- value: function release() {}
- }, {
- key: "toString",
- value: function toString() {
- return this.model.text;
- }
- }, {
- key: "value",
- get: function get() {
- var v = {
- text: this.model.text,
- hyperlink: this.model.hyperlink
- };
- if (this.model.tooltip) {
- v.tooltip = this.model.tooltip;
- }
- return v;
- },
- set: function set(value) {
- this.model = {
- text: value.text,
- hyperlink: value.hyperlink
- };
- if (value.tooltip) {
- this.model.tooltip = value.tooltip;
- }
- }
- }, {
- key: "text",
- get: function get() {
- return this.model.text;
- },
- set: function set(value) {
- this.model.text = value;
- }
- /*
- get tooltip() {
- return this.model.tooltip;
- }
- set tooltip(value) {
- this.model.tooltip = value;
- } */
- }, {
- key: "hyperlink",
- get: function get() {
- return this.model.hyperlink;
- },
- set: function set(value) {
- this.model.hyperlink = value;
- }
- }, {
- key: "type",
- get: function get() {
- return Cell.Types.Hyperlink;
- }
- }, {
- key: "effectiveType",
- get: function get() {
- return Cell.Types.Hyperlink;
- }
- }, {
- key: "address",
- get: function get() {
- return this.model.address;
- },
- set: function set(value) {
- this.model.address = value;
- }
- }]);
- return HyperlinkValue;
- }();
- var MergeValue = /*#__PURE__*/function () {
- function MergeValue(cell, master) {
- _classCallCheck(this, MergeValue);
- this.model = {
- address: cell.address,
- type: Cell.Types.Merge,
- master: master ? master.address : undefined
- };
- this._master = master;
- if (master) {
- master.addMergeRef();
- }
- }
- _createClass(MergeValue, [{
- key: "isMergedTo",
- value: function isMergedTo(master) {
- return master === this._master;
- }
- }, {
- key: "toCsvString",
- value: function toCsvString() {
- return '';
- }
- }, {
- key: "release",
- value: function release() {
- this._master.releaseMergeRef();
- }
- }, {
- key: "toString",
- value: function toString() {
- return this.value.toString();
- }
- }, {
- key: "value",
- get: function get() {
- return this._master.value;
- },
- set: function set(value) {
- if (value instanceof Cell) {
- if (this._master) {
- this._master.releaseMergeRef();
- }
- value.addMergeRef();
- this._master = value;
- } else {
- this._master.value = value;
- }
- }
- }, {
- key: "master",
- get: function get() {
- return this._master;
- }
- }, {
- key: "type",
- get: function get() {
- return Cell.Types.Merge;
- }
- }, {
- key: "effectiveType",
- get: function get() {
- return this._master.effectiveType;
- }
- }, {
- key: "address",
- get: function get() {
- return this.model.address;
- },
- set: function set(value) {
- this.model.address = value;
- }
- }]);
- return MergeValue;
- }();
- var FormulaValue = /*#__PURE__*/function () {
- function FormulaValue(cell, value) {
- _classCallCheck(this, FormulaValue);
- this.cell = cell;
- this.model = {
- address: cell.address,
- type: Cell.Types.Formula,
- shareType: value ? value.shareType : undefined,
- ref: value ? value.ref : undefined,
- formula: value ? value.formula : undefined,
- sharedFormula: value ? value.sharedFormula : undefined,
- result: value ? value.result : undefined
- };
- }
- _createClass(FormulaValue, [{
- key: "_copyModel",
- value: function _copyModel(model) {
- var copy = {};
- var cp = function cp(name) {
- var value = model[name];
- if (value) {
- copy[name] = value;
- }
- };
- cp('formula');
- cp('result');
- cp('ref');
- cp('shareType');
- cp('sharedFormula');
- return copy;
- }
- }, {
- key: "validate",
- value: function validate(value) {
- switch (Value.getType(value)) {
- case Cell.Types.Null:
- case Cell.Types.String:
- case Cell.Types.Number:
- case Cell.Types.Date:
- break;
- case Cell.Types.Hyperlink:
- case Cell.Types.Formula:
- default:
- throw new Error('Cannot process that type of result value');
- }
- }
- }, {
- key: "_getTranslatedFormula",
- value: function _getTranslatedFormula() {
- if (!this._translatedFormula && this.model.sharedFormula) {
- var worksheet = this.cell.worksheet;
- var master = worksheet.findCell(this.model.sharedFormula);
- this._translatedFormula = master && slideFormula(master.formula, master.address, this.model.address);
- }
- return this._translatedFormula;
- }
- }, {
- key: "toCsvString",
- value: function toCsvString() {
- return "".concat(this.model.result || '');
- }
- }, {
- key: "release",
- value: function release() {}
- }, {
- key: "toString",
- value: function toString() {
- return this.model.result ? this.model.result.toString() : '';
- }
- }, {
- key: "value",
- get: function get() {
- return this._copyModel(this.model);
- },
- set: function set(value) {
- this.model = this._copyModel(value);
- }
- }, {
- key: "dependencies",
- get: function get() {
- // find all the ranges and cells mentioned in the formula
- var ranges = this.formula.match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g);
- var cells = this.formula.replace(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g, '').match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}/g);
- return {
- ranges: ranges,
- cells: cells
- };
- }
- }, {
- key: "formula",
- get: function get() {
- return this.model.formula || this._getTranslatedFormula();
- },
- set: function set(value) {
- this.model.formula = value;
- }
- }, {
- key: "formulaType",
- get: function get() {
- if (this.model.formula) {
- return Enums.FormulaType.Master;
- }
- if (this.model.sharedFormula) {
- return Enums.FormulaType.Shared;
- }
- return Enums.FormulaType.None;
- }
- }, {
- key: "result",
- get: function get() {
- return this.model.result;
- },
- set: function set(value) {
- this.model.result = value;
- }
- }, {
- key: "type",
- get: function get() {
- return Cell.Types.Formula;
- }
- }, {
- key: "effectiveType",
- get: function get() {
- var v = this.model.result;
- if (v === null || v === undefined) {
- return Enums.ValueType.Null;
- }
- if (v instanceof String || typeof v === 'string') {
- return Enums.ValueType.String;
- }
- if (typeof v === 'number') {
- return Enums.ValueType.Number;
- }
- if (v instanceof Date) {
- return Enums.ValueType.Date;
- }
- if (v.text && v.hyperlink) {
- return Enums.ValueType.Hyperlink;
- }
- if (v.formula) {
- return Enums.ValueType.Formula;
- }
- return Enums.ValueType.Null;
- }
- }, {
- key: "address",
- get: function get() {
- return this.model.address;
- },
- set: function set(value) {
- this.model.address = value;
- }
- }]);
- return FormulaValue;
- }();
- var SharedStringValue = /*#__PURE__*/function () {
- function SharedStringValue(cell, value) {
- _classCallCheck(this, SharedStringValue);
- this.model = {
- address: cell.address,
- type: Cell.Types.SharedString,
- value: value
- };
- }
- _createClass(SharedStringValue, [{
- key: "toCsvString",
- value: function toCsvString() {
- return this.model.value.toString();
- }
- }, {
- key: "release",
- value: function release() {}
- }, {
- key: "toString",
- value: function toString() {
- return this.model.value.toString();
- }
- }, {
- key: "value",
- get: function get() {
- return this.model.value;
- },
- set: function set(value) {
- this.model.value = value;
- }
- }, {
- key: "type",
- get: function get() {
- return Cell.Types.SharedString;
- }
- }, {
- key: "effectiveType",
- get: function get() {
- return Cell.Types.SharedString;
- }
- }, {
- key: "address",
- get: function get() {
- return this.model.address;
- },
- set: function set(value) {
- this.model.address = value;
- }
- }]);
- return SharedStringValue;
- }();
- var BooleanValue = /*#__PURE__*/function () {
- function BooleanValue(cell, value) {
- _classCallCheck(this, BooleanValue);
- this.model = {
- address: cell.address,
- type: Cell.Types.Boolean,
- value: value
- };
- }
- _createClass(BooleanValue, [{
- key: "toCsvString",
- value: function toCsvString() {
- return this.model.value ? 1 : 0;
- }
- }, {
- key: "release",
- value: function release() {}
- }, {
- key: "toString",
- value: function toString() {
- return this.model.value.toString();
- }
- }, {
- key: "value",
- get: function get() {
- return this.model.value;
- },
- set: function set(value) {
- this.model.value = value;
- }
- }, {
- key: "type",
- get: function get() {
- return Cell.Types.Boolean;
- }
- }, {
- key: "effectiveType",
- get: function get() {
- return Cell.Types.Boolean;
- }
- }, {
- key: "address",
- get: function get() {
- return this.model.address;
- },
- set: function set(value) {
- this.model.address = value;
- }
- }]);
- return BooleanValue;
- }();
- var ErrorValue = /*#__PURE__*/function () {
- function ErrorValue(cell, value) {
- _classCallCheck(this, ErrorValue);
- this.model = {
- address: cell.address,
- type: Cell.Types.Error,
- value: value
- };
- }
- _createClass(ErrorValue, [{
- key: "toCsvString",
- value: function toCsvString() {
- return this.toString();
- }
- }, {
- key: "release",
- value: function release() {}
- }, {
- key: "toString",
- value: function toString() {
- return this.model.value.error.toString();
- }
- }, {
- key: "value",
- get: function get() {
- return this.model.value;
- },
- set: function set(value) {
- this.model.value = value;
- }
- }, {
- key: "type",
- get: function get() {
- return Cell.Types.Error;
- }
- }, {
- key: "effectiveType",
- get: function get() {
- return Cell.Types.Error;
- }
- }, {
- key: "address",
- get: function get() {
- return this.model.address;
- },
- set: function set(value) {
- this.model.address = value;
- }
- }]);
- return ErrorValue;
- }();
- var JSONValue = /*#__PURE__*/function () {
- function JSONValue(cell, value) {
- _classCallCheck(this, JSONValue);
- this.model = {
- address: cell.address,
- type: Cell.Types.String,
- value: JSON.stringify(value),
- rawValue: value
- };
- }
- _createClass(JSONValue, [{
- key: "toCsvString",
- value: function toCsvString() {
- return this.model.value;
- }
- }, {
- key: "release",
- value: function release() {}
- }, {
- key: "toString",
- value: function toString() {
- return this.model.value;
- }
- }, {
- key: "value",
- get: function get() {
- return this.model.rawValue;
- },
- set: function set(value) {
- this.model.rawValue = value;
- this.model.value = JSON.stringify(value);
- }
- }, {
- key: "type",
- get: function get() {
- return Cell.Types.String;
- }
- }, {
- key: "effectiveType",
- get: function get() {
- return Cell.Types.String;
- }
- }, {
- key: "address",
- get: function get() {
- return this.model.address;
- },
- set: function set(value) {
- this.model.address = value;
- }
- }]);
- return JSONValue;
- }(); // Value is a place to hold common static Value type functions
- var Value = {
- getType: function getType(value) {
- if (value === null || value === undefined) {
- return Cell.Types.Null;
- }
- if (value instanceof String || typeof value === 'string') {
- return Cell.Types.String;
- }
- if (typeof value === 'number') {
- return Cell.Types.Number;
- }
- if (typeof value === 'boolean') {
- return Cell.Types.Boolean;
- }
- if (value instanceof Date) {
- return Cell.Types.Date;
- }
- if (value.text && value.hyperlink) {
- return Cell.Types.Hyperlink;
- }
- if (value.formula || value.sharedFormula) {
- return Cell.Types.Formula;
- }
- if (value.richText) {
- return Cell.Types.RichText;
- }
- if (value.sharedString) {
- return Cell.Types.SharedString;
- }
- if (value.error) {
- return Cell.Types.Error;
- }
- return Cell.Types.JSON;
- },
- // map valueType to constructor
- types: [{
- t: Cell.Types.Null,
- f: NullValue
- }, {
- t: Cell.Types.Number,
- f: NumberValue
- }, {
- t: Cell.Types.String,
- f: StringValue
- }, {
- t: Cell.Types.Date,
- f: DateValue
- }, {
- t: Cell.Types.Hyperlink,
- f: HyperlinkValue
- }, {
- t: Cell.Types.Formula,
- f: FormulaValue
- }, {
- t: Cell.Types.Merge,
- f: MergeValue
- }, {
- t: Cell.Types.JSON,
- f: JSONValue
- }, {
- t: Cell.Types.SharedString,
- f: SharedStringValue
- }, {
- t: Cell.Types.RichText,
- f: RichTextValue
- }, {
- t: Cell.Types.Boolean,
- f: BooleanValue
- }, {
- t: Cell.Types.Error,
- f: ErrorValue
- }].reduce(function (p, t) {
- p[t.t] = t.f;
- return p;
- }, []),
- create: function create(type, cell, value) {
- var T = this.types[type];
- if (!T) {
- throw new Error("Could not create Value of type ".concat(type));
- }
- return new T(cell, value);
- }
- };
- module.exports = Cell;
- },{"../utils/col-cache":19,"../utils/shared-formula":22,"../utils/under-dash":25,"./enums":7,"./note":9}],4:[function(require,module,exports){
- 'use strict';
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- var _ = require('../utils/under-dash');
- var Enums = require('./enums');
- var colCache = require('../utils/col-cache');
- var DEFAULT_COLUMN_WIDTH = 9; // Column defines the column properties for 1 column.
- // This includes header rows, widths, key, (style), etc.
- // Worksheet will condense the columns as appropriate during serialization
- var Column = /*#__PURE__*/function () {
- function Column(worksheet, number, defn) {
- _classCallCheck(this, Column);
- this._worksheet = worksheet;
- this._number = number;
- if (defn !== false) {
- // sometimes defn will follow
- this.defn = defn;
- }
- }
- _createClass(Column, [{
- key: "toString",
- value: function toString() {
- return JSON.stringify({
- key: this.key,
- width: this.width,
- headers: this.headers.length ? this.headers : undefined
- });
- }
- }, {
- key: "equivalentTo",
- value: function equivalentTo(other) {
- return this.width === other.width && this.hidden === other.hidden && this.outlineLevel === other.outlineLevel && _.isEqual(this.style, other.style);
- }
- }, {
- key: "eachCell",
- value: function eachCell(options, iteratee) {
- var colNumber = this.number;
- if (!iteratee) {
- iteratee = options;
- options = null;
- }
- this._worksheet.eachRow(options, function (row, rowNumber) {
- iteratee(row.getCell(colNumber), rowNumber);
- });
- }
- }, {
- key: "_applyStyle",
- // =========================================================================
- // styles
- value: function _applyStyle(name, value) {
- this.style[name] = value;
- this.eachCell(function (cell) {
- cell[name] = value;
- });
- return value;
- }
- }, {
- key: "number",
- get: function get() {
- return this._number;
- }
- }, {
- key: "worksheet",
- get: function get() {
- return this._worksheet;
- }
- }, {
- key: "letter",
- get: function get() {
- return colCache.n2l(this._number);
- }
- }, {
- key: "isCustomWidth",
- get: function get() {
- return this.width !== undefined && this.width !== DEFAULT_COLUMN_WIDTH;
- }
- }, {
- key: "defn",
- get: function get() {
- return {
- header: this._header,
- key: this.key,
- width: this.width,
- style: this.style,
- hidden: this.hidden,
- outlineLevel: this.outlineLevel
- };
- },
- set: function set(value) {
- if (value) {
- this.key = value.key;
- this.width = value.width !== undefined ? value.width : DEFAULT_COLUMN_WIDTH;
- this.outlineLevel = value.outlineLevel;
- if (value.style) {
- this.style = value.style;
- } else {
- this.style = {};
- } // headers must be set after style
- this.header = value.header;
- this._hidden = !!value.hidden;
- } else {
- delete this._header;
- delete this._key;
- delete this.width;
- this.style = {};
- this.outlineLevel = 0;
- }
- }
- }, {
- key: "headers",
- get: function get() {
- return this._header && this._header instanceof Array ? this._header : [this._header];
- }
- }, {
- key: "header",
- get: function get() {
- return this._header;
- },
- set: function set(value) {
- var _this = this;
- if (value !== undefined) {
- this._header = value;
- this.headers.forEach(function (text, index) {
- _this._worksheet.getCell(index + 1, _this.number).value = text;
- });
- } else {
- this._header = undefined;
- }
- }
- }, {
- key: "key",
- get: function get() {
- return this._key;
- },
- set: function set(value) {
- var column = this._key && this._worksheet.getColumnKey(this._key);
- if (column === this) {
- this._worksheet.deleteColumnKey(this._key);
- }
- this._key = value;
- if (value) {
- this._worksheet.setColumnKey(this._key, this);
- }
- }
- }, {
- key: "hidden",
- get: function get() {
- return !!this._hidden;
- },
- set: function set(value) {
- this._hidden = value;
- }
- }, {
- key: "outlineLevel",
- get: function get() {
- return this._outlineLevel || 0;
- },
- set: function set(value) {
- this._outlineLevel = value;
- }
- }, {
- key: "collapsed",
- get: function get() {
- return !!(this._outlineLevel && this._outlineLevel >= this._worksheet.properties.outlineLevelCol);
- }
- }, {
- key: "isDefault",
- get: function get() {
- if (this.isCustomWidth) {
- return false;
- }
- if (this.hidden) {
- return false;
- }
- if (this.outlineLevel) {
- return false;
- }
- var s = this.style;
- if (s && (s.font || s.numFmt || s.alignment || s.border || s.fill || s.protection)) {
- return false;
- }
- return true;
- }
- }, {
- key: "headerCount",
- get: function get() {
- return this.headers.length;
- }
- }, {
- key: "values",
- get: function get() {
- var v = [];
- this.eachCell(function (cell, rowNumber) {
- if (cell && cell.type !== Enums.ValueType.Null) {
- v[rowNumber] = cell.value;
- }
- });
- return v;
- },
- set: function set(v) {
- var _this2 = this;
- if (!v) {
- return;
- }
- var colNumber = this.number;
- var offset = 0;
- if (v.hasOwnProperty('0')) {
- // assume contiguous array, start at row 1
- offset = 1;
- }
- v.forEach(function (value, index) {
- _this2._worksheet.getCell(index + offset, colNumber).value = value;
- });
- }
- }, {
- key: "numFmt",
- get: function get() {
- return this.style.numFmt;
- },
- set: function set(value) {
- this._applyStyle('numFmt', value);
- }
- }, {
- key: "font",
- get: function get() {
- return this.style.font;
- },
- set: function set(value) {
- this._applyStyle('font', value);
- }
- }, {
- key: "alignment",
- get: function get() {
- return this.style.alignment;
- },
- set: function set(value) {
- this._applyStyle('alignment', value);
- }
- }, {
- key: "protection",
- get: function get() {
- return this.style.protection;
- },
- set: function set(value) {
- this._applyStyle('protection', value);
- }
- }, {
- key: "border",
- get: function get() {
- return this.style.border;
- },
- set: function set(value) {
- this._applyStyle('border', value);
- }
- }, {
- key: "fill",
- get: function get() {
- return this.style.fill;
- },
- set: function set(value) {
- this._applyStyle('fill', value);
- } // =============================================================================
- // static functions
- }], [{
- key: "toModel",
- value: function toModel(columns) {
- // Convert array of Column into compressed list cols
- var cols = [];
- var col = null;
- if (columns) {
- columns.forEach(function (column, index) {
- if (column.isDefault) {
- if (col) {
- col = null;
- }
- } else if (!col || !column.equivalentTo(col)) {
- col = {
- min: index + 1,
- max: index + 1,
- width: column.width !== undefined ? column.width : DEFAULT_COLUMN_WIDTH,
- style: column.style,
- isCustomWidth: column.isCustomWidth,
- hidden: column.hidden,
- outlineLevel: column.outlineLevel,
- collapsed: column.collapsed
- };
- cols.push(col);
- } else {
- col.max = index + 1;
- }
- });
- }
- return cols.length ? cols : undefined;
- }
- }, {
- key: "fromModel",
- value: function fromModel(worksheet, cols) {
- cols = cols || [];
- var columns = [];
- var count = 1;
- var index = 0;
- while (index < cols.length) {
- var col = cols[index++];
- while (count < col.min) {
- columns.push(new Column(worksheet, count++));
- }
- while (count <= col.max) {
- columns.push(new Column(worksheet, count++, col));
- }
- }
- return columns.length ? columns : null;
- }
- }]);
- return Column;
- }();
- module.exports = Column;
- },{"../utils/col-cache":19,"../utils/under-dash":25,"./enums":7}],5:[function(require,module,exports){
- "use strict";
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- var DataValidations = /*#__PURE__*/function () {
- function DataValidations(model) {
- _classCallCheck(this, DataValidations);
- this.model = model || {};
- }
- _createClass(DataValidations, [{
- key: "add",
- value: function add(address, validation) {
- return this.model[address] = validation;
- }
- }, {
- key: "find",
- value: function find(address) {
- return this.model[address];
- }
- }, {
- key: "remove",
- value: function remove(address) {
- this.model[address] = undefined;
- }
- }]);
- return DataValidations;
- }();
- module.exports = DataValidations;
- },{}],6:[function(require,module,exports){
- 'use strict';
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- var _ = require('../utils/under-dash');
- var colCache = require('../utils/col-cache');
- var CellMatrix = require('../utils/cell-matrix');
- var Range = require('./range');
- var rangeRegexp = /[$](\w+)[$](\d+)(:[$](\w+)[$](\d+))?/;
- var DefinedNames = /*#__PURE__*/function () {
- function DefinedNames() {
- _classCallCheck(this, DefinedNames);
- this.matrixMap = {};
- }
- _createClass(DefinedNames, [{
- key: "getMatrix",
- value: function getMatrix(name) {
- var matrix = this.matrixMap[name] || (this.matrixMap[name] = new CellMatrix());
- return matrix;
- } // add a name to a cell. locStr in the form SheetName!$col$row or SheetName!$c1$r1:$c2:$r2
- }, {
- key: "add",
- value: function add(locStr, name) {
- var location = colCache.decodeEx(locStr);
- this.addEx(location, name);
- }
- }, {
- key: "addEx",
- value: function addEx(location, name) {
- var matrix = this.getMatrix(name);
- if (location.top) {
- for (var col = location.left; col <= location.right; col++) {
- for (var row = location.top; row <= location.bottom; row++) {
- var address = {
- sheetName: location.sheetName,
- address: colCache.n2l(col) + row,
- row: row,
- col: col
- };
- matrix.addCellEx(address);
- }
- }
- } else {
- matrix.addCellEx(location);
- }
- }
- }, {
- key: "remove",
- value: function remove(locStr, name) {
- var location = colCache.decodeEx(locStr);
- this.removeEx(location, name);
- }
- }, {
- key: "removeEx",
- value: function removeEx(location, name) {
- var matrix = this.getMatrix(name);
- matrix.removeCellEx(location);
- }
- }, {
- key: "removeAllNames",
- value: function removeAllNames(location) {
- _.each(this.matrixMap, function (matrix) {
- matrix.removeCellEx(location);
- });
- }
- }, {
- key: "forEach",
- value: function forEach(callback) {
- _.each(this.matrixMap, function (matrix, name) {
- matrix.forEach(function (cell) {
- callback(name, cell);
- });
- });
- } // get all the names of a cell
- }, {
- key: "getNames",
- value: function getNames(addressStr) {
- return this.getNamesEx(colCache.decodeEx(addressStr));
- }
- }, {
- key: "getNamesEx",
- value: function getNamesEx(address) {
- return _.map(this.matrixMap, function (matrix, name) {
- return matrix.findCellEx(address) && name;
- }).filter(Boolean);
- }
- }, {
- key: "_explore",
- value: function _explore(matrix, cell) {
- cell.mark = false;
- var sheetName = cell.sheetName;
- var range = new Range(cell.row, cell.col, cell.row, cell.col, sheetName);
- var x;
- var y; // grow vertical - only one col to worry about
- function vGrow(yy, edge) {
- var c = matrix.findCellAt(sheetName, yy, cell.col);
- if (!c || !c.mark) {
- return false;
- }
- range[edge] = yy;
- c.mark = false;
- return true;
- }
- for (y = cell.row - 1; vGrow(y, 'top'); y--) {
- ;
- }
- for (y = cell.row + 1; vGrow(y, 'bottom'); y++) {
- ;
- } // grow horizontal - ensure all rows can grow
- function hGrow(xx, edge) {
- var cells = [];
- for (y = range.top; y <= range.bottom; y++) {
- var c = matrix.findCellAt(sheetName, y, xx);
- if (c && c.mark) {
- cells.push(c);
- } else {
- return false;
- }
- }
- range[edge] = xx;
- for (var i = 0; i < cells.length; i++) {
- cells[i].mark = false;
- }
- return true;
- }
- for (x = cell.col - 1; hGrow(x, 'left'); x--) {
- ;
- }
- for (x = cell.col + 1; hGrow(x, 'right'); x++) {
- ;
- }
- return range;
- }
- }, {
- key: "getRanges",
- value: function getRanges(name, matrix) {
- var _this = this;
- matrix = matrix || this.matrixMap[name];
- if (!matrix) {
- return {
- name: name,
- ranges: []
- };
- } // mark and sweep!
- matrix.forEach(function (cell) {
- cell.mark = true;
- });
- var ranges = matrix.map(function (cell) {
- return cell.mark && _this._explore(matrix, cell);
- }).filter(Boolean).map(function (range) {
- return range.$shortRange;
- });
- return {
- name: name,
- ranges: ranges
- };
- }
- }, {
- key: "normaliseMatrix",
- value: function normaliseMatrix(matrix, sheetName) {
- // some of the cells might have shifted on specified sheet
- // need to reassign rows, cols
- matrix.forEachInSheet(sheetName, function (cell, row, col) {
- if (cell) {
- if (cell.row !== row || cell.col !== col) {
- cell.row = row;
- cell.col = col;
- cell.address = colCache.n2l(col) + row;
- }
- }
- });
- }
- }, {
- key: "spliceRows",
- value: function spliceRows(sheetName, start, numDelete, numInsert) {
- var _this2 = this;
- _.each(this.matrixMap, function (matrix) {
- matrix.spliceRows(sheetName, start, numDelete, numInsert);
- _this2.normaliseMatrix(matrix, sheetName);
- });
- }
- }, {
- key: "spliceColumns",
- value: function spliceColumns(sheetName, start, numDelete, numInsert) {
- var _this3 = this;
- _.each(this.matrixMap, function (matrix) {
- matrix.spliceColumns(sheetName, start, numDelete, numInsert);
- _this3.normaliseMatrix(matrix, sheetName);
- });
- }
- }, {
- key: "model",
- get: function get() {
- var _this4 = this;
- // To get names per cell - just iterate over all names finding cells if they exist
- return _.map(this.matrixMap, function (matrix, name) {
- return _this4.getRanges(name, matrix);
- }).filter(function (definedName) {
- return definedName.ranges.length;
- });
- },
- set: function set(value) {
- // value is [ { name, ranges }, ... ]
- var matrixMap = this.matrixMap = {};
- value.forEach(function (definedName) {
- var matrix = matrixMap[definedName.name] = new CellMatrix();
- definedName.ranges.forEach(function (rangeStr) {
- if (rangeRegexp.test(rangeStr.split('!').pop() || '')) {
- matrix.addCell(rangeStr);
- }
- });
- });
- }
- }]);
- return DefinedNames;
- }();
- module.exports = DefinedNames;
- },{"../utils/cell-matrix":18,"../utils/col-cache":19,"../utils/under-dash":25,"./range":10}],7:[function(require,module,exports){
- 'use strict';
- module.exports = {
- ValueType: {
- Null: 0,
- Merge: 1,
- Number: 2,
- String: 3,
- Date: 4,
- Hyperlink: 5,
- Formula: 6,
- SharedString: 7,
- RichText: 8,
- Boolean: 9,
- Error: 10
- },
- FormulaType: {
- None: 0,
- Master: 1,
- Shared: 2
- },
- RelationshipType: {
- None: 0,
- OfficeDocument: 1,
- Worksheet: 2,
- CalcChain: 3,
- SharedStrings: 4,
- Styles: 5,
- Theme: 6,
- Hyperlink: 7
- },
- DocumentType: {
- Xlsx: 1
- },
- ReadingOrder: {
- LeftToRight: 1,
- RightToLeft: 2
- },
- ErrorValue: {
- NotApplicable: '#N/A',
- Ref: '#REF!',
- Name: '#NAME?',
- DivZero: '#DIV/0!',
- Null: '#NULL!',
- Value: '#VALUE!',
- Num: '#NUM!'
- }
- };
- },{}],8:[function(require,module,exports){
- "use strict";
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- var colCache = require('../utils/col-cache');
- var Anchor = require('./anchor');
- var Image = /*#__PURE__*/function () {
- function Image(worksheet, model) {
- _classCallCheck(this, Image);
- this.worksheet = worksheet;
- this.model = model;
- }
- _createClass(Image, [{
- key: "model",
- get: function get() {
- switch (this.type) {
- case 'background':
- return {
- type: this.type,
- imageId: this.imageId
- };
- case 'image':
- return {
- type: this.type,
- imageId: this.imageId,
- hyperlinks: this.range.hyperlinks,
- range: {
- tl: this.range.tl.model,
- br: this.range.br && this.range.br.model,
- ext: this.range.ext,
- editAs: this.range.editAs
- }
- };
- default:
- throw new Error('Invalid Image Type');
- }
- },
- set: function set(_ref) {
- var type = _ref.type,
- imageId = _ref.imageId,
- range = _ref.range,
- hyperlinks = _ref.hyperlinks;
- this.type = type;
- this.imageId = imageId;
- if (type === 'image') {
- if (typeof range === 'string') {
- var decoded = colCache.decode(range);
- this.range = {
- tl: new Anchor(this.worksheet, {
- col: decoded.left,
- row: decoded.top
- }, -1),
- br: new Anchor(this.worksheet, {
- col: decoded.right,
- row: decoded.bottom
- }, 0),
- editAs: 'oneCell'
- };
- } else {
- this.range = {
- tl: new Anchor(this.worksheet, range.tl, 0),
- br: range.br && new Anchor(this.worksheet, range.br, 0),
- ext: range.ext,
- editAs: range.editAs,
- hyperlinks: hyperlinks || range.hyperlinks
- };
- }
- }
- }
- }]);
- return Image;
- }();
- module.exports = Image;
- },{"../utils/col-cache":19,"./anchor":2}],9:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- var _ = require('../utils/under-dash');
- var Note = /*#__PURE__*/function () {
- function Note(note) {
- _classCallCheck(this, Note);
- this.note = note;
- }
- _createClass(Note, [{
- key: "model",
- get: function get() {
- var value = null;
- switch (_typeof(this.note)) {
- case 'string':
- value = {
- type: 'note',
- note: {
- texts: [{
- text: this.note
- }]
- }
- };
- break;
- default:
- value = {
- type: 'note',
- note: this.note
- };
- break;
- } // Suitable for all cell comments
- return _.deepMerge({}, Note.DEFAULT_CONFIGS, value);
- },
- set: function set(value) {
- var note = value.note;
- var texts = note.texts;
- if (texts.length === 1 && Object.keys(texts[0]).length === 1) {
- this.note = texts[0].text;
- } else {
- this.note = note;
- }
- }
- }], [{
- key: "fromModel",
- value: function fromModel(model) {
- var note = new Note();
- note.model = model;
- return note;
- }
- }]);
- return Note;
- }();
- Note.DEFAULT_CONFIGS = {
- note: {
- margins: {
- insetmode: 'auto',
- inset: [0.13, 0.13, 0.25, 0.25]
- },
- protection: {
- locked: 'True',
- lockText: 'True'
- },
- editAs: 'absolute'
- }
- };
- module.exports = Note;
- },{"../utils/under-dash":25}],10:[function(require,module,exports){
- "use strict";
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- var colCache = require('../utils/col-cache'); // used by worksheet to calculate sheet dimensions
- var Range = /*#__PURE__*/function () {
- function Range() {
- _classCallCheck(this, Range);
- this.decode(arguments);
- }
- _createClass(Range, [{
- key: "setTLBR",
- value: function setTLBR(t, l, b, r, s) {
- if (arguments.length < 4) {
- // setTLBR(tl, br, s)
- var tl = colCache.decodeAddress(t);
- var br = colCache.decodeAddress(l);
- this.model = {
- top: Math.min(tl.row, br.row),
- left: Math.min(tl.col, br.col),
- bottom: Math.max(tl.row, br.row),
- right: Math.max(tl.col, br.col),
- sheetName: b
- };
- this.setTLBR(tl.row, tl.col, br.row, br.col, s);
- } else {
- // setTLBR(t, l, b, r, s)
- this.model = {
- top: Math.min(t, b),
- left: Math.min(l, r),
- bottom: Math.max(t, b),
- right: Math.max(l, r),
- sheetName: s
- };
- }
- }
- }, {
- key: "decode",
- value: function decode(argv) {
- switch (argv.length) {
- case 5:
- // [t,l,b,r,s]
- this.setTLBR(argv[0], argv[1], argv[2], argv[3], argv[4]);
- break;
- case 4:
- // [t,l,b,r]
- this.setTLBR(argv[0], argv[1], argv[2], argv[3]);
- break;
- case 3:
- // [tl,br,s]
- this.setTLBR(argv[0], argv[1], argv[2]);
- break;
- case 2:
- // [tl,br]
- this.setTLBR(argv[0], argv[1]);
- break;
- case 1:
- {
- var value = argv[0];
- if (value instanceof Range) {
- // copy constructor
- this.model = {
- top: value.model.top,
- left: value.model.left,
- bottom: value.model.bottom,
- right: value.model.right,
- sheetName: value.sheetName
- };
- } else if (value instanceof Array) {
- // an arguments array
- this.decode(value);
- } else if (value.top && value.left && value.bottom && value.right) {
- // a model
- this.model = {
- top: value.top,
- left: value.left,
- bottom: value.bottom,
- right: value.right,
- sheetName: value.sheetName
- };
- } else {
- // [sheetName!]tl:br
- var tlbr = colCache.decodeEx(value);
- if (tlbr.top) {
- this.model = {
- top: tlbr.top,
- left: tlbr.left,
- bottom: tlbr.bottom,
- right: tlbr.right,
- sheetName: tlbr.sheetName
- };
- } else {
- this.model = {
- top: tlbr.row,
- left: tlbr.col,
- bottom: tlbr.row,
- right: tlbr.col,
- sheetName: tlbr.sheetName
- };
- }
- }
- break;
- }
- case 0:
- this.model = {
- top: 0,
- left: 0,
- bottom: 0,
- right: 0
- };
- break;
- default:
- throw new Error("Invalid number of arguments to _getDimensions() - ".concat(argv.length));
- }
- }
- }, {
- key: "expand",
- value: function expand(top, left, bottom, right) {
- if (!this.model.top || top < this.top) this.top = top;
- if (!this.model.left || left < this.left) this.left = left;
- if (!this.model.bottom || bottom > this.bottom) this.bottom = bottom;
- if (!this.model.right || right > this.right) this.right = right;
- }
- }, {
- key: "expandRow",
- value: function expandRow(row) {
- if (row) {
- var dimensions = row.dimensions,
- number = row.number;
- if (dimensions) {
- this.expand(number, dimensions.min, number, dimensions.max);
- }
- }
- }
- }, {
- key: "expandToAddress",
- value: function expandToAddress(addressStr) {
- var address = colCache.decodeEx(addressStr);
- this.expand(address.row, address.col, address.row, address.col);
- }
- }, {
- key: "toString",
- value: function toString() {
- return this.range;
- }
- }, {
- key: "intersects",
- value: function intersects(other) {
- if (other.sheetName && this.sheetName && other.sheetName !== this.sheetName) return false;
- if (other.bottom < this.top) return false;
- if (other.top > this.bottom) return false;
- if (other.right < this.left) return false;
- if (other.left > this.right) return false;
- return true;
- }
- }, {
- key: "contains",
- value: function contains(addressStr) {
- var address = colCache.decodeEx(addressStr);
- return this.containsEx(address);
- }
- }, {
- key: "containsEx",
- value: function containsEx(address) {
- if (address.sheetName && this.sheetName && address.sheetName !== this.sheetName) return false;
- return address.row >= this.top && address.row <= this.bottom && address.col >= this.left && address.col <= this.right;
- }
- }, {
- key: "forEachAddress",
- value: function forEachAddress(cb) {
- for (var col = this.left; col <= this.right; col++) {
- for (var row = this.top; row <= this.bottom; row++) {
- cb(colCache.encodeAddress(row, col), row, col);
- }
- }
- }
- }, {
- key: "top",
- get: function get() {
- return this.model.top || 1;
- },
- set: function set(value) {
- this.model.top = value;
- }
- }, {
- key: "left",
- get: function get() {
- return this.model.left || 1;
- },
- set: function set(value) {
- this.model.left = value;
- }
- }, {
- key: "bottom",
- get: function get() {
- return this.model.bottom || 1;
- },
- set: function set(value) {
- this.model.bottom = value;
- }
- }, {
- key: "right",
- get: function get() {
- return this.model.right || 1;
- },
- set: function set(value) {
- this.model.right = value;
- }
- }, {
- key: "sheetName",
- get: function get() {
- return this.model.sheetName;
- },
- set: function set(value) {
- this.model.sheetName = value;
- }
- }, {
- key: "_serialisedSheetName",
- get: function get() {
- var sheetName = this.model.sheetName;
- if (sheetName) {
- if (/^[a-zA-Z0-9]*$/.test(sheetName)) {
- return "".concat(sheetName, "!");
- }
- return "'".concat(sheetName, "'!");
- }
- return '';
- }
- }, {
- key: "tl",
- get: function get() {
- return colCache.n2l(this.left) + this.top;
- }
- }, {
- key: "$t$l",
- get: function get() {
- return "$".concat(colCache.n2l(this.left), "$").concat(this.top);
- }
- }, {
- key: "br",
- get: function get() {
- return colCache.n2l(this.right) + this.bottom;
- }
- }, {
- key: "$b$r",
- get: function get() {
- return "$".concat(colCache.n2l(this.right), "$").concat(this.bottom);
- }
- }, {
- key: "range",
- get: function get() {
- return "".concat(this._serialisedSheetName + this.tl, ":").concat(this.br);
- }
- }, {
- key: "$range",
- get: function get() {
- return "".concat(this._serialisedSheetName + this.$t$l, ":").concat(this.$b$r);
- }
- }, {
- key: "shortRange",
- get: function get() {
- return this.count > 1 ? this.range : this._serialisedSheetName + this.tl;
- }
- }, {
- key: "$shortRange",
- get: function get() {
- return this.count > 1 ? this.$range : this._serialisedSheetName + this.$t$l;
- }
- }, {
- key: "count",
- get: function get() {
- return (1 + this.bottom - this.top) * (1 + this.right - this.left);
- }
- }]);
- return Range;
- }();
- module.exports = Range;
- },{"../utils/col-cache":19}],11:[function(require,module,exports){
- 'use strict';
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- var _ = require('../utils/under-dash');
- var Enums = require('./enums');
- var colCache = require('../utils/col-cache');
- var Cell = require('./cell');
- var Row = /*#__PURE__*/function () {
- function Row(worksheet, number) {
- _classCallCheck(this, Row);
- this._worksheet = worksheet;
- this._number = number;
- this._cells = [];
- this.style = {};
- this.outlineLevel = 0;
- } // return the row number
- _createClass(Row, [{
- key: "commit",
- // Inform Streaming Writer that this row (and all rows before it) are complete
- // and ready to write. Has no effect on Worksheet document
- value: function commit() {
- this._worksheet._commitRow(this); // eslint-disable-line no-underscore-dangle
- } // helps GC by breaking cyclic references
- }, {
- key: "destroy",
- value: function destroy() {
- delete this._worksheet;
- delete this._cells;
- delete this.style;
- }
- }, {
- key: "findCell",
- value: function findCell(colNumber) {
- return this._cells[colNumber - 1];
- } // given {address, row, col}, find or create new cell
- }, {
- key: "getCellEx",
- value: function getCellEx(address) {
- var cell = this._cells[address.col - 1];
- if (!cell) {
- var column = this._worksheet.getColumn(address.col);
- cell = new Cell(this, column, address.address);
- this._cells[address.col - 1] = cell;
- }
- return cell;
- } // get cell by key, letter or column number
- }, {
- key: "getCell",
- value: function getCell(col) {
- if (typeof col === 'string') {
- // is it a key?
- var column = this._worksheet.getColumnKey(col);
- if (column) {
- col = column.number;
- } else {
- col = colCache.l2n(col);
- }
- }
- return this._cells[col - 1] || this.getCellEx({
- address: colCache.encodeAddress(this._number, col),
- row: this._number,
- col: col
- });
- } // remove cell(s) and shift all higher cells down by count
- }, {
- key: "splice",
- value: function splice(start, count) {
- var nKeep = start + count;
- for (var _len = arguments.length, inserts = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
- inserts[_key - 2] = arguments[_key];
- }
- var nExpand = inserts.length - count;
- var nEnd = this._cells.length;
- var i;
- var cSrc;
- var cDst;
- if (nExpand < 0) {
- // remove cells
- for (i = start + inserts.length; i <= nEnd; i++) {
- cDst = this._cells[i - 1];
- cSrc = this._cells[i - nExpand - 1];
- if (cSrc) {
- cDst = this.getCell(i);
- cDst.value = cSrc.value;
- cDst.style = cSrc.style; // eslint-disable-next-line no-underscore-dangle
- cDst._comment = cSrc._comment;
- } else if (cDst) {
- cDst.value = null;
- cDst.style = {}; // eslint-disable-next-line no-underscore-dangle
- cDst._comment = undefined;
- }
- }
- } else if (nExpand > 0) {
- // insert new cells
- for (i = nEnd; i >= nKeep; i--) {
- cSrc = this._cells[i - 1];
- if (cSrc) {
- cDst = this.getCell(i + nExpand);
- cDst.value = cSrc.value;
- cDst.style = cSrc.style; // eslint-disable-next-line no-underscore-dangle
- cDst._comment = cSrc._comment;
- } else {
- this._cells[i + nExpand - 1] = undefined;
- }
- }
- } // now add the new values
- for (i = 0; i < inserts.length; i++) {
- cDst = this.getCell(start + i);
- cDst.value = inserts[i];
- cDst.style = {}; // eslint-disable-next-line no-underscore-dangle
- cDst._comment = undefined;
- }
- } // Iterate over all non-null cells in this row
- }, {
- key: "eachCell",
- value: function eachCell(options, iteratee) {
- if (!iteratee) {
- iteratee = options;
- options = null;
- }
- if (options && options.includeEmpty) {
- var n = this._cells.length;
- for (var i = 1; i <= n; i++) {
- iteratee(this.getCell(i), i);
- }
- } else {
- this._cells.forEach(function (cell, index) {
- if (cell && cell.type !== Enums.ValueType.Null) {
- iteratee(cell, index + 1);
- }
- });
- }
- } // ===========================================================================
- // Page Breaks
- }, {
- key: "addPageBreak",
- value: function addPageBreak(lft, rght) {
- var ws = this._worksheet;
- var left = Math.max(0, lft - 1) || 0;
- var right = Math.max(0, rght - 1) || 16838;
- var pb = {
- id: this._number,
- max: right,
- man: 1
- };
- if (left) pb.min = left;
- ws.rowBreaks.push(pb);
- } // return a sparse array of cell values
- }, {
- key: "_applyStyle",
- // =========================================================================
- // styles
- value: function _applyStyle(name, value) {
- this.style[name] = value;
- this._cells.forEach(function (cell) {
- if (cell) {
- cell[name] = value;
- }
- });
- return value;
- }
- }, {
- key: "number",
- get: function get() {
- return this._number;
- }
- }, {
- key: "worksheet",
- get: function get() {
- return this._worksheet;
- }
- }, {
- key: "values",
- get: function get() {
- var values = [];
- this._cells.forEach(function (cell) {
- if (cell && cell.type !== Enums.ValueType.Null) {
- values[cell.col] = cell.value;
- }
- });
- return values;
- } // set the values by contiguous or sparse array, or by key'd object literal
- ,
- set: function set(value) {
- var _this = this;
- // this operation is not additive - any prior cells are removed
- this._cells = [];
- if (!value) {// empty row
- } else if (value instanceof Array) {
- var offset = 0;
- if (value.hasOwnProperty('0')) {
- // contiguous array - start at column 1
- offset = 1;
- }
- value.forEach(function (item, index) {
- if (item !== undefined) {
- _this.getCellEx({
- address: colCache.encodeAddress(_this._number, index + offset),
- row: _this._number,
- col: index + offset
- }).value = item;
- }
- });
- } else {
- // assume object with column keys
- this._worksheet.eachColumnKey(function (column, key) {
- if (value[key] !== undefined) {
- _this.getCellEx({
- address: colCache.encodeAddress(_this._number, column.number),
- row: _this._number,
- col: column.number
- }).value = value[key];
- }
- });
- }
- } // returns true if the row includes at least one cell with a value
- }, {
- key: "hasValues",
- get: function get() {
- return _.some(this._cells, function (cell) {
- return cell && cell.type !== Enums.ValueType.Null;
- });
- }
- }, {
- key: "cellCount",
- get: function get() {
- return this._cells.length;
- }
- }, {
- key: "actualCellCount",
- get: function get() {
- var count = 0;
- this.eachCell(function () {
- count++;
- });
- return count;
- } // get the min and max column number for the non-null cells in this row or null
- }, {
- key: "dimensions",
- get: function get() {
- var min = 0;
- var max = 0;
- this._cells.forEach(function (cell) {
- if (cell && cell.type !== Enums.ValueType.Null) {
- if (!min || min > cell.col) {
- min = cell.col;
- }
- if (max < cell.col) {
- max = cell.col;
- }
- }
- });
- return min > 0 ? {
- min: min,
- max: max
- } : null;
- }
- }, {
- key: "numFmt",
- get: function get() {
- return this.style.numFmt;
- },
- set: function set(value) {
- this._applyStyle('numFmt', value);
- }
- }, {
- key: "font",
- get: function get() {
- return this.style.font;
- },
- set: function set(value) {
- this._applyStyle('font', value);
- }
- }, {
- key: "alignment",
- get: function get() {
- return this.style.alignment;
- },
- set: function set(value) {
- this._applyStyle('alignment', value);
- }
- }, {
- key: "protection",
- get: function get() {
- return this.style.protection;
- },
- set: function set(value) {
- this._applyStyle('protection', value);
- }
- }, {
- key: "border",
- get: function get() {
- return this.style.border;
- },
- set: function set(value) {
- this._applyStyle('border', value);
- }
- }, {
- key: "fill",
- get: function get() {
- return this.style.fill;
- },
- set: function set(value) {
- this._applyStyle('fill', value);
- }
- }, {
- key: "hidden",
- get: function get() {
- return !!this._hidden;
- },
- set: function set(value) {
- this._hidden = value;
- }
- }, {
- key: "outlineLevel",
- get: function get() {
- return this._outlineLevel || 0;
- },
- set: function set(value) {
- this._outlineLevel = value;
- }
- }, {
- key: "collapsed",
- get: function get() {
- return !!(this._outlineLevel && this._outlineLevel >= this._worksheet.properties.outlineLevelRow);
- } // =========================================================================
- }, {
- key: "model",
- get: function get() {
- var cells = [];
- var min = 0;
- var max = 0;
- this._cells.forEach(function (cell) {
- if (cell) {
- var cellModel = cell.model;
- if (cellModel) {
- if (!min || min > cell.col) {
- min = cell.col;
- }
- if (max < cell.col) {
- max = cell.col;
- }
- cells.push(cellModel);
- }
- }
- });
- return this.height || cells.length ? {
- cells: cells,
- number: this.number,
- min: min,
- max: max,
- height: this.height,
- style: this.style,
- hidden: this.hidden,
- outlineLevel: this.outlineLevel,
- collapsed: this.collapsed
- } : null;
- },
- set: function set(value) {
- var _this2 = this;
- if (value.number !== this._number) {
- throw new Error('Invalid row number in model');
- }
- this._cells = [];
- var previousAddress;
- value.cells.forEach(function (cellModel) {
- switch (cellModel.type) {
- case Cell.Types.Merge:
- // special case - don't add this types
- break;
- default:
- {
- var address;
- if (cellModel.address) {
- address = colCache.decodeAddress(cellModel.address);
- } else if (previousAddress) {
- // This is a <c> element without an r attribute
- // Assume that it's the cell for the next column
- var _previousAddress = previousAddress,
- row = _previousAddress.row;
- var col = previousAddress.col + 1;
- address = {
- row: row,
- col: col,
- address: colCache.encodeAddress(row, col),
- $col$row: "$".concat(colCache.n2l(col), "$").concat(row)
- };
- }
- previousAddress = address;
- var cell = _this2.getCellEx(address);
- cell.model = cellModel;
- break;
- }
- }
- });
- if (value.height) {
- this.height = value.height;
- } else {
- delete this.height;
- }
- this.hidden = value.hidden;
- this.outlineLevel = value.outlineLevel || 0;
- this.style = value.style && JSON.parse(JSON.stringify(value.style)) || {};
- }
- }]);
- return Row;
- }();
- module.exports = Row;
- },{"../utils/col-cache":19,"../utils/under-dash":25,"./cell":3,"./enums":7}],12:[function(require,module,exports){
- "use strict";
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- /* eslint-disable max-classes-per-file */
- var colCache = require('../utils/col-cache');
- var Column = /*#__PURE__*/function () {
- // wrapper around column model, allowing access and manipulation
- function Column(table, column, index) {
- _classCallCheck(this, Column);
- this.table = table;
- this.column = column;
- this.index = index;
- }
- _createClass(Column, [{
- key: "_set",
- value: function _set(name, value) {
- this.table.cacheState();
- this.column[name] = value;
- }
- /* eslint-disable lines-between-class-members */
- }, {
- key: "name",
- get: function get() {
- return this.column.name;
- },
- set: function set(value) {
- this._set('name', value);
- }
- }, {
- key: "filterButton",
- get: function get() {
- return this.column.filterButton;
- },
- set: function set(value) {
- this.column.filterButton = value;
- }
- }, {
- key: "style",
- get: function get() {
- return this.column.style;
- },
- set: function set(value) {
- this.column.style = value;
- }
- }, {
- key: "totalsRowLabel",
- get: function get() {
- return this.column.totalsRowLabel;
- },
- set: function set(value) {
- this._set('totalsRowLabel', value);
- }
- }, {
- key: "totalsRowFunction",
- get: function get() {
- return this.column.totalsRowFunction;
- },
- set: function set(value) {
- this._set('totalsRowFunction', value);
- }
- }, {
- key: "totalsRowResult",
- get: function get() {
- return this.column.totalsRowResult;
- },
- set: function set(value) {
- this._set('totalsRowResult', value);
- }
- }, {
- key: "totalsRowFormula",
- get: function get() {
- return this.column.totalsRowFormula;
- },
- set: function set(value) {
- this._set('totalsRowFormula', value);
- }
- /* eslint-enable lines-between-class-members */
- }]);
- return Column;
- }();
- var Table = /*#__PURE__*/function () {
- function Table(worksheet, table) {
- _classCallCheck(this, Table);
- this.worksheet = worksheet;
- if (table) {
- this.table = table; // check things are ok first
- this.validate();
- this.store();
- }
- }
- _createClass(Table, [{
- key: "getFormula",
- value: function getFormula(column) {
- // get the correct formula to apply to the totals row
- switch (column.totalsRowFunction) {
- case 'none':
- return null;
- case 'average':
- return "SUBTOTAL(101,".concat(this.table.name, "[").concat(column.name, "])");
- case 'countNums':
- return "SUBTOTAL(102,".concat(this.table.name, "[").concat(column.name, "])");
- case 'count':
- return "SUBTOTAL(103,".concat(this.table.name, "[").concat(column.name, "])");
- case 'max':
- return "SUBTOTAL(104,".concat(this.table.name, "[").concat(column.name, "])");
- case 'min':
- return "SUBTOTAL(105,".concat(this.table.name, "[").concat(column.name, "])");
- case 'stdDev':
- return "SUBTOTAL(106,".concat(this.table.name, "[").concat(column.name, "])");
- case 'var':
- return "SUBTOTAL(107,".concat(this.table.name, "[").concat(column.name, "])");
- case 'sum':
- return "SUBTOTAL(109,".concat(this.table.name, "[").concat(column.name, "])");
- case 'custom':
- return column.totalsRowFormula;
- default:
- throw new Error("Invalid Totals Row Function: ".concat(column.totalsRowFunction));
- }
- }
- }, {
- key: "validate",
- value: function validate() {
- var _this = this;
- var table = this.table; // set defaults and check is valid
- var assign = function assign(o, name, dflt) {
- if (o[name] === undefined) {
- o[name] = dflt;
- }
- };
- assign(table, 'headerRow', true);
- assign(table, 'totalsRow', false);
- assign(table, 'style', {});
- assign(table.style, 'theme', 'TableStyleMedium2');
- assign(table.style, 'showFirstColumn', false);
- assign(table.style, 'showLastColumn', false);
- assign(table.style, 'showRowStripes', false);
- assign(table.style, 'showColumnStripes', false);
- var assert = function assert(test, message) {
- if (!test) {
- throw new Error(message);
- }
- };
- assert(table.ref, 'Table must have ref');
- assert(table.columns, 'Table must have column definitions');
- assert(table.rows, 'Table must have row definitions');
- table.tl = colCache.decodeAddress(table.ref);
- var _table$tl = table.tl,
- row = _table$tl.row,
- col = _table$tl.col;
- assert(row > 0, 'Table must be on valid row');
- assert(col > 0, 'Table must be on valid col');
- var width = this.width,
- filterHeight = this.filterHeight,
- tableHeight = this.tableHeight; // autoFilterRef is a range that includes optional headers only
- table.autoFilterRef = colCache.encode(row, col, row + filterHeight - 1, col + width - 1); // tableRef is a range that includes optional headers and totals
- table.tableRef = colCache.encode(row, col, row + tableHeight - 1, col + width - 1);
- table.columns.forEach(function (column, i) {
- assert(column.name, "Column ".concat(i, " must have a name"));
- if (i === 0) {
- assign(column, 'totalsRowLabel', 'Total');
- } else {
- assign(column, 'totalsRowFunction', 'none');
- column.totalsRowFormula = _this.getFormula(column);
- }
- });
- }
- }, {
- key: "store",
- value: function store() {
- var _this2 = this;
- // where the table needs to store table data, headers, footers in
- // the sheet...
- var assignStyle = function assignStyle(cell, style) {
- if (style) {
- Object.keys(style).forEach(function (key) {
- cell[key] = style[key];
- });
- }
- };
- var worksheet = this.worksheet,
- table = this.table;
- var _table$tl2 = table.tl,
- row = _table$tl2.row,
- col = _table$tl2.col;
- var count = 0;
- if (table.headerRow) {
- var r = worksheet.getRow(row + count++);
- table.columns.forEach(function (column, j) {
- var style = column.style,
- name = column.name;
- var cell = r.getCell(col + j);
- cell.value = name;
- assignStyle(cell, style);
- });
- }
- table.rows.forEach(function (data) {
- var r = worksheet.getRow(row + count++);
- data.forEach(function (value, j) {
- var cell = r.getCell(col + j);
- cell.value = value;
- assignStyle(cell, table.columns[j].style);
- });
- });
- if (table.totalsRow) {
- var _r = worksheet.getRow(row + count++);
- table.columns.forEach(function (column, j) {
- var cell = _r.getCell(col + j);
- if (j === 0) {
- cell.value = column.totalsRowLabel;
- } else {
- var formula = _this2.getFormula(column);
- if (formula) {
- cell.value = {
- formula: column.totalsRowFormula,
- result: column.totalsRowResult
- };
- } else {
- cell.value = null;
- }
- }
- assignStyle(cell, column.style);
- });
- }
- }
- }, {
- key: "load",
- value: function load(worksheet) {
- var _this3 = this;
- // where the table will read necessary features from a loaded sheet
- var table = this.table;
- var _table$tl3 = table.tl,
- row = _table$tl3.row,
- col = _table$tl3.col;
- var count = 0;
- if (table.headerRow) {
- var r = worksheet.getRow(row + count++);
- table.columns.forEach(function (column, j) {
- var cell = r.getCell(col + j);
- cell.value = column.name;
- });
- }
- table.rows.forEach(function (data) {
- var r = worksheet.getRow(row + count++);
- data.forEach(function (value, j) {
- var cell = r.getCell(col + j);
- cell.value = value;
- });
- });
- if (table.totalsRow) {
- var _r2 = worksheet.getRow(row + count++);
- table.columns.forEach(function (column, j) {
- var cell = _r2.getCell(col + j);
- if (j === 0) {
- cell.value = column.totalsRowLabel;
- } else {
- var formula = _this3.getFormula(column);
- if (formula) {
- cell.value = {
- formula: column.totalsRowFormula,
- result: column.totalsRowResult
- };
- }
- }
- });
- }
- }
- }, {
- key: "cacheState",
- // ================================================================
- // TODO: Mutating methods
- value: function cacheState() {
- if (!this._cache) {
- this._cache = {
- ref: this.ref,
- width: this.width,
- tableHeight: this.tableHeight
- };
- }
- }
- }, {
- key: "commit",
- value: function commit() {
- // changes may have been made that might have on-sheet effects
- if (!this._cache) {
- return;
- } // check things are ok first
- this.validate();
- var ref = colCache.decodeAddress(this._cache.ref);
- if (this.ref !== this._cache.ref) {
- // wipe out whole table footprint at previous location
- for (var i = 0; i < this._cache.tableHeight; i++) {
- var row = this.worksheet.getRow(ref.row + i);
- for (var j = 0; j < this._cache.width; j++) {
- var cell = row.getCell(ref.col + j);
- cell.value = null;
- }
- }
- } else {
- // clear out below table if it has shrunk
- for (var _i = this.tableHeight; _i < this._cache.tableHeight; _i++) {
- var _row = this.worksheet.getRow(ref.row + _i);
- for (var _j = 0; _j < this._cache.width; _j++) {
- var _cell = _row.getCell(ref.col + _j);
- _cell.value = null;
- }
- } // clear out to right of table if it has lost columns
- for (var _i2 = 0; _i2 < this.tableHeight; _i2++) {
- var _row2 = this.worksheet.getRow(ref.row + _i2);
- for (var _j2 = this.width; _j2 < this._cache.width; _j2++) {
- var _cell2 = _row2.getCell(ref.col + _j2);
- _cell2.value = null;
- }
- }
- }
- this.store();
- }
- }, {
- key: "addRow",
- value: function addRow(values, rowNumber) {
- // Add a row of data, either insert at rowNumber or append
- this.cacheState();
- if (rowNumber === undefined) {
- this.table.rows.push(values);
- } else {
- this.table.rows.splice(rowNumber, 0, values);
- }
- }
- }, {
- key: "removeRows",
- value: function removeRows(rowIndex) {
- var count = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
- // Remove a rows of data
- this.cacheState();
- this.table.rows.splice(rowIndex, count);
- }
- }, {
- key: "getColumn",
- value: function getColumn(colIndex) {
- var column = this.table.columns[colIndex];
- return new Column(this, column, colIndex);
- }
- }, {
- key: "addColumn",
- value: function addColumn(column, values, colIndex) {
- // Add a new column, including column defn and values
- // Inserts at colNumber or adds to the right
- this.cacheState();
- if (colIndex === undefined) {
- this.table.columns.push(column);
- this.table.rows.forEach(function (row, i) {
- row.push(values[i]);
- });
- } else {
- this.table.columns.splice(colIndex, 0, column);
- this.table.rows.forEach(function (row, i) {
- row.splice(colIndex, 0, values[i]);
- });
- }
- }
- }, {
- key: "removeColumns",
- value: function removeColumns(colIndex) {
- var count = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
- // Remove a column with data
- this.cacheState();
- this.table.columns.splice(colIndex, count);
- this.table.rows.forEach(function (row) {
- row.splice(colIndex, count);
- });
- }
- }, {
- key: "_assign",
- value: function _assign(target, prop, value) {
- this.cacheState();
- target[prop] = value;
- }
- /* eslint-disable lines-between-class-members */
- }, {
- key: "width",
- get: function get() {
- // width of the table
- return this.table.columns.length;
- }
- }, {
- key: "height",
- get: function get() {
- // height of the table data
- return this.table.rows.length;
- }
- }, {
- key: "filterHeight",
- get: function get() {
- // height of the table data plus optional header row
- return this.height + (this.table.headerRow ? 1 : 0);
- }
- }, {
- key: "tableHeight",
- get: function get() {
- // full height of the table on the sheet
- return this.filterHeight + (this.table.totalsRow ? 1 : 0);
- }
- }, {
- key: "model",
- get: function get() {
- return this.table;
- },
- set: function set(value) {
- this.table = value;
- }
- }, {
- key: "ref",
- get: function get() {
- return this.table.ref;
- },
- set: function set(value) {
- this._assign(this.table, 'ref', value);
- }
- }, {
- key: "name",
- get: function get() {
- return this.table.name;
- },
- set: function set(value) {
- this.table.name = value;
- }
- }, {
- key: "displayName",
- get: function get() {
- return this.table.displyName || this.table.name;
- }
- }, {
- key: "displayNamename",
- set: function set(value) {
- this.table.displayName = value;
- }
- }, {
- key: "headerRow",
- get: function get() {
- return this.table.headerRow;
- },
- set: function set(value) {
- this._assign(this.table, 'headerRow', value);
- }
- }, {
- key: "totalsRow",
- get: function get() {
- return this.table.totalsRow;
- },
- set: function set(value) {
- this._assign(this.table, 'totalsRow', value);
- }
- }, {
- key: "theme",
- get: function get() {
- return this.table.style.name;
- },
- set: function set(value) {
- this.table.style.name = value;
- }
- }, {
- key: "showFirstColumn",
- get: function get() {
- return this.table.style.showFirstColumn;
- },
- set: function set(value) {
- this.table.style.showFirstColumn = value;
- }
- }, {
- key: "showLastColumn",
- get: function get() {
- return this.table.style.showLastColumn;
- },
- set: function set(value) {
- this.table.style.showLastColumn = value;
- }
- }, {
- key: "showRowStripes",
- get: function get() {
- return this.table.style.showRowStripes;
- },
- set: function set(value) {
- this.table.style.showRowStripes = value;
- }
- }, {
- key: "showColumnStripes",
- get: function get() {
- return this.table.style.showColumnStripes;
- },
- set: function set(value) {
- this.table.style.showColumnStripes = value;
- }
- /* eslint-enable lines-between-class-members */
- }]);
- return Table;
- }();
- module.exports = Table;
- },{"../utils/col-cache":19}],13:[function(require,module,exports){
- 'use strict';
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- var Worksheet = require('./worksheet');
- var DefinedNames = require('./defined-names');
- var XLSX = require('../xlsx/xlsx');
- var CSV = require('../csv/csv'); // Workbook requirements
- // Load and Save from file and stream
- // Access/Add/Delete individual worksheets
- // Manage String table, Hyperlink table, etc.
- // Manage scaffolding for contained objects to write to/read from
- var Workbook = /*#__PURE__*/function () {
- function Workbook() {
- _classCallCheck(this, Workbook);
- this.category = '';
- this.company = '';
- this.created = new Date();
- this.description = '';
- this.keywords = '';
- this.manager = '';
- this.modified = this.created;
- this.properties = {};
- this.calcProperties = {};
- this._worksheets = [];
- this.subject = '';
- this.title = '';
- this.views = [];
- this.media = [];
- this._definedNames = new DefinedNames();
- }
- _createClass(Workbook, [{
- key: "addWorksheet",
- value: function addWorksheet(name, options) {
- var id = this.nextId;
- if (name && name.length > 31) {
- // eslint-disable-next-line no-console
- console.warn("Worksheet name ".concat(name, " exceeds 31 chars. This will be truncated"));
- } // Illegal character in worksheet name: asterisk (*), question mark (?),
- // colon (:), forward slash (/ \), or bracket ([])
- if (/[*?:/\\[\]]/.test(name)) {
- throw new Error("Worksheet name ".concat(name, " cannot include any of the following characters: * ? : \\ / [ ]"));
- }
- if (/(^')|('$)/.test(name)) {
- throw new Error("The first or last character of worksheet name cannot be a single quotation mark: ".concat(name));
- }
- name = (name || "sheet".concat(id)).substring(0, 31);
- if (this._worksheets.find(function (ws) {
- return ws && ws.name.toLowerCase() === name.toLowerCase();
- })) {
- throw new Error("Worksheet name already exists: ".concat(name));
- } // if options is a color, call it tabColor (and signal deprecated message)
- if (options) {
- if (typeof options === 'string') {
- // eslint-disable-next-line no-console
- console.trace('tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { argb: "rbg value" } }');
- options = {
- properties: {
- tabColor: {
- argb: options
- }
- }
- };
- } else if (options.argb || options.theme || options.indexed) {
- // eslint-disable-next-line no-console
- console.trace('tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { ... } }');
- options = {
- properties: {
- tabColor: options
- }
- };
- }
- }
- var lastOrderNo = this._worksheets.reduce(function (acc, ws) {
- return (ws && ws.orderNo) > acc ? ws.orderNo : acc;
- }, 0);
- var worksheetOptions = Object.assign({}, options, {
- id: id,
- name: name,
- orderNo: lastOrderNo + 1,
- workbook: this
- });
- var worksheet = new Worksheet(worksheetOptions);
- this._worksheets[id] = worksheet;
- return worksheet;
- }
- }, {
- key: "removeWorksheetEx",
- value: function removeWorksheetEx(worksheet) {
- delete this._worksheets[worksheet.id];
- }
- }, {
- key: "removeWorksheet",
- value: function removeWorksheet(id) {
- var worksheet = this.getWorksheet(id);
- if (worksheet) {
- worksheet.destroy();
- }
- }
- }, {
- key: "getWorksheet",
- value: function getWorksheet(id) {
- if (id === undefined) {
- return this._worksheets.find(Boolean);
- }
- if (typeof id === 'number') {
- return this._worksheets[id];
- }
- if (typeof id === 'string') {
- return this._worksheets.find(function (worksheet) {
- return worksheet && worksheet.name === id;
- });
- }
- return undefined;
- }
- }, {
- key: "eachSheet",
- value: function eachSheet(iteratee) {
- this.worksheets.forEach(function (sheet) {
- iteratee(sheet, sheet.id);
- });
- }
- }, {
- key: "clearThemes",
- value: function clearThemes() {
- // Note: themes are not an exposed feature, meddle at your peril!
- this._themes = undefined;
- }
- }, {
- key: "addImage",
- value: function addImage(image) {
- // TODO: validation?
- var id = this.media.length;
- this.media.push(Object.assign({}, image, {
- type: 'image'
- }));
- return id;
- }
- }, {
- key: "getImage",
- value: function getImage(id) {
- return this.media[id];
- }
- }, {
- key: "xlsx",
- get: function get() {
- if (!this._xlsx) this._xlsx = new XLSX(this);
- return this._xlsx;
- }
- }, {
- key: "csv",
- get: function get() {
- if (!this._csv) this._csv = new CSV(this);
- return this._csv;
- }
- }, {
- key: "nextId",
- get: function get() {
- // find the next unique spot to add worksheet
- for (var i = 1; i < this._worksheets.length; i++) {
- if (!this._worksheets[i]) {
- return i;
- }
- }
- return this._worksheets.length || 1;
- }
- }, {
- key: "worksheets",
- get: function get() {
- // return a clone of _worksheets
- return this._worksheets.slice(1).sort(function (a, b) {
- return a.orderNo - b.orderNo;
- }).filter(Boolean);
- }
- }, {
- key: "definedNames",
- get: function get() {
- return this._definedNames;
- }
- }, {
- key: "model",
- get: function get() {
- return {
- creator: this.creator || 'Unknown',
- lastModifiedBy: this.lastModifiedBy || 'Unknown',
- lastPrinted: this.lastPrinted,
- created: this.created,
- modified: this.modified,
- properties: this.properties,
- worksheets: this.worksheets.map(function (worksheet) {
- return worksheet.model;
- }),
- sheets: this.worksheets.map(function (ws) {
- return ws.model;
- }).filter(Boolean),
- definedNames: this._definedNames.model,
- views: this.views,
- company: this.company,
- manager: this.manager,
- title: this.title,
- subject: this.subject,
- keywords: this.keywords,
- category: this.category,
- description: this.description,
- language: this.language,
- revision: this.revision,
- contentStatus: this.contentStatus,
- themes: this._themes,
- media: this.media,
- calcProperties: this.calcProperties
- };
- },
- set: function set(value) {
- var _this = this;
- this.creator = value.creator;
- this.lastModifiedBy = value.lastModifiedBy;
- this.lastPrinted = value.lastPrinted;
- this.created = value.created;
- this.modified = value.modified;
- this.company = value.company;
- this.manager = value.manager;
- this.title = value.title;
- this.subject = value.subject;
- this.keywords = value.keywords;
- this.category = value.category;
- this.description = value.description;
- this.language = value.language;
- this.revision = value.revision;
- this.contentStatus = value.contentStatus;
- this.properties = value.properties;
- this.calcProperties = value.calcProperties;
- this._worksheets = [];
- value.worksheets.forEach(function (worksheetModel) {
- var id = worksheetModel.id,
- name = worksheetModel.name,
- state = worksheetModel.state;
- var orderNo = value.sheets && value.sheets.findIndex(function (ws) {
- return ws.id === id;
- });
- var worksheet = _this._worksheets[id] = new Worksheet({
- id: id,
- name: name,
- orderNo: orderNo,
- state: state,
- workbook: _this
- });
- worksheet.model = worksheetModel;
- });
- this._definedNames.model = value.definedNames;
- this.views = value.views;
- this._themes = value.themes;
- this.media = value.media || [];
- }
- }]);
- return Workbook;
- }();
- module.exports = Workbook;
- },{"../csv/csv":1,"../xlsx/xlsx":141,"./defined-names":6,"./worksheet":14}],14:[function(require,module,exports){
- "use strict";
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
- function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
- function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
- function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
- function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- var _ = require('../utils/under-dash');
- var colCache = require('../utils/col-cache');
- var Range = require('./range');
- var Row = require('./row');
- var Column = require('./column');
- var Enums = require('./enums');
- var Image = require('./image');
- var Table = require('./table');
- var DataValidations = require('./data-validations');
- var Encryptor = require('../utils/encryptor'); // Worksheet requirements
- // Operate as sheet inside workbook or standalone
- // Load and Save from file and stream
- // Access/Add/Delete individual cells
- // Manage column widths and row heights
- var Worksheet = /*#__PURE__*/function () {
- function Worksheet(options) {
- _classCallCheck(this, Worksheet);
- options = options || {}; // in a workbook, each sheet will have a number
- this.id = options.id;
- this.orderNo = options.orderNo; // and a name
- this.name = options.name || "Sheet".concat(this.id); // add a state
- this.state = options.state || 'visible'; // rows allows access organised by row. Sparse array of arrays indexed by row-1, col
- // Note: _rows is zero based. Must subtract 1 to go from cell.row to index
- this._rows = []; // column definitions
- this._columns = null; // column keys (addRow convenience): key ==> this._collumns index
- this._keys = {}; // keep record of all merges
- this._merges = {}; // record of all row and column pageBreaks
- this.rowBreaks = [];
- this._workbook = options.workbook; // for tabColor, default row height, outline levels, etc
- this.properties = Object.assign({}, {
- defaultRowHeight: 15,
- dyDescent: 55,
- outlineLevelCol: 0,
- outlineLevelRow: 0
- }, options.properties); // for all things printing
- this.pageSetup = Object.assign({}, {
- margins: {
- left: 0.7,
- right: 0.7,
- top: 0.75,
- bottom: 0.75,
- header: 0.3,
- footer: 0.3
- },
- orientation: 'portrait',
- horizontalDpi: 4294967295,
- verticalDpi: 4294967295,
- fitToPage: !!(options.pageSetup && (options.pageSetup.fitToWidth || options.pageSetup.fitToHeight) && !options.pageSetup.scale),
- pageOrder: 'downThenOver',
- blackAndWhite: false,
- draft: false,
- cellComments: 'None',
- errors: 'displayed',
- scale: 100,
- fitToWidth: 1,
- fitToHeight: 1,
- paperSize: undefined,
- showRowColHeaders: false,
- showGridLines: false,
- firstPageNumber: undefined,
- horizontalCentered: false,
- verticalCentered: false,
- rowBreaks: null,
- colBreaks: null
- }, options.pageSetup);
- this.headerFooter = Object.assign({}, {
- differentFirst: false,
- differentOddEven: false,
- oddHeader: null,
- oddFooter: null,
- evenHeader: null,
- evenFooter: null,
- firstHeader: null,
- firstFooter: null
- }, options.headerFooter);
- this.dataValidations = new DataValidations(); // for freezepanes, split, zoom, gridlines, etc
- this.views = options.views || [];
- this.autoFilter = options.autoFilter || null; // for images, etc
- this._media = []; // worksheet protection
- this.sheetProtection = null; // for tables
- this.tables = {};
- this.conditionalFormattings = [];
- }
- _createClass(Worksheet, [{
- key: "destroy",
- // when you're done with this worksheet, call this to remove from workbook
- value: function destroy() {
- this._workbook.removeWorksheetEx(this);
- } // Get the bounding range of the cells in this worksheet
- }, {
- key: "getColumnKey",
- value: function getColumnKey(key) {
- return this._keys[key];
- }
- }, {
- key: "setColumnKey",
- value: function setColumnKey(key, value) {
- this._keys[key] = value;
- }
- }, {
- key: "deleteColumnKey",
- value: function deleteColumnKey(key) {
- delete this._keys[key];
- }
- }, {
- key: "eachColumnKey",
- value: function eachColumnKey(f) {
- _.each(this._keys, f);
- } // get a single column by col number. If it doesn't exist, create it and any gaps before it
- }, {
- key: "getColumn",
- value: function getColumn(c) {
- if (typeof c === 'string') {
- // if it matches a key'd column, return that
- var col = this._keys[c];
- if (col) return col; // otherwise, assume letter
- c = colCache.l2n(c);
- }
- if (!this._columns) {
- this._columns = [];
- }
- if (c > this._columns.length) {
- var n = this._columns.length + 1;
- while (n <= c) {
- this._columns.push(new Column(this, n++));
- }
- }
- return this._columns[c - 1];
- }
- }, {
- key: "spliceColumns",
- value: function spliceColumns(start, count) {
- var _this = this;
- var rows = this._rows;
- var nRows = rows.length;
- for (var _len = arguments.length, inserts = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
- inserts[_key - 2] = arguments[_key];
- }
- if (inserts.length > 0) {
- var _loop = function _loop(i) {
- var rowArguments = [start, count]; // eslint-disable-next-line no-loop-func
- inserts.forEach(function (insert) {
- rowArguments.push(insert[i] || null);
- });
- var row = _this.getRow(i + 1); // eslint-disable-next-line prefer-spread
- row.splice.apply(row, rowArguments);
- };
- // must iterate over all rows whether they exist yet or not
- for (var i = 0; i < nRows; i++) {
- _loop(i);
- }
- } else {
- // nothing to insert, so just splice all rows
- this._rows.forEach(function (r) {
- if (r) {
- r.splice(start, count);
- }
- });
- } // splice column definitions
- var nExpand = inserts.length - count;
- var nKeep = start + count;
- var nEnd = this._columns.length;
- if (nExpand < 0) {
- for (var _i = start + inserts.length; _i <= nEnd; _i++) {
- this.getColumn(_i).defn = this.getColumn(_i - nExpand).defn;
- }
- } else if (nExpand > 0) {
- for (var _i2 = nEnd; _i2 >= nKeep; _i2--) {
- this.getColumn(_i2 + nExpand).defn = this.getColumn(_i2).defn;
- }
- }
- for (var _i3 = start; _i3 < start + inserts.length; _i3++) {
- this.getColumn(_i3).defn = null;
- } // account for defined names
- this.workbook.definedNames.spliceColumns(this.name, start, count, inserts.length);
- }
- }, {
- key: "_commitRow",
- // =========================================================================
- // Rows
- value: function _commitRow() {// nop - allows streaming reader to fill a document
- }
- }, {
- key: "findRow",
- // find a row (if exists) by row number
- value: function findRow(r) {
- return this._rows[r - 1];
- } // find multiple rows (if exists) by row number
- }, {
- key: "findRows",
- value: function findRows(start, length) {
- return this._rows.slice(start - 1, start - 1 + length);
- }
- }, {
- key: "getRow",
- // get a row by row number.
- value: function getRow(r) {
- var row = this._rows[r - 1];
- if (!row) {
- row = this._rows[r - 1] = new Row(this, r);
- }
- return row;
- } // get multiple rows by row number.
- }, {
- key: "getRows",
- value: function getRows(start, length) {
- if (length < 1) return undefined;
- var rows = [];
- for (var i = start; i < start + length; i++) {
- rows.push(this.getRow(i));
- }
- return rows;
- }
- }, {
- key: "addRow",
- value: function addRow(value) {
- var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'n';
- var rowNo = this._nextRow;
- var row = this.getRow(rowNo);
- row.values = value;
- this._setStyleOption(rowNo, style[0] === 'i' ? style : 'n');
- return row;
- }
- }, {
- key: "addRows",
- value: function addRows(value) {
- var _this2 = this;
- var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'n';
- var rows = [];
- value.forEach(function (row) {
- rows.push(_this2.addRow(row, style));
- });
- return rows;
- }
- }, {
- key: "insertRow",
- value: function insertRow(pos, value) {
- var style = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'n';
- this.spliceRows(pos, 0, value);
- this._setStyleOption(pos, style);
- return this.getRow(pos);
- }
- }, {
- key: "insertRows",
- value: function insertRows(pos, values) {
- var style = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'n';
- this.spliceRows.apply(this, [pos, 0].concat(_toConsumableArray(values)));
- if (style !== 'n') {
- // copy over the styles
- for (var i = 0; i < values.length; i++) {
- if (style[0] === 'o' && this.findRow(values.length + pos + i) !== undefined) {
- this._copyStyle(values.length + pos + i, pos + i, style[1] === '+');
- } else if (style[0] === 'i' && this.findRow(pos - 1) !== undefined) {
- this._copyStyle(pos - 1, pos + i, style[1] === '+');
- }
- }
- }
- return this.getRows(pos, values.length);
- } // set row at position to same style as of either pervious row (option 'i') or next row (option 'o')
- }, {
- key: "_setStyleOption",
- value: function _setStyleOption(pos) {
- var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'n';
- if (style[0] === 'o' && this.findRow(pos + 1) !== undefined) {
- this._copyStyle(pos + 1, pos, style[1] === '+');
- } else if (style[0] === 'i' && this.findRow(pos - 1) !== undefined) {
- this._copyStyle(pos - 1, pos, style[1] === '+');
- }
- }
- }, {
- key: "_copyStyle",
- value: function _copyStyle(src, dest) {
- var styleEmpty = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
- var rSrc = this.getRow(src);
- var rDst = this.getRow(dest);
- rDst.style = Object.freeze(_objectSpread({}, rSrc.style)); // eslint-disable-next-line no-loop-func
- rSrc.eachCell({
- includeEmpty: styleEmpty
- }, function (cell, colNumber) {
- rDst.getCell(colNumber).style = Object.freeze(_objectSpread({}, cell.style));
- });
- rDst.height = rSrc.height;
- }
- }, {
- key: "duplicateRow",
- value: function duplicateRow(rowNum, count) {
- var _this3 = this;
- var insert = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
- // create count duplicates of rowNum
- // either inserting new or overwriting existing rows
- var rSrc = this._rows[rowNum - 1];
- var inserts = new Array(count).fill(rSrc.values);
- this.spliceRows.apply(this, [rowNum + 1, insert ? 0 : count].concat(_toConsumableArray(inserts))); // now copy styles...
- var _loop2 = function _loop2(i) {
- var rDst = _this3._rows[rowNum + i];
- rDst.style = rSrc.style;
- rDst.height = rSrc.height; // eslint-disable-next-line no-loop-func
- rSrc.eachCell({
- includeEmpty: true
- }, function (cell, colNumber) {
- rDst.getCell(colNumber).style = cell.style;
- });
- };
- for (var i = 0; i < count; i++) {
- _loop2(i);
- }
- }
- }, {
- key: "spliceRows",
- value: function spliceRows(start, count) {
- var _this4 = this;
- // same problem as row.splice, except worse.
- var nKeep = start + count;
- for (var _len2 = arguments.length, inserts = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {
- inserts[_key2 - 2] = arguments[_key2];
- }
- var nInserts = inserts.length;
- var nExpand = nInserts - count;
- var nEnd = this._rows.length;
- var i;
- var rSrc;
- if (nExpand < 0) {
- // remove rows
- for (i = nKeep; i <= nEnd; i++) {
- rSrc = this._rows[i - 1];
- if (rSrc) {
- (function () {
- var rDst = _this4.getRow(i + nExpand);
- rDst.values = rSrc.values;
- rDst.style = rSrc.style;
- rDst.height = rSrc.height; // eslint-disable-next-line no-loop-func
- rSrc.eachCell({
- includeEmpty: true
- }, function (cell, colNumber) {
- rDst.getCell(colNumber).style = cell.style;
- });
- _this4._rows[i - 1] = undefined;
- })();
- } else {
- this._rows[i + nExpand - 1] = undefined;
- }
- }
- } else if (nExpand > 0) {
- // insert new cells
- for (i = nEnd; i >= nKeep; i--) {
- rSrc = this._rows[i - 1];
- if (rSrc) {
- (function () {
- var rDst = _this4.getRow(i + nExpand);
- rDst.values = rSrc.values;
- rDst.style = rSrc.style;
- rDst.height = rSrc.height; // eslint-disable-next-line no-loop-func
- rSrc.eachCell({
- includeEmpty: true
- }, function (cell, colNumber) {
- rDst.getCell(colNumber).style = cell.style; // remerge cells accounting for insert offset
- if (cell._value.constructor.name === 'MergeValue') {
- var cellToBeMerged = _this4.getRow(cell._row._number + nInserts).getCell(colNumber);
- var prevMaster = cell._value._master;
- var newMaster = _this4.getRow(prevMaster._row._number + nInserts).getCell(prevMaster._column._number);
- cellToBeMerged.merge(newMaster);
- }
- });
- })();
- } else {
- this._rows[i + nExpand - 1] = undefined;
- }
- }
- } // now copy over the new values
- for (i = 0; i < nInserts; i++) {
- var rDst = this.getRow(start + i);
- rDst.style = {};
- rDst.values = inserts[i];
- } // account for defined names
- this.workbook.definedNames.spliceRows(this.name, start, count, nInserts);
- } // iterate over every row in the worksheet, including maybe empty rows
- }, {
- key: "eachRow",
- value: function eachRow(options, iteratee) {
- if (!iteratee) {
- iteratee = options;
- options = undefined;
- }
- if (options && options.includeEmpty) {
- var n = this._rows.length;
- for (var i = 1; i <= n; i++) {
- iteratee(this.getRow(i), i);
- }
- } else {
- this._rows.forEach(function (row) {
- if (row && row.hasValues) {
- iteratee(row, row.number);
- }
- });
- }
- } // return all rows as sparse array
- }, {
- key: "getSheetValues",
- value: function getSheetValues() {
- var rows = [];
- this._rows.forEach(function (row) {
- if (row) {
- rows[row.number] = row.values;
- }
- });
- return rows;
- } // =========================================================================
- // Cells
- // returns the cell at [r,c] or address given by r. If not found, return undefined
- }, {
- key: "findCell",
- value: function findCell(r, c) {
- var address = colCache.getAddress(r, c);
- var row = this._rows[address.row - 1];
- return row ? row.findCell(address.col) : undefined;
- } // return the cell at [r,c] or address given by r. If not found, create a new one.
- }, {
- key: "getCell",
- value: function getCell(r, c) {
- var address = colCache.getAddress(r, c);
- var row = this.getRow(address.row);
- return row.getCellEx(address);
- } // =========================================================================
- // Merge
- // convert the range defined by ['tl:br'], [tl,br] or [t,l,b,r] into a single 'merged' cell
- }, {
- key: "mergeCells",
- value: function mergeCells() {
- for (var _len3 = arguments.length, cells = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
- cells[_key3] = arguments[_key3];
- }
- var dimensions = new Range(cells);
- this._mergeCellsInternal(dimensions);
- }
- }, {
- key: "mergeCellsWithoutStyle",
- value: function mergeCellsWithoutStyle() {
- for (var _len4 = arguments.length, cells = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
- cells[_key4] = arguments[_key4];
- }
- var dimensions = new Range(cells);
- this._mergeCellsInternal(dimensions, true);
- }
- }, {
- key: "_mergeCellsInternal",
- value: function _mergeCellsInternal(dimensions, ignoreStyle) {
- // check cells aren't already merged
- _.each(this._merges, function (merge) {
- if (merge.intersects(dimensions)) {
- throw new Error('Cannot merge already merged cells');
- }
- }); // apply merge
- var master = this.getCell(dimensions.top, dimensions.left);
- for (var i = dimensions.top; i <= dimensions.bottom; i++) {
- for (var j = dimensions.left; j <= dimensions.right; j++) {
- // merge all but the master cell
- if (i > dimensions.top || j > dimensions.left) {
- this.getCell(i, j).merge(master, ignoreStyle);
- }
- }
- } // index merge
- this._merges[master.address] = dimensions;
- }
- }, {
- key: "_unMergeMaster",
- value: function _unMergeMaster(master) {
- // master is always top left of a rectangle
- var merge = this._merges[master.address];
- if (merge) {
- for (var i = merge.top; i <= merge.bottom; i++) {
- for (var j = merge.left; j <= merge.right; j++) {
- this.getCell(i, j).unmerge();
- }
- }
- delete this._merges[master.address];
- }
- }
- }, {
- key: "unMergeCells",
- // scan the range defined by ['tl:br'], [tl,br] or [t,l,b,r] and if any cell is part of a merge,
- // un-merge the group. Note this function can affect multiple merges and merge-blocks are
- // atomic - either they're all merged or all un-merged.
- value: function unMergeCells() {
- for (var _len5 = arguments.length, cells = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
- cells[_key5] = arguments[_key5];
- }
- var dimensions = new Range(cells); // find any cells in that range and unmerge them
- for (var i = dimensions.top; i <= dimensions.bottom; i++) {
- for (var j = dimensions.left; j <= dimensions.right; j++) {
- var cell = this.findCell(i, j);
- if (cell) {
- if (cell.type === Enums.ValueType.Merge) {
- // this cell merges to another master
- this._unMergeMaster(cell.master);
- } else if (this._merges[cell.address]) {
- // this cell is a master
- this._unMergeMaster(cell);
- }
- }
- }
- }
- } // ===========================================================================
- // Shared/Array Formula
- }, {
- key: "fillFormula",
- value: function fillFormula(range, formula, results) {
- var shareType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'shared';
- // Define formula for top-left cell and share to rest
- var decoded = colCache.decode(range);
- var top = decoded.top,
- left = decoded.left,
- bottom = decoded.bottom,
- right = decoded.right;
- var width = right - left + 1;
- var masterAddress = colCache.encodeAddress(top, left);
- var isShared = shareType === 'shared'; // work out result accessor
- var getResult;
- if (typeof results === 'function') {
- getResult = results;
- } else if (Array.isArray(results)) {
- if (Array.isArray(results[0])) {
- getResult = function getResult(row, col) {
- return results[row - top][col - left];
- };
- } else {
- // eslint-disable-next-line no-mixed-operators
- getResult = function getResult(row, col) {
- return results[(row - top) * width + (col - left)];
- };
- }
- } else {
- getResult = function getResult() {
- return undefined;
- };
- }
- var first = true;
- for (var r = top; r <= bottom; r++) {
- for (var c = left; c <= right; c++) {
- if (first) {
- this.getCell(r, c).value = {
- shareType: shareType,
- formula: formula,
- ref: range,
- result: getResult(r, c)
- };
- first = false;
- } else {
- this.getCell(r, c).value = isShared ? {
- sharedFormula: masterAddress,
- result: getResult(r, c)
- } : getResult(r, c);
- }
- }
- }
- } // =========================================================================
- // Images
- }, {
- key: "addImage",
- value: function addImage(imageId, range) {
- var model = {
- type: 'image',
- imageId: imageId,
- range: range
- };
- this._media.push(new Image(this, model));
- }
- }, {
- key: "getImages",
- value: function getImages() {
- return this._media.filter(function (m) {
- return m.type === 'image';
- });
- }
- }, {
- key: "addBackgroundImage",
- value: function addBackgroundImage(imageId) {
- var model = {
- type: 'background',
- imageId: imageId
- };
- this._media.push(new Image(this, model));
- }
- }, {
- key: "getBackgroundImageId",
- value: function getBackgroundImageId() {
- var image = this._media.find(function (m) {
- return m.type === 'background';
- });
- return image && image.imageId;
- } // =========================================================================
- // Worksheet Protection
- }, {
- key: "protect",
- value: function protect(password, options) {
- var _this5 = this;
- // TODO: make this function truly async
- // perhaps marshal to worker thread or something
- return new Promise(function (resolve) {
- _this5.sheetProtection = {
- sheet: true
- };
- if (options && 'spinCount' in options) {
- // force spinCount to be integer >= 0
- options.spinCount = Number.isFinite(options.spinCount) ? Math.round(Math.max(0, options.spinCount)) : 100000;
- }
- if (password) {
- _this5.sheetProtection.algorithmName = 'SHA-512';
- _this5.sheetProtection.saltValue = Encryptor.randomBytes(16).toString('base64');
- _this5.sheetProtection.spinCount = options && 'spinCount' in options ? options.spinCount : 100000; // allow user specified spinCount
- _this5.sheetProtection.hashValue = Encryptor.convertPasswordToHash(password, 'SHA512', _this5.sheetProtection.saltValue, _this5.sheetProtection.spinCount);
- }
- if (options) {
- _this5.sheetProtection = Object.assign(_this5.sheetProtection, options);
- if (!password && 'spinCount' in options) {
- delete _this5.sheetProtection.spinCount;
- }
- }
- resolve();
- });
- }
- }, {
- key: "unprotect",
- value: function unprotect() {
- this.sheetProtection = null;
- } // =========================================================================
- // Tables
- }, {
- key: "addTable",
- value: function addTable(model) {
- var table = new Table(this, model);
- this.tables[model.name] = table;
- return table;
- }
- }, {
- key: "getTable",
- value: function getTable(name) {
- return this.tables[name];
- }
- }, {
- key: "removeTable",
- value: function removeTable(name) {
- delete this.tables[name];
- }
- }, {
- key: "getTables",
- value: function getTables() {
- return Object.values(this.tables);
- } // ===========================================================================
- // Conditional Formatting
- }, {
- key: "addConditionalFormatting",
- value: function addConditionalFormatting(cf) {
- this.conditionalFormattings.push(cf);
- }
- }, {
- key: "removeConditionalFormatting",
- value: function removeConditionalFormatting(filter) {
- if (typeof filter === 'number') {
- this.conditionalFormattings.splice(filter, 1);
- } else if (filter instanceof Function) {
- this.conditionalFormattings = this.conditionalFormattings.filter(filter);
- } else {
- this.conditionalFormattings = [];
- }
- } // ===========================================================================
- // Deprecated
- }, {
- key: "_parseRows",
- value: function _parseRows(model) {
- var _this6 = this;
- this._rows = [];
- model.rows.forEach(function (rowModel) {
- var row = new Row(_this6, rowModel.number);
- _this6._rows[row.number - 1] = row;
- row.model = rowModel;
- });
- }
- }, {
- key: "_parseMergeCells",
- value: function _parseMergeCells(model) {
- var _this7 = this;
- _.each(model.mergeCells, function (merge) {
- // Do not merge styles when importing an Excel file
- // since each cell may have different styles intentionally.
- _this7.mergeCellsWithoutStyle(merge);
- });
- }
- }, {
- key: "workbook",
- get: function get() {
- return this._workbook;
- }
- }, {
- key: "dimensions",
- get: function get() {
- var dimensions = new Range();
- this._rows.forEach(function (row) {
- if (row) {
- var rowDims = row.dimensions;
- if (rowDims) {
- dimensions.expand(row.number, rowDims.min, row.number, rowDims.max);
- }
- }
- });
- return dimensions;
- } // =========================================================================
- // Columns
- // get the current columns array.
- }, {
- key: "columns",
- get: function get() {
- return this._columns;
- } // set the columns from an array of column definitions.
- // Note: any headers defined will overwrite existing values.
- ,
- set: function set(value) {
- var _this8 = this;
- // calculate max header row count
- this._headerRowCount = value.reduce(function (pv, cv) {
- var headerCount = cv.header && 1 || cv.headers && cv.headers.length || 0;
- return Math.max(pv, headerCount);
- }, 0); // construct Column objects
- var count = 1;
- var columns = this._columns = [];
- value.forEach(function (defn) {
- var column = new Column(_this8, count++, false);
- columns.push(column);
- column.defn = defn;
- });
- }
- }, {
- key: "lastColumn",
- get: function get() {
- return this.getColumn(this.columnCount);
- }
- }, {
- key: "columnCount",
- get: function get() {
- var maxCount = 0;
- this.eachRow(function (row) {
- maxCount = Math.max(maxCount, row.cellCount);
- });
- return maxCount;
- }
- }, {
- key: "actualColumnCount",
- get: function get() {
- // performance nightmare - for each row, counts all the columns used
- var counts = [];
- var count = 0;
- this.eachRow(function (row) {
- row.eachCell(function (_ref) {
- var col = _ref.col;
- if (!counts[col]) {
- counts[col] = true;
- count++;
- }
- });
- });
- return count;
- }
- }, {
- key: "_lastRowNumber",
- get: function get() {
- // need to cope with results of splice
- var rows = this._rows;
- var n = rows.length;
- while (n > 0 && rows[n - 1] === undefined) {
- n--;
- }
- return n;
- }
- }, {
- key: "_nextRow",
- get: function get() {
- return this._lastRowNumber + 1;
- }
- }, {
- key: "lastRow",
- get: function get() {
- if (this._rows.length) {
- return this._rows[this._rows.length - 1];
- }
- return undefined;
- }
- }, {
- key: "rowCount",
- get: function get() {
- return this._lastRowNumber;
- }
- }, {
- key: "actualRowCount",
- get: function get() {
- // counts actual rows that have actual data
- var count = 0;
- this.eachRow(function () {
- count++;
- });
- return count;
- }
- }, {
- key: "hasMerges",
- get: function get() {
- // return true if this._merges has a merge object
- return _.some(this._merges, Boolean);
- }
- }, {
- key: "tabColor",
- get: function get() {
- // eslint-disable-next-line no-console
- console.trace('worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor');
- return this.properties.tabColor;
- },
- set: function set(value) {
- // eslint-disable-next-line no-console
- console.trace('worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor');
- this.properties.tabColor = value;
- } // ===========================================================================
- // Model
- }, {
- key: "model",
- get: function get() {
- var model = {
- id: this.id,
- name: this.name,
- dataValidations: this.dataValidations.model,
- properties: this.properties,
- state: this.state,
- pageSetup: this.pageSetup,
- headerFooter: this.headerFooter,
- rowBreaks: this.rowBreaks,
- views: this.views,
- autoFilter: this.autoFilter,
- media: this._media.map(function (medium) {
- return medium.model;
- }),
- sheetProtection: this.sheetProtection,
- tables: Object.values(this.tables).map(function (table) {
- return table.model;
- }),
- conditionalFormattings: this.conditionalFormattings
- }; // =================================================
- // columns
- model.cols = Column.toModel(this.columns); // ==========================================================
- // Rows
- var rows = model.rows = [];
- var dimensions = model.dimensions = new Range();
- this._rows.forEach(function (row) {
- var rowModel = row && row.model;
- if (rowModel) {
- dimensions.expand(rowModel.number, rowModel.min, rowModel.number, rowModel.max);
- rows.push(rowModel);
- }
- }); // ==========================================================
- // Merges
- model.merges = [];
- _.each(this._merges, function (merge) {
- model.merges.push(merge.range);
- });
- return model;
- },
- set: function set(value) {
- var _this9 = this;
- this.name = value.name;
- this._columns = Column.fromModel(this, value.cols);
- this._parseRows(value);
- this._parseMergeCells(value);
- this.dataValidations = new DataValidations(value.dataValidations);
- this.properties = value.properties;
- this.pageSetup = value.pageSetup;
- this.headerFooter = value.headerFooter;
- this.views = value.views;
- this.autoFilter = value.autoFilter;
- this._media = value.media.map(function (medium) {
- return new Image(_this9, medium);
- });
- this.sheetProtection = value.sheetProtection;
- this.tables = value.tables.reduce(function (tables, table) {
- var t = new Table();
- t.model = table;
- tables[table.name] = t;
- return tables;
- }, {});
- this.conditionalFormattings = value.conditionalFormattings;
- }
- }]);
- return Worksheet;
- }();
- module.exports = Worksheet;
- },{"../utils/col-cache":19,"../utils/encryptor":20,"../utils/under-dash":25,"./column":4,"./data-validations":5,"./enums":7,"./image":8,"./range":10,"./row":11,"./table":12}],15:[function(require,module,exports){
- "use strict";
- // this bundle is built without polyfill leaving apps the freedom to add their own
- var ExcelJS = {
- Workbook: require('./doc/workbook')
- }; // Object.assign mono-fill
- var Enums = require('./doc/enums');
- Object.keys(Enums).forEach(function (key) {
- ExcelJS[key] = Enums[key];
- });
- module.exports = ExcelJS;
- },{"./doc/enums":7,"./doc/workbook":13}],16:[function(require,module,exports){
- "use strict";
- // eslint-disable-next-line node/no-unsupported-features/node-builtins
- var textDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf-8');
- function bufferToString(chunk) {
- if (typeof chunk === 'string') {
- return chunk;
- }
- if (textDecoder) {
- return textDecoder.decode(chunk);
- }
- return chunk.toString();
- }
- exports.bufferToString = bufferToString;
- },{}],17:[function(require,module,exports){
- "use strict";
- // eslint-disable-next-line node/no-unsupported-features/node-builtins
- var textEncoder = typeof TextEncoder === 'undefined' ? null : new TextEncoder('utf-8');
- var _require = require('buffer'),
- Buffer = _require.Buffer;
- function stringToBuffer(str) {
- if (typeof str !== 'string') {
- return str;
- }
- if (textEncoder) {
- return Buffer.from(textEncoder.encode(str).buffer);
- }
- return Buffer.from(str);
- }
- exports.stringToBuffer = stringToBuffer;
- },{"buffer":216}],18:[function(require,module,exports){
- "use strict";
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- var _ = require('./under-dash');
- var colCache = require('./col-cache');
- var CellMatrix = /*#__PURE__*/function () {
- function CellMatrix(template) {
- _classCallCheck(this, CellMatrix);
- this.template = template;
- this.sheets = {};
- }
- _createClass(CellMatrix, [{
- key: "addCell",
- value: function addCell(addressStr) {
- this.addCellEx(colCache.decodeEx(addressStr));
- }
- }, {
- key: "getCell",
- value: function getCell(addressStr) {
- return this.findCellEx(colCache.decodeEx(addressStr), true);
- }
- }, {
- key: "findCell",
- value: function findCell(addressStr) {
- return this.findCellEx(colCache.decodeEx(addressStr), false);
- }
- }, {
- key: "findCellAt",
- value: function findCellAt(sheetName, rowNumber, colNumber) {
- var sheet = this.sheets[sheetName];
- var row = sheet && sheet[rowNumber];
- return row && row[colNumber];
- }
- }, {
- key: "addCellEx",
- value: function addCellEx(address) {
- if (address.top) {
- for (var row = address.top; row <= address.bottom; row++) {
- for (var col = address.left; col <= address.right; col++) {
- this.getCellAt(address.sheetName, row, col);
- }
- }
- } else {
- this.findCellEx(address, true);
- }
- }
- }, {
- key: "getCellEx",
- value: function getCellEx(address) {
- return this.findCellEx(address, true);
- }
- }, {
- key: "findCellEx",
- value: function findCellEx(address, create) {
- var sheet = this.findSheet(address, create);
- var row = this.findSheetRow(sheet, address, create);
- return this.findRowCell(row, address, create);
- }
- }, {
- key: "getCellAt",
- value: function getCellAt(sheetName, rowNumber, colNumber) {
- var sheet = this.sheets[sheetName] || (this.sheets[sheetName] = []);
- var row = sheet[rowNumber] || (sheet[rowNumber] = []);
- var cell = row[colNumber] || (row[colNumber] = {
- sheetName: sheetName,
- address: colCache.n2l(colNumber) + rowNumber,
- row: rowNumber,
- col: colNumber
- });
- return cell;
- }
- }, {
- key: "removeCellEx",
- value: function removeCellEx(address) {
- var sheet = this.findSheet(address);
- if (!sheet) {
- return;
- }
- var row = this.findSheetRow(sheet, address);
- if (!row) {
- return;
- }
- delete row[address.col];
- }
- }, {
- key: "forEachInSheet",
- value: function forEachInSheet(sheetName, callback) {
- var sheet = this.sheets[sheetName];
- if (sheet) {
- sheet.forEach(function (row, rowNumber) {
- if (row) {
- row.forEach(function (cell, colNumber) {
- if (cell) {
- callback(cell, rowNumber, colNumber);
- }
- });
- }
- });
- }
- }
- }, {
- key: "forEach",
- value: function forEach(callback) {
- var _this = this;
- _.each(this.sheets, function (sheet, sheetName) {
- _this.forEachInSheet(sheetName, callback);
- });
- }
- }, {
- key: "map",
- value: function map(callback) {
- var results = [];
- this.forEach(function (cell) {
- results.push(callback(cell));
- });
- return results;
- }
- }, {
- key: "findSheet",
- value: function findSheet(address, create) {
- var name = address.sheetName;
- if (this.sheets[name]) {
- return this.sheets[name];
- }
- if (create) {
- return this.sheets[name] = [];
- }
- return undefined;
- }
- }, {
- key: "findSheetRow",
- value: function findSheetRow(sheet, address, create) {
- var row = address.row;
- if (sheet && sheet[row]) {
- return sheet[row];
- }
- if (create) {
- return sheet[row] = [];
- }
- return undefined;
- }
- }, {
- key: "findRowCell",
- value: function findRowCell(row, address, create) {
- var col = address.col;
- if (row && row[col]) {
- return row[col];
- }
- if (create) {
- return row[col] = this.template ? Object.assign(address, JSON.parse(JSON.stringify(this.template))) : address;
- }
- return undefined;
- }
- }, {
- key: "spliceRows",
- value: function spliceRows(sheetName, start, numDelete, numInsert) {
- var sheet = this.sheets[sheetName];
- if (sheet) {
- var inserts = [];
- for (var i = 0; i < numInsert; i++) {
- inserts.push([]);
- }
- sheet.splice.apply(sheet, [start, numDelete].concat(inserts));
- }
- }
- }, {
- key: "spliceColumns",
- value: function spliceColumns(sheetName, start, numDelete, numInsert) {
- var sheet = this.sheets[sheetName];
- if (sheet) {
- var inserts = [];
- for (var i = 0; i < numInsert; i++) {
- inserts.push(null);
- }
- _.each(sheet, function (row) {
- row.splice.apply(row, [start, numDelete].concat(inserts));
- });
- }
- }
- }]);
- return CellMatrix;
- }();
- module.exports = CellMatrix;
- },{"./col-cache":19,"./under-dash":25}],19:[function(require,module,exports){
- "use strict";
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
- function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
- var addressRegex = /^[A-Z]+\d+$/; // =========================================================================
- // Column Letter to Number conversion
- var colCache = {
- _dictionary: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'],
- _l2nFill: 0,
- _l2n: {},
- _n2l: [],
- _level: function _level(n) {
- if (n <= 26) {
- return 1;
- }
- if (n <= 26 * 26) {
- return 2;
- }
- return 3;
- },
- _fill: function _fill(level) {
- var c;
- var v;
- var l1;
- var l2;
- var l3;
- var n = 1;
- if (level >= 4) {
- throw new Error('Out of bounds. Excel supports columns from 1 to 16384');
- }
- if (this._l2nFill < 1 && level >= 1) {
- while (n <= 26) {
- c = this._dictionary[n - 1];
- this._n2l[n] = c;
- this._l2n[c] = n;
- n++;
- }
- this._l2nFill = 1;
- }
- if (this._l2nFill < 2 && level >= 2) {
- n = 27;
- while (n <= 26 + 26 * 26) {
- v = n - (26 + 1);
- l1 = v % 26;
- l2 = Math.floor(v / 26);
- c = this._dictionary[l2] + this._dictionary[l1];
- this._n2l[n] = c;
- this._l2n[c] = n;
- n++;
- }
- this._l2nFill = 2;
- }
- if (this._l2nFill < 3 && level >= 3) {
- n = 26 + 26 * 26 + 1;
- while (n <= 16384) {
- v = n - (26 * 26 + 26 + 1);
- l1 = v % 26;
- l2 = Math.floor(v / 26) % 26;
- l3 = Math.floor(v / (26 * 26));
- c = this._dictionary[l3] + this._dictionary[l2] + this._dictionary[l1];
- this._n2l[n] = c;
- this._l2n[c] = n;
- n++;
- }
- this._l2nFill = 3;
- }
- },
- l2n: function l2n(l) {
- if (!this._l2n[l]) {
- this._fill(l.length);
- }
- if (!this._l2n[l]) {
- throw new Error("Out of bounds. Invalid column letter: ".concat(l));
- }
- return this._l2n[l];
- },
- n2l: function n2l(n) {
- if (n < 1 || n > 16384) {
- throw new Error("".concat(n, " is out of bounds. Excel supports columns from 1 to 16384"));
- }
- if (!this._n2l[n]) {
- this._fill(this._level(n));
- }
- return this._n2l[n];
- },
- // =========================================================================
- // Address processing
- _hash: {},
- // check if value looks like an address
- validateAddress: function validateAddress(value) {
- if (!addressRegex.test(value)) {
- throw new Error("Invalid Address: ".concat(value));
- }
- return true;
- },
- // convert address string into structure
- decodeAddress: function decodeAddress(value) {
- var addr = value.length < 5 && this._hash[value];
- if (addr) {
- return addr;
- }
- var hasCol = false;
- var col = '';
- var colNumber = 0;
- var hasRow = false;
- var row = '';
- var rowNumber = 0;
- for (var i = 0, char; i < value.length; i++) {
- char = value.charCodeAt(i); // col should before row
- if (!hasRow && char >= 65 && char <= 90) {
- // 65 = 'A'.charCodeAt(0)
- // 90 = 'Z'.charCodeAt(0)
- hasCol = true;
- col += value[i]; // colNumber starts from 1
- colNumber = colNumber * 26 + char - 64;
- } else if (char >= 48 && char <= 57) {
- // 48 = '0'.charCodeAt(0)
- // 57 = '9'.charCodeAt(0)
- hasRow = true;
- row += value[i]; // rowNumber starts from 0
- rowNumber = rowNumber * 10 + char - 48;
- } else if (hasRow && hasCol && char !== 36) {
- // 36 = '$'.charCodeAt(0)
- break;
- }
- }
- if (!hasCol) {
- colNumber = undefined;
- } else if (colNumber > 16384) {
- throw new Error("Out of bounds. Invalid column letter: ".concat(col));
- }
- if (!hasRow) {
- rowNumber = undefined;
- } // in case $row$col
- value = col + row;
- var address = {
- address: value,
- col: colNumber,
- row: rowNumber,
- $col$row: "$".concat(col, "$").concat(row)
- }; // mem fix - cache only the tl 100x100 square
- if (colNumber <= 100 && rowNumber <= 100) {
- this._hash[value] = address;
- this._hash[address.$col$row] = address;
- }
- return address;
- },
- // convert r,c into structure (if only 1 arg, assume r is address string)
- getAddress: function getAddress(r, c) {
- if (c) {
- var address = this.n2l(c) + r;
- return this.decodeAddress(address);
- }
- return this.decodeAddress(r);
- },
- // convert [address], [tl:br] into address structures
- decode: function decode(value) {
- var parts = value.split(':');
- if (parts.length === 2) {
- var tl = this.decodeAddress(parts[0]);
- var br = this.decodeAddress(parts[1]);
- var result = {
- top: Math.min(tl.row, br.row),
- left: Math.min(tl.col, br.col),
- bottom: Math.max(tl.row, br.row),
- right: Math.max(tl.col, br.col)
- }; // reconstruct tl, br and dimensions
- result.tl = this.n2l(result.left) + result.top;
- result.br = this.n2l(result.right) + result.bottom;
- result.dimensions = "".concat(result.tl, ":").concat(result.br);
- return result;
- }
- return this.decodeAddress(value);
- },
- // convert [sheetName!][$]col[$]row[[$]col[$]row] into address or range structures
- decodeEx: function decodeEx(value) {
- var groups = value.match(/(?:(?:(?:'((?:[^']|'')*)')|([^'^ !]*))!)?(.*)/);
- var sheetName = groups[1] || groups[2]; // Qouted and unqouted groups
- var reference = groups[3]; // Remaining address
- var parts = reference.split(':');
- if (parts.length > 1) {
- var tl = this.decodeAddress(parts[0]);
- var br = this.decodeAddress(parts[1]);
- var top = Math.min(tl.row, br.row);
- var left = Math.min(tl.col, br.col);
- var bottom = Math.max(tl.row, br.row);
- var right = Math.max(tl.col, br.col);
- tl = this.n2l(left) + top;
- br = this.n2l(right) + bottom;
- return {
- top: top,
- left: left,
- bottom: bottom,
- right: right,
- sheetName: sheetName,
- tl: {
- address: tl,
- col: left,
- row: top,
- $col$row: "$".concat(this.n2l(left), "$").concat(top),
- sheetName: sheetName
- },
- br: {
- address: br,
- col: right,
- row: bottom,
- $col$row: "$".concat(this.n2l(right), "$").concat(bottom),
- sheetName: sheetName
- },
- dimensions: "".concat(tl, ":").concat(br)
- };
- }
- if (reference.startsWith('#')) {
- return sheetName ? {
- sheetName: sheetName,
- error: reference
- } : {
- error: reference
- };
- }
- var address = this.decodeAddress(reference);
- return sheetName ? _objectSpread({
- sheetName: sheetName
- }, address) : address;
- },
- // convert row,col into address string
- encodeAddress: function encodeAddress(row, col) {
- return colCache.n2l(col) + row;
- },
- // convert row,col into string address or t,l,b,r into range
- encode: function encode() {
- switch (arguments.length) {
- case 2:
- return colCache.encodeAddress(arguments[0], arguments[1]);
- case 4:
- return "".concat(colCache.encodeAddress(arguments[0], arguments[1]), ":").concat(colCache.encodeAddress(arguments[2], arguments[3]));
- default:
- throw new Error('Can only encode with 2 or 4 arguments');
- }
- },
- // return true if address is contained within range
- inRange: function inRange(range, address) {
- var _range = _slicedToArray(range, 5),
- left = _range[0],
- top = _range[1],
- right = _range[3],
- bottom = _range[4];
- var _address = _slicedToArray(address, 2),
- col = _address[0],
- row = _address[1];
- return col >= left && col <= right && row >= top && row <= bottom;
- }
- };
- module.exports = colCache;
- },{}],20:[function(require,module,exports){
- (function (Buffer){
- 'use strict';
- var crypto = require('crypto');
- var Encryptor = {
- /**
- * Calculate a hash of the concatenated buffers with the given algorithm.
- * @param {string} algorithm - The hash algorithm.
- * @returns {Buffer} The hash
- */
- hash: function hash(algorithm) {
- var hash = crypto.createHash(algorithm);
- for (var _len = arguments.length, buffers = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
- buffers[_key - 1] = arguments[_key];
- }
- hash.update(Buffer.concat(buffers));
- return hash.digest();
- },
- /**
- * Convert a password into an encryption key
- * @param {string} password - The password
- * @param {string} hashAlgorithm - The hash algoritm
- * @param {string} saltValue - The salt value
- * @param {number} spinCount - The spin count
- * @param {number} keyBits - The length of the key in bits
- * @param {Buffer} blockKey - The block key
- * @returns {Buffer} The encryption key
- */
- convertPasswordToHash: function convertPasswordToHash(password, hashAlgorithm, saltValue, spinCount) {
- hashAlgorithm = hashAlgorithm.toLowerCase();
- var hashes = crypto.getHashes();
- if (hashes.indexOf(hashAlgorithm) < 0) {
- throw new Error("Hash algorithm '".concat(hashAlgorithm, "' not supported!"));
- } // Password must be in unicode buffer
- var passwordBuffer = Buffer.from(password, 'utf16le'); // Generate the initial hash
- var key = this.hash(hashAlgorithm, Buffer.from(saltValue, 'base64'), passwordBuffer); // Now regenerate until spin count
- for (var i = 0; i < spinCount; i++) {
- var iterator = Buffer.alloc(4); // this is the 'special' element of Excel password hashing
- // that stops us from using crypto.pbkdf2()
- iterator.writeUInt32LE(i, 0);
- key = this.hash(hashAlgorithm, key, iterator);
- }
- return key.toString('base64');
- },
- /**
- * Generates cryptographically strong pseudo-random data.
- * @param size The size argument is a number indicating the number of bytes to generate.
- */
- randomBytes: function randomBytes(size) {
- return crypto.randomBytes(size);
- }
- };
- module.exports = Encryptor;
- }).call(this,require("buffer").Buffer)
- },{"buffer":216,"crypto":226}],21:[function(require,module,exports){
- "use strict";
- function _awaitAsyncGenerator(value) { return new _AwaitValue(value); }
- function _wrapAsyncGenerator(fn) { return function () { return new _AsyncGenerator(fn.apply(this, arguments)); }; }
- function _AsyncGenerator(gen) { var front, back; function send(key, arg) { return new Promise(function (resolve, reject) { var request = { key: key, arg: arg, resolve: resolve, reject: reject, next: null }; if (back) { back = back.next = request; } else { front = back = request; resume(key, arg); } }); } function resume(key, arg) { try { var result = gen[key](arg); var value = result.value; var wrappedAwait = value instanceof _AwaitValue; Promise.resolve(wrappedAwait ? value.wrapped : value).then(function (arg) { if (wrappedAwait) { resume(key === "return" ? "return" : "next", arg); return; } settle(result.done ? "return" : "normal", arg); }, function (err) { resume("throw", err); }); } catch (err) { settle("throw", err); } } function settle(type, value) { switch (type) { case "return": front.resolve({ value: value, done: true }); break; case "throw": front.reject(value); break; default: front.resolve({ value: value, done: false }); break; } front = front.next; if (front) { resume(front.key, front.arg); } else { back = null; } } this._invoke = send; if (typeof gen.return !== "function") { this.return = undefined; } }
- if (typeof Symbol === "function" && Symbol.asyncIterator) { _AsyncGenerator.prototype[Symbol.asyncIterator] = function () { return this; }; }
- _AsyncGenerator.prototype.next = function (arg) { return this._invoke("next", arg); };
- _AsyncGenerator.prototype.throw = function (arg) { return this._invoke("throw", arg); };
- _AsyncGenerator.prototype.return = function (arg) { return this._invoke("return", arg); };
- function _AwaitValue(value) { this.wrapped = value; }
- function _asyncIterator(iterable) { var method; if (typeof Symbol !== "undefined") { if (Symbol.asyncIterator) { method = iterable[Symbol.asyncIterator]; if (method != null) return method.call(iterable); } if (Symbol.iterator) { method = iterable[Symbol.iterator]; if (method != null) return method.call(iterable); } } throw new TypeError("Object is not async iterable"); }
- var _require = require('saxes'),
- SaxesParser = _require.SaxesParser;
- var _require2 = require('readable-stream'),
- PassThrough = _require2.PassThrough;
- var _require3 = require('./browser-buffer-decode'),
- bufferToString = _require3.bufferToString;
- module.exports = /*#__PURE__*/function () {
- var _ref = _wrapAsyncGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(iterable) {
- var saxesParser, error, events, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _value, chunk;
- return regeneratorRuntime.wrap(function _callee$(_context) {
- while (1) {
- switch (_context.prev = _context.next) {
- case 0:
- // TODO: Remove once node v8 is deprecated
- // Detect and upgrade old streams
- if (iterable.pipe && !iterable[Symbol.asyncIterator]) {
- iterable = iterable.pipe(new PassThrough());
- }
- saxesParser = new SaxesParser();
- saxesParser.on('error', function (err) {
- error = err;
- });
- events = [];
- saxesParser.on('opentag', function (value) {
- return events.push({
- eventType: 'opentag',
- value: value
- });
- });
- saxesParser.on('text', function (value) {
- return events.push({
- eventType: 'text',
- value: value
- });
- });
- saxesParser.on('closetag', function (value) {
- return events.push({
- eventType: 'closetag',
- value: value
- });
- });
- _iteratorNormalCompletion = true;
- _didIteratorError = false;
- _context.prev = 9;
- _iterator = _asyncIterator(iterable);
- case 11:
- _context.next = 13;
- return _awaitAsyncGenerator(_iterator.next());
- case 13:
- _step = _context.sent;
- _iteratorNormalCompletion = _step.done;
- _context.next = 17;
- return _awaitAsyncGenerator(_step.value);
- case 17:
- _value = _context.sent;
- if (_iteratorNormalCompletion) {
- _context.next = 29;
- break;
- }
- chunk = _value;
- saxesParser.write(bufferToString(chunk)); // saxesParser.write and saxesParser.on() are synchronous,
- // so we can only reach the below line once all events have been emitted
- if (!error) {
- _context.next = 23;
- break;
- }
- throw error;
- case 23:
- _context.next = 25;
- return events;
- case 25:
- events = [];
- case 26:
- _iteratorNormalCompletion = true;
- _context.next = 11;
- break;
- case 29:
- _context.next = 35;
- break;
- case 31:
- _context.prev = 31;
- _context.t0 = _context["catch"](9);
- _didIteratorError = true;
- _iteratorError = _context.t0;
- case 35:
- _context.prev = 35;
- _context.prev = 36;
- if (!(!_iteratorNormalCompletion && _iterator.return != null)) {
- _context.next = 40;
- break;
- }
- _context.next = 40;
- return _awaitAsyncGenerator(_iterator.return());
- case 40:
- _context.prev = 40;
- if (!_didIteratorError) {
- _context.next = 43;
- break;
- }
- throw _iteratorError;
- case 43:
- return _context.finish(40);
- case 44:
- return _context.finish(35);
- case 45:
- case "end":
- return _context.stop();
- }
- }
- }, _callee, null, [[9, 31, 35, 45], [36,, 40, 44]]);
- }));
- return function (_x) {
- return _ref.apply(this, arguments);
- };
- }();
- },{"./browser-buffer-decode":16,"readable-stream":382,"saxes":386}],22:[function(require,module,exports){
- "use strict";
- var colCache = require('./col-cache'); // const cellRefRegex = /(([a-z_\-0-9]*)!)?[$]?([a-z]+)[$]?([1-9][0-9]*)/i;
- var replacementCandidateRx = /(([a-z_\-0-9]*)!)?([a-z0-9_$]{2,})([(])?/gi;
- var CRrx = /^([$])?([a-z]+)([$])?([1-9][0-9]*)$/i;
- function slideFormula(formula, fromCell, toCell) {
- var offset = colCache.decode(fromCell);
- var to = colCache.decode(toCell);
- return formula.replace(replacementCandidateRx, function (refMatch, sheet, sheetMaybe, addrPart, trailingParen) {
- if (trailingParen) {
- return refMatch;
- }
- var match = CRrx.exec(addrPart);
- if (match) {
- var colDollar = match[1];
- var colStr = match[2].toUpperCase();
- var rowDollar = match[3];
- var rowStr = match[4];
- if (colStr.length > 3 || colStr.length === 3 && colStr > 'XFD') {
- // > XFD is the highest col number in excel 2007 and beyond, so this is a named range
- return refMatch;
- }
- var col = colCache.l2n(colStr);
- var row = parseInt(rowStr, 10);
- if (!colDollar) {
- col += to.col - offset.col;
- }
- if (!rowDollar) {
- row += to.row - offset.row;
- }
- var res = (sheet || '') + (colDollar || '') + colCache.n2l(col) + (rowDollar || '') + row;
- return res;
- }
- return refMatch;
- });
- }
- module.exports = {
- slideFormula: slideFormula
- };
- },{"./col-cache":19}],23:[function(require,module,exports){
- (function (process,Buffer){
- "use strict";
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
- function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- /* eslint-disable max-classes-per-file */
- var Stream = require('readable-stream');
- var utils = require('./utils');
- var StringBuf = require('./string-buf'); // =============================================================================
- // data chunks - encapsulating incoming data
- var StringChunk = /*#__PURE__*/function () {
- function StringChunk(data, encoding) {
- _classCallCheck(this, StringChunk);
- this._data = data;
- this._encoding = encoding;
- }
- _createClass(StringChunk, [{
- key: "copy",
- // copy to target buffer
- value: function copy(target, targetOffset, offset, length) {
- return this.toBuffer().copy(target, targetOffset, offset, length);
- }
- }, {
- key: "toBuffer",
- value: function toBuffer() {
- if (!this._buffer) {
- this._buffer = Buffer.from(this._data, this._encoding);
- }
- return this._buffer;
- }
- }, {
- key: "length",
- get: function get() {
- return this.toBuffer().length;
- }
- }]);
- return StringChunk;
- }();
- var StringBufChunk = /*#__PURE__*/function () {
- function StringBufChunk(data) {
- _classCallCheck(this, StringBufChunk);
- this._data = data;
- }
- _createClass(StringBufChunk, [{
- key: "copy",
- // copy to target buffer
- value: function copy(target, targetOffset, offset, length) {
- // eslint-disable-next-line no-underscore-dangle
- return this._data._buf.copy(target, targetOffset, offset, length);
- }
- }, {
- key: "toBuffer",
- value: function toBuffer() {
- return this._data.toBuffer();
- }
- }, {
- key: "length",
- get: function get() {
- return this._data.length;
- }
- }]);
- return StringBufChunk;
- }();
- var BufferChunk = /*#__PURE__*/function () {
- function BufferChunk(data) {
- _classCallCheck(this, BufferChunk);
- this._data = data;
- }
- _createClass(BufferChunk, [{
- key: "copy",
- // copy to target buffer
- value: function copy(target, targetOffset, offset, length) {
- this._data.copy(target, targetOffset, offset, length);
- }
- }, {
- key: "toBuffer",
- value: function toBuffer() {
- return this._data;
- }
- }, {
- key: "length",
- get: function get() {
- return this._data.length;
- }
- }]);
- return BufferChunk;
- }(); // =============================================================================
- // ReadWriteBuf - a single buffer supporting simple read-write
- var ReadWriteBuf = /*#__PURE__*/function () {
- function ReadWriteBuf(size) {
- _classCallCheck(this, ReadWriteBuf);
- this.size = size; // the buffer
- this.buffer = Buffer.alloc(size); // read index
- this.iRead = 0; // write index
- this.iWrite = 0;
- }
- _createClass(ReadWriteBuf, [{
- key: "toBuffer",
- value: function toBuffer() {
- if (this.iRead === 0 && this.iWrite === this.size) {
- return this.buffer;
- }
- var buf = Buffer.alloc(this.iWrite - this.iRead);
- this.buffer.copy(buf, 0, this.iRead, this.iWrite);
- return buf;
- }
- }, {
- key: "read",
- value: function read(size) {
- var buf; // read size bytes from buffer and return buffer
- if (size === 0) {
- // special case - return null if no data requested
- return null;
- }
- if (size === undefined || size >= this.length) {
- // if no size specified or size is at least what we have then return all of the bytes
- buf = this.toBuffer();
- this.iRead = this.iWrite;
- return buf;
- } // otherwise return a chunk
- buf = Buffer.alloc(size);
- this.buffer.copy(buf, 0, this.iRead, size);
- this.iRead += size;
- return buf;
- }
- }, {
- key: "write",
- value: function write(chunk, offset, length) {
- // write as many bytes from data from optional source offset
- // and return number of bytes written
- var size = Math.min(length, this.size - this.iWrite);
- chunk.copy(this.buffer, this.iWrite, offset, offset + size);
- this.iWrite += size;
- return size;
- }
- }, {
- key: "length",
- get: function get() {
- return this.iWrite - this.iRead;
- }
- }, {
- key: "eod",
- get: function get() {
- return this.iRead === this.iWrite;
- }
- }, {
- key: "full",
- get: function get() {
- return this.iWrite === this.size;
- }
- }]);
- return ReadWriteBuf;
- }(); // =============================================================================
- // StreamBuf - a multi-purpose read-write stream
- // As MemBuf - write as much data as you like. Then call toBuffer() to consolidate
- // As StreamHub - pipe to multiple writables
- // As readable stream - feed data into the writable part and have some other code read from it.
- // Note: Not sure why but StreamBuf does not like JS "class" sugar. It fails the
- // integration tests
- var StreamBuf = function StreamBuf(options) {
- options = options || {};
- this.bufSize = options.bufSize || 1024 * 1024;
- this.buffers = []; // batch mode fills a buffer completely before passing the data on
- // to pipes or 'readable' event listeners
- this.batch = options.batch || false;
- this.corked = false; // where in the current writable buffer we're up to
- this.inPos = 0; // where in the current readable buffer we've read up to
- this.outPos = 0; // consuming pipe streams go here
- this.pipes = []; // controls emit('data')
- this.paused = false;
- this.encoding = null;
- };
- utils.inherits(StreamBuf, Stream.Duplex, {
- toBuffer: function toBuffer() {
- switch (this.buffers.length) {
- case 0:
- return null;
- case 1:
- return this.buffers[0].toBuffer();
- default:
- return Buffer.concat(this.buffers.map(function (rwBuf) {
- return rwBuf.toBuffer();
- }));
- }
- },
- // writable
- // event drain - if write returns false (which it won't), indicates when safe to write again.
- // finish - end() has been called
- // pipe(src) - pipe() has been called on readable
- // unpipe(src) - unpipe() has been called on readable
- // error - duh
- _getWritableBuffer: function _getWritableBuffer() {
- if (this.buffers.length) {
- var last = this.buffers[this.buffers.length - 1];
- if (!last.full) {
- return last;
- }
- }
- var buf = new ReadWriteBuf(this.bufSize);
- this.buffers.push(buf);
- return buf;
- },
- _pipe: function _pipe(chunk) {
- var _this = this;
- return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
- var write;
- return regeneratorRuntime.wrap(function _callee$(_context) {
- while (1) {
- switch (_context.prev = _context.next) {
- case 0:
- write = function write(pipe) {
- return new Promise(function (resolve) {
- pipe.write(chunk.toBuffer(), function () {
- resolve();
- });
- });
- };
- _context.next = 3;
- return Promise.all(_this.pipes.map(write));
- case 3:
- case "end":
- return _context.stop();
- }
- }
- }, _callee);
- }))();
- },
- _writeToBuffers: function _writeToBuffers(chunk) {
- var inPos = 0;
- var inLen = chunk.length;
- while (inPos < inLen) {
- // find writable buffer
- var buffer = this._getWritableBuffer(); // write some data
- inPos += buffer.write(chunk, inPos, inLen - inPos);
- }
- },
- write: function write(data, encoding, callback) {
- var _this2 = this;
- return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
- var chunk;
- return regeneratorRuntime.wrap(function _callee2$(_context2) {
- while (1) {
- switch (_context2.prev = _context2.next) {
- case 0:
- if (encoding instanceof Function) {
- callback = encoding;
- encoding = 'utf8';
- }
- callback = callback || utils.nop; // encapsulate data into a chunk
- if (!(data instanceof StringBuf)) {
- _context2.next = 6;
- break;
- }
- chunk = new StringBufChunk(data);
- _context2.next = 15;
- break;
- case 6:
- if (!(data instanceof Buffer)) {
- _context2.next = 10;
- break;
- }
- chunk = new BufferChunk(data);
- _context2.next = 15;
- break;
- case 10:
- if (!(typeof data === 'string' || data instanceof String || data instanceof ArrayBuffer)) {
- _context2.next = 14;
- break;
- }
- chunk = new StringChunk(data, encoding);
- _context2.next = 15;
- break;
- case 14:
- throw new Error('Chunk must be one of type String, Buffer or StringBuf.');
- case 15:
- if (!_this2.pipes.length) {
- _context2.next = 31;
- break;
- }
- if (!_this2.batch) {
- _context2.next = 21;
- break;
- }
- _this2._writeToBuffers(chunk);
- while (!_this2.corked && _this2.buffers.length > 1) {
- _this2._pipe(_this2.buffers.shift());
- }
- _context2.next = 29;
- break;
- case 21:
- if (_this2.corked) {
- _context2.next = 27;
- break;
- }
- _context2.next = 24;
- return _this2._pipe(chunk);
- case 24:
- callback();
- _context2.next = 29;
- break;
- case 27:
- _this2._writeToBuffers(chunk);
- process.nextTick(callback);
- case 29:
- _context2.next = 34;
- break;
- case 31:
- if (!_this2.paused) {
- _this2.emit('data', chunk.toBuffer());
- }
- _this2._writeToBuffers(chunk);
- _this2.emit('readable');
- case 34:
- return _context2.abrupt("return", true);
- case 35:
- case "end":
- return _context2.stop();
- }
- }
- }, _callee2);
- }))();
- },
- cork: function cork() {
- this.corked = true;
- },
- _flush: function _flush()
- /* destination */
- {
- // if we have comsumers...
- if (this.pipes.length) {
- // and there's stuff not written
- while (this.buffers.length) {
- this._pipe(this.buffers.shift());
- }
- }
- },
- uncork: function uncork() {
- this.corked = false;
- this._flush();
- },
- end: function end(chunk, encoding, callback) {
- var _this3 = this;
- var writeComplete = function writeComplete(error) {
- if (error) {
- callback(error);
- } else {
- _this3._flush();
- _this3.pipes.forEach(function (pipe) {
- pipe.end();
- });
- _this3.emit('finish');
- }
- };
- if (chunk) {
- this.write(chunk, encoding, writeComplete);
- } else {
- writeComplete();
- }
- },
- // readable
- // event readable - some data is now available
- // event data - switch to flowing mode - feeds chunks to handler
- // event end - no more data
- // event close - optional, indicates upstream close
- // event error - duh
- read: function read(size) {
- var buffers; // read min(buffer, size || infinity)
- if (size) {
- buffers = [];
- while (size && this.buffers.length && !this.buffers[0].eod) {
- var first = this.buffers[0];
- var buffer = first.read(size);
- size -= buffer.length;
- buffers.push(buffer);
- if (first.eod && first.full) {
- this.buffers.shift();
- }
- }
- return Buffer.concat(buffers);
- }
- buffers = this.buffers.map(function (buf) {
- return buf.toBuffer();
- }).filter(Boolean);
- this.buffers = [];
- return Buffer.concat(buffers);
- },
- setEncoding: function setEncoding(encoding) {
- // causes stream.read or stream.on('data) to return strings of encoding instead of Buffer objects
- this.encoding = encoding;
- },
- pause: function pause() {
- this.paused = true;
- },
- resume: function resume() {
- this.paused = false;
- },
- isPaused: function isPaused() {
- return !!this.paused;
- },
- pipe: function pipe(destination) {
- // add destination to pipe list & write current buffer
- this.pipes.push(destination);
- if (!this.paused && this.buffers.length) {
- this.end();
- }
- },
- unpipe: function unpipe(destination) {
- // remove destination from pipe list
- this.pipes = this.pipes.filter(function (pipe) {
- return pipe !== destination;
- });
- },
- unshift: function unshift()
- /* chunk */
- {
- // some numpty has read some data that's not for them and they want to put it back!
- // Might implement this some day
- throw new Error('Not Implemented');
- },
- wrap: function wrap()
- /* stream */
- {
- // not implemented
- throw new Error('Not Implemented');
- }
- });
- module.exports = StreamBuf;
- }).call(this,require('_process'),require("buffer").Buffer)
- },{"./string-buf":24,"./utils":26,"_process":358,"buffer":216,"readable-stream":382}],24:[function(require,module,exports){
- (function (Buffer){
- "use strict";
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- // StringBuf - a way to keep string memory operations to a minimum
- // while building the strings for the xml files
- var StringBuf = /*#__PURE__*/function () {
- function StringBuf(options) {
- _classCallCheck(this, StringBuf);
- this._buf = Buffer.alloc(options && options.size || 16384);
- this._encoding = options && options.encoding || 'utf8'; // where in the buffer we are at
- this._inPos = 0; // for use by toBuffer()
- this._buffer = undefined;
- }
- _createClass(StringBuf, [{
- key: "toBuffer",
- value: function toBuffer() {
- // return the current data as a single enclosing buffer
- if (!this._buffer) {
- this._buffer = Buffer.alloc(this.length);
- this._buf.copy(this._buffer, 0, 0, this.length);
- }
- return this._buffer;
- }
- }, {
- key: "reset",
- value: function reset(position) {
- position = position || 0;
- this._buffer = undefined;
- this._inPos = position;
- }
- }, {
- key: "_grow",
- value: function _grow(min) {
- var size = this._buf.length * 2;
- while (size < min) {
- size *= 2;
- }
- var buf = Buffer.alloc(size);
- this._buf.copy(buf, 0);
- this._buf = buf;
- }
- }, {
- key: "addText",
- value: function addText(text) {
- this._buffer = undefined;
- var inPos = this._inPos + this._buf.write(text, this._inPos, this._encoding); // if we've hit (or nearing capacity), grow the buf
- while (inPos >= this._buf.length - 4) {
- this._grow(this._inPos + text.length); // keep trying to write until we've completely written the text
- inPos = this._inPos + this._buf.write(text, this._inPos, this._encoding);
- }
- this._inPos = inPos;
- }
- }, {
- key: "addStringBuf",
- value: function addStringBuf(inBuf) {
- if (inBuf.length) {
- this._buffer = undefined;
- if (this.length + inBuf.length > this.capacity) {
- this._grow(this.length + inBuf.length);
- } // eslint-disable-next-line no-underscore-dangle
- inBuf._buf.copy(this._buf, this._inPos, 0, inBuf.length);
- this._inPos += inBuf.length;
- }
- }
- }, {
- key: "length",
- get: function get() {
- return this._inPos;
- }
- }, {
- key: "capacity",
- get: function get() {
- return this._buf.length;
- }
- }, {
- key: "buffer",
- get: function get() {
- return this._buf;
- }
- }]);
- return StringBuf;
- }();
- module.exports = StringBuf;
- }).call(this,require("buffer").Buffer)
- },{"buffer":216}],25:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- var toString = Object.prototype.toString;
- var escapeHtmlRegex = /["&<>]/;
- var _ = {
- each: function each(obj, cb) {
- if (obj) {
- if (Array.isArray(obj)) {
- obj.forEach(cb);
- } else {
- Object.keys(obj).forEach(function (key) {
- cb(obj[key], key);
- });
- }
- }
- },
- some: function some(obj, cb) {
- if (obj) {
- if (Array.isArray(obj)) {
- return obj.some(cb);
- }
- return Object.keys(obj).some(function (key) {
- return cb(obj[key], key);
- });
- }
- return false;
- },
- every: function every(obj, cb) {
- if (obj) {
- if (Array.isArray(obj)) {
- return obj.every(cb);
- }
- return Object.keys(obj).every(function (key) {
- return cb(obj[key], key);
- });
- }
- return true;
- },
- map: function map(obj, cb) {
- if (obj) {
- if (Array.isArray(obj)) {
- return obj.map(cb);
- }
- return Object.keys(obj).map(function (key) {
- return cb(obj[key], key);
- });
- }
- return [];
- },
- keyBy: function keyBy(a, p) {
- return a.reduce(function (o, v) {
- o[v[p]] = v;
- return o;
- }, {});
- },
- isEqual: function isEqual(a, b) {
- var aType = _typeof(a);
- var bType = _typeof(b);
- var aArray = Array.isArray(a);
- var bArray = Array.isArray(b);
- if (aType !== bType) {
- return false;
- }
- switch (_typeof(a)) {
- case 'object':
- if (aArray || bArray) {
- if (aArray && bArray) {
- return a.length === b.length && a.every(function (aValue, index) {
- var bValue = b[index];
- return _.isEqual(aValue, bValue);
- });
- }
- return false;
- }
- return _.every(a, function (aValue, key) {
- var bValue = b[key];
- return _.isEqual(aValue, bValue);
- });
- default:
- return a === b;
- }
- },
- escapeHtml: function escapeHtml(html) {
- var regexResult = escapeHtmlRegex.exec(html);
- if (!regexResult) return html;
- var result = '';
- var escape = '';
- var lastIndex = 0;
- var i = regexResult.index;
- for (; i < html.length; i++) {
- switch (html.charAt(i)) {
- case '"':
- escape = '"';
- break;
- case '&':
- escape = '&';
- break;
- case '\'':
- escape = ''';
- break;
- case '<':
- escape = '<';
- break;
- case '>':
- escape = '>';
- break;
- default:
- continue;
- }
- if (lastIndex !== i) result += html.substring(lastIndex, i);
- lastIndex = i + 1;
- result += escape;
- }
- if (lastIndex !== i) return result + html.substring(lastIndex, i);
- return result;
- },
- strcmp: function strcmp(a, b) {
- if (a < b) return -1;
- if (a > b) return 1;
- return 0;
- },
- isUndefined: function isUndefined(val) {
- return toString.call(val) === '[object Undefined]';
- },
- isObject: function isObject(val) {
- return toString.call(val) === '[object Object]';
- },
- deepMerge: function deepMerge() {
- var target = arguments[0] || {};
- var length = arguments.length; // eslint-disable-next-line one-var
- var src, clone, copyIsArray;
- function assignValue(val, key) {
- src = target[key];
- copyIsArray = Array.isArray(val);
- if (_.isObject(val) || copyIsArray) {
- if (copyIsArray) {
- copyIsArray = false;
- clone = src && Array.isArray(src) ? src : [];
- } else {
- clone = src && _.isObject(src) ? src : {};
- }
- target[key] = _.deepMerge(clone, val);
- } else if (!_.isUndefined(val)) {
- target[key] = val;
- }
- }
- for (var i = 0; i < length; i++) {
- _.each(arguments[i], assignValue);
- }
- return target;
- }
- };
- module.exports = _;
- },{}],26:[function(require,module,exports){
- (function (global,setImmediate){
- "use strict";
- var fs = require('fs'); // useful stuff
- var inherits = function inherits(cls, superCtor, statics, prototype) {
- // eslint-disable-next-line no-underscore-dangle
- cls.super_ = superCtor;
- if (!prototype) {
- prototype = statics;
- statics = null;
- }
- if (statics) {
- Object.keys(statics).forEach(function (i) {
- Object.defineProperty(cls, i, Object.getOwnPropertyDescriptor(statics, i));
- });
- }
- var properties = {
- constructor: {
- value: cls,
- enumerable: false,
- writable: false,
- configurable: true
- }
- };
- if (prototype) {
- Object.keys(prototype).forEach(function (i) {
- properties[i] = Object.getOwnPropertyDescriptor(prototype, i);
- });
- }
- cls.prototype = Object.create(superCtor.prototype, properties);
- }; // eslint-disable-next-line no-control-regex
- var xmlDecodeRegex = /[<>&'"\x7F\x00-\x08\x0B-\x0C\x0E-\x1F]/;
- var utils = {
- nop: function nop() {},
- promiseImmediate: function promiseImmediate(value) {
- return new Promise(function (resolve) {
- if (global.setImmediate) {
- setImmediate(function () {
- resolve(value);
- });
- } else {
- // poorman's setImmediate - must wait at least 1ms
- setTimeout(function () {
- resolve(value);
- }, 1);
- }
- });
- },
- inherits: inherits,
- dateToExcel: function dateToExcel(d, date1904) {
- return 25569 + d.getTime() / (24 * 3600 * 1000) - (date1904 ? 1462 : 0);
- },
- excelToDate: function excelToDate(v, date1904) {
- var millisecondSinceEpoch = Math.round((v - 25569 + (date1904 ? 1462 : 0)) * 24 * 3600 * 1000);
- return new Date(millisecondSinceEpoch);
- },
- parsePath: function parsePath(filepath) {
- var last = filepath.lastIndexOf('/');
- return {
- path: filepath.substring(0, last),
- name: filepath.substring(last + 1)
- };
- },
- getRelsPath: function getRelsPath(filepath) {
- var path = utils.parsePath(filepath);
- return "".concat(path.path, "/_rels/").concat(path.name, ".rels");
- },
- xmlEncode: function xmlEncode(text) {
- var regexResult = xmlDecodeRegex.exec(text);
- if (!regexResult) return text;
- var result = '';
- var escape = '';
- var lastIndex = 0;
- var i = regexResult.index;
- for (; i < text.length; i++) {
- var charCode = text.charCodeAt(i);
- switch (charCode) {
- case 34:
- // "
- escape = '"';
- break;
- case 38:
- // &
- escape = '&';
- break;
- case 39:
- // '
- escape = ''';
- break;
- case 60:
- // <
- escape = '<';
- break;
- case 62:
- // >
- escape = '>';
- break;
- case 127:
- escape = '';
- break;
- default:
- {
- if (charCode <= 31 && (charCode <= 8 || charCode >= 11 && charCode !== 13)) {
- escape = '';
- break;
- }
- continue;
- }
- }
- if (lastIndex !== i) result += text.substring(lastIndex, i);
- lastIndex = i + 1;
- if (escape) result += escape;
- }
- if (lastIndex !== i) return result + text.substring(lastIndex, i);
- return result;
- },
- xmlDecode: function xmlDecode(text) {
- return text.replace(/&([a-z]*);/g, function (c) {
- switch (c) {
- case '<':
- return '<';
- case '>':
- return '>';
- case '&':
- return '&';
- case ''':
- return '\'';
- case '"':
- return '"';
- default:
- return c;
- }
- });
- },
- validInt: function validInt(value) {
- var i = parseInt(value, 10);
- return !Number.isNaN(i) ? i : 0;
- },
- isDateFmt: function isDateFmt(fmt) {
- if (!fmt) {
- return false;
- } // must remove all chars inside quotes and []
- fmt = fmt.replace(/\[[^\]]*]/g, '');
- fmt = fmt.replace(/"[^"]*"/g, ''); // then check for date formatting chars
- var result = fmt.match(/[ymdhMsb]+/) !== null;
- return result;
- },
- fs: {
- exists: function exists(path) {
- return new Promise(function (resolve) {
- fs.access(path, fs.constants.F_OK, function (err) {
- resolve(!err);
- });
- });
- }
- },
- toIsoDateString: function toIsoDateString(dt) {
- return dt.toIsoString().subsstr(0, 10);
- }
- };
- module.exports = utils;
- }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("timers").setImmediate)
- },{"fs":215,"timers":411}],27:[function(require,module,exports){
- "use strict";
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- var _ = require('./under-dash');
- var utils = require('./utils'); // constants
- var OPEN_ANGLE = '<';
- var CLOSE_ANGLE = '>';
- var OPEN_ANGLE_SLASH = '</';
- var CLOSE_SLASH_ANGLE = '/>';
- var EQUALS_QUOTE = '="';
- var QUOTE = '"';
- var SPACE = ' ';
- function pushAttribute(xml, name, value) {
- xml.push(SPACE);
- xml.push(name);
- xml.push(EQUALS_QUOTE);
- xml.push(utils.xmlEncode(value.toString()));
- xml.push(QUOTE);
- }
- function pushAttributes(xml, attributes) {
- if (attributes) {
- _.each(attributes, function (value, name) {
- if (value !== undefined) {
- pushAttribute(xml, name, value);
- }
- });
- }
- }
- var XmlStream = /*#__PURE__*/function () {
- function XmlStream() {
- _classCallCheck(this, XmlStream);
- this._xml = [];
- this._stack = [];
- this._rollbacks = [];
- }
- _createClass(XmlStream, [{
- key: "openXml",
- value: function openXml(docAttributes) {
- var xml = this._xml; // <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
- xml.push('<?xml');
- pushAttributes(xml, docAttributes);
- xml.push('?>\n');
- }
- }, {
- key: "openNode",
- value: function openNode(name, attributes) {
- var parent = this.tos;
- var xml = this._xml;
- if (parent && this.open) {
- xml.push(CLOSE_ANGLE);
- }
- this._stack.push(name); // start streaming node
- xml.push(OPEN_ANGLE);
- xml.push(name);
- pushAttributes(xml, attributes);
- this.leaf = true;
- this.open = true;
- }
- }, {
- key: "addAttribute",
- value: function addAttribute(name, value) {
- if (!this.open) {
- throw new Error('Cannot write attributes to node if it is not open');
- }
- if (value !== undefined) {
- pushAttribute(this._xml, name, value);
- }
- }
- }, {
- key: "addAttributes",
- value: function addAttributes(attrs) {
- if (!this.open) {
- throw new Error('Cannot write attributes to node if it is not open');
- }
- pushAttributes(this._xml, attrs);
- }
- }, {
- key: "writeText",
- value: function writeText(text) {
- var xml = this._xml;
- if (this.open) {
- xml.push(CLOSE_ANGLE);
- this.open = false;
- }
- this.leaf = false;
- xml.push(utils.xmlEncode(text.toString()));
- }
- }, {
- key: "writeXml",
- value: function writeXml(xml) {
- if (this.open) {
- this._xml.push(CLOSE_ANGLE);
- this.open = false;
- }
- this.leaf = false;
- this._xml.push(xml);
- }
- }, {
- key: "closeNode",
- value: function closeNode() {
- var node = this._stack.pop();
- var xml = this._xml;
- if (this.leaf) {
- xml.push(CLOSE_SLASH_ANGLE);
- } else {
- xml.push(OPEN_ANGLE_SLASH);
- xml.push(node);
- xml.push(CLOSE_ANGLE);
- }
- this.open = false;
- this.leaf = false;
- }
- }, {
- key: "leafNode",
- value: function leafNode(name, attributes, text) {
- this.openNode(name, attributes);
- if (text !== undefined) {
- // zeros need to be written
- this.writeText(text);
- }
- this.closeNode();
- }
- }, {
- key: "closeAll",
- value: function closeAll() {
- while (this._stack.length) {
- this.closeNode();
- }
- }
- }, {
- key: "addRollback",
- value: function addRollback() {
- this._rollbacks.push({
- xml: this._xml.length,
- stack: this._stack.length,
- leaf: this.leaf,
- open: this.open
- });
- return this.cursor;
- }
- }, {
- key: "commit",
- value: function commit() {
- this._rollbacks.pop();
- }
- }, {
- key: "rollback",
- value: function rollback() {
- var r = this._rollbacks.pop();
- if (this._xml.length > r.xml) {
- this._xml.splice(r.xml, this._xml.length - r.xml);
- }
- if (this._stack.length > r.stack) {
- this._stack.splice(r.stack, this._stack.length - r.stack);
- }
- this.leaf = r.leaf;
- this.open = r.open;
- }
- }, {
- key: "tos",
- get: function get() {
- return this._stack.length ? this._stack[this._stack.length - 1] : undefined;
- }
- }, {
- key: "cursor",
- get: function get() {
- // handy way to track whether anything has been added
- return this._xml.length;
- }
- }, {
- key: "xml",
- get: function get() {
- this.closeAll();
- return this._xml.join('');
- }
- }]);
- return XmlStream;
- }();
- XmlStream.StdDocAttributes = {
- version: '1.0',
- encoding: 'UTF-8',
- standalone: 'yes'
- };
- module.exports = XmlStream;
- },{"./under-dash":25,"./utils":26}],28:[function(require,module,exports){
- (function (process){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
- function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var events = require('events');
- var JSZip = require('jszip');
- var StreamBuf = require('./stream-buf');
- var _require = require('./browser-buffer-encode'),
- stringToBuffer = _require.stringToBuffer; // =============================================================================
- // The ZipWriter class
- // Packs streamed data into an output zip stream
- var ZipWriter = /*#__PURE__*/function (_events$EventEmitter) {
- _inherits(ZipWriter, _events$EventEmitter);
- var _super = _createSuper(ZipWriter);
- function ZipWriter(options) {
- var _this;
- _classCallCheck(this, ZipWriter);
- _this = _super.call(this);
- _this.options = Object.assign({
- type: 'nodebuffer',
- compression: 'DEFLATE'
- }, options);
- _this.zip = new JSZip();
- _this.stream = new StreamBuf();
- return _this;
- }
- _createClass(ZipWriter, [{
- key: "append",
- value: function append(data, options) {
- if (options.hasOwnProperty('base64') && options.base64) {
- this.zip.file(options.name, data, {
- base64: true
- });
- } else {
- // https://www.npmjs.com/package/process
- if (process.browser && typeof data === 'string') {
- // use TextEncoder in browser
- data = stringToBuffer(data);
- }
- this.zip.file(options.name, data);
- }
- }
- }, {
- key: "finalize",
- value: function () {
- var _finalize = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
- var content;
- return regeneratorRuntime.wrap(function _callee$(_context) {
- while (1) {
- switch (_context.prev = _context.next) {
- case 0:
- _context.next = 2;
- return this.zip.generateAsync(this.options);
- case 2:
- content = _context.sent;
- this.stream.end(content);
- this.emit('finish');
- case 5:
- case "end":
- return _context.stop();
- }
- }
- }, _callee, this);
- }));
- function finalize() {
- return _finalize.apply(this, arguments);
- }
- return finalize;
- }() // ==========================================================================
- // Stream.Readable interface
- }, {
- key: "read",
- value: function read(size) {
- return this.stream.read(size);
- }
- }, {
- key: "setEncoding",
- value: function setEncoding(encoding) {
- return this.stream.setEncoding(encoding);
- }
- }, {
- key: "pause",
- value: function pause() {
- return this.stream.pause();
- }
- }, {
- key: "resume",
- value: function resume() {
- return this.stream.resume();
- }
- }, {
- key: "isPaused",
- value: function isPaused() {
- return this.stream.isPaused();
- }
- }, {
- key: "pipe",
- value: function pipe(destination, options) {
- return this.stream.pipe(destination, options);
- }
- }, {
- key: "unpipe",
- value: function unpipe(destination) {
- return this.stream.unpipe(destination);
- }
- }, {
- key: "unshift",
- value: function unshift(chunk) {
- return this.stream.unshift(chunk);
- }
- }, {
- key: "wrap",
- value: function wrap(stream) {
- return this.stream.wrap(stream);
- }
- }]);
- return ZipWriter;
- }(events.EventEmitter); // =============================================================================
- module.exports = {
- ZipWriter: ZipWriter
- };
- }).call(this,require('_process'))
- },{"./browser-buffer-encode":17,"./stream-buf":23,"_process":358,"events":258,"jszip":290}],29:[function(require,module,exports){
- "use strict";
- module.exports = {
- 0: {
- f: 'General'
- },
- 1: {
- f: '0'
- },
- 2: {
- f: '0.00'
- },
- 3: {
- f: '#,##0'
- },
- 4: {
- f: '#,##0.00'
- },
- 9: {
- f: '0%'
- },
- 10: {
- f: '0.00%'
- },
- 11: {
- f: '0.00E+00'
- },
- 12: {
- f: '# ?/?'
- },
- 13: {
- f: '# ??/??'
- },
- 14: {
- f: 'mm-dd-yy'
- },
- 15: {
- f: 'd-mmm-yy'
- },
- 16: {
- f: 'd-mmm'
- },
- 17: {
- f: 'mmm-yy'
- },
- 18: {
- f: 'h:mm AM/PM'
- },
- 19: {
- f: 'h:mm:ss AM/PM'
- },
- 20: {
- f: 'h:mm'
- },
- 21: {
- f: 'h:mm:ss'
- },
- 22: {
- f: 'm/d/yy "h":mm'
- },
- 27: {
- 'zh-tw': '[$-404]e/m/d',
- 'zh-cn': 'yyyy"年"m"月"',
- 'ja-jp': '[$-411]ge.m.d',
- 'ko-kr': 'yyyy"年" mm"月" dd"日"'
- },
- 28: {
- 'zh-tw': '[$-404]e"年"m"月"d"日"',
- 'zh-cn': 'm"月"d"日"',
- 'ja-jp': '[$-411]ggge"年"m"月"d"日"',
- 'ko-kr': 'mm-dd'
- },
- 29: {
- 'zh-tw': '[$-404]e"年"m"月"d"日"',
- 'zh-cn': 'm"月"d"日"',
- 'ja-jp': '[$-411]ggge"年"m"月"d"日"',
- 'ko-kr': 'mm-dd'
- },
- 30: {
- 'zh-tw': 'm/d/yy ',
- 'zh-cn': 'm-d-yy',
- 'ja-jp': 'm/d/yy',
- 'ko-kr': 'mm-dd-yy'
- },
- 31: {
- 'zh-tw': 'yyyy"年"m"月"d"日"',
- 'zh-cn': 'yyyy"年"m"月"d"日"',
- 'ja-jp': 'yyyy"年"m"月"d"日"',
- 'ko-kr': 'yyyy"년" mm"월" dd"일"'
- },
- 32: {
- 'zh-tw': 'hh"時"mm"分"',
- 'zh-cn': 'h"时"mm"分"',
- 'ja-jp': 'h"時"mm"分"',
- 'ko-kr': 'h"시" mm"분"'
- },
- 33: {
- 'zh-tw': 'hh"時"mm"分"ss"秒"',
- 'zh-cn': 'h"时"mm"分"ss"秒"',
- 'ja-jp': 'h"時"mm"分"ss"秒"',
- 'ko-kr': 'h"시" mm"분" ss"초"'
- },
- 34: {
- 'zh-tw': '上午/下午 hh"時"mm"分"',
- 'zh-cn': '上午/下午 h"时"mm"分"',
- 'ja-jp': 'yyyy"年"m"月"',
- 'ko-kr': 'yyyy-mm-dd'
- },
- 35: {
- 'zh-tw': '上午/下午 hh"時"mm"分"ss"秒"',
- 'zh-cn': '上午/下午 h"时"mm"分"ss"秒"',
- 'ja-jp': 'm"月"d"日"',
- 'ko-kr': 'yyyy-mm-dd'
- },
- 36: {
- 'zh-tw': '[$-404]e/m/d',
- 'zh-cn': 'yyyy"年"m"月"',
- 'ja-jp': '[$-411]ge.m.d',
- 'ko-kr': 'yyyy"年" mm"月" dd"日"'
- },
- 37: {
- f: '#,##0 ;(#,##0)'
- },
- 38: {
- f: '#,##0 ;[Red](#,##0)'
- },
- 39: {
- f: '#,##0.00 ;(#,##0.00)'
- },
- 40: {
- f: '#,##0.00 ;[Red](#,##0.00)'
- },
- 45: {
- f: 'mm:ss'
- },
- 46: {
- f: '[h]:mm:ss'
- },
- 47: {
- f: 'mmss.0'
- },
- 48: {
- f: '##0.0E+0'
- },
- 49: {
- f: '@'
- },
- 50: {
- 'zh-tw': '[$-404]e/m/d',
- 'zh-cn': 'yyyy"年"m"月"',
- 'ja-jp': '[$-411]ge.m.d',
- 'ko-kr': 'yyyy"年" mm"月" dd"日"'
- },
- 51: {
- 'zh-tw': '[$-404]e"年"m"月"d"日"',
- 'zh-cn': 'm"月"d"日"',
- 'ja-jp': '[$-411]ggge"年"m"月"d"日"',
- 'ko-kr': 'mm-dd'
- },
- 52: {
- 'zh-tw': '上午/下午 hh"時"mm"分"',
- 'zh-cn': 'yyyy"年"m"月"',
- 'ja-jp': 'yyyy"年"m"月"',
- 'ko-kr': 'yyyy-mm-dd'
- },
- 53: {
- 'zh-tw': '上午/下午 hh"時"mm"分"ss"秒"',
- 'zh-cn': 'm"月"d"日"',
- 'ja-jp': 'm"月"d"日"',
- 'ko-kr': 'yyyy-mm-dd'
- },
- 54: {
- 'zh-tw': '[$-404]e"年"m"月"d"日"',
- 'zh-cn': 'm"月"d"日"',
- 'ja-jp': '[$-411]ggge"年"m"月"d"日"',
- 'ko-kr': 'mm-dd'
- },
- 55: {
- 'zh-tw': '上午/下午 hh"時"mm"分"',
- 'zh-cn': '上午/下午 h"时"mm"分"',
- 'ja-jp': 'yyyy"年"m"月"',
- 'ko-kr': 'yyyy-mm-dd'
- },
- 56: {
- 'zh-tw': '上午/下午 hh"時"mm"分"ss"秒"',
- 'zh-cn': '上午/下午 h"时"mm"分"ss"秒"',
- 'ja-jp': 'm"月"d"日"',
- 'ko-kr': 'yyyy-mm-dd'
- },
- 57: {
- 'zh-tw': '[$-404]e/m/d',
- 'zh-cn': 'yyyy"年"m"月"',
- 'ja-jp': '[$-411]ge.m.d',
- 'ko-kr': 'yyyy"年" mm"月" dd"日"'
- },
- 58: {
- 'zh-tw': '[$-404]e"年"m"月"d"日"',
- 'zh-cn': 'm"月"d"日"',
- 'ja-jp': '[$-411]ggge"年"m"月"d"日"',
- 'ko-kr': 'mm-dd'
- },
- 59: {
- 'th-th': 't0'
- },
- 60: {
- 'th-th': 't0.00'
- },
- 61: {
- 'th-th': 't#,##0'
- },
- 62: {
- 'th-th': 't#,##0.00'
- },
- 67: {
- 'th-th': 't0%'
- },
- 68: {
- 'th-th': 't0.00%'
- },
- 69: {
- 'th-th': 't# ?/?'
- },
- 70: {
- 'th-th': 't# ??/??'
- },
- 81: {
- 'th-th': 'd/m/bb'
- }
- };
- },{}],30:[function(require,module,exports){
- 'use strict';
- module.exports = {
- OfficeDocument: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument',
- Worksheet: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet',
- CalcChain: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain',
- SharedStrings: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings',
- Styles: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles',
- Theme: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme',
- Hyperlink: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink',
- Image: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',
- CoreProperties: 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties',
- ExtenderProperties: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties',
- Comments: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments',
- VmlDrawing: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing',
- Table: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/table'
- };
- },{}],31:[function(require,module,exports){
- "use strict";
- function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
- function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _asyncIterator(iterable) { var method; if (typeof Symbol !== "undefined") { if (Symbol.asyncIterator) { method = iterable[Symbol.asyncIterator]; if (method != null) return method.call(iterable); } if (Symbol.iterator) { method = iterable[Symbol.iterator]; if (method != null) return method.call(iterable); } } throw new TypeError("Object is not async iterable"); }
- var parseSax = require('../../utils/parse-sax');
- var XmlStream = require('../../utils/xml-stream');
- /* 'virtual' methods used as a form of documentation */
- /* eslint-disable class-methods-use-this */
- // Base class for Xforms
- var BaseXform = /*#__PURE__*/function () {
- function BaseXform() {
- _classCallCheck(this, BaseXform);
- }
- _createClass(BaseXform, [{
- key: "prepare",
- // constructor(/* model, name */) {}
- // ============================================================
- // Virtual Interface
- value: function prepare()
- /* model, options */
- {// optional preparation (mutation) of model so it is ready for write
- }
- }, {
- key: "render",
- value: function render()
- /* xmlStream, model */
- {// convert model to xml
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {// XML node opened
- }
- }, {
- key: "parseText",
- value: function parseText(text) {// chunk of text encountered for current node
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {// XML node closed
- }
- }, {
- key: "reconcile",
- value: function reconcile(model, options) {// optional post-parse step (opposite to prepare)
- } // ============================================================
- }, {
- key: "reset",
- value: function reset() {
- // to make sure parses don't bleed to next iteration
- this.model = null; // if we have a map - reset them too
- if (this.map) {
- Object.values(this.map).forEach(function (xform) {
- if (xform instanceof BaseXform) {
- xform.reset();
- } else if (xform.xform) {
- xform.xform.reset();
- }
- });
- }
- }
- }, {
- key: "mergeModel",
- value: function mergeModel(obj) {
- // set obj's props to this.model
- this.model = Object.assign(this.model || {}, obj);
- }
- }, {
- key: "parse",
- value: function () {
- var _parse = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(saxParser) {
- var _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _value, events, _iterator2, _step2, _step2$value, eventType, value;
- return regeneratorRuntime.wrap(function _callee$(_context) {
- while (1) {
- switch (_context.prev = _context.next) {
- case 0:
- _iteratorNormalCompletion = true;
- _didIteratorError = false;
- _context.prev = 2;
- _iterator = _asyncIterator(saxParser);
- case 4:
- _context.next = 6;
- return _iterator.next();
- case 6:
- _step = _context.sent;
- _iteratorNormalCompletion = _step.done;
- _context.next = 10;
- return _step.value;
- case 10:
- _value = _context.sent;
- if (_iteratorNormalCompletion) {
- _context.next = 42;
- break;
- }
- events = _value;
- _iterator2 = _createForOfIteratorHelper(events);
- _context.prev = 14;
- _iterator2.s();
- case 16:
- if ((_step2 = _iterator2.n()).done) {
- _context.next = 31;
- break;
- }
- _step2$value = _step2.value, eventType = _step2$value.eventType, value = _step2$value.value;
- if (!(eventType === 'opentag')) {
- _context.next = 22;
- break;
- }
- this.parseOpen(value);
- _context.next = 29;
- break;
- case 22:
- if (!(eventType === 'text')) {
- _context.next = 26;
- break;
- }
- this.parseText(value);
- _context.next = 29;
- break;
- case 26:
- if (!(eventType === 'closetag')) {
- _context.next = 29;
- break;
- }
- if (this.parseClose(value.name)) {
- _context.next = 29;
- break;
- }
- return _context.abrupt("return", this.model);
- case 29:
- _context.next = 16;
- break;
- case 31:
- _context.next = 36;
- break;
- case 33:
- _context.prev = 33;
- _context.t0 = _context["catch"](14);
- _iterator2.e(_context.t0);
- case 36:
- _context.prev = 36;
- _iterator2.f();
- return _context.finish(36);
- case 39:
- _iteratorNormalCompletion = true;
- _context.next = 4;
- break;
- case 42:
- _context.next = 48;
- break;
- case 44:
- _context.prev = 44;
- _context.t1 = _context["catch"](2);
- _didIteratorError = true;
- _iteratorError = _context.t1;
- case 48:
- _context.prev = 48;
- _context.prev = 49;
- if (!(!_iteratorNormalCompletion && _iterator.return != null)) {
- _context.next = 53;
- break;
- }
- _context.next = 53;
- return _iterator.return();
- case 53:
- _context.prev = 53;
- if (!_didIteratorError) {
- _context.next = 56;
- break;
- }
- throw _iteratorError;
- case 56:
- return _context.finish(53);
- case 57:
- return _context.finish(48);
- case 58:
- return _context.abrupt("return", this.model);
- case 59:
- case "end":
- return _context.stop();
- }
- }
- }, _callee, this, [[2, 44, 48, 58], [14, 33, 36, 39], [49,, 53, 57]]);
- }));
- function parse(_x) {
- return _parse.apply(this, arguments);
- }
- return parse;
- }()
- }, {
- key: "parseStream",
- value: function () {
- var _parseStream = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(stream) {
- return regeneratorRuntime.wrap(function _callee2$(_context2) {
- while (1) {
- switch (_context2.prev = _context2.next) {
- case 0:
- return _context2.abrupt("return", this.parse(parseSax(stream)));
- case 1:
- case "end":
- return _context2.stop();
- }
- }
- }, _callee2, this);
- }));
- function parseStream(_x2) {
- return _parseStream.apply(this, arguments);
- }
- return parseStream;
- }()
- }, {
- key: "toXml",
- value: function toXml(model) {
- var xmlStream = new XmlStream();
- this.render(xmlStream, model);
- return xmlStream.xml;
- } // ============================================================
- // Useful Utilities
- }, {
- key: "xml",
- get: function get() {
- // convenience function to get the xml of this.model
- // useful for manager types that are built during the prepare phase
- return this.toXml(this.model);
- }
- }], [{
- key: "toAttribute",
- value: function toAttribute(value, dflt) {
- var always = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
- if (value === undefined) {
- if (always) {
- return dflt;
- }
- } else if (always || value !== dflt) {
- return value.toString();
- }
- return undefined;
- }
- }, {
- key: "toStringAttribute",
- value: function toStringAttribute(value, dflt) {
- var always = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
- return BaseXform.toAttribute(value, dflt, always);
- }
- }, {
- key: "toStringValue",
- value: function toStringValue(attr, dflt) {
- return attr === undefined ? dflt : attr;
- }
- }, {
- key: "toBoolAttribute",
- value: function toBoolAttribute(value, dflt) {
- var always = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
- if (value === undefined) {
- if (always) {
- return dflt;
- }
- } else if (always || value !== dflt) {
- return value ? '1' : '0';
- }
- return undefined;
- }
- }, {
- key: "toBoolValue",
- value: function toBoolValue(attr, dflt) {
- return attr === undefined ? dflt : attr === '1';
- }
- }, {
- key: "toIntAttribute",
- value: function toIntAttribute(value, dflt) {
- var always = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
- return BaseXform.toAttribute(value, dflt, always);
- }
- }, {
- key: "toIntValue",
- value: function toIntValue(attr, dflt) {
- return attr === undefined ? dflt : parseInt(attr, 10);
- }
- }, {
- key: "toFloatAttribute",
- value: function toFloatAttribute(value, dflt) {
- var always = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
- return BaseXform.toAttribute(value, dflt, always);
- }
- }, {
- key: "toFloatValue",
- value: function toFloatValue(attr, dflt) {
- return attr === undefined ? dflt : parseFloat(attr);
- }
- }]);
- return BaseXform;
- }();
- module.exports = BaseXform;
- },{"../../utils/parse-sax":21,"../../utils/xml-stream":27}],32:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var colCache = require('../../../utils/col-cache');
- var DefinedNamesXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(DefinedNamesXform, _BaseXform);
- var _super = _createSuper(DefinedNamesXform);
- function DefinedNamesXform() {
- _classCallCheck(this, DefinedNamesXform);
- return _super.apply(this, arguments);
- }
- _createClass(DefinedNamesXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- // <definedNames>
- // <definedName name="name">name.ranges.join(',')</definedName>
- // <definedName name="_xlnm.Print_Area" localSheetId="0">name.ranges.join(',')</definedName>
- // </definedNames>
- xmlStream.openNode('definedName', {
- name: model.name,
- localSheetId: model.localSheetId
- });
- xmlStream.writeText(model.ranges.join(','));
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- switch (node.name) {
- case 'definedName':
- this._parsedName = node.attributes.name;
- this._parsedLocalSheetId = node.attributes.localSheetId;
- this._parsedText = [];
- return true;
- default:
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- this._parsedText.push(text);
- }
- }, {
- key: "parseClose",
- value: function parseClose() {
- this.model = {
- name: this._parsedName,
- ranges: extractRanges(this._parsedText.join(''))
- };
- if (this._parsedLocalSheetId !== undefined) {
- this.model.localSheetId = parseInt(this._parsedLocalSheetId, 10);
- }
- return false;
- }
- }]);
- return DefinedNamesXform;
- }(BaseXform);
- function isValidRange(range) {
- try {
- colCache.decodeEx(range);
- return true;
- } catch (err) {
- return false;
- }
- }
- function extractRanges(parsedText) {
- var ranges = [];
- var quotesOpened = false;
- var last = '';
- parsedText.split(',').forEach(function (item) {
- if (!item) {
- return;
- }
- var quotes = (item.match(/'/g) || []).length;
- if (!quotes) {
- if (quotesOpened) {
- last += "".concat(item, ",");
- } else if (isValidRange(item)) {
- ranges.push(item);
- }
- return;
- }
- var quotesEven = quotes % 2 === 0;
- if (!quotesOpened && quotesEven && isValidRange(item)) {
- ranges.push(item);
- } else if (quotesOpened && !quotesEven) {
- quotesOpened = false;
- if (isValidRange(last + item)) {
- ranges.push(last + item);
- }
- last = '';
- } else {
- quotesOpened = true;
- last += "".concat(item, ",");
- }
- });
- return ranges;
- }
- module.exports = DefinedNamesXform;
- },{"../../../utils/col-cache":19,"../base-xform":31}],33:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var utils = require('../../../utils/utils');
- var BaseXform = require('../base-xform');
- var WorksheetXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(WorksheetXform, _BaseXform);
- var _super = _createSuper(WorksheetXform);
- function WorksheetXform() {
- _classCallCheck(this, WorksheetXform);
- return _super.apply(this, arguments);
- }
- _createClass(WorksheetXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.leafNode('sheet', {
- sheetId: model.id,
- name: model.name,
- state: model.state,
- 'r:id': model.rId
- });
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (node.name === 'sheet') {
- this.model = {
- name: utils.xmlDecode(node.attributes.name),
- id: parseInt(node.attributes.sheetId, 10),
- state: node.attributes.state,
- rId: node.attributes['r:id']
- };
- return true;
- }
- return false;
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }]);
- return WorksheetXform;
- }(BaseXform);
- module.exports = WorksheetXform;
- },{"../../../utils/utils":26,"../base-xform":31}],34:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var WorkbookCalcPropertiesXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(WorkbookCalcPropertiesXform, _BaseXform);
- var _super = _createSuper(WorkbookCalcPropertiesXform);
- function WorkbookCalcPropertiesXform() {
- _classCallCheck(this, WorkbookCalcPropertiesXform);
- return _super.apply(this, arguments);
- }
- _createClass(WorkbookCalcPropertiesXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.leafNode('calcPr', {
- calcId: 171027,
- fullCalcOnLoad: model.fullCalcOnLoad ? 1 : undefined
- });
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (node.name === 'calcPr') {
- this.model = {};
- return true;
- }
- return false;
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }]);
- return WorkbookCalcPropertiesXform;
- }(BaseXform);
- module.exports = WorkbookCalcPropertiesXform;
- },{"../base-xform":31}],35:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var WorksheetPropertiesXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(WorksheetPropertiesXform, _BaseXform);
- var _super = _createSuper(WorksheetPropertiesXform);
- function WorksheetPropertiesXform() {
- _classCallCheck(this, WorksheetPropertiesXform);
- return _super.apply(this, arguments);
- }
- _createClass(WorksheetPropertiesXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.leafNode('workbookPr', {
- date1904: model.date1904 ? 1 : undefined,
- defaultThemeVersion: 164011,
- filterPrivacy: 1
- });
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (node.name === 'workbookPr') {
- this.model = {
- date1904: node.attributes.date1904 === '1'
- };
- return true;
- }
- return false;
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }]);
- return WorksheetPropertiesXform;
- }(BaseXform);
- module.exports = WorksheetPropertiesXform;
- },{"../base-xform":31}],36:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var WorkbookViewXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(WorkbookViewXform, _BaseXform);
- var _super = _createSuper(WorkbookViewXform);
- function WorkbookViewXform() {
- _classCallCheck(this, WorkbookViewXform);
- return _super.apply(this, arguments);
- }
- _createClass(WorkbookViewXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- var attributes = {
- xWindow: model.x || 0,
- yWindow: model.y || 0,
- windowWidth: model.width || 12000,
- windowHeight: model.height || 24000,
- firstSheet: model.firstSheet,
- activeTab: model.activeTab
- };
- if (model.visibility && model.visibility !== 'visible') {
- attributes.visibility = model.visibility;
- }
- xmlStream.leafNode('workbookView', attributes);
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (node.name === 'workbookView') {
- var model = this.model = {};
- var addS = function addS(name, value, dflt) {
- var s = value !== undefined ? model[name] = value : dflt;
- if (s !== undefined) {
- model[name] = s;
- }
- };
- var addN = function addN(name, value, dflt) {
- var n = value !== undefined ? model[name] = parseInt(value, 10) : dflt;
- if (n !== undefined) {
- model[name] = n;
- }
- };
- addN('x', node.attributes.xWindow, 0);
- addN('y', node.attributes.yWindow, 0);
- addN('width', node.attributes.windowWidth, 25000);
- addN('height', node.attributes.windowHeight, 10000);
- addS('visibility', node.attributes.visibility, 'visible');
- addN('activeTab', node.attributes.activeTab, undefined);
- addN('firstSheet', node.attributes.firstSheet, undefined);
- return true;
- }
- return false;
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }]);
- return WorkbookViewXform;
- }(BaseXform);
- module.exports = WorkbookViewXform;
- },{"../base-xform":31}],37:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var _ = require('../../../utils/under-dash');
- var colCache = require('../../../utils/col-cache');
- var XmlStream = require('../../../utils/xml-stream');
- var BaseXform = require('../base-xform');
- var StaticXform = require('../static-xform');
- var ListXform = require('../list-xform');
- var DefinedNameXform = require('./defined-name-xform');
- var SheetXform = require('./sheet-xform');
- var WorkbookViewXform = require('./workbook-view-xform');
- var WorkbookPropertiesXform = require('./workbook-properties-xform');
- var WorkbookCalcPropertiesXform = require('./workbook-calc-properties-xform');
- var WorkbookXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(WorkbookXform, _BaseXform);
- var _super = _createSuper(WorkbookXform);
- function WorkbookXform() {
- var _this;
- _classCallCheck(this, WorkbookXform);
- _this = _super.call(this);
- _this.map = {
- fileVersion: WorkbookXform.STATIC_XFORMS.fileVersion,
- workbookPr: new WorkbookPropertiesXform(),
- bookViews: new ListXform({
- tag: 'bookViews',
- count: false,
- childXform: new WorkbookViewXform()
- }),
- sheets: new ListXform({
- tag: 'sheets',
- count: false,
- childXform: new SheetXform()
- }),
- definedNames: new ListXform({
- tag: 'definedNames',
- count: false,
- childXform: new DefinedNameXform()
- }),
- calcPr: new WorkbookCalcPropertiesXform()
- };
- return _this;
- }
- _createClass(WorkbookXform, [{
- key: "prepare",
- value: function prepare(model) {
- model.sheets = model.worksheets; // collate all the print areas from all of the sheets and add them to the defined names
- var printAreas = [];
- var index = 0; // sheets is sparse array - calc index manually
- model.sheets.forEach(function (sheet) {
- if (sheet.pageSetup && sheet.pageSetup.printArea) {
- sheet.pageSetup.printArea.split('&&').forEach(function (printArea) {
- var printAreaComponents = printArea.split(':');
- var definedName = {
- name: '_xlnm.Print_Area',
- ranges: ["'".concat(sheet.name, "'!$").concat(printAreaComponents[0], ":$").concat(printAreaComponents[1])],
- localSheetId: index
- };
- printAreas.push(definedName);
- });
- }
- if (sheet.pageSetup && (sheet.pageSetup.printTitlesRow || sheet.pageSetup.printTitlesColumn)) {
- var ranges = [];
- if (sheet.pageSetup.printTitlesColumn) {
- var titlesColumns = sheet.pageSetup.printTitlesColumn.split(':');
- ranges.push("'".concat(sheet.name, "'!$").concat(titlesColumns[0], ":$").concat(titlesColumns[1]));
- }
- if (sheet.pageSetup.printTitlesRow) {
- var titlesRows = sheet.pageSetup.printTitlesRow.split(':');
- ranges.push("'".concat(sheet.name, "'!$").concat(titlesRows[0], ":$").concat(titlesRows[1]));
- }
- var definedName = {
- name: '_xlnm.Print_Titles',
- ranges: ranges,
- localSheetId: index
- };
- printAreas.push(definedName);
- }
- index++;
- });
- if (printAreas.length) {
- model.definedNames = model.definedNames.concat(printAreas);
- }
- (model.media || []).forEach(function (medium, i) {
- // assign name
- medium.name = medium.type + (i + 1);
- });
- }
- }, {
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openXml(XmlStream.StdDocAttributes);
- xmlStream.openNode('workbook', WorkbookXform.WORKBOOK_ATTRIBUTES);
- this.map.fileVersion.render(xmlStream);
- this.map.workbookPr.render(xmlStream, model.properties);
- this.map.bookViews.render(xmlStream, model.views);
- this.map.sheets.render(xmlStream, model.sheets);
- this.map.definedNames.render(xmlStream, model.definedNames);
- this.map.calcPr.render(xmlStream, model.calcProperties);
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case 'workbook':
- return true;
- default:
- this.parser = this.map[node.name];
- if (this.parser) {
- this.parser.parseOpen(node);
- }
- return true;
- }
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.parser = undefined;
- }
- return true;
- }
- switch (name) {
- case 'workbook':
- this.model = {
- sheets: this.map.sheets.model,
- properties: this.map.workbookPr.model || {},
- views: this.map.bookViews.model,
- calcProperties: {}
- };
- if (this.map.definedNames.model) {
- this.model.definedNames = this.map.definedNames.model;
- }
- return false;
- default:
- // not quite sure how we get here!
- return true;
- }
- }
- }, {
- key: "reconcile",
- value: function reconcile(model) {
- var rels = (model.workbookRels || []).reduce(function (map, rel) {
- map[rel.Id] = rel;
- return map;
- }, {}); // reconcile sheet ids, rIds and names
- var worksheets = [];
- var worksheet;
- var index = 0;
- (model.sheets || []).forEach(function (sheet) {
- var rel = rels[sheet.rId];
- if (!rel) {
- return;
- } // if rel.Target start with `[space]/xl/` or `/xl/` , then it will be replaced with `''` and spliced behind `xl/`,
- // otherwise it will be spliced directly behind `xl/`. i.g.
- worksheet = model.worksheetHash["xl/".concat(rel.Target.replace(/^(\s|\/xl\/)+/, ''))]; // If there are "chartsheets" in the file, rel.Target will
- // come out as chartsheets/sheet1.xml or similar here, and
- // that won't be in model.worksheetHash.
- // As we don't have the infrastructure to support chartsheets,
- // we will ignore them for now:
- if (worksheet) {
- worksheet.name = sheet.name;
- worksheet.id = sheet.id;
- worksheet.state = sheet.state;
- worksheets[index++] = worksheet;
- }
- }); // reconcile print areas
- var definedNames = [];
- _.each(model.definedNames, function (definedName) {
- if (definedName.name === '_xlnm.Print_Area') {
- worksheet = worksheets[definedName.localSheetId];
- if (worksheet) {
- if (!worksheet.pageSetup) {
- worksheet.pageSetup = {};
- }
- var range = colCache.decodeEx(definedName.ranges[0]);
- worksheet.pageSetup.printArea = worksheet.pageSetup.printArea ? "".concat(worksheet.pageSetup.printArea, "&&").concat(range.dimensions) : range.dimensions;
- }
- } else if (definedName.name === '_xlnm.Print_Titles') {
- worksheet = worksheets[definedName.localSheetId];
- if (worksheet) {
- if (!worksheet.pageSetup) {
- worksheet.pageSetup = {};
- }
- var rangeString = definedName.ranges.join(',');
- var dollarRegex = /\$/g;
- var rowRangeRegex = /\$\d+:\$\d+/;
- var rowRangeMatches = rangeString.match(rowRangeRegex);
- if (rowRangeMatches && rowRangeMatches.length) {
- var _range = rowRangeMatches[0];
- worksheet.pageSetup.printTitlesRow = _range.replace(dollarRegex, '');
- }
- var columnRangeRegex = /\$[A-Z]+:\$[A-Z]+/;
- var columnRangeMatches = rangeString.match(columnRangeRegex);
- if (columnRangeMatches && columnRangeMatches.length) {
- var _range2 = columnRangeMatches[0];
- worksheet.pageSetup.printTitlesColumn = _range2.replace(dollarRegex, '');
- }
- }
- } else {
- definedNames.push(definedName);
- }
- });
- model.definedNames = definedNames; // used by sheets to build their image models
- model.media.forEach(function (media, i) {
- media.index = i;
- });
- }
- }]);
- return WorkbookXform;
- }(BaseXform);
- WorkbookXform.WORKBOOK_ATTRIBUTES = {
- xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',
- 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',
- 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',
- 'mc:Ignorable': 'x15',
- 'xmlns:x15': 'http://schemas.microsoft.com/office/spreadsheetml/2010/11/main'
- };
- WorkbookXform.STATIC_XFORMS = {
- fileVersion: new StaticXform({
- tag: 'fileVersion',
- $: {
- appName: 'xl',
- lastEdited: 5,
- lowestEdited: 5,
- rupBuild: 9303
- }
- })
- };
- module.exports = WorkbookXform;
- },{"../../../utils/col-cache":19,"../../../utils/under-dash":25,"../../../utils/xml-stream":27,"../base-xform":31,"../list-xform":70,"../static-xform":119,"./defined-name-xform":32,"./sheet-xform":33,"./workbook-calc-properties-xform":34,"./workbook-properties-xform":35,"./workbook-view-xform":36}],38:[function(require,module,exports){
- "use strict";
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
- var RichTextXform = require('../strings/rich-text-xform');
- var utils = require('../../../utils/utils');
- var BaseXform = require('../base-xform');
- /**
- <comment ref="B1" authorId="0">
- <text>
- <r>
- <rPr>
- <b/>
- <sz val="9"/>
- <rFont val="宋体"/>
- <charset val="134"/>
- </rPr>
- <t>51422:</t>
- </r>
- <r>
- <rPr>
- <sz val="9"/>
- <rFont val="宋体"/>
- <charset val="134"/>
- </rPr>
- <t xml:space="preserve"> test</t>
- </r>
- </text>
- </comment>
- */
- var CommentXform = module.exports = function (model) {
- this.model = model;
- };
- utils.inherits(CommentXform, BaseXform, {
- get tag() {
- return 'r';
- },
- get richTextXform() {
- if (!this._richTextXform) {
- this._richTextXform = new RichTextXform();
- }
- return this._richTextXform;
- },
- render: function render(xmlStream, model) {
- var _this = this;
- model = model || this.model;
- xmlStream.openNode('comment', {
- ref: model.ref,
- authorId: 0
- });
- xmlStream.openNode('text');
- if (model && model.note && model.note.texts) {
- model.note.texts.forEach(function (text) {
- _this.richTextXform.render(xmlStream, text);
- });
- }
- xmlStream.closeNode();
- xmlStream.closeNode();
- },
- parseOpen: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case 'comment':
- this.model = _objectSpread({
- type: 'note',
- note: {
- texts: []
- }
- }, node.attributes);
- return true;
- case 'r':
- this.parser = this.richTextXform;
- this.parser.parseOpen(node);
- return true;
- default:
- return false;
- }
- },
- parseText: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- },
- parseClose: function parseClose(name) {
- switch (name) {
- case 'comment':
- return false;
- case 'r':
- this.model.note.texts.push(this.parser.model);
- this.parser = undefined;
- return true;
- default:
- if (this.parser) {
- this.parser.parseClose(name);
- }
- return true;
- }
- }
- });
- },{"../../../utils/utils":26,"../base-xform":31,"../strings/rich-text-xform":121}],39:[function(require,module,exports){
- "use strict";
- var XmlStream = require('../../../utils/xml-stream');
- var utils = require('../../../utils/utils');
- var BaseXform = require('../base-xform');
- var CommentXform = require('./comment-xform');
- var CommentsXform = module.exports = function () {
- this.map = {
- comment: new CommentXform()
- };
- };
- utils.inherits(CommentsXform, BaseXform, {
- COMMENTS_ATTRIBUTES: {
- xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main'
- }
- }, {
- render: function render(xmlStream, model) {
- var _this = this;
- model = model || this.model;
- xmlStream.openXml(XmlStream.StdDocAttributes);
- xmlStream.openNode('comments', CommentsXform.COMMENTS_ATTRIBUTES); // authors
- // TODO: support authors properly
- xmlStream.openNode('authors');
- xmlStream.leafNode('author', null, 'Author');
- xmlStream.closeNode(); // comments
- xmlStream.openNode('commentList');
- model.comments.forEach(function (comment) {
- _this.map.comment.render(xmlStream, comment);
- });
- xmlStream.closeNode();
- xmlStream.closeNode();
- },
- parseOpen: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case 'commentList':
- this.model = {
- comments: []
- };
- return true;
- case 'comment':
- this.parser = this.map.comment;
- this.parser.parseOpen(node);
- return true;
- default:
- return false;
- }
- },
- parseText: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- },
- parseClose: function parseClose(name) {
- switch (name) {
- case 'commentList':
- return false;
- case 'comment':
- this.model.comments.push(this.parser.model);
- this.parser = undefined;
- return true;
- default:
- if (this.parser) {
- this.parser.parseClose(name);
- }
- return true;
- }
- }
- });
- },{"../../../utils/utils":26,"../../../utils/xml-stream":27,"../base-xform":31,"./comment-xform":38}],40:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../../base-xform');
- var VmlPositionXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(VmlPositionXform, _BaseXform);
- var _super = _createSuper(VmlPositionXform);
- function VmlPositionXform(model) {
- var _this;
- _classCallCheck(this, VmlPositionXform);
- _this = _super.call(this);
- _this._model = model;
- return _this;
- }
- _createClass(VmlPositionXform, [{
- key: "render",
- value: function render(xmlStream, model, type) {
- if (model === type[2]) {
- xmlStream.leafNode(this.tag);
- } else if (this.tag === 'x:SizeWithCells' && model === type[1]) {
- xmlStream.leafNode(this.tag);
- }
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- switch (node.name) {
- case this.tag:
- this.model = {};
- this.model[this.tag] = true;
- return true;
- default:
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return this._model && this._model.tag;
- }
- }]);
- return VmlPositionXform;
- }(BaseXform);
- module.exports = VmlPositionXform;
- },{"../../base-xform":31}],41:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../../base-xform');
- var VmlProtectionXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(VmlProtectionXform, _BaseXform);
- var _super = _createSuper(VmlProtectionXform);
- function VmlProtectionXform(model) {
- var _this;
- _classCallCheck(this, VmlProtectionXform);
- _this = _super.call(this);
- _this._model = model;
- return _this;
- }
- _createClass(VmlProtectionXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.leafNode(this.tag, null, model);
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- switch (node.name) {
- case this.tag:
- this.text = '';
- return true;
- default:
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- this.text = text;
- }
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return this._model && this._model.tag;
- }
- }]);
- return VmlProtectionXform;
- }(BaseXform);
- module.exports = VmlProtectionXform;
- },{"../../base-xform":31}],42:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform'); // render the triangle in the cell for the comment
- var VmlAnchorXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(VmlAnchorXform, _BaseXform);
- var _super = _createSuper(VmlAnchorXform);
- function VmlAnchorXform() {
- _classCallCheck(this, VmlAnchorXform);
- return _super.apply(this, arguments);
- }
- _createClass(VmlAnchorXform, [{
- key: "getAnchorRect",
- value: function getAnchorRect(anchor) {
- var l = Math.floor(anchor.left);
- var lf = Math.floor((anchor.left - l) * 68);
- var t = Math.floor(anchor.top);
- var tf = Math.floor((anchor.top - t) * 18);
- var r = Math.floor(anchor.right);
- var rf = Math.floor((anchor.right - r) * 68);
- var b = Math.floor(anchor.bottom);
- var bf = Math.floor((anchor.bottom - b) * 18);
- return [l, lf, t, tf, r, rf, b, bf];
- }
- }, {
- key: "getDefaultRect",
- value: function getDefaultRect(ref) {
- var l = ref.col;
- var lf = 6;
- var t = Math.max(ref.row - 2, 0);
- var tf = 14;
- var r = l + 2;
- var rf = 2;
- var b = t + 4;
- var bf = 16;
- return [l, lf, t, tf, r, rf, b, bf];
- }
- }, {
- key: "render",
- value: function render(xmlStream, model) {
- var rect = model.anchor ? this.getAnchorRect(model.anchor) : this.getDefaultRect(model.refAddress);
- xmlStream.leafNode('x:Anchor', null, rect.join(', '));
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- switch (node.name) {
- case this.tag:
- this.text = '';
- return true;
- default:
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- this.text = text;
- }
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'x:Anchor';
- }
- }]);
- return VmlAnchorXform;
- }(BaseXform);
- module.exports = VmlAnchorXform;
- },{"../base-xform":31}],43:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var VmlAnchorXform = require('./vml-anchor-xform');
- var VmlProtectionXform = require('./style/vml-protection-xform');
- var VmlPositionXform = require('./style/vml-position-xform');
- var POSITION_TYPE = ['twoCells', 'oneCells', 'absolute'];
- var VmlClientDataXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(VmlClientDataXform, _BaseXform);
- var _super = _createSuper(VmlClientDataXform);
- function VmlClientDataXform() {
- var _this;
- _classCallCheck(this, VmlClientDataXform);
- _this = _super.call(this);
- _this.map = {
- 'x:Anchor': new VmlAnchorXform(),
- 'x:Locked': new VmlProtectionXform({
- tag: 'x:Locked'
- }),
- 'x:LockText': new VmlProtectionXform({
- tag: 'x:LockText'
- }),
- 'x:SizeWithCells': new VmlPositionXform({
- tag: 'x:SizeWithCells'
- }),
- 'x:MoveWithCells': new VmlPositionXform({
- tag: 'x:MoveWithCells'
- })
- };
- return _this;
- }
- _createClass(VmlClientDataXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- var _model$note = model.note,
- protection = _model$note.protection,
- editAs = _model$note.editAs;
- xmlStream.openNode(this.tag, {
- ObjectType: 'Note'
- });
- this.map['x:MoveWithCells'].render(xmlStream, editAs, POSITION_TYPE);
- this.map['x:SizeWithCells'].render(xmlStream, editAs, POSITION_TYPE);
- this.map['x:Anchor'].render(xmlStream, model);
- this.map['x:Locked'].render(xmlStream, protection.locked);
- xmlStream.leafNode('x:AutoFill', null, 'False');
- this.map['x:LockText'].render(xmlStream, protection.lockText);
- xmlStream.leafNode('x:Row', null, model.refAddress.row - 1);
- xmlStream.leafNode('x:Column', null, model.refAddress.col - 1);
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- switch (node.name) {
- case this.tag:
- this.reset();
- this.model = {
- anchor: [],
- protection: {},
- editAs: ''
- };
- break;
- default:
- this.parser = this.map[node.name];
- if (this.parser) {
- this.parser.parseOpen(node);
- }
- break;
- }
- return true;
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.parser = undefined;
- }
- return true;
- }
- switch (name) {
- case this.tag:
- this.normalizeModel();
- return false;
- default:
- return true;
- }
- }
- }, {
- key: "normalizeModel",
- value: function normalizeModel() {
- var position = Object.assign({}, this.map['x:MoveWithCells'].model, this.map['x:SizeWithCells'].model);
- var len = Object.keys(position).length;
- this.model.editAs = POSITION_TYPE[len];
- this.model.anchor = this.map['x:Anchor'].text;
- this.model.protection.locked = this.map['x:Locked'].text;
- this.model.protection.lockText = this.map['x:LockText'].text;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'x:ClientData';
- }
- }]);
- return VmlClientDataXform;
- }(BaseXform);
- module.exports = VmlClientDataXform;
- },{"../base-xform":31,"./style/vml-position-xform":40,"./style/vml-protection-xform":41,"./vml-anchor-xform":42}],44:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var XmlStream = require('../../../utils/xml-stream');
- var BaseXform = require('../base-xform');
- var VmlShapeXform = require('./vml-shape-xform'); // This class is (currently) single purposed to insert the triangle
- // drawing icons on commented cells
- var VmlNotesXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(VmlNotesXform, _BaseXform);
- var _super = _createSuper(VmlNotesXform);
- function VmlNotesXform() {
- var _this;
- _classCallCheck(this, VmlNotesXform);
- _this = _super.call(this);
- _this.map = {
- 'v:shape': new VmlShapeXform()
- };
- return _this;
- }
- _createClass(VmlNotesXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- var _this2 = this;
- xmlStream.openXml(XmlStream.StdDocAttributes);
- xmlStream.openNode(this.tag, VmlNotesXform.DRAWING_ATTRIBUTES);
- xmlStream.openNode('o:shapelayout', {
- 'v:ext': 'edit'
- });
- xmlStream.leafNode('o:idmap', {
- 'v:ext': 'edit',
- data: 1
- });
- xmlStream.closeNode();
- xmlStream.openNode('v:shapetype', {
- id: '_x0000_t202',
- coordsize: '21600,21600',
- 'o:spt': 202,
- path: 'm,l,21600r21600,l21600,xe'
- });
- xmlStream.leafNode('v:stroke', {
- joinstyle: 'miter'
- });
- xmlStream.leafNode('v:path', {
- gradientshapeok: 't',
- 'o:connecttype': 'rect'
- });
- xmlStream.closeNode();
- model.comments.forEach(function (item, index) {
- _this2.map['v:shape'].render(xmlStream, item, index);
- });
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case this.tag:
- this.reset();
- this.model = {
- comments: []
- };
- break;
- default:
- this.parser = this.map[node.name];
- if (this.parser) {
- this.parser.parseOpen(node);
- }
- break;
- }
- return true;
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.model.comments.push(this.parser.model);
- this.parser = undefined;
- }
- return true;
- }
- switch (name) {
- case this.tag:
- return false;
- default:
- // could be some unrecognised tags
- return true;
- }
- }
- }, {
- key: "reconcile",
- value: function reconcile(model, options) {
- var _this3 = this;
- model.anchors.forEach(function (anchor) {
- if (anchor.br) {
- _this3.map['xdr:twoCellAnchor'].reconcile(anchor, options);
- } else {
- _this3.map['xdr:oneCellAnchor'].reconcile(anchor, options);
- }
- });
- }
- }, {
- key: "tag",
- get: function get() {
- return 'xml';
- }
- }]);
- return VmlNotesXform;
- }(BaseXform);
- VmlNotesXform.DRAWING_ATTRIBUTES = {
- 'xmlns:v': 'urn:schemas-microsoft-com:vml',
- 'xmlns:o': 'urn:schemas-microsoft-com:office:office',
- 'xmlns:x': 'urn:schemas-microsoft-com:office:excel'
- };
- module.exports = VmlNotesXform;
- },{"../../../utils/xml-stream":27,"../base-xform":31,"./vml-shape-xform":45}],45:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var VmlTextboxXform = require('./vml-textbox-xform');
- var VmlClientDataXform = require('./vml-client-data-xform');
- var VmlShapeXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(VmlShapeXform, _BaseXform);
- var _super = _createSuper(VmlShapeXform);
- function VmlShapeXform() {
- var _this;
- _classCallCheck(this, VmlShapeXform);
- _this = _super.call(this);
- _this.map = {
- 'v:textbox': new VmlTextboxXform(),
- 'x:ClientData': new VmlClientDataXform()
- };
- return _this;
- }
- _createClass(VmlShapeXform, [{
- key: "render",
- value: function render(xmlStream, model, index) {
- xmlStream.openNode('v:shape', VmlShapeXform.V_SHAPE_ATTRIBUTES(model, index));
- xmlStream.leafNode('v:fill', {
- color2: 'infoBackground [80]'
- });
- xmlStream.leafNode('v:shadow', {
- color: 'none [81]',
- obscured: 't'
- });
- xmlStream.leafNode('v:path', {
- 'o:connecttype': 'none'
- });
- this.map['v:textbox'].render(xmlStream, model);
- this.map['x:ClientData'].render(xmlStream, model);
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case this.tag:
- this.reset();
- this.model = {
- margins: {
- insetmode: node.attributes['o:insetmode']
- },
- anchor: '',
- editAs: '',
- protection: {}
- };
- break;
- default:
- this.parser = this.map[node.name];
- if (this.parser) {
- this.parser.parseOpen(node);
- }
- break;
- }
- return true;
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.parser = undefined;
- }
- return true;
- }
- switch (name) {
- case this.tag:
- this.model.margins.inset = this.map['v:textbox'].model && this.map['v:textbox'].model.inset;
- this.model.protection = this.map['x:ClientData'].model && this.map['x:ClientData'].model.protection;
- this.model.anchor = this.map['x:ClientData'].model && this.map['x:ClientData'].model.anchor;
- this.model.editAs = this.map['x:ClientData'].model && this.map['x:ClientData'].model.editAs;
- return false;
- default:
- return true;
- }
- }
- }, {
- key: "tag",
- get: function get() {
- return 'v:shape';
- }
- }]);
- return VmlShapeXform;
- }(BaseXform);
- VmlShapeXform.V_SHAPE_ATTRIBUTES = function (model, index) {
- return {
- id: "_x0000_s".concat(1025 + index),
- type: '#_x0000_t202',
- style: 'position:absolute; margin-left:105.3pt;margin-top:10.5pt;width:97.8pt;height:59.1pt;z-index:1;visibility:hidden',
- fillcolor: 'infoBackground [80]',
- strokecolor: 'none [81]',
- 'o:insetmode': model.note.margins && model.note.margins.insetmode
- };
- };
- module.exports = VmlShapeXform;
- },{"../base-xform":31,"./vml-client-data-xform":43,"./vml-textbox-xform":46}],46:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var VmlTextboxXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(VmlTextboxXform, _BaseXform);
- var _super = _createSuper(VmlTextboxXform);
- function VmlTextboxXform() {
- _classCallCheck(this, VmlTextboxXform);
- return _super.apply(this, arguments);
- }
- _createClass(VmlTextboxXform, [{
- key: "conversionUnit",
- value: function conversionUnit(value, multiple, unit) {
- return "".concat(parseFloat(value) * multiple.toFixed(2)).concat(unit);
- }
- }, {
- key: "reverseConversionUnit",
- value: function reverseConversionUnit(inset) {
- var _this = this;
- return (inset || '').split(',').map(function (margin) {
- return Number(parseFloat(_this.conversionUnit(parseFloat(margin), 0.1, '')).toFixed(2));
- });
- }
- }, {
- key: "render",
- value: function render(xmlStream, model) {
- var _this2 = this;
- var attributes = {
- style: 'mso-direction-alt:auto'
- };
- if (model && model.note) {
- var _ref = model.note && model.note.margins,
- inset = _ref.inset;
- if (Array.isArray(inset)) {
- inset = inset.map(function (margin) {
- return _this2.conversionUnit(margin, 10, 'mm');
- }).join(',');
- }
- if (inset) {
- attributes.inset = inset;
- }
- }
- xmlStream.openNode('v:textbox', attributes);
- xmlStream.leafNode('div', {
- style: 'text-align:left'
- });
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- switch (node.name) {
- case this.tag:
- this.model = {
- inset: this.reverseConversionUnit(node.attributes.inset)
- };
- return true;
- default:
- return true;
- }
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- switch (name) {
- case this.tag:
- return false;
- default:
- return true;
- }
- }
- }, {
- key: "tag",
- get: function get() {
- return 'v:textbox';
- }
- }]);
- return VmlTextboxXform;
- }(BaseXform);
- module.exports = VmlTextboxXform;
- },{"../base-xform":31}],47:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('./base-xform');
- /* 'virtual' methods used as a form of documentation */
- /* eslint-disable class-methods-use-this */
- // base class for xforms that are composed of other xforms
- // offers some default implementations
- var CompositeXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(CompositeXform, _BaseXform);
- var _super = _createSuper(CompositeXform);
- function CompositeXform() {
- _classCallCheck(this, CompositeXform);
- return _super.apply(this, arguments);
- }
- _createClass(CompositeXform, [{
- key: "createNewModel",
- value: function createNewModel(node) {
- return {};
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- // Typical pattern for composite xform
- this.parser = this.parser || this.map[node.name];
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- if (node.name === this.tag) {
- this.model = this.createNewModel(node);
- return true;
- }
- return false;
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- // Default implementation. Send text to child parser
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "onParserClose",
- value: function onParserClose(name, parser) {
- // parseClose has seen a child parser close
- // now need to incorporate into this.model somehow
- this.model[name] = parser.model;
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- // Default implementation
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.onParserClose(name, this.parser);
- this.parser = undefined;
- }
- return true;
- }
- return name !== this.tag;
- }
- }]);
- return CompositeXform;
- }(BaseXform);
- module.exports = CompositeXform;
- },{"./base-xform":31}],48:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var AppHeadingPairsXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(AppHeadingPairsXform, _BaseXform);
- var _super = _createSuper(AppHeadingPairsXform);
- function AppHeadingPairsXform() {
- _classCallCheck(this, AppHeadingPairsXform);
- return _super.apply(this, arguments);
- }
- _createClass(AppHeadingPairsXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openNode('HeadingPairs');
- xmlStream.openNode('vt:vector', {
- size: 2,
- baseType: 'variant'
- });
- xmlStream.openNode('vt:variant');
- xmlStream.leafNode('vt:lpstr', undefined, 'Worksheets');
- xmlStream.closeNode();
- xmlStream.openNode('vt:variant');
- xmlStream.leafNode('vt:i4', undefined, model.length);
- xmlStream.closeNode();
- xmlStream.closeNode();
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- // no parsing
- return node.name === 'HeadingPairs';
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- return name !== 'HeadingPairs';
- }
- }]);
- return AppHeadingPairsXform;
- }(BaseXform);
- module.exports = AppHeadingPairsXform;
- },{"../base-xform":31}],49:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var AppTitlesOfPartsXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(AppTitlesOfPartsXform, _BaseXform);
- var _super = _createSuper(AppTitlesOfPartsXform);
- function AppTitlesOfPartsXform() {
- _classCallCheck(this, AppTitlesOfPartsXform);
- return _super.apply(this, arguments);
- }
- _createClass(AppTitlesOfPartsXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openNode('TitlesOfParts');
- xmlStream.openNode('vt:vector', {
- size: model.length,
- baseType: 'lpstr'
- });
- model.forEach(function (sheet) {
- xmlStream.leafNode('vt:lpstr', undefined, sheet.name);
- });
- xmlStream.closeNode();
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- // no parsing
- return node.name === 'TitlesOfParts';
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- return name !== 'TitlesOfParts';
- }
- }]);
- return AppTitlesOfPartsXform;
- }(BaseXform);
- module.exports = AppTitlesOfPartsXform;
- },{"../base-xform":31}],50:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var XmlStream = require('../../../utils/xml-stream');
- var BaseXform = require('../base-xform');
- var StringXform = require('../simple/string-xform');
- var AppHeadingPairsXform = require('./app-heading-pairs-xform');
- var AppTitleOfPartsXform = require('./app-titles-of-parts-xform');
- var AppXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(AppXform, _BaseXform);
- var _super = _createSuper(AppXform);
- function AppXform() {
- var _this;
- _classCallCheck(this, AppXform);
- _this = _super.call(this);
- _this.map = {
- Company: new StringXform({
- tag: 'Company'
- }),
- Manager: new StringXform({
- tag: 'Manager'
- }),
- HeadingPairs: new AppHeadingPairsXform(),
- TitleOfParts: new AppTitleOfPartsXform()
- };
- return _this;
- }
- _createClass(AppXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openXml(XmlStream.StdDocAttributes);
- xmlStream.openNode('Properties', AppXform.PROPERTY_ATTRIBUTES);
- xmlStream.leafNode('Application', undefined, 'Microsoft Excel');
- xmlStream.leafNode('DocSecurity', undefined, '0');
- xmlStream.leafNode('ScaleCrop', undefined, 'false');
- this.map.HeadingPairs.render(xmlStream, model.worksheets);
- this.map.TitleOfParts.render(xmlStream, model.worksheets);
- this.map.Company.render(xmlStream, model.company || '');
- this.map.Manager.render(xmlStream, model.manager);
- xmlStream.leafNode('LinksUpToDate', undefined, 'false');
- xmlStream.leafNode('SharedDoc', undefined, 'false');
- xmlStream.leafNode('HyperlinksChanged', undefined, 'false');
- xmlStream.leafNode('AppVersion', undefined, '16.0300');
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case 'Properties':
- return true;
- default:
- this.parser = this.map[node.name];
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- } // there's a lot we don't bother to parse
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.parser = undefined;
- }
- return true;
- }
- switch (name) {
- case 'Properties':
- this.model = {
- worksheets: this.map.TitleOfParts.model,
- company: this.map.Company.model,
- manager: this.map.Manager.model
- };
- return false;
- default:
- return true;
- }
- }
- }]);
- return AppXform;
- }(BaseXform);
- AppXform.DateFormat = function (dt) {
- return dt.toISOString().replace(/[.]\d{3,6}/, '');
- };
- AppXform.DateAttrs = {
- 'xsi:type': 'dcterms:W3CDTF'
- };
- AppXform.PROPERTY_ATTRIBUTES = {
- xmlns: 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties',
- 'xmlns:vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes'
- };
- module.exports = AppXform;
- },{"../../../utils/xml-stream":27,"../base-xform":31,"../simple/string-xform":118,"./app-heading-pairs-xform":48,"./app-titles-of-parts-xform":49}],51:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var XmlStream = require('../../../utils/xml-stream');
- var BaseXform = require('../base-xform'); // used for rendering the [Content_Types].xml file
- // not used for parsing
- var ContentTypesXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(ContentTypesXform, _BaseXform);
- var _super = _createSuper(ContentTypesXform);
- function ContentTypesXform() {
- _classCallCheck(this, ContentTypesXform);
- return _super.apply(this, arguments);
- }
- _createClass(ContentTypesXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openXml(XmlStream.StdDocAttributes);
- xmlStream.openNode('Types', ContentTypesXform.PROPERTY_ATTRIBUTES);
- var mediaHash = {};
- (model.media || []).forEach(function (medium) {
- if (medium.type === 'image') {
- var imageType = medium.extension;
- if (!mediaHash[imageType]) {
- mediaHash[imageType] = true;
- xmlStream.leafNode('Default', {
- Extension: imageType,
- ContentType: "image/".concat(imageType)
- });
- }
- }
- });
- xmlStream.leafNode('Default', {
- Extension: 'rels',
- ContentType: 'application/vnd.openxmlformats-package.relationships+xml'
- });
- xmlStream.leafNode('Default', {
- Extension: 'xml',
- ContentType: 'application/xml'
- });
- xmlStream.leafNode('Override', {
- PartName: '/xl/workbook.xml',
- ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml'
- });
- model.worksheets.forEach(function (worksheet) {
- var name = "/xl/worksheets/sheet".concat(worksheet.id, ".xml");
- xmlStream.leafNode('Override', {
- PartName: name,
- ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml'
- });
- });
- xmlStream.leafNode('Override', {
- PartName: '/xl/theme/theme1.xml',
- ContentType: 'application/vnd.openxmlformats-officedocument.theme+xml'
- });
- xmlStream.leafNode('Override', {
- PartName: '/xl/styles.xml',
- ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml'
- });
- var hasSharedStrings = model.sharedStrings && model.sharedStrings.count;
- if (hasSharedStrings) {
- xmlStream.leafNode('Override', {
- PartName: '/xl/sharedStrings.xml',
- ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml'
- });
- }
- if (model.tables) {
- model.tables.forEach(function (table) {
- xmlStream.leafNode('Override', {
- PartName: "/xl/tables/".concat(table.target),
- ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml'
- });
- });
- }
- if (model.drawings) {
- model.drawings.forEach(function (drawing) {
- xmlStream.leafNode('Override', {
- PartName: "/xl/drawings/".concat(drawing.name, ".xml"),
- ContentType: 'application/vnd.openxmlformats-officedocument.drawing+xml'
- });
- });
- }
- if (model.commentRefs) {
- xmlStream.leafNode('Default', {
- Extension: 'vml',
- ContentType: 'application/vnd.openxmlformats-officedocument.vmlDrawing'
- });
- model.commentRefs.forEach(function (_ref) {
- var commentName = _ref.commentName;
- xmlStream.leafNode('Override', {
- PartName: "/xl/".concat(commentName, ".xml"),
- ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml'
- });
- });
- }
- xmlStream.leafNode('Override', {
- PartName: '/docProps/core.xml',
- ContentType: 'application/vnd.openxmlformats-package.core-properties+xml'
- });
- xmlStream.leafNode('Override', {
- PartName: '/docProps/app.xml',
- ContentType: 'application/vnd.openxmlformats-officedocument.extended-properties+xml'
- });
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen() {
- return false;
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }]);
- return ContentTypesXform;
- }(BaseXform);
- ContentTypesXform.PROPERTY_ATTRIBUTES = {
- xmlns: 'http://schemas.openxmlformats.org/package/2006/content-types'
- };
- module.exports = ContentTypesXform;
- },{"../../../utils/xml-stream":27,"../base-xform":31}],52:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var XmlStream = require('../../../utils/xml-stream');
- var BaseXform = require('../base-xform');
- var DateXform = require('../simple/date-xform');
- var StringXform = require('../simple/string-xform');
- var IntegerXform = require('../simple/integer-xform');
- var CoreXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(CoreXform, _BaseXform);
- var _super = _createSuper(CoreXform);
- function CoreXform() {
- var _this;
- _classCallCheck(this, CoreXform);
- _this = _super.call(this);
- _this.map = {
- 'dc:creator': new StringXform({
- tag: 'dc:creator'
- }),
- 'dc:title': new StringXform({
- tag: 'dc:title'
- }),
- 'dc:subject': new StringXform({
- tag: 'dc:subject'
- }),
- 'dc:description': new StringXform({
- tag: 'dc:description'
- }),
- 'dc:identifier': new StringXform({
- tag: 'dc:identifier'
- }),
- 'dc:language': new StringXform({
- tag: 'dc:language'
- }),
- 'cp:keywords': new StringXform({
- tag: 'cp:keywords'
- }),
- 'cp:category': new StringXform({
- tag: 'cp:category'
- }),
- 'cp:lastModifiedBy': new StringXform({
- tag: 'cp:lastModifiedBy'
- }),
- 'cp:lastPrinted': new DateXform({
- tag: 'cp:lastPrinted',
- format: CoreXform.DateFormat
- }),
- 'cp:revision': new IntegerXform({
- tag: 'cp:revision'
- }),
- 'cp:version': new StringXform({
- tag: 'cp:version'
- }),
- 'cp:contentStatus': new StringXform({
- tag: 'cp:contentStatus'
- }),
- 'cp:contentType': new StringXform({
- tag: 'cp:contentType'
- }),
- 'dcterms:created': new DateXform({
- tag: 'dcterms:created',
- attrs: CoreXform.DateAttrs,
- format: CoreXform.DateFormat
- }),
- 'dcterms:modified': new DateXform({
- tag: 'dcterms:modified',
- attrs: CoreXform.DateAttrs,
- format: CoreXform.DateFormat
- })
- };
- return _this;
- }
- _createClass(CoreXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openXml(XmlStream.StdDocAttributes);
- xmlStream.openNode('cp:coreProperties', CoreXform.CORE_PROPERTY_ATTRIBUTES);
- this.map['dc:creator'].render(xmlStream, model.creator);
- this.map['dc:title'].render(xmlStream, model.title);
- this.map['dc:subject'].render(xmlStream, model.subject);
- this.map['dc:description'].render(xmlStream, model.description);
- this.map['dc:identifier'].render(xmlStream, model.identifier);
- this.map['dc:language'].render(xmlStream, model.language);
- this.map['cp:keywords'].render(xmlStream, model.keywords);
- this.map['cp:category'].render(xmlStream, model.category);
- this.map['cp:lastModifiedBy'].render(xmlStream, model.lastModifiedBy);
- this.map['cp:lastPrinted'].render(xmlStream, model.lastPrinted);
- this.map['cp:revision'].render(xmlStream, model.revision);
- this.map['cp:version'].render(xmlStream, model.version);
- this.map['cp:contentStatus'].render(xmlStream, model.contentStatus);
- this.map['cp:contentType'].render(xmlStream, model.contentType);
- this.map['dcterms:created'].render(xmlStream, model.created);
- this.map['dcterms:modified'].render(xmlStream, model.modified);
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case 'cp:coreProperties':
- case 'coreProperties':
- return true;
- default:
- this.parser = this.map[node.name];
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- throw new Error("Unexpected xml node in parseOpen: ".concat(JSON.stringify(node)));
- }
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.parser = undefined;
- }
- return true;
- }
- switch (name) {
- case 'cp:coreProperties':
- case 'coreProperties':
- this.model = {
- creator: this.map['dc:creator'].model,
- title: this.map['dc:title'].model,
- subject: this.map['dc:subject'].model,
- description: this.map['dc:description'].model,
- identifier: this.map['dc:identifier'].model,
- language: this.map['dc:language'].model,
- keywords: this.map['cp:keywords'].model,
- category: this.map['cp:category'].model,
- lastModifiedBy: this.map['cp:lastModifiedBy'].model,
- lastPrinted: this.map['cp:lastPrinted'].model,
- revision: this.map['cp:revision'].model,
- contentStatus: this.map['cp:contentStatus'].model,
- contentType: this.map['cp:contentType'].model,
- created: this.map['dcterms:created'].model,
- modified: this.map['dcterms:modified'].model
- };
- return false;
- default:
- throw new Error("Unexpected xml node in parseClose: ".concat(name));
- }
- }
- }]);
- return CoreXform;
- }(BaseXform);
- CoreXform.DateFormat = function (dt) {
- return dt.toISOString().replace(/[.]\d{3}/, '');
- };
- CoreXform.DateAttrs = {
- 'xsi:type': 'dcterms:W3CDTF'
- };
- CoreXform.CORE_PROPERTY_ATTRIBUTES = {
- 'xmlns:cp': 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties',
- 'xmlns:dc': 'http://purl.org/dc/elements/1.1/',
- 'xmlns:dcterms': 'http://purl.org/dc/terms/',
- 'xmlns:dcmitype': 'http://purl.org/dc/dcmitype/',
- 'xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance'
- };
- module.exports = CoreXform;
- },{"../../../utils/xml-stream":27,"../base-xform":31,"../simple/date-xform":116,"../simple/integer-xform":117,"../simple/string-xform":118}],53:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var RelationshipXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(RelationshipXform, _BaseXform);
- var _super = _createSuper(RelationshipXform);
- function RelationshipXform() {
- _classCallCheck(this, RelationshipXform);
- return _super.apply(this, arguments);
- }
- _createClass(RelationshipXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.leafNode('Relationship', model);
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- switch (node.name) {
- case 'Relationship':
- this.model = node.attributes;
- return true;
- default:
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }]);
- return RelationshipXform;
- }(BaseXform);
- module.exports = RelationshipXform;
- },{"../base-xform":31}],54:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var XmlStream = require('../../../utils/xml-stream');
- var BaseXform = require('../base-xform');
- var RelationshipXform = require('./relationship-xform');
- var RelationshipsXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(RelationshipsXform, _BaseXform);
- var _super = _createSuper(RelationshipsXform);
- function RelationshipsXform() {
- var _this;
- _classCallCheck(this, RelationshipsXform);
- _this = _super.call(this);
- _this.map = {
- Relationship: new RelationshipXform()
- };
- return _this;
- }
- _createClass(RelationshipsXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- var _this2 = this;
- model = model || this._values;
- xmlStream.openXml(XmlStream.StdDocAttributes);
- xmlStream.openNode('Relationships', RelationshipsXform.RELATIONSHIPS_ATTRIBUTES);
- model.forEach(function (relationship) {
- _this2.map.Relationship.render(xmlStream, relationship);
- });
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case 'Relationships':
- this.model = [];
- return true;
- default:
- this.parser = this.map[node.name];
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- throw new Error("Unexpected xml node in parseOpen: ".concat(JSON.stringify(node)));
- }
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.model.push(this.parser.model);
- this.parser = undefined;
- }
- return true;
- }
- switch (name) {
- case 'Relationships':
- return false;
- default:
- throw new Error("Unexpected xml node in parseClose: ".concat(name));
- }
- }
- }]);
- return RelationshipsXform;
- }(BaseXform);
- RelationshipsXform.RELATIONSHIPS_ATTRIBUTES = {
- xmlns: 'http://schemas.openxmlformats.org/package/2006/relationships'
- };
- module.exports = RelationshipsXform;
- },{"../../../utils/xml-stream":27,"../base-xform":31,"./relationship-xform":53}],55:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var BaseCellAnchorXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(BaseCellAnchorXform, _BaseXform);
- var _super = _createSuper(BaseCellAnchorXform);
- function BaseCellAnchorXform() {
- _classCallCheck(this, BaseCellAnchorXform);
- return _super.apply(this, arguments);
- }
- _createClass(BaseCellAnchorXform, [{
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case this.tag:
- this.reset();
- this.model = {
- range: {
- editAs: node.attributes.editAs || 'oneCell'
- }
- };
- break;
- default:
- this.parser = this.map[node.name];
- if (this.parser) {
- this.parser.parseOpen(node);
- }
- break;
- }
- return true;
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "reconcilePicture",
- value: function reconcilePicture(model, options) {
- if (model && model.rId) {
- var rel = options.rels[model.rId];
- var match = rel.Target.match(/.*\/media\/(.+[.][a-zA-Z]{3,4})/);
- if (match) {
- var name = match[1];
- var mediaId = options.mediaIndex[name];
- return options.media[mediaId];
- }
- }
- return undefined;
- }
- }]);
- return BaseCellAnchorXform;
- }(BaseXform);
- module.exports = BaseCellAnchorXform;
- },{"../base-xform":31}],56:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var BlipXform = require('./blip-xform');
- var BlipFillXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(BlipFillXform, _BaseXform);
- var _super = _createSuper(BlipFillXform);
- function BlipFillXform() {
- var _this;
- _classCallCheck(this, BlipFillXform);
- _this = _super.call(this);
- _this.map = {
- 'a:blip': new BlipXform()
- };
- return _this;
- }
- _createClass(BlipFillXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openNode(this.tag);
- this.map['a:blip'].render(xmlStream, model); // TODO: options for this + parsing
- xmlStream.openNode('a:stretch');
- xmlStream.leafNode('a:fillRect');
- xmlStream.closeNode();
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case this.tag:
- this.reset();
- break;
- default:
- this.parser = this.map[node.name];
- if (this.parser) {
- this.parser.parseOpen(node);
- }
- break;
- }
- return true;
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.parser = undefined;
- }
- return true;
- }
- switch (name) {
- case this.tag:
- this.model = this.map['a:blip'].model;
- return false;
- default:
- return true;
- }
- }
- }, {
- key: "tag",
- get: function get() {
- return 'xdr:blipFill';
- }
- }]);
- return BlipFillXform;
- }(BaseXform);
- module.exports = BlipFillXform;
- },{"../base-xform":31,"./blip-xform":57}],57:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var BlipXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(BlipXform, _BaseXform);
- var _super = _createSuper(BlipXform);
- function BlipXform() {
- _classCallCheck(this, BlipXform);
- return _super.apply(this, arguments);
- }
- _createClass(BlipXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.leafNode(this.tag, {
- 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',
- 'r:embed': model.rId,
- cstate: 'print'
- }); // TODO: handle children (e.g. a:extLst=>a:ext=>a14:useLocalDpi
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- switch (node.name) {
- case this.tag:
- this.model = {
- rId: node.attributes['r:embed']
- };
- return true;
- default:
- return true;
- }
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- switch (name) {
- case this.tag:
- return false;
- default:
- // unprocessed internal nodes
- return true;
- }
- }
- }, {
- key: "tag",
- get: function get() {
- return 'a:blip';
- }
- }]);
- return BlipXform;
- }(BaseXform);
- module.exports = BlipXform;
- },{"../base-xform":31}],58:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var CNvPicPrXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(CNvPicPrXform, _BaseXform);
- var _super = _createSuper(CNvPicPrXform);
- function CNvPicPrXform() {
- _classCallCheck(this, CNvPicPrXform);
- return _super.apply(this, arguments);
- }
- _createClass(CNvPicPrXform, [{
- key: "render",
- value: function render(xmlStream) {
- xmlStream.openNode(this.tag);
- xmlStream.leafNode('a:picLocks', {
- noChangeAspect: '1'
- });
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- switch (node.name) {
- case this.tag:
- return true;
- default:
- return true;
- }
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- switch (name) {
- case this.tag:
- return false;
- default:
- // unprocessed internal nodes
- return true;
- }
- }
- }, {
- key: "tag",
- get: function get() {
- return 'xdr:cNvPicPr';
- }
- }]);
- return CNvPicPrXform;
- }(BaseXform);
- module.exports = CNvPicPrXform;
- },{"../base-xform":31}],59:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var HlickClickXform = require('./hlink-click-xform');
- var ExtLstXform = require('./ext-lst-xform');
- var CNvPrXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(CNvPrXform, _BaseXform);
- var _super = _createSuper(CNvPrXform);
- function CNvPrXform() {
- var _this;
- _classCallCheck(this, CNvPrXform);
- _this = _super.call(this);
- _this.map = {
- 'a:hlinkClick': new HlickClickXform(),
- 'a:extLst': new ExtLstXform()
- };
- return _this;
- }
- _createClass(CNvPrXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openNode(this.tag, {
- id: model.index,
- name: "Picture ".concat(model.index)
- });
- this.map['a:hlinkClick'].render(xmlStream, model);
- this.map['a:extLst'].render(xmlStream, model);
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case this.tag:
- this.reset();
- break;
- default:
- this.parser = this.map[node.name];
- if (this.parser) {
- this.parser.parseOpen(node);
- }
- break;
- }
- return true;
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.parser = undefined;
- }
- return true;
- }
- switch (name) {
- case this.tag:
- this.model = this.map['a:hlinkClick'].model;
- return false;
- default:
- return true;
- }
- }
- }, {
- key: "tag",
- get: function get() {
- return 'xdr:cNvPr';
- }
- }]);
- return CNvPrXform;
- }(BaseXform);
- module.exports = CNvPrXform;
- },{"../base-xform":31,"./ext-lst-xform":62,"./hlink-click-xform":64}],60:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var IntegerXform = require('../simple/integer-xform');
- var CellPositionXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(CellPositionXform, _BaseXform);
- var _super = _createSuper(CellPositionXform);
- function CellPositionXform(options) {
- var _this;
- _classCallCheck(this, CellPositionXform);
- _this = _super.call(this);
- _this.tag = options.tag;
- _this.map = {
- 'xdr:col': new IntegerXform({
- tag: 'xdr:col',
- zero: true
- }),
- 'xdr:colOff': new IntegerXform({
- tag: 'xdr:colOff',
- zero: true
- }),
- 'xdr:row': new IntegerXform({
- tag: 'xdr:row',
- zero: true
- }),
- 'xdr:rowOff': new IntegerXform({
- tag: 'xdr:rowOff',
- zero: true
- })
- };
- return _this;
- }
- _createClass(CellPositionXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openNode(this.tag);
- this.map['xdr:col'].render(xmlStream, model.nativeCol);
- this.map['xdr:colOff'].render(xmlStream, model.nativeColOff);
- this.map['xdr:row'].render(xmlStream, model.nativeRow);
- this.map['xdr:rowOff'].render(xmlStream, model.nativeRowOff);
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case this.tag:
- this.reset();
- break;
- default:
- this.parser = this.map[node.name];
- if (this.parser) {
- this.parser.parseOpen(node);
- }
- break;
- }
- return true;
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.parser = undefined;
- }
- return true;
- }
- switch (name) {
- case this.tag:
- this.model = {
- nativeCol: this.map['xdr:col'].model,
- nativeColOff: this.map['xdr:colOff'].model,
- nativeRow: this.map['xdr:row'].model,
- nativeRowOff: this.map['xdr:rowOff'].model
- };
- return false;
- default:
- // not quite sure how we get here!
- return true;
- }
- }
- }]);
- return CellPositionXform;
- }(BaseXform);
- module.exports = CellPositionXform;
- },{"../base-xform":31,"../simple/integer-xform":117}],61:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var colCache = require('../../../utils/col-cache');
- var XmlStream = require('../../../utils/xml-stream');
- var BaseXform = require('../base-xform');
- var TwoCellAnchorXform = require('./two-cell-anchor-xform');
- var OneCellAnchorXform = require('./one-cell-anchor-xform');
- function getAnchorType(model) {
- var range = typeof model.range === 'string' ? colCache.decode(model.range) : model.range;
- return range.br ? 'xdr:twoCellAnchor' : 'xdr:oneCellAnchor';
- }
- var DrawingXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(DrawingXform, _BaseXform);
- var _super = _createSuper(DrawingXform);
- function DrawingXform() {
- var _this;
- _classCallCheck(this, DrawingXform);
- _this = _super.call(this);
- _this.map = {
- 'xdr:twoCellAnchor': new TwoCellAnchorXform(),
- 'xdr:oneCellAnchor': new OneCellAnchorXform()
- };
- return _this;
- }
- _createClass(DrawingXform, [{
- key: "prepare",
- value: function prepare(model) {
- var _this2 = this;
- model.anchors.forEach(function (item, index) {
- item.anchorType = getAnchorType(item);
- var anchor = _this2.map[item.anchorType];
- anchor.prepare(item, {
- index: index
- });
- });
- }
- }, {
- key: "render",
- value: function render(xmlStream, model) {
- var _this3 = this;
- xmlStream.openXml(XmlStream.StdDocAttributes);
- xmlStream.openNode(this.tag, DrawingXform.DRAWING_ATTRIBUTES);
- model.anchors.forEach(function (item) {
- var anchor = _this3.map[item.anchorType];
- anchor.render(xmlStream, item);
- });
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case this.tag:
- this.reset();
- this.model = {
- anchors: []
- };
- break;
- default:
- this.parser = this.map[node.name];
- if (this.parser) {
- this.parser.parseOpen(node);
- }
- break;
- }
- return true;
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.model.anchors.push(this.parser.model);
- this.parser = undefined;
- }
- return true;
- }
- switch (name) {
- case this.tag:
- return false;
- default:
- // could be some unrecognised tags
- return true;
- }
- }
- }, {
- key: "reconcile",
- value: function reconcile(model, options) {
- var _this4 = this;
- model.anchors.forEach(function (anchor) {
- if (anchor.br) {
- _this4.map['xdr:twoCellAnchor'].reconcile(anchor, options);
- } else {
- _this4.map['xdr:oneCellAnchor'].reconcile(anchor, options);
- }
- });
- }
- }, {
- key: "tag",
- get: function get() {
- return 'xdr:wsDr';
- }
- }]);
- return DrawingXform;
- }(BaseXform);
- DrawingXform.DRAWING_ATTRIBUTES = {
- 'xmlns:xdr': 'http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing',
- 'xmlns:a': 'http://schemas.openxmlformats.org/drawingml/2006/main'
- };
- module.exports = DrawingXform;
- },{"../../../utils/col-cache":19,"../../../utils/xml-stream":27,"../base-xform":31,"./one-cell-anchor-xform":66,"./two-cell-anchor-xform":69}],62:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var ExtLstXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(ExtLstXform, _BaseXform);
- var _super = _createSuper(ExtLstXform);
- function ExtLstXform() {
- _classCallCheck(this, ExtLstXform);
- return _super.apply(this, arguments);
- }
- _createClass(ExtLstXform, [{
- key: "render",
- value: function render(xmlStream) {
- xmlStream.openNode(this.tag);
- xmlStream.openNode('a:ext', {
- uri: '{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}'
- });
- xmlStream.leafNode('a16:creationId', {
- 'xmlns:a16': 'http://schemas.microsoft.com/office/drawing/2014/main',
- id: '{00000000-0008-0000-0000-000002000000}'
- });
- xmlStream.closeNode();
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- switch (node.name) {
- case this.tag:
- return true;
- default:
- return true;
- }
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- switch (name) {
- case this.tag:
- return false;
- default:
- // unprocessed internal nodes
- return true;
- }
- }
- }, {
- key: "tag",
- get: function get() {
- return 'a:extLst';
- }
- }]);
- return ExtLstXform;
- }(BaseXform);
- module.exports = ExtLstXform;
- },{"../base-xform":31}],63:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- /** https://en.wikipedia.org/wiki/Office_Open_XML_file_formats#DrawingML */
- var EMU_PER_PIXEL_AT_96_DPI = 9525;
- var ExtXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(ExtXform, _BaseXform);
- var _super = _createSuper(ExtXform);
- function ExtXform(options) {
- var _this;
- _classCallCheck(this, ExtXform);
- _this = _super.call(this);
- _this.tag = options.tag;
- _this.map = {};
- return _this;
- }
- _createClass(ExtXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openNode(this.tag);
- var width = Math.floor(model.width * EMU_PER_PIXEL_AT_96_DPI);
- var height = Math.floor(model.height * EMU_PER_PIXEL_AT_96_DPI);
- xmlStream.addAttribute('cx', width);
- xmlStream.addAttribute('cy', height);
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (node.name === this.tag) {
- this.model = {
- width: parseInt(node.attributes.cx || '0', 10) / EMU_PER_PIXEL_AT_96_DPI,
- height: parseInt(node.attributes.cy || '0', 10) / EMU_PER_PIXEL_AT_96_DPI
- };
- return true;
- }
- return false;
- }
- }, {
- key: "parseText",
- value: function parseText()
- /* text */
- {}
- }, {
- key: "parseClose",
- value: function parseClose()
- /* name */
- {
- return false;
- }
- }]);
- return ExtXform;
- }(BaseXform);
- module.exports = ExtXform;
- },{"../base-xform":31}],64:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var HLinkClickXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(HLinkClickXform, _BaseXform);
- var _super = _createSuper(HLinkClickXform);
- function HLinkClickXform() {
- _classCallCheck(this, HLinkClickXform);
- return _super.apply(this, arguments);
- }
- _createClass(HLinkClickXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- if (!(model.hyperlinks && model.hyperlinks.rId)) {
- return;
- }
- xmlStream.leafNode(this.tag, {
- 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',
- 'r:id': model.hyperlinks.rId,
- tooltip: model.hyperlinks.tooltip
- });
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- switch (node.name) {
- case this.tag:
- this.model = {
- hyperlinks: {
- rId: node.attributes['r:id'],
- tooltip: node.attributes.tooltip
- }
- };
- return true;
- default:
- return true;
- }
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'a:hlinkClick';
- }
- }]);
- return HLinkClickXform;
- }(BaseXform);
- module.exports = HLinkClickXform;
- },{"../base-xform":31}],65:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var CNvPrXform = require('./c-nv-pr-xform');
- var CNvPicPrXform = require('./c-nv-pic-pr-xform');
- var NvPicPrXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(NvPicPrXform, _BaseXform);
- var _super = _createSuper(NvPicPrXform);
- function NvPicPrXform() {
- var _this;
- _classCallCheck(this, NvPicPrXform);
- _this = _super.call(this);
- _this.map = {
- 'xdr:cNvPr': new CNvPrXform(),
- 'xdr:cNvPicPr': new CNvPicPrXform()
- };
- return _this;
- }
- _createClass(NvPicPrXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openNode(this.tag);
- this.map['xdr:cNvPr'].render(xmlStream, model);
- this.map['xdr:cNvPicPr'].render(xmlStream, model);
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case this.tag:
- this.reset();
- break;
- default:
- this.parser = this.map[node.name];
- if (this.parser) {
- this.parser.parseOpen(node);
- }
- break;
- }
- return true;
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.parser = undefined;
- }
- return true;
- }
- switch (name) {
- case this.tag:
- this.model = this.map['xdr:cNvPr'].model;
- return false;
- default:
- return true;
- }
- }
- }, {
- key: "tag",
- get: function get() {
- return 'xdr:nvPicPr';
- }
- }]);
- return NvPicPrXform;
- }(BaseXform);
- module.exports = NvPicPrXform;
- },{"../base-xform":31,"./c-nv-pic-pr-xform":58,"./c-nv-pr-xform":59}],66:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseCellAnchorXform = require('./base-cell-anchor-xform');
- var StaticXform = require('../static-xform');
- var CellPositionXform = require('./cell-position-xform');
- var ExtXform = require('./ext-xform');
- var PicXform = require('./pic-xform');
- var OneCellAnchorXform = /*#__PURE__*/function (_BaseCellAnchorXform) {
- _inherits(OneCellAnchorXform, _BaseCellAnchorXform);
- var _super = _createSuper(OneCellAnchorXform);
- function OneCellAnchorXform() {
- var _this;
- _classCallCheck(this, OneCellAnchorXform);
- _this = _super.call(this);
- _this.map = {
- 'xdr:from': new CellPositionXform({
- tag: 'xdr:from'
- }),
- 'xdr:ext': new ExtXform({
- tag: 'xdr:ext'
- }),
- 'xdr:pic': new PicXform(),
- 'xdr:clientData': new StaticXform({
- tag: 'xdr:clientData'
- })
- };
- return _this;
- }
- _createClass(OneCellAnchorXform, [{
- key: "prepare",
- value: function prepare(model, options) {
- this.map['xdr:pic'].prepare(model.picture, options);
- }
- }, {
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openNode(this.tag, {
- editAs: model.range.editAs || 'oneCell'
- });
- this.map['xdr:from'].render(xmlStream, model.range.tl);
- this.map['xdr:ext'].render(xmlStream, model.range.ext);
- this.map['xdr:pic'].render(xmlStream, model.picture);
- this.map['xdr:clientData'].render(xmlStream, {});
- xmlStream.closeNode();
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.parser = undefined;
- }
- return true;
- }
- switch (name) {
- case this.tag:
- this.model.range.tl = this.map['xdr:from'].model;
- this.model.range.ext = this.map['xdr:ext'].model;
- this.model.picture = this.map['xdr:pic'].model;
- return false;
- default:
- // could be some unrecognised tags
- return true;
- }
- }
- }, {
- key: "reconcile",
- value: function reconcile(model, options) {
- model.medium = this.reconcilePicture(model.picture, options);
- }
- }, {
- key: "tag",
- get: function get() {
- return 'xdr:oneCellAnchor';
- }
- }]);
- return OneCellAnchorXform;
- }(BaseCellAnchorXform);
- module.exports = OneCellAnchorXform;
- },{"../static-xform":119,"./base-cell-anchor-xform":55,"./cell-position-xform":60,"./ext-xform":63,"./pic-xform":67}],67:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var StaticXform = require('../static-xform');
- var BlipFillXform = require('./blip-fill-xform');
- var NvPicPrXform = require('./nv-pic-pr-xform');
- var spPrJSON = require('./sp-pr');
- var PicXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(PicXform, _BaseXform);
- var _super = _createSuper(PicXform);
- function PicXform() {
- var _this;
- _classCallCheck(this, PicXform);
- _this = _super.call(this);
- _this.map = {
- 'xdr:nvPicPr': new NvPicPrXform(),
- 'xdr:blipFill': new BlipFillXform(),
- 'xdr:spPr': new StaticXform(spPrJSON)
- };
- return _this;
- }
- _createClass(PicXform, [{
- key: "prepare",
- value: function prepare(model, options) {
- model.index = options.index + 1;
- }
- }, {
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openNode(this.tag);
- this.map['xdr:nvPicPr'].render(xmlStream, model);
- this.map['xdr:blipFill'].render(xmlStream, model);
- this.map['xdr:spPr'].render(xmlStream, model);
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case this.tag:
- this.reset();
- break;
- default:
- this.parser = this.map[node.name];
- if (this.parser) {
- this.parser.parseOpen(node);
- }
- break;
- }
- return true;
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.mergeModel(this.parser.model);
- this.parser = undefined;
- }
- return true;
- }
- switch (name) {
- case this.tag:
- return false;
- default:
- // not quite sure how we get here!
- return true;
- }
- }
- }, {
- key: "tag",
- get: function get() {
- return 'xdr:pic';
- }
- }]);
- return PicXform;
- }(BaseXform);
- module.exports = PicXform;
- },{"../base-xform":31,"../static-xform":119,"./blip-fill-xform":56,"./nv-pic-pr-xform":65,"./sp-pr":68}],68:[function(require,module,exports){
- "use strict";
- module.exports = {
- tag: 'xdr:spPr',
- c: [{
- tag: 'a:xfrm',
- c: [{
- tag: 'a:off',
- $: {
- x: '0',
- y: '0'
- }
- }, {
- tag: 'a:ext',
- $: {
- cx: '0',
- cy: '0'
- }
- }]
- }, {
- tag: 'a:prstGeom',
- $: {
- prst: 'rect'
- },
- c: [{
- tag: 'a:avLst'
- }]
- }]
- };
- },{}],69:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseCellAnchorXform = require('./base-cell-anchor-xform');
- var StaticXform = require('../static-xform');
- var CellPositionXform = require('./cell-position-xform');
- var PicXform = require('./pic-xform');
- var TwoCellAnchorXform = /*#__PURE__*/function (_BaseCellAnchorXform) {
- _inherits(TwoCellAnchorXform, _BaseCellAnchorXform);
- var _super = _createSuper(TwoCellAnchorXform);
- function TwoCellAnchorXform() {
- var _this;
- _classCallCheck(this, TwoCellAnchorXform);
- _this = _super.call(this);
- _this.map = {
- 'xdr:from': new CellPositionXform({
- tag: 'xdr:from'
- }),
- 'xdr:to': new CellPositionXform({
- tag: 'xdr:to'
- }),
- 'xdr:pic': new PicXform(),
- 'xdr:clientData': new StaticXform({
- tag: 'xdr:clientData'
- })
- };
- return _this;
- }
- _createClass(TwoCellAnchorXform, [{
- key: "prepare",
- value: function prepare(model, options) {
- this.map['xdr:pic'].prepare(model.picture, options);
- }
- }, {
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openNode(this.tag, {
- editAs: model.range.editAs || 'oneCell'
- });
- this.map['xdr:from'].render(xmlStream, model.range.tl);
- this.map['xdr:to'].render(xmlStream, model.range.br);
- this.map['xdr:pic'].render(xmlStream, model.picture);
- this.map['xdr:clientData'].render(xmlStream, {});
- xmlStream.closeNode();
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.parser = undefined;
- }
- return true;
- }
- switch (name) {
- case this.tag:
- this.model.range.tl = this.map['xdr:from'].model;
- this.model.range.br = this.map['xdr:to'].model;
- this.model.picture = this.map['xdr:pic'].model;
- return false;
- default:
- // could be some unrecognised tags
- return true;
- }
- }
- }, {
- key: "reconcile",
- value: function reconcile(model, options) {
- model.medium = this.reconcilePicture(model.picture, options);
- }
- }, {
- key: "tag",
- get: function get() {
- return 'xdr:twoCellAnchor';
- }
- }]);
- return TwoCellAnchorXform;
- }(BaseCellAnchorXform);
- module.exports = TwoCellAnchorXform;
- },{"../static-xform":119,"./base-cell-anchor-xform":55,"./cell-position-xform":60,"./pic-xform":67}],70:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('./base-xform');
- var ListXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(ListXform, _BaseXform);
- var _super = _createSuper(ListXform);
- function ListXform(options) {
- var _this;
- _classCallCheck(this, ListXform);
- _this = _super.call(this);
- _this.tag = options.tag;
- _this.always = !!options.always;
- _this.count = options.count;
- _this.empty = options.empty;
- _this.$count = options.$count || 'count';
- _this.$ = options.$;
- _this.childXform = options.childXform;
- _this.maxItems = options.maxItems;
- return _this;
- }
- _createClass(ListXform, [{
- key: "prepare",
- value: function prepare(model, options) {
- var childXform = this.childXform;
- if (model) {
- model.forEach(function (childModel, index) {
- options.index = index;
- childXform.prepare(childModel, options);
- });
- }
- }
- }, {
- key: "render",
- value: function render(xmlStream, model) {
- if (this.always || model && model.length) {
- xmlStream.openNode(this.tag, this.$);
- if (this.count) {
- xmlStream.addAttribute(this.$count, model && model.length || 0);
- }
- var childXform = this.childXform;
- (model || []).forEach(function (childModel, index) {
- childXform.render(xmlStream, childModel, index);
- });
- xmlStream.closeNode();
- } else if (this.empty) {
- xmlStream.leafNode(this.tag);
- }
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case this.tag:
- this.model = [];
- return true;
- default:
- if (this.childXform.parseOpen(node)) {
- this.parser = this.childXform;
- return true;
- }
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.model.push(this.parser.model);
- this.parser = undefined;
- if (this.maxItems && this.model.length > this.maxItems) {
- throw new Error("Max ".concat(this.childXform.tag, " count (").concat(this.maxItems, ") exceeded"));
- }
- }
- return true;
- }
- return false;
- }
- }, {
- key: "reconcile",
- value: function reconcile(model, options) {
- if (model) {
- var childXform = this.childXform;
- model.forEach(function (childModel) {
- childXform.reconcile(childModel, options);
- });
- }
- }
- }]);
- return ListXform;
- }(BaseXform);
- module.exports = ListXform;
- },{"./base-xform":31}],71:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var colCache = require('../../../utils/col-cache');
- var BaseXform = require('../base-xform');
- var AutoFilterXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(AutoFilterXform, _BaseXform);
- var _super = _createSuper(AutoFilterXform);
- function AutoFilterXform() {
- _classCallCheck(this, AutoFilterXform);
- return _super.apply(this, arguments);
- }
- _createClass(AutoFilterXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- if (model) {
- if (typeof model === 'string') {
- // assume range
- xmlStream.leafNode('autoFilter', {
- ref: model
- });
- } else {
- var getAddress = function getAddress(addr) {
- if (typeof addr === 'string') {
- return addr;
- }
- return colCache.getAddress(addr.row, addr.column).address;
- };
- var firstAddress = getAddress(model.from);
- var secondAddress = getAddress(model.to);
- if (firstAddress && secondAddress) {
- xmlStream.leafNode('autoFilter', {
- ref: "".concat(firstAddress, ":").concat(secondAddress)
- });
- }
- }
- }
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (node.name === 'autoFilter') {
- this.model = node.attributes.ref;
- }
- }
- }, {
- key: "tag",
- get: function get() {
- return 'autoFilter';
- }
- }]);
- return AutoFilterXform;
- }(BaseXform);
- module.exports = AutoFilterXform;
- },{"../../../utils/col-cache":19,"../base-xform":31}],72:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var utils = require('../../../utils/utils');
- var BaseXform = require('../base-xform');
- var Range = require('../../../doc/range');
- var Enums = require('../../../doc/enums');
- var RichTextXform = require('../strings/rich-text-xform');
- function getValueType(v) {
- if (v === null || v === undefined) {
- return Enums.ValueType.Null;
- }
- if (v instanceof String || typeof v === 'string') {
- return Enums.ValueType.String;
- }
- if (typeof v === 'number') {
- return Enums.ValueType.Number;
- }
- if (typeof v === 'boolean') {
- return Enums.ValueType.Boolean;
- }
- if (v instanceof Date) {
- return Enums.ValueType.Date;
- }
- if (v.text && v.hyperlink) {
- return Enums.ValueType.Hyperlink;
- }
- if (v.formula) {
- return Enums.ValueType.Formula;
- }
- if (v.error) {
- return Enums.ValueType.Error;
- }
- throw new Error('I could not understand type of value');
- }
- function getEffectiveCellType(cell) {
- switch (cell.type) {
- case Enums.ValueType.Formula:
- return getValueType(cell.result);
- default:
- return cell.type;
- }
- }
- var CellXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(CellXform, _BaseXform);
- var _super = _createSuper(CellXform);
- function CellXform() {
- var _this;
- _classCallCheck(this, CellXform);
- _this = _super.call(this);
- _this.richTextXForm = new RichTextXform();
- return _this;
- }
- _createClass(CellXform, [{
- key: "prepare",
- value: function prepare(model, options) {
- var styleId = options.styles.addStyleModel(model.style || {}, getEffectiveCellType(model));
- if (styleId) {
- model.styleId = styleId;
- }
- if (model.comment) {
- options.comments.push(_objectSpread(_objectSpread({}, model.comment), {}, {
- ref: model.address
- }));
- }
- switch (model.type) {
- case Enums.ValueType.String:
- case Enums.ValueType.RichText:
- if (options.sharedStrings) {
- model.ssId = options.sharedStrings.add(model.value);
- }
- break;
- case Enums.ValueType.Date:
- if (options.date1904) {
- model.date1904 = true;
- }
- break;
- case Enums.ValueType.Hyperlink:
- if (options.sharedStrings && model.text !== undefined && model.text !== null) {
- model.ssId = options.sharedStrings.add(model.text);
- }
- options.hyperlinks.push({
- address: model.address,
- target: model.hyperlink,
- tooltip: model.tooltip
- });
- break;
- case Enums.ValueType.Merge:
- options.merges.add(model);
- break;
- case Enums.ValueType.Formula:
- if (options.date1904) {
- // in case valueType is date
- model.date1904 = true;
- }
- if (model.shareType === 'shared') {
- model.si = options.siFormulae++;
- }
- if (model.formula) {
- options.formulae[model.address] = model;
- } else if (model.sharedFormula) {
- var master = options.formulae[model.sharedFormula];
- if (!master) {
- throw new Error("Shared Formula master must exist above and or left of clone for cell ".concat(model.address));
- }
- if (master.si === undefined) {
- master.shareType = 'shared';
- master.si = options.siFormulae++;
- master.range = new Range(master.address, model.address);
- } else if (master.range) {
- master.range.expandToAddress(model.address);
- }
- model.si = master.si;
- }
- break;
- default:
- break;
- }
- }
- }, {
- key: "renderFormula",
- value: function renderFormula(xmlStream, model) {
- var attrs = null;
- switch (model.shareType) {
- case 'shared':
- attrs = {
- t: 'shared',
- ref: model.ref || model.range.range,
- si: model.si
- };
- break;
- case 'array':
- attrs = {
- t: 'array',
- ref: model.ref
- };
- break;
- default:
- if (model.si !== undefined) {
- attrs = {
- t: 'shared',
- si: model.si
- };
- }
- break;
- }
- switch (getValueType(model.result)) {
- case Enums.ValueType.Null:
- // ?
- xmlStream.leafNode('f', attrs, model.formula);
- break;
- case Enums.ValueType.String:
- // oddly, formula results don't ever use shared strings
- xmlStream.addAttribute('t', 'str');
- xmlStream.leafNode('f', attrs, model.formula);
- xmlStream.leafNode('v', null, model.result);
- break;
- case Enums.ValueType.Number:
- xmlStream.leafNode('f', attrs, model.formula);
- xmlStream.leafNode('v', null, model.result);
- break;
- case Enums.ValueType.Boolean:
- xmlStream.addAttribute('t', 'b');
- xmlStream.leafNode('f', attrs, model.formula);
- xmlStream.leafNode('v', null, model.result ? 1 : 0);
- break;
- case Enums.ValueType.Error:
- xmlStream.addAttribute('t', 'e');
- xmlStream.leafNode('f', attrs, model.formula);
- xmlStream.leafNode('v', null, model.result.error);
- break;
- case Enums.ValueType.Date:
- xmlStream.leafNode('f', attrs, model.formula);
- xmlStream.leafNode('v', null, utils.dateToExcel(model.result, model.date1904));
- break;
- // case Enums.ValueType.Hyperlink: // ??
- // case Enums.ValueType.Formula:
- default:
- throw new Error('I could not understand type of value');
- }
- }
- }, {
- key: "render",
- value: function render(xmlStream, model) {
- var _this2 = this;
- if (model.type === Enums.ValueType.Null && !model.styleId) {
- // if null and no style, exit
- return;
- }
- xmlStream.openNode('c');
- xmlStream.addAttribute('r', model.address);
- if (model.styleId) {
- xmlStream.addAttribute('s', model.styleId);
- }
- switch (model.type) {
- case Enums.ValueType.Null:
- break;
- case Enums.ValueType.Number:
- xmlStream.leafNode('v', null, model.value);
- break;
- case Enums.ValueType.Boolean:
- xmlStream.addAttribute('t', 'b');
- xmlStream.leafNode('v', null, model.value ? '1' : '0');
- break;
- case Enums.ValueType.Error:
- xmlStream.addAttribute('t', 'e');
- xmlStream.leafNode('v', null, model.value.error);
- break;
- case Enums.ValueType.String:
- case Enums.ValueType.RichText:
- if (model.ssId !== undefined) {
- xmlStream.addAttribute('t', 's');
- xmlStream.leafNode('v', null, model.ssId);
- } else if (model.value && model.value.richText) {
- xmlStream.addAttribute('t', 'inlineStr');
- xmlStream.openNode('is');
- model.value.richText.forEach(function (text) {
- _this2.richTextXForm.render(xmlStream, text);
- });
- xmlStream.closeNode('is');
- } else {
- xmlStream.addAttribute('t', 'str');
- xmlStream.leafNode('v', null, model.value);
- }
- break;
- case Enums.ValueType.Date:
- xmlStream.leafNode('v', null, utils.dateToExcel(model.value, model.date1904));
- break;
- case Enums.ValueType.Hyperlink:
- if (model.ssId !== undefined) {
- xmlStream.addAttribute('t', 's');
- xmlStream.leafNode('v', null, model.ssId);
- } else {
- xmlStream.addAttribute('t', 'str');
- xmlStream.leafNode('v', null, model.text);
- }
- break;
- case Enums.ValueType.Formula:
- this.renderFormula(xmlStream, model);
- break;
- case Enums.ValueType.Merge:
- // nothing to add
- break;
- default:
- break;
- }
- xmlStream.closeNode(); // </c>
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case 'c':
- // const address = colCache.decodeAddress(node.attributes.r);
- this.model = {
- address: node.attributes.r
- };
- this.t = node.attributes.t;
- if (node.attributes.s) {
- this.model.styleId = parseInt(node.attributes.s, 10);
- }
- return true;
- case 'f':
- this.currentNode = 'f';
- this.model.si = node.attributes.si;
- this.model.shareType = node.attributes.t;
- this.model.ref = node.attributes.ref;
- return true;
- case 'v':
- this.currentNode = 'v';
- return true;
- case 't':
- this.currentNode = 't';
- return true;
- case 'r':
- this.parser = this.richTextXForm;
- this.parser.parseOpen(node);
- return true;
- default:
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- return;
- }
- switch (this.currentNode) {
- case 'f':
- this.model.formula = this.model.formula ? this.model.formula + text : text;
- break;
- case 'v':
- case 't':
- if (this.model.value && this.model.value.richText) {
- this.model.value.richText.text = this.model.value.richText.text ? this.model.value.richText.text + text : text;
- } else {
- this.model.value = this.model.value ? this.model.value + text : text;
- }
- break;
- default:
- break;
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- switch (name) {
- case 'c':
- {
- var model = this.model; // first guess on cell type
- if (model.formula || model.shareType) {
- model.type = Enums.ValueType.Formula;
- if (model.value) {
- if (this.t === 'str') {
- model.result = utils.xmlDecode(model.value);
- } else if (this.t === 'b') {
- model.result = parseInt(model.value, 10) !== 0;
- } else if (this.t === 'e') {
- model.result = {
- error: model.value
- };
- } else {
- model.result = parseFloat(model.value);
- }
- model.value = undefined;
- }
- } else if (model.value !== undefined) {
- switch (this.t) {
- case 's':
- model.type = Enums.ValueType.String;
- model.value = parseInt(model.value, 10);
- break;
- case 'str':
- model.type = Enums.ValueType.String;
- model.value = utils.xmlDecode(model.value);
- break;
- case 'inlineStr':
- model.type = Enums.ValueType.String;
- break;
- case 'b':
- model.type = Enums.ValueType.Boolean;
- model.value = parseInt(model.value, 10) !== 0;
- break;
- case 'e':
- model.type = Enums.ValueType.Error;
- model.value = {
- error: model.value
- };
- break;
- default:
- model.type = Enums.ValueType.Number;
- model.value = parseFloat(model.value);
- break;
- }
- } else if (model.styleId) {
- model.type = Enums.ValueType.Null;
- } else {
- model.type = Enums.ValueType.Merge;
- }
- return false;
- }
- case 'f':
- case 'v':
- case 'is':
- this.currentNode = undefined;
- return true;
- case 't':
- if (this.parser) {
- this.parser.parseClose(name);
- return true;
- }
- this.currentNode = undefined;
- return true;
- case 'r':
- this.model.value = this.model.value || {};
- this.model.value.richText = this.model.value.richText || [];
- this.model.value.richText.push(this.parser.model);
- this.parser = undefined;
- this.currentNode = undefined;
- return true;
- default:
- if (this.parser) {
- this.parser.parseClose(name);
- return true;
- }
- return false;
- }
- }
- }, {
- key: "reconcile",
- value: function reconcile(model, options) {
- var style = model.styleId && options.styles && options.styles.getStyleModel(model.styleId);
- if (style) {
- model.style = style;
- }
- if (model.styleId !== undefined) {
- model.styleId = undefined;
- }
- switch (model.type) {
- case Enums.ValueType.String:
- if (typeof model.value === 'number') {
- if (options.sharedStrings) {
- model.value = options.sharedStrings.getString(model.value);
- }
- }
- if (model.value.richText) {
- model.type = Enums.ValueType.RichText;
- }
- break;
- case Enums.ValueType.Number:
- if (style && utils.isDateFmt(style.numFmt)) {
- model.type = Enums.ValueType.Date;
- model.value = utils.excelToDate(model.value, options.date1904);
- }
- break;
- case Enums.ValueType.Formula:
- if (model.result !== undefined && style && utils.isDateFmt(style.numFmt)) {
- model.result = utils.excelToDate(model.result, options.date1904);
- }
- if (model.shareType === 'shared') {
- if (model.ref) {
- // master
- options.formulae[model.si] = model.address;
- } else {
- // slave
- model.sharedFormula = options.formulae[model.si];
- delete model.shareType;
- }
- delete model.si;
- }
- break;
- default:
- break;
- } // look for hyperlink
- var hyperlink = options.hyperlinkMap[model.address];
- if (hyperlink) {
- if (model.type === Enums.ValueType.Formula) {
- model.text = model.result;
- model.result = undefined;
- } else {
- model.text = model.value;
- model.value = undefined;
- }
- model.type = Enums.ValueType.Hyperlink;
- model.hyperlink = hyperlink;
- }
- var comment = options.commentsMap && options.commentsMap[model.address];
- if (comment) {
- model.comment = comment;
- }
- }
- }, {
- key: "tag",
- get: function get() {
- return 'c';
- }
- }]);
- return CellXform;
- }(BaseXform);
- module.exports = CellXform;
- },{"../../../doc/enums":7,"../../../doc/range":10,"../../../utils/utils":26,"../base-xform":31,"../strings/rich-text-xform":121}],73:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../../base-xform');
- var CfIconExtXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(CfIconExtXform, _BaseXform);
- var _super = _createSuper(CfIconExtXform);
- function CfIconExtXform() {
- _classCallCheck(this, CfIconExtXform);
- return _super.apply(this, arguments);
- }
- _createClass(CfIconExtXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.leafNode(this.tag, {
- iconSet: model.iconSet,
- iconId: model.iconId
- });
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(_ref) {
- var attributes = _ref.attributes;
- this.model = {
- iconSet: attributes.iconSet,
- iconId: BaseXform.toIntValue(attributes.iconId)
- };
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- return name !== this.tag;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'x14:cfIcon';
- }
- }]);
- return CfIconExtXform;
- }(BaseXform);
- module.exports = CfIconExtXform;
- },{"../../base-xform":31}],74:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var _require = require('uuid'),
- uuidv4 = _require.v4;
- var BaseXform = require('../../base-xform');
- var CompositeXform = require('../../composite-xform');
- var DatabarExtXform = require('./databar-ext-xform');
- var IconSetExtXform = require('./icon-set-ext-xform');
- var extIcons = {
- '3Triangles': true,
- '3Stars': true,
- '5Boxes': true
- };
- var CfRuleExtXform = /*#__PURE__*/function (_CompositeXform) {
- _inherits(CfRuleExtXform, _CompositeXform);
- var _super = _createSuper(CfRuleExtXform);
- function CfRuleExtXform() {
- var _this;
- _classCallCheck(this, CfRuleExtXform);
- _this = _super.call(this);
- _this.map = {
- 'x14:dataBar': _this.databarXform = new DatabarExtXform(),
- 'x14:iconSet': _this.iconSetXform = new IconSetExtXform()
- };
- return _this;
- }
- _createClass(CfRuleExtXform, [{
- key: "prepare",
- value: function prepare(model) {
- if (CfRuleExtXform.isExt(model)) {
- model.x14Id = "{".concat(uuidv4(), "}").toUpperCase();
- }
- }
- }, {
- key: "render",
- value: function render(xmlStream, model) {
- if (!CfRuleExtXform.isExt(model)) {
- return;
- }
- switch (model.type) {
- case 'dataBar':
- this.renderDataBar(xmlStream, model);
- break;
- case 'iconSet':
- this.renderIconSet(xmlStream, model);
- break;
- }
- }
- }, {
- key: "renderDataBar",
- value: function renderDataBar(xmlStream, model) {
- xmlStream.openNode(this.tag, {
- type: 'dataBar',
- id: model.x14Id
- });
- this.databarXform.render(xmlStream, model);
- xmlStream.closeNode();
- }
- }, {
- key: "renderIconSet",
- value: function renderIconSet(xmlStream, model) {
- xmlStream.openNode(this.tag, {
- type: 'iconSet',
- priority: model.priority,
- id: model.x14Id || "{".concat(uuidv4(), "}")
- });
- this.iconSetXform.render(xmlStream, model);
- xmlStream.closeNode();
- }
- }, {
- key: "createNewModel",
- value: function createNewModel(_ref) {
- var attributes = _ref.attributes;
- return {
- type: attributes.type,
- x14Id: attributes.id,
- priority: BaseXform.toIntValue(attributes.priority)
- };
- }
- }, {
- key: "onParserClose",
- value: function onParserClose(name, parser) {
- Object.assign(this.model, parser.model);
- }
- }, {
- key: "tag",
- get: function get() {
- return 'x14:cfRule';
- }
- }], [{
- key: "isExt",
- value: function isExt(rule) {
- // is this rule primitive?
- if (rule.type === 'dataBar') {
- return DatabarExtXform.isExt(rule);
- }
- if (rule.type === 'iconSet') {
- if (rule.custom || extIcons[rule.iconSet]) {
- return true;
- }
- }
- return false;
- }
- }]);
- return CfRuleExtXform;
- }(CompositeXform);
- module.exports = CfRuleExtXform;
- },{"../../base-xform":31,"../../composite-xform":47,"./databar-ext-xform":78,"./icon-set-ext-xform":80,"uuid":416}],75:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var CompositeXform = require('../../composite-xform');
- var FExtXform = require('./f-ext-xform');
- var CfvoExtXform = /*#__PURE__*/function (_CompositeXform) {
- _inherits(CfvoExtXform, _CompositeXform);
- var _super = _createSuper(CfvoExtXform);
- function CfvoExtXform() {
- var _this;
- _classCallCheck(this, CfvoExtXform);
- _this = _super.call(this);
- _this.map = {
- 'xm:f': _this.fExtXform = new FExtXform()
- };
- return _this;
- }
- _createClass(CfvoExtXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openNode(this.tag, {
- type: model.type
- });
- if (model.value !== undefined) {
- this.fExtXform.render(xmlStream, model.value);
- }
- xmlStream.closeNode();
- }
- }, {
- key: "createNewModel",
- value: function createNewModel(node) {
- return {
- type: node.attributes.type
- };
- }
- }, {
- key: "onParserClose",
- value: function onParserClose(name, parser) {
- switch (name) {
- case 'xm:f':
- this.model.value = parser.model ? parseFloat(parser.model) : 0;
- break;
- }
- }
- }, {
- key: "tag",
- get: function get() {
- return 'x14:cfvo';
- }
- }]);
- return CfvoExtXform;
- }(CompositeXform);
- module.exports = CfvoExtXform;
- },{"../../composite-xform":47,"./f-ext-xform":79}],76:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var CompositeXform = require('../../composite-xform');
- var SqRefExtXform = require('./sqref-ext-xform');
- var CfRuleExtXform = require('./cf-rule-ext-xform');
- var ConditionalFormattingExtXform = /*#__PURE__*/function (_CompositeXform) {
- _inherits(ConditionalFormattingExtXform, _CompositeXform);
- var _super = _createSuper(ConditionalFormattingExtXform);
- function ConditionalFormattingExtXform() {
- var _this;
- _classCallCheck(this, ConditionalFormattingExtXform);
- _this = _super.call(this);
- _this.map = {
- 'xm:sqref': _this.sqRef = new SqRefExtXform(),
- 'x14:cfRule': _this.cfRule = new CfRuleExtXform()
- };
- return _this;
- }
- _createClass(ConditionalFormattingExtXform, [{
- key: "prepare",
- value: function prepare(model, options) {
- var _this2 = this;
- model.rules.forEach(function (rule) {
- _this2.cfRule.prepare(rule, options);
- });
- }
- }, {
- key: "render",
- value: function render(xmlStream, model) {
- var _this3 = this;
- if (!model.rules.some(CfRuleExtXform.isExt)) {
- return;
- }
- xmlStream.openNode(this.tag, {
- 'xmlns:xm': 'http://schemas.microsoft.com/office/excel/2006/main'
- });
- model.rules.filter(CfRuleExtXform.isExt).forEach(function (rule) {
- return _this3.cfRule.render(xmlStream, rule);
- }); // for some odd reason, Excel needs the <xm:sqref> node to be after the rules
- this.sqRef.render(xmlStream, model.ref);
- xmlStream.closeNode();
- }
- }, {
- key: "createNewModel",
- value: function createNewModel() {
- return {
- rules: []
- };
- }
- }, {
- key: "onParserClose",
- value: function onParserClose(name, parser) {
- switch (name) {
- case 'xm:sqref':
- this.model.ref = parser.model;
- break;
- case 'x14:cfRule':
- this.model.rules.push(parser.model);
- break;
- }
- }
- }, {
- key: "tag",
- get: function get() {
- return 'x14:conditionalFormatting';
- }
- }]);
- return ConditionalFormattingExtXform;
- }(CompositeXform);
- module.exports = ConditionalFormattingExtXform;
- },{"../../composite-xform":47,"./cf-rule-ext-xform":74,"./sqref-ext-xform":81}],77:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var CompositeXform = require('../../composite-xform');
- var CfRuleExtXform = require('./cf-rule-ext-xform');
- var ConditionalFormattingExtXform = require('./conditional-formatting-ext-xform');
- var ConditionalFormattingsExtXform = /*#__PURE__*/function (_CompositeXform) {
- _inherits(ConditionalFormattingsExtXform, _CompositeXform);
- var _super = _createSuper(ConditionalFormattingsExtXform);
- function ConditionalFormattingsExtXform() {
- var _this;
- _classCallCheck(this, ConditionalFormattingsExtXform);
- _this = _super.call(this);
- _this.map = {
- 'x14:conditionalFormatting': _this.cfXform = new ConditionalFormattingExtXform()
- };
- return _this;
- }
- _createClass(ConditionalFormattingsExtXform, [{
- key: "hasContent",
- value: function hasContent(model) {
- if (model.hasExtContent === undefined) {
- model.hasExtContent = model.some(function (cf) {
- return cf.rules.some(CfRuleExtXform.isExt);
- });
- }
- return model.hasExtContent;
- }
- }, {
- key: "prepare",
- value: function prepare(model, options) {
- var _this2 = this;
- model.forEach(function (cf) {
- _this2.cfXform.prepare(cf, options);
- });
- }
- }, {
- key: "render",
- value: function render(xmlStream, model) {
- var _this3 = this;
- if (this.hasContent(model)) {
- xmlStream.openNode(this.tag);
- model.forEach(function (cf) {
- return _this3.cfXform.render(xmlStream, cf);
- });
- xmlStream.closeNode();
- }
- }
- }, {
- key: "createNewModel",
- value: function createNewModel() {
- return [];
- }
- }, {
- key: "onParserClose",
- value: function onParserClose(name, parser) {
- // model is array of conditional formatting objects
- this.model.push(parser.model);
- }
- }, {
- key: "tag",
- get: function get() {
- return 'x14:conditionalFormattings';
- }
- }]);
- return ConditionalFormattingsExtXform;
- }(CompositeXform);
- module.exports = ConditionalFormattingsExtXform;
- },{"../../composite-xform":47,"./cf-rule-ext-xform":74,"./conditional-formatting-ext-xform":76}],78:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
- function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../../base-xform');
- var CompositeXform = require('../../composite-xform');
- var ColorXform = require('../../style/color-xform');
- var CfvoExtXform = require('./cfvo-ext-xform');
- var DatabarExtXform = /*#__PURE__*/function (_CompositeXform) {
- _inherits(DatabarExtXform, _CompositeXform);
- var _super = _createSuper(DatabarExtXform);
- function DatabarExtXform() {
- var _this;
- _classCallCheck(this, DatabarExtXform);
- _this = _super.call(this);
- _this.map = {
- 'x14:cfvo': _this.cfvoXform = new CfvoExtXform(),
- 'x14:borderColor': _this.borderColorXform = new ColorXform('x14:borderColor'),
- 'x14:negativeBorderColor': _this.negativeBorderColorXform = new ColorXform('x14:negativeBorderColor'),
- 'x14:negativeFillColor': _this.negativeFillColorXform = new ColorXform('x14:negativeFillColor'),
- 'x14:axisColor': _this.axisColorXform = new ColorXform('x14:axisColor')
- };
- return _this;
- }
- _createClass(DatabarExtXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- var _this2 = this;
- xmlStream.openNode(this.tag, {
- minLength: BaseXform.toIntAttribute(model.minLength, 0, true),
- maxLength: BaseXform.toIntAttribute(model.maxLength, 100, true),
- border: BaseXform.toBoolAttribute(model.border, false),
- gradient: BaseXform.toBoolAttribute(model.gradient, true),
- negativeBarColorSameAsPositive: BaseXform.toBoolAttribute(model.negativeBarColorSameAsPositive, true),
- negativeBarBorderColorSameAsPositive: BaseXform.toBoolAttribute(model.negativeBarBorderColorSameAsPositive, true),
- axisPosition: BaseXform.toAttribute(model.axisPosition, 'auto'),
- direction: BaseXform.toAttribute(model.direction, 'leftToRight')
- });
- model.cfvo.forEach(function (cfvo) {
- _this2.cfvoXform.render(xmlStream, cfvo);
- });
- this.borderColorXform.render(xmlStream, model.borderColor);
- this.negativeBorderColorXform.render(xmlStream, model.negativeBorderColor);
- this.negativeFillColorXform.render(xmlStream, model.negativeFillColor);
- this.axisColorXform.render(xmlStream, model.axisColor);
- xmlStream.closeNode();
- }
- }, {
- key: "createNewModel",
- value: function createNewModel(_ref) {
- var attributes = _ref.attributes;
- return {
- cfvo: [],
- minLength: BaseXform.toIntValue(attributes.minLength, 0),
- maxLength: BaseXform.toIntValue(attributes.maxLength, 100),
- border: BaseXform.toBoolValue(attributes.border, false),
- gradient: BaseXform.toBoolValue(attributes.gradient, true),
- negativeBarColorSameAsPositive: BaseXform.toBoolValue(attributes.negativeBarColorSameAsPositive, true),
- negativeBarBorderColorSameAsPositive: BaseXform.toBoolValue(attributes.negativeBarBorderColorSameAsPositive, true),
- axisPosition: BaseXform.toStringValue(attributes.axisPosition, 'auto'),
- direction: BaseXform.toStringValue(attributes.direction, 'leftToRight')
- };
- }
- }, {
- key: "onParserClose",
- value: function onParserClose(name, parser) {
- var _name$split = name.split(':'),
- _name$split2 = _slicedToArray(_name$split, 2),
- prop = _name$split2[1];
- switch (prop) {
- case 'cfvo':
- this.model.cfvo.push(parser.model);
- break;
- default:
- this.model[prop] = parser.model;
- break;
- }
- }
- }, {
- key: "tag",
- get: function get() {
- return 'x14:dataBar';
- }
- }], [{
- key: "isExt",
- value: function isExt(rule) {
- // not all databars need ext
- // TODO: refine this
- return !rule.gradient;
- }
- }]);
- return DatabarExtXform;
- }(CompositeXform);
- module.exports = DatabarExtXform;
- },{"../../base-xform":31,"../../composite-xform":47,"../../style/color-xform":127,"./cfvo-ext-xform":75}],79:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../../base-xform');
- var FExtXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(FExtXform, _BaseXform);
- var _super = _createSuper(FExtXform);
- function FExtXform() {
- _classCallCheck(this, FExtXform);
- return _super.apply(this, arguments);
- }
- _createClass(FExtXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.leafNode(this.tag, null, model);
- }
- }, {
- key: "parseOpen",
- value: function parseOpen() {
- this.model = '';
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- this.model += text;
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- return name !== this.tag;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'xm:f';
- }
- }]);
- return FExtXform;
- }(BaseXform);
- module.exports = FExtXform;
- },{"../../base-xform":31}],80:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
- function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../../base-xform');
- var CompositeXform = require('../../composite-xform');
- var CfvoExtXform = require('./cfvo-ext-xform');
- var CfIconExtXform = require('./cf-icon-ext-xform');
- var IconSetExtXform = /*#__PURE__*/function (_CompositeXform) {
- _inherits(IconSetExtXform, _CompositeXform);
- var _super = _createSuper(IconSetExtXform);
- function IconSetExtXform() {
- var _this;
- _classCallCheck(this, IconSetExtXform);
- _this = _super.call(this);
- _this.map = {
- 'x14:cfvo': _this.cfvoXform = new CfvoExtXform(),
- 'x14:cfIcon': _this.cfIconXform = new CfIconExtXform()
- };
- return _this;
- }
- _createClass(IconSetExtXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- var _this2 = this;
- xmlStream.openNode(this.tag, {
- iconSet: BaseXform.toStringAttribute(model.iconSet),
- reverse: BaseXform.toBoolAttribute(model.reverse, false),
- showValue: BaseXform.toBoolAttribute(model.showValue, true),
- custom: BaseXform.toBoolAttribute(model.icons, false)
- });
- model.cfvo.forEach(function (cfvo) {
- _this2.cfvoXform.render(xmlStream, cfvo);
- });
- if (model.icons) {
- model.icons.forEach(function (icon, i) {
- icon.iconId = i;
- _this2.cfIconXform.render(xmlStream, icon);
- });
- }
- xmlStream.closeNode();
- }
- }, {
- key: "createNewModel",
- value: function createNewModel(_ref) {
- var attributes = _ref.attributes;
- return {
- cfvo: [],
- iconSet: BaseXform.toStringValue(attributes.iconSet, '3TrafficLights'),
- reverse: BaseXform.toBoolValue(attributes.reverse, false),
- showValue: BaseXform.toBoolValue(attributes.showValue, true)
- };
- }
- }, {
- key: "onParserClose",
- value: function onParserClose(name, parser) {
- var _name$split = name.split(':'),
- _name$split2 = _slicedToArray(_name$split, 2),
- prop = _name$split2[1];
- switch (prop) {
- case 'cfvo':
- this.model.cfvo.push(parser.model);
- break;
- case 'cfIcon':
- if (!this.model.icons) {
- this.model.icons = [];
- }
- this.model.icons.push(parser.model);
- break;
- default:
- this.model[prop] = parser.model;
- break;
- }
- }
- }, {
- key: "tag",
- get: function get() {
- return 'x14:iconSet';
- }
- }]);
- return IconSetExtXform;
- }(CompositeXform);
- module.exports = IconSetExtXform;
- },{"../../base-xform":31,"../../composite-xform":47,"./cf-icon-ext-xform":73,"./cfvo-ext-xform":75}],81:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../../base-xform');
- var SqrefExtXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(SqrefExtXform, _BaseXform);
- var _super = _createSuper(SqrefExtXform);
- function SqrefExtXform() {
- _classCallCheck(this, SqrefExtXform);
- return _super.apply(this, arguments);
- }
- _createClass(SqrefExtXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.leafNode(this.tag, null, model);
- }
- }, {
- key: "parseOpen",
- value: function parseOpen() {
- this.model = '';
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- this.model += text;
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- return name !== this.tag;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'xm:sqref';
- }
- }]);
- return SqrefExtXform;
- }(BaseXform);
- module.exports = SqrefExtXform;
- },{"../../base-xform":31}],82:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../../base-xform');
- var CompositeXform = require('../../composite-xform');
- var Range = require('../../../../doc/range');
- var DatabarXform = require('./databar-xform');
- var ExtLstRefXform = require('./ext-lst-ref-xform');
- var FormulaXform = require('./formula-xform');
- var ColorScaleXform = require('./color-scale-xform');
- var IconSetXform = require('./icon-set-xform');
- var extIcons = {
- '3Triangles': true,
- '3Stars': true,
- '5Boxes': true
- };
- var getTextFormula = function getTextFormula(model) {
- if (model.formulae && model.formulae[0]) {
- return model.formulae[0];
- }
- var range = new Range(model.ref);
- var tl = range.tl;
- switch (model.operator) {
- case 'containsText':
- return "NOT(ISERROR(SEARCH(\"".concat(model.text, "\",").concat(tl, ")))");
- case 'containsBlanks':
- return "LEN(TRIM(".concat(tl, "))=0");
- case 'notContainsBlanks':
- return "LEN(TRIM(".concat(tl, "))>0");
- case 'containsErrors':
- return "ISERROR(".concat(tl, ")");
- case 'notContainsErrors':
- return "NOT(ISERROR(".concat(tl, "))");
- default:
- return undefined;
- }
- };
- var getTimePeriodFormula = function getTimePeriodFormula(model) {
- if (model.formulae && model.formulae[0]) {
- return model.formulae[0];
- }
- var range = new Range(model.ref);
- var tl = range.tl;
- switch (model.timePeriod) {
- case 'thisWeek':
- return "AND(TODAY()-ROUNDDOWN(".concat(tl, ",0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(").concat(tl, ",0)-TODAY()<=7-WEEKDAY(TODAY()))");
- case 'lastWeek':
- return "AND(TODAY()-ROUNDDOWN(".concat(tl, ",0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(").concat(tl, ",0)<(WEEKDAY(TODAY())+7))");
- case 'nextWeek':
- return "AND(ROUNDDOWN(".concat(tl, ",0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(").concat(tl, ",0)-TODAY()<(15-WEEKDAY(TODAY())))");
- case 'yesterday':
- return "FLOOR(".concat(tl, ",1)=TODAY()-1");
- case 'today':
- return "FLOOR(".concat(tl, ",1)=TODAY()");
- case 'tomorrow':
- return "FLOOR(".concat(tl, ",1)=TODAY()+1");
- case 'last7Days':
- return "AND(TODAY()-FLOOR(".concat(tl, ",1)<=6,FLOOR(").concat(tl, ",1)<=TODAY())");
- case 'lastMonth':
- return "AND(MONTH(".concat(tl, ")=MONTH(EDATE(TODAY(),0-1)),YEAR(").concat(tl, ")=YEAR(EDATE(TODAY(),0-1)))");
- case 'thisMonth':
- return "AND(MONTH(".concat(tl, ")=MONTH(TODAY()),YEAR(").concat(tl, ")=YEAR(TODAY()))");
- case 'nextMonth':
- return "AND(MONTH(".concat(tl, ")=MONTH(EDATE(TODAY(),0+1)),YEAR(").concat(tl, ")=YEAR(EDATE(TODAY(),0+1)))");
- default:
- return undefined;
- }
- };
- var opType = function opType(attributes) {
- var type = attributes.type,
- operator = attributes.operator;
- switch (type) {
- case 'containsText':
- case 'containsBlanks':
- case 'notContainsBlanks':
- case 'containsErrors':
- case 'notContainsErrors':
- return {
- type: 'containsText',
- operator: type
- };
- default:
- return {
- type: type,
- operator: operator
- };
- }
- };
- var CfRuleXform = /*#__PURE__*/function (_CompositeXform) {
- _inherits(CfRuleXform, _CompositeXform);
- var _super = _createSuper(CfRuleXform);
- function CfRuleXform() {
- var _this;
- _classCallCheck(this, CfRuleXform);
- _this = _super.call(this);
- _this.map = {
- dataBar: _this.databarXform = new DatabarXform(),
- extLst: _this.extLstRefXform = new ExtLstRefXform(),
- formula: _this.formulaXform = new FormulaXform(),
- colorScale: _this.colorScaleXform = new ColorScaleXform(),
- iconSet: _this.iconSetXform = new IconSetXform()
- };
- return _this;
- }
- _createClass(CfRuleXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- switch (model.type) {
- case 'expression':
- this.renderExpression(xmlStream, model);
- break;
- case 'cellIs':
- this.renderCellIs(xmlStream, model);
- break;
- case 'top10':
- this.renderTop10(xmlStream, model);
- break;
- case 'aboveAverage':
- this.renderAboveAverage(xmlStream, model);
- break;
- case 'dataBar':
- this.renderDataBar(xmlStream, model);
- break;
- case 'colorScale':
- this.renderColorScale(xmlStream, model);
- break;
- case 'iconSet':
- this.renderIconSet(xmlStream, model);
- break;
- case 'containsText':
- this.renderText(xmlStream, model);
- break;
- case 'timePeriod':
- this.renderTimePeriod(xmlStream, model);
- break;
- }
- }
- }, {
- key: "renderExpression",
- value: function renderExpression(xmlStream, model) {
- xmlStream.openNode(this.tag, {
- type: 'expression',
- dxfId: model.dxfId,
- priority: model.priority
- });
- this.formulaXform.render(xmlStream, model.formulae[0]);
- xmlStream.closeNode();
- }
- }, {
- key: "renderCellIs",
- value: function renderCellIs(xmlStream, model) {
- var _this2 = this;
- xmlStream.openNode(this.tag, {
- type: 'cellIs',
- dxfId: model.dxfId,
- priority: model.priority,
- operator: model.operator
- });
- model.formulae.forEach(function (formula) {
- _this2.formulaXform.render(xmlStream, formula);
- });
- xmlStream.closeNode();
- }
- }, {
- key: "renderTop10",
- value: function renderTop10(xmlStream, model) {
- xmlStream.leafNode(this.tag, {
- type: 'top10',
- dxfId: model.dxfId,
- priority: model.priority,
- percent: BaseXform.toBoolAttribute(model.percent, false),
- bottom: BaseXform.toBoolAttribute(model.bottom, false),
- rank: BaseXform.toIntValue(model.rank, 10, true)
- });
- }
- }, {
- key: "renderAboveAverage",
- value: function renderAboveAverage(xmlStream, model) {
- xmlStream.leafNode(this.tag, {
- type: 'aboveAverage',
- dxfId: model.dxfId,
- priority: model.priority,
- aboveAverage: BaseXform.toBoolAttribute(model.aboveAverage, true)
- });
- }
- }, {
- key: "renderDataBar",
- value: function renderDataBar(xmlStream, model) {
- xmlStream.openNode(this.tag, {
- type: 'dataBar',
- priority: model.priority
- });
- this.databarXform.render(xmlStream, model);
- this.extLstRefXform.render(xmlStream, model);
- xmlStream.closeNode();
- }
- }, {
- key: "renderColorScale",
- value: function renderColorScale(xmlStream, model) {
- xmlStream.openNode(this.tag, {
- type: 'colorScale',
- priority: model.priority
- });
- this.colorScaleXform.render(xmlStream, model);
- xmlStream.closeNode();
- }
- }, {
- key: "renderIconSet",
- value: function renderIconSet(xmlStream, model) {
- // iconset is all primitive or all extLst
- if (!CfRuleXform.isPrimitive(model)) {
- return;
- }
- xmlStream.openNode(this.tag, {
- type: 'iconSet',
- priority: model.priority
- });
- this.iconSetXform.render(xmlStream, model);
- xmlStream.closeNode();
- }
- }, {
- key: "renderText",
- value: function renderText(xmlStream, model) {
- xmlStream.openNode(this.tag, {
- type: model.operator,
- dxfId: model.dxfId,
- priority: model.priority,
- operator: BaseXform.toStringAttribute(model.operator, 'containsText')
- });
- var formula = getTextFormula(model);
- if (formula) {
- this.formulaXform.render(xmlStream, formula);
- }
- xmlStream.closeNode();
- }
- }, {
- key: "renderTimePeriod",
- value: function renderTimePeriod(xmlStream, model) {
- xmlStream.openNode(this.tag, {
- type: 'timePeriod',
- dxfId: model.dxfId,
- priority: model.priority,
- timePeriod: model.timePeriod
- });
- var formula = getTimePeriodFormula(model);
- if (formula) {
- this.formulaXform.render(xmlStream, formula);
- }
- xmlStream.closeNode();
- }
- }, {
- key: "createNewModel",
- value: function createNewModel(_ref) {
- var attributes = _ref.attributes;
- return _objectSpread(_objectSpread({}, opType(attributes)), {}, {
- dxfId: BaseXform.toIntValue(attributes.dxfId),
- priority: BaseXform.toIntValue(attributes.priority),
- timePeriod: attributes.timePeriod,
- percent: BaseXform.toBoolValue(attributes.percent),
- bottom: BaseXform.toBoolValue(attributes.bottom),
- rank: BaseXform.toIntValue(attributes.rank),
- aboveAverage: BaseXform.toBoolValue(attributes.aboveAverage)
- });
- }
- }, {
- key: "onParserClose",
- value: function onParserClose(name, parser) {
- switch (name) {
- case 'dataBar':
- case 'extLst':
- case 'colorScale':
- case 'iconSet':
- // merge parser model with ours
- Object.assign(this.model, parser.model);
- break;
- case 'formula':
- // except - formula is a string and appends to formulae
- this.model.formulae = this.model.formulae || [];
- this.model.formulae.push(parser.model);
- break;
- }
- }
- }, {
- key: "tag",
- get: function get() {
- return 'cfRule';
- }
- }], [{
- key: "isPrimitive",
- value: function isPrimitive(rule) {
- // is this rule primitive?
- if (rule.type === 'iconSet') {
- if (rule.custom || extIcons[rule.iconSet]) {
- return false;
- }
- }
- return true;
- }
- }]);
- return CfRuleXform;
- }(CompositeXform);
- module.exports = CfRuleXform;
- },{"../../../../doc/range":10,"../../base-xform":31,"../../composite-xform":47,"./color-scale-xform":84,"./databar-xform":87,"./ext-lst-ref-xform":88,"./formula-xform":89,"./icon-set-xform":90}],83:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../../base-xform');
- var CfvoXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(CfvoXform, _BaseXform);
- var _super = _createSuper(CfvoXform);
- function CfvoXform() {
- _classCallCheck(this, CfvoXform);
- return _super.apply(this, arguments);
- }
- _createClass(CfvoXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.leafNode(this.tag, {
- type: model.type,
- val: model.value
- });
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- this.model = {
- type: node.attributes.type,
- value: BaseXform.toFloatValue(node.attributes.val)
- };
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- return name !== this.tag;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'cfvo';
- }
- }]);
- return CfvoXform;
- }(BaseXform);
- module.exports = CfvoXform;
- },{"../../base-xform":31}],84:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var CompositeXform = require('../../composite-xform');
- var ColorXform = require('../../style/color-xform');
- var CfvoXform = require('./cfvo-xform');
- var ColorScaleXform = /*#__PURE__*/function (_CompositeXform) {
- _inherits(ColorScaleXform, _CompositeXform);
- var _super = _createSuper(ColorScaleXform);
- function ColorScaleXform() {
- var _this;
- _classCallCheck(this, ColorScaleXform);
- _this = _super.call(this);
- _this.map = {
- cfvo: _this.cfvoXform = new CfvoXform(),
- color: _this.colorXform = new ColorXform()
- };
- return _this;
- }
- _createClass(ColorScaleXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- var _this2 = this;
- xmlStream.openNode(this.tag);
- model.cfvo.forEach(function (cfvo) {
- _this2.cfvoXform.render(xmlStream, cfvo);
- });
- model.color.forEach(function (color) {
- _this2.colorXform.render(xmlStream, color);
- });
- xmlStream.closeNode();
- }
- }, {
- key: "createNewModel",
- value: function createNewModel(node) {
- return {
- cfvo: [],
- color: []
- };
- }
- }, {
- key: "onParserClose",
- value: function onParserClose(name, parser) {
- this.model[name].push(parser.model);
- }
- }, {
- key: "tag",
- get: function get() {
- return 'colorScale';
- }
- }]);
- return ColorScaleXform;
- }(CompositeXform);
- module.exports = ColorScaleXform;
- },{"../../composite-xform":47,"../../style/color-xform":127,"./cfvo-xform":83}],85:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var CompositeXform = require('../../composite-xform');
- var CfRuleXform = require('./cf-rule-xform');
- var ConditionalFormattingXform = /*#__PURE__*/function (_CompositeXform) {
- _inherits(ConditionalFormattingXform, _CompositeXform);
- var _super = _createSuper(ConditionalFormattingXform);
- function ConditionalFormattingXform() {
- var _this;
- _classCallCheck(this, ConditionalFormattingXform);
- _this = _super.call(this);
- _this.map = {
- cfRule: new CfRuleXform()
- };
- return _this;
- }
- _createClass(ConditionalFormattingXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- var _this2 = this;
- // if there are no primitive rules, exit now
- if (!model.rules.some(CfRuleXform.isPrimitive)) {
- return;
- }
- xmlStream.openNode(this.tag, {
- sqref: model.ref
- });
- model.rules.forEach(function (rule) {
- if (CfRuleXform.isPrimitive(rule)) {
- rule.ref = model.ref;
- _this2.map.cfRule.render(xmlStream, rule);
- }
- });
- xmlStream.closeNode();
- }
- }, {
- key: "createNewModel",
- value: function createNewModel(_ref) {
- var attributes = _ref.attributes;
- return {
- ref: attributes.sqref,
- rules: []
- };
- }
- }, {
- key: "onParserClose",
- value: function onParserClose(name, parser) {
- this.model.rules.push(parser.model);
- }
- }, {
- key: "tag",
- get: function get() {
- return 'conditionalFormatting';
- }
- }]);
- return ConditionalFormattingXform;
- }(CompositeXform);
- module.exports = ConditionalFormattingXform;
- },{"../../composite-xform":47,"./cf-rule-xform":82}],86:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
- function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
- function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
- function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../../base-xform');
- var ConditionalFormattingXform = require('./conditional-formatting-xform');
- var ConditionalFormattingsXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(ConditionalFormattingsXform, _BaseXform);
- var _super = _createSuper(ConditionalFormattingsXform);
- function ConditionalFormattingsXform() {
- var _this;
- _classCallCheck(this, ConditionalFormattingsXform);
- _this = _super.call(this);
- _this.cfXform = new ConditionalFormattingXform();
- return _this;
- }
- _createClass(ConditionalFormattingsXform, [{
- key: "reset",
- value: function reset() {
- this.model = [];
- }
- }, {
- key: "prepare",
- value: function prepare(model, options) {
- // ensure each rule has a priority value
- var nextPriority = model.reduce(function (p, cf) {
- return Math.max.apply(Math, [p].concat(_toConsumableArray(cf.rules.map(function (rule) {
- return rule.priority || 0;
- }))));
- }, 1);
- model.forEach(function (cf) {
- cf.rules.forEach(function (rule) {
- if (!rule.priority) {
- rule.priority = nextPriority++;
- }
- if (rule.style) {
- rule.dxfId = options.styles.addDxfStyle(rule.style);
- }
- });
- });
- }
- }, {
- key: "render",
- value: function render(xmlStream, model) {
- var _this2 = this;
- model.forEach(function (cf) {
- _this2.cfXform.render(xmlStream, cf);
- });
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case 'conditionalFormatting':
- this.parser = this.cfXform;
- this.parser.parseOpen(node);
- return true;
- default:
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.model.push(this.parser.model);
- this.parser = undefined;
- return false;
- }
- return true;
- }
- return false;
- }
- }, {
- key: "reconcile",
- value: function reconcile(model, options) {
- model.forEach(function (cf) {
- cf.rules.forEach(function (rule) {
- if (rule.dxfId !== undefined) {
- rule.style = options.styles.getDxfStyle(rule.dxfId);
- delete rule.dxfId;
- }
- });
- });
- }
- }, {
- key: "tag",
- get: function get() {
- return 'conditionalFormatting';
- }
- }]);
- return ConditionalFormattingsXform;
- }(BaseXform);
- module.exports = ConditionalFormattingsXform;
- },{"../../base-xform":31,"./conditional-formatting-xform":85}],87:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var CompositeXform = require('../../composite-xform');
- var ColorXform = require('../../style/color-xform');
- var CfvoXform = require('./cfvo-xform');
- var DatabarXform = /*#__PURE__*/function (_CompositeXform) {
- _inherits(DatabarXform, _CompositeXform);
- var _super = _createSuper(DatabarXform);
- function DatabarXform() {
- var _this;
- _classCallCheck(this, DatabarXform);
- _this = _super.call(this);
- _this.map = {
- cfvo: _this.cfvoXform = new CfvoXform(),
- color: _this.colorXform = new ColorXform()
- };
- return _this;
- }
- _createClass(DatabarXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- var _this2 = this;
- xmlStream.openNode(this.tag);
- model.cfvo.forEach(function (cfvo) {
- _this2.cfvoXform.render(xmlStream, cfvo);
- });
- this.colorXform.render(xmlStream, model.color);
- xmlStream.closeNode();
- }
- }, {
- key: "createNewModel",
- value: function createNewModel() {
- return {
- cfvo: []
- };
- }
- }, {
- key: "onParserClose",
- value: function onParserClose(name, parser) {
- switch (name) {
- case 'cfvo':
- this.model.cfvo.push(parser.model);
- break;
- case 'color':
- this.model.color = parser.model;
- break;
- }
- }
- }, {
- key: "tag",
- get: function get() {
- return 'dataBar';
- }
- }]);
- return DatabarXform;
- }(CompositeXform);
- module.exports = DatabarXform;
- },{"../../composite-xform":47,"../../style/color-xform":127,"./cfvo-xform":83}],88:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- /* eslint-disable max-classes-per-file */
- var BaseXform = require('../../base-xform');
- var CompositeXform = require('../../composite-xform');
- var X14IdXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(X14IdXform, _BaseXform);
- var _super = _createSuper(X14IdXform);
- function X14IdXform() {
- _classCallCheck(this, X14IdXform);
- return _super.apply(this, arguments);
- }
- _createClass(X14IdXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.leafNode(this.tag, null, model);
- }
- }, {
- key: "parseOpen",
- value: function parseOpen() {
- this.model = '';
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- this.model += text;
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- return name !== this.tag;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'x14:id';
- }
- }]);
- return X14IdXform;
- }(BaseXform);
- var ExtXform = /*#__PURE__*/function (_CompositeXform) {
- _inherits(ExtXform, _CompositeXform);
- var _super2 = _createSuper(ExtXform);
- function ExtXform() {
- var _this;
- _classCallCheck(this, ExtXform);
- _this = _super2.call(this);
- _this.map = {
- 'x14:id': _this.idXform = new X14IdXform()
- };
- return _this;
- }
- _createClass(ExtXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openNode(this.tag, {
- uri: '{B025F937-C7B1-47D3-B67F-A62EFF666E3E}',
- 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main'
- });
- this.idXform.render(xmlStream, model.x14Id);
- xmlStream.closeNode();
- }
- }, {
- key: "createNewModel",
- value: function createNewModel() {
- return {};
- }
- }, {
- key: "onParserClose",
- value: function onParserClose(name, parser) {
- this.model.x14Id = parser.model;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'ext';
- }
- }]);
- return ExtXform;
- }(CompositeXform);
- var ExtLstRefXform = /*#__PURE__*/function (_CompositeXform2) {
- _inherits(ExtLstRefXform, _CompositeXform2);
- var _super3 = _createSuper(ExtLstRefXform);
- function ExtLstRefXform() {
- var _this2;
- _classCallCheck(this, ExtLstRefXform);
- _this2 = _super3.call(this);
- _this2.map = {
- ext: new ExtXform()
- };
- return _this2;
- }
- _createClass(ExtLstRefXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openNode(this.tag);
- this.map.ext.render(xmlStream, model);
- xmlStream.closeNode();
- }
- }, {
- key: "createNewModel",
- value: function createNewModel() {
- return {};
- }
- }, {
- key: "onParserClose",
- value: function onParserClose(name, parser) {
- Object.assign(this.model, parser.model);
- }
- }, {
- key: "tag",
- get: function get() {
- return 'extLst';
- }
- }]);
- return ExtLstRefXform;
- }(CompositeXform);
- module.exports = ExtLstRefXform;
- },{"../../base-xform":31,"../../composite-xform":47}],89:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../../base-xform');
- var FormulaXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(FormulaXform, _BaseXform);
- var _super = _createSuper(FormulaXform);
- function FormulaXform() {
- _classCallCheck(this, FormulaXform);
- return _super.apply(this, arguments);
- }
- _createClass(FormulaXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.leafNode(this.tag, null, model);
- }
- }, {
- key: "parseOpen",
- value: function parseOpen() {
- this.model = '';
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- this.model += text;
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- return name !== this.tag;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'formula';
- }
- }]);
- return FormulaXform;
- }(BaseXform);
- module.exports = FormulaXform;
- },{"../../base-xform":31}],90:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../../base-xform');
- var CompositeXform = require('../../composite-xform');
- var CfvoXform = require('./cfvo-xform');
- var IconSetXform = /*#__PURE__*/function (_CompositeXform) {
- _inherits(IconSetXform, _CompositeXform);
- var _super = _createSuper(IconSetXform);
- function IconSetXform() {
- var _this;
- _classCallCheck(this, IconSetXform);
- _this = _super.call(this);
- _this.map = {
- cfvo: _this.cfvoXform = new CfvoXform()
- };
- return _this;
- }
- _createClass(IconSetXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- var _this2 = this;
- xmlStream.openNode(this.tag, {
- iconSet: BaseXform.toStringAttribute(model.iconSet, '3TrafficLights'),
- reverse: BaseXform.toBoolAttribute(model.reverse, false),
- showValue: BaseXform.toBoolAttribute(model.showValue, true)
- });
- model.cfvo.forEach(function (cfvo) {
- _this2.cfvoXform.render(xmlStream, cfvo);
- });
- xmlStream.closeNode();
- }
- }, {
- key: "createNewModel",
- value: function createNewModel(_ref) {
- var attributes = _ref.attributes;
- return {
- iconSet: BaseXform.toStringValue(attributes.iconSet, '3TrafficLights'),
- reverse: BaseXform.toBoolValue(attributes.reverse),
- showValue: BaseXform.toBoolValue(attributes.showValue),
- cfvo: []
- };
- }
- }, {
- key: "onParserClose",
- value: function onParserClose(name, parser) {
- this.model[name].push(parser.model);
- }
- }, {
- key: "tag",
- get: function get() {
- return 'iconSet';
- }
- }]);
- return IconSetXform;
- }(CompositeXform);
- module.exports = IconSetXform;
- },{"../../base-xform":31,"../../composite-xform":47,"./cfvo-xform":83}],91:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var ColXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(ColXform, _BaseXform);
- var _super = _createSuper(ColXform);
- function ColXform() {
- _classCallCheck(this, ColXform);
- return _super.apply(this, arguments);
- }
- _createClass(ColXform, [{
- key: "prepare",
- value: function prepare(model, options) {
- var styleId = options.styles.addStyleModel(model.style || {});
- if (styleId) {
- model.styleId = styleId;
- }
- }
- }, {
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openNode('col');
- xmlStream.addAttribute('min', model.min);
- xmlStream.addAttribute('max', model.max);
- if (model.width) {
- xmlStream.addAttribute('width', model.width);
- }
- if (model.styleId) {
- xmlStream.addAttribute('style', model.styleId);
- }
- if (model.hidden) {
- xmlStream.addAttribute('hidden', '1');
- }
- if (model.bestFit) {
- xmlStream.addAttribute('bestFit', '1');
- }
- if (model.outlineLevel) {
- xmlStream.addAttribute('outlineLevel', model.outlineLevel);
- }
- if (model.collapsed) {
- xmlStream.addAttribute('collapsed', '1');
- }
- xmlStream.addAttribute('customWidth', '1');
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (node.name === 'col') {
- var model = this.model = {
- min: parseInt(node.attributes.min || '0', 10),
- max: parseInt(node.attributes.max || '0', 10),
- width: node.attributes.width === undefined ? undefined : parseFloat(node.attributes.width || '0')
- };
- if (node.attributes.style) {
- model.styleId = parseInt(node.attributes.style, 10);
- }
- if (node.attributes.hidden === true || node.attributes.hidden === 'true' || node.attributes.hidden === 1 || node.attributes.hidden === '1') {
- model.hidden = true;
- }
- if (node.attributes.bestFit) {
- model.bestFit = true;
- }
- if (node.attributes.outlineLevel) {
- model.outlineLevel = parseInt(node.attributes.outlineLevel, 10);
- }
- if (node.attributes.collapsed) {
- model.collapsed = true;
- }
- return true;
- }
- return false;
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "reconcile",
- value: function reconcile(model, options) {
- // reconcile column styles
- if (model.styleId) {
- model.style = options.styles.getStyleModel(model.styleId);
- }
- }
- }, {
- key: "tag",
- get: function get() {
- return 'col';
- }
- }]);
- return ColXform;
- }(BaseXform);
- module.exports = ColXform;
- },{"../base-xform":31}],92:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
- var _ = require('../../../utils/under-dash');
- var utils = require('../../../utils/utils');
- var colCache = require('../../../utils/col-cache');
- var BaseXform = require('../base-xform');
- var Range = require('../../../doc/range');
- function assign(definedName, attributes, name, defaultValue) {
- var value = attributes[name];
- if (value !== undefined) {
- definedName[name] = value;
- } else if (defaultValue !== undefined) {
- definedName[name] = defaultValue;
- }
- }
- function parseBool(value) {
- switch (value) {
- case '1':
- case 'true':
- return true;
- default:
- return false;
- }
- }
- function assignBool(definedName, attributes, name, defaultValue) {
- var value = attributes[name];
- if (value !== undefined) {
- definedName[name] = parseBool(value);
- } else if (defaultValue !== undefined) {
- definedName[name] = defaultValue;
- }
- }
- function optimiseDataValidations(model) {
- // Squeeze alike data validations together into rectangular ranges
- // to reduce file size and speed up Excel load time
- var dvList = _.map(model, function (dataValidation, address) {
- return {
- address: address,
- dataValidation: dataValidation,
- marked: false
- };
- }).sort(function (a, b) {
- return _.strcmp(a.address, b.address);
- });
- var dvMap = _.keyBy(dvList, 'address');
- var matchCol = function matchCol(addr, height, col) {
- for (var i = 0; i < height; i++) {
- var otherAddress = colCache.encodeAddress(addr.row + i, col);
- if (!model[otherAddress] || !_.isEqual(model[addr.address], model[otherAddress])) {
- return false;
- }
- }
- return true;
- };
- return dvList.map(function (dv) {
- if (!dv.marked) {
- var addr = colCache.decodeEx(dv.address);
- if (addr.dimensions) {
- dvMap[addr.dimensions].marked = true;
- return _objectSpread(_objectSpread({}, dv.dataValidation), {}, {
- sqref: dv.address
- });
- } // iterate downwards - finding matching cells
- var height = 1;
- var otherAddress = colCache.encodeAddress(addr.row + height, addr.col);
- while (model[otherAddress] && _.isEqual(dv.dataValidation, model[otherAddress])) {
- height++;
- otherAddress = colCache.encodeAddress(addr.row + height, addr.col);
- } // iterate rightwards...
- var width = 1;
- while (matchCol(addr, height, addr.col + width)) {
- width++;
- } // mark all included addresses
- for (var i = 0; i < height; i++) {
- for (var j = 0; j < width; j++) {
- otherAddress = colCache.encodeAddress(addr.row + i, addr.col + j);
- dvMap[otherAddress].marked = true;
- }
- }
- if (height > 1 || width > 1) {
- var bottom = addr.row + (height - 1);
- var right = addr.col + (width - 1);
- return _objectSpread(_objectSpread({}, dv.dataValidation), {}, {
- sqref: "".concat(dv.address, ":").concat(colCache.encodeAddress(bottom, right))
- });
- }
- return _objectSpread(_objectSpread({}, dv.dataValidation), {}, {
- sqref: dv.address
- });
- }
- return null;
- }).filter(Boolean);
- }
- var DataValidationsXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(DataValidationsXform, _BaseXform);
- var _super = _createSuper(DataValidationsXform);
- function DataValidationsXform() {
- _classCallCheck(this, DataValidationsXform);
- return _super.apply(this, arguments);
- }
- _createClass(DataValidationsXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- var optimizedModel = optimiseDataValidations(model);
- if (optimizedModel.length) {
- xmlStream.openNode('dataValidations', {
- count: optimizedModel.length
- });
- optimizedModel.forEach(function (value) {
- xmlStream.openNode('dataValidation');
- if (value.type !== 'any') {
- xmlStream.addAttribute('type', value.type);
- if (value.operator && value.type !== 'list' && value.operator !== 'between') {
- xmlStream.addAttribute('operator', value.operator);
- }
- if (value.allowBlank) {
- xmlStream.addAttribute('allowBlank', '1');
- }
- }
- if (value.showInputMessage) {
- xmlStream.addAttribute('showInputMessage', '1');
- }
- if (value.promptTitle) {
- xmlStream.addAttribute('promptTitle', value.promptTitle);
- }
- if (value.prompt) {
- xmlStream.addAttribute('prompt', value.prompt);
- }
- if (value.showErrorMessage) {
- xmlStream.addAttribute('showErrorMessage', '1');
- }
- if (value.errorStyle) {
- xmlStream.addAttribute('errorStyle', value.errorStyle);
- }
- if (value.errorTitle) {
- xmlStream.addAttribute('errorTitle', value.errorTitle);
- }
- if (value.error) {
- xmlStream.addAttribute('error', value.error);
- }
- xmlStream.addAttribute('sqref', value.sqref);
- (value.formulae || []).forEach(function (formula, index) {
- xmlStream.openNode("formula".concat(index + 1));
- if (value.type === 'date') {
- xmlStream.writeText(utils.dateToExcel(new Date(formula)));
- } else {
- xmlStream.writeText(formula);
- }
- xmlStream.closeNode();
- });
- xmlStream.closeNode();
- });
- xmlStream.closeNode();
- }
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- switch (node.name) {
- case 'dataValidations':
- this.model = {};
- return true;
- case 'dataValidation':
- {
- this._address = node.attributes.sqref;
- var dataValidation = {
- type: node.attributes.type || 'any',
- formulae: []
- };
- if (node.attributes.type) {
- assignBool(dataValidation, node.attributes, 'allowBlank');
- }
- assignBool(dataValidation, node.attributes, 'showInputMessage');
- assignBool(dataValidation, node.attributes, 'showErrorMessage');
- switch (dataValidation.type) {
- case 'any':
- case 'list':
- case 'custom':
- break;
- default:
- assign(dataValidation, node.attributes, 'operator', 'between');
- break;
- }
- assign(dataValidation, node.attributes, 'promptTitle');
- assign(dataValidation, node.attributes, 'prompt');
- assign(dataValidation, node.attributes, 'errorStyle');
- assign(dataValidation, node.attributes, 'errorTitle');
- assign(dataValidation, node.attributes, 'error');
- this._dataValidation = dataValidation;
- return true;
- }
- case 'formula1':
- case 'formula2':
- this._formula = [];
- return true;
- default:
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this._formula) {
- this._formula.push(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- var _this = this;
- switch (name) {
- case 'dataValidations':
- return false;
- case 'dataValidation':
- {
- if (!this._dataValidation.formulae || !this._dataValidation.formulae.length) {
- delete this._dataValidation.formulae;
- delete this._dataValidation.operator;
- } // The four known cases: 1. E4:L9 N4:U9 2.E4 L9 3. N4:U9 4. E4
- var list = this._address.split(/\s+/g) || [];
- list.forEach(function (addr) {
- if (addr.includes(':')) {
- var range = new Range(addr);
- range.forEachAddress(function (address) {
- _this.model[address] = _this._dataValidation;
- });
- } else {
- _this.model[addr] = _this._dataValidation;
- }
- });
- return true;
- }
- case 'formula1':
- case 'formula2':
- {
- var formula = this._formula.join('');
- switch (this._dataValidation.type) {
- case 'whole':
- case 'textLength':
- formula = parseInt(formula, 10);
- break;
- case 'decimal':
- formula = parseFloat(formula);
- break;
- case 'date':
- formula = utils.excelToDate(parseFloat(formula));
- break;
- default:
- break;
- }
- this._dataValidation.formulae.push(formula);
- this._formula = undefined;
- return true;
- }
- default:
- return true;
- }
- }
- }, {
- key: "tag",
- get: function get() {
- return 'dataValidations';
- }
- }]);
- return DataValidationsXform;
- }(BaseXform);
- module.exports = DataValidationsXform;
- },{"../../../doc/range":10,"../../../utils/col-cache":19,"../../../utils/under-dash":25,"../../../utils/utils":26,"../base-xform":31}],93:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var DimensionXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(DimensionXform, _BaseXform);
- var _super = _createSuper(DimensionXform);
- function DimensionXform() {
- _classCallCheck(this, DimensionXform);
- return _super.apply(this, arguments);
- }
- _createClass(DimensionXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- if (model) {
- xmlStream.leafNode('dimension', {
- ref: model
- });
- }
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (node.name === 'dimension') {
- this.model = node.attributes.ref;
- return true;
- }
- return false;
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'dimension';
- }
- }]);
- return DimensionXform;
- }(BaseXform);
- module.exports = DimensionXform;
- },{"../base-xform":31}],94:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var DrawingXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(DrawingXform, _BaseXform);
- var _super = _createSuper(DrawingXform);
- function DrawingXform() {
- _classCallCheck(this, DrawingXform);
- return _super.apply(this, arguments);
- }
- _createClass(DrawingXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- if (model) {
- xmlStream.leafNode(this.tag, {
- 'r:id': model.rId
- });
- }
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- switch (node.name) {
- case this.tag:
- this.model = {
- rId: node.attributes['r:id']
- };
- return true;
- default:
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'drawing';
- }
- }]);
- return DrawingXform;
- }(BaseXform);
- module.exports = DrawingXform;
- },{"../base-xform":31}],95:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- /* eslint-disable max-classes-per-file */
- var CompositeXform = require('../composite-xform');
- var ConditionalFormattingsExt = require('./cf-ext/conditional-formattings-ext-xform');
- var ExtXform = /*#__PURE__*/function (_CompositeXform) {
- _inherits(ExtXform, _CompositeXform);
- var _super = _createSuper(ExtXform);
- function ExtXform() {
- var _this;
- _classCallCheck(this, ExtXform);
- _this = _super.call(this);
- _this.map = {
- 'x14:conditionalFormattings': _this.conditionalFormattings = new ConditionalFormattingsExt()
- };
- return _this;
- }
- _createClass(ExtXform, [{
- key: "hasContent",
- value: function hasContent(model) {
- return this.conditionalFormattings.hasContent(model.conditionalFormattings);
- }
- }, {
- key: "prepare",
- value: function prepare(model, options) {
- this.conditionalFormattings.prepare(model.conditionalFormattings, options);
- }
- }, {
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openNode('ext', {
- uri: '{78C0D931-6437-407d-A8EE-F0AAD7539E65}',
- 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main'
- });
- this.conditionalFormattings.render(xmlStream, model.conditionalFormattings);
- xmlStream.closeNode();
- }
- }, {
- key: "createNewModel",
- value: function createNewModel() {
- return {};
- }
- }, {
- key: "onParserClose",
- value: function onParserClose(name, parser) {
- this.model[name] = parser.model;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'ext';
- }
- }]);
- return ExtXform;
- }(CompositeXform);
- var ExtLstXform = /*#__PURE__*/function (_CompositeXform2) {
- _inherits(ExtLstXform, _CompositeXform2);
- var _super2 = _createSuper(ExtLstXform);
- function ExtLstXform() {
- var _this2;
- _classCallCheck(this, ExtLstXform);
- _this2 = _super2.call(this);
- _this2.map = {
- ext: _this2.ext = new ExtXform()
- };
- return _this2;
- }
- _createClass(ExtLstXform, [{
- key: "prepare",
- value: function prepare(model, options) {
- this.ext.prepare(model, options);
- }
- }, {
- key: "hasContent",
- value: function hasContent(model) {
- return this.ext.hasContent(model);
- }
- }, {
- key: "render",
- value: function render(xmlStream, model) {
- if (!this.hasContent(model)) {
- return;
- }
- xmlStream.openNode('extLst');
- this.ext.render(xmlStream, model);
- xmlStream.closeNode();
- }
- }, {
- key: "createNewModel",
- value: function createNewModel() {
- return {};
- }
- }, {
- key: "onParserClose",
- value: function onParserClose(name, parser) {
- Object.assign(this.model, parser.model);
- }
- }, {
- key: "tag",
- get: function get() {
- return 'extLst';
- }
- }]);
- return ExtLstXform;
- }(CompositeXform);
- module.exports = ExtLstXform;
- },{"../composite-xform":47,"./cf-ext/conditional-formattings-ext-xform":77}],96:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var HeaderFooterXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(HeaderFooterXform, _BaseXform);
- var _super = _createSuper(HeaderFooterXform);
- function HeaderFooterXform() {
- _classCallCheck(this, HeaderFooterXform);
- return _super.apply(this, arguments);
- }
- _createClass(HeaderFooterXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- if (model) {
- xmlStream.addRollback();
- var createTag = false;
- xmlStream.openNode('headerFooter');
- if (model.differentFirst) {
- xmlStream.addAttribute('differentFirst', '1');
- createTag = true;
- }
- if (model.differentOddEven) {
- xmlStream.addAttribute('differentOddEven', '1');
- createTag = true;
- }
- if (model.oddHeader && typeof model.oddHeader === 'string') {
- xmlStream.leafNode('oddHeader', null, model.oddHeader);
- createTag = true;
- }
- if (model.oddFooter && typeof model.oddFooter === 'string') {
- xmlStream.leafNode('oddFooter', null, model.oddFooter);
- createTag = true;
- }
- if (model.evenHeader && typeof model.evenHeader === 'string') {
- xmlStream.leafNode('evenHeader', null, model.evenHeader);
- createTag = true;
- }
- if (model.evenFooter && typeof model.evenFooter === 'string') {
- xmlStream.leafNode('evenFooter', null, model.evenFooter);
- createTag = true;
- }
- if (model.firstHeader && typeof model.firstHeader === 'string') {
- xmlStream.leafNode('firstHeader', null, model.firstHeader);
- createTag = true;
- }
- if (model.firstFooter && typeof model.firstFooter === 'string') {
- xmlStream.leafNode('firstFooter', null, model.firstFooter);
- createTag = true;
- }
- if (createTag) {
- xmlStream.closeNode();
- xmlStream.commit();
- } else {
- xmlStream.rollback();
- }
- }
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- switch (node.name) {
- case 'headerFooter':
- this.model = {};
- if (node.attributes.differentFirst) {
- this.model.differentFirst = parseInt(node.attributes.differentFirst, 0) === 1;
- }
- if (node.attributes.differentOddEven) {
- this.model.differentOddEven = parseInt(node.attributes.differentOddEven, 0) === 1;
- }
- return true;
- case 'oddHeader':
- this.currentNode = 'oddHeader';
- return true;
- case 'oddFooter':
- this.currentNode = 'oddFooter';
- return true;
- case 'evenHeader':
- this.currentNode = 'evenHeader';
- return true;
- case 'evenFooter':
- this.currentNode = 'evenFooter';
- return true;
- case 'firstHeader':
- this.currentNode = 'firstHeader';
- return true;
- case 'firstFooter':
- this.currentNode = 'firstFooter';
- return true;
- default:
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- switch (this.currentNode) {
- case 'oddHeader':
- this.model.oddHeader = text;
- break;
- case 'oddFooter':
- this.model.oddFooter = text;
- break;
- case 'evenHeader':
- this.model.evenHeader = text;
- break;
- case 'evenFooter':
- this.model.evenFooter = text;
- break;
- case 'firstHeader':
- this.model.firstHeader = text;
- break;
- case 'firstFooter':
- this.model.firstFooter = text;
- break;
- default:
- break;
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose() {
- switch (this.currentNode) {
- case 'oddHeader':
- case 'oddFooter':
- case 'evenHeader':
- case 'evenFooter':
- case 'firstHeader':
- case 'firstFooter':
- this.currentNode = undefined;
- return true;
- default:
- return false;
- }
- }
- }, {
- key: "tag",
- get: function get() {
- return 'headerFooter';
- }
- }]);
- return HeaderFooterXform;
- }(BaseXform);
- module.exports = HeaderFooterXform;
- },{"../base-xform":31}],97:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var HyperlinkXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(HyperlinkXform, _BaseXform);
- var _super = _createSuper(HyperlinkXform);
- function HyperlinkXform() {
- _classCallCheck(this, HyperlinkXform);
- return _super.apply(this, arguments);
- }
- _createClass(HyperlinkXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.leafNode('hyperlink', {
- ref: model.address,
- 'r:id': model.rId,
- tooltip: model.tooltip
- });
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (node.name === 'hyperlink') {
- this.model = {
- address: node.attributes.ref,
- rId: node.attributes['r:id'],
- tooltip: node.attributes.tooltip
- };
- return true;
- }
- return false;
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'hyperlink';
- }
- }]);
- return HyperlinkXform;
- }(BaseXform);
- module.exports = HyperlinkXform;
- },{"../base-xform":31}],98:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var MergeCellXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(MergeCellXform, _BaseXform);
- var _super = _createSuper(MergeCellXform);
- function MergeCellXform() {
- _classCallCheck(this, MergeCellXform);
- return _super.apply(this, arguments);
- }
- _createClass(MergeCellXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.leafNode('mergeCell', {
- ref: model
- });
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (node.name === 'mergeCell') {
- this.model = node.attributes.ref;
- return true;
- }
- return false;
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'mergeCell';
- }
- }]);
- return MergeCellXform;
- }(BaseXform);
- module.exports = MergeCellXform;
- },{"../base-xform":31}],99:[function(require,module,exports){
- "use strict";
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- var _ = require('../../../utils/under-dash');
- var Range = require('../../../doc/range');
- var colCache = require('../../../utils/col-cache');
- var Enums = require('../../../doc/enums');
- var Merges = /*#__PURE__*/function () {
- function Merges() {
- _classCallCheck(this, Merges);
- // optional mergeCells is array of ranges (like the xml)
- this.merges = {};
- }
- _createClass(Merges, [{
- key: "add",
- value: function add(merge) {
- // merge is {address, master}
- if (this.merges[merge.master]) {
- this.merges[merge.master].expandToAddress(merge.address);
- } else {
- var range = "".concat(merge.master, ":").concat(merge.address);
- this.merges[merge.master] = new Range(range);
- }
- }
- }, {
- key: "reconcile",
- value: function reconcile(mergeCells, rows) {
- // reconcile merge list with merge cells
- _.each(mergeCells, function (merge) {
- var dimensions = colCache.decode(merge);
- for (var i = dimensions.top; i <= dimensions.bottom; i++) {
- var row = rows[i - 1];
- for (var j = dimensions.left; j <= dimensions.right; j++) {
- var cell = row.cells[j - 1];
- if (!cell) {
- // nulls are not included in document - so if master cell has no value - add a null one here
- row.cells[j] = {
- type: Enums.ValueType.Null,
- address: colCache.encodeAddress(i, j)
- };
- } else if (cell.type === Enums.ValueType.Merge) {
- cell.master = dimensions.tl;
- }
- }
- }
- });
- }
- }, {
- key: "getMasterAddress",
- value: function getMasterAddress(address) {
- // if address has been merged, return its master's address. Assumes reconcile has been called
- var range = this.hash[address];
- return range && range.tl;
- }
- }, {
- key: "mergeCells",
- get: function get() {
- return _.map(this.merges, function (merge) {
- return merge.range;
- });
- }
- }]);
- return Merges;
- }();
- module.exports = Merges;
- },{"../../../doc/enums":7,"../../../doc/range":10,"../../../utils/col-cache":19,"../../../utils/under-dash":25}],100:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var isDefined = function isDefined(attr) {
- return typeof attr !== 'undefined';
- };
- var OutlinePropertiesXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(OutlinePropertiesXform, _BaseXform);
- var _super = _createSuper(OutlinePropertiesXform);
- function OutlinePropertiesXform() {
- _classCallCheck(this, OutlinePropertiesXform);
- return _super.apply(this, arguments);
- }
- _createClass(OutlinePropertiesXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- if (model && (isDefined(model.summaryBelow) || isDefined(model.summaryRight))) {
- xmlStream.leafNode(this.tag, {
- summaryBelow: isDefined(model.summaryBelow) ? Number(model.summaryBelow) : undefined,
- summaryRight: isDefined(model.summaryRight) ? Number(model.summaryRight) : undefined
- });
- return true;
- }
- return false;
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (node.name === this.tag) {
- this.model = {
- summaryBelow: isDefined(node.attributes.summaryBelow) ? Boolean(Number(node.attributes.summaryBelow)) : undefined,
- summaryRight: isDefined(node.attributes.summaryRight) ? Boolean(Number(node.attributes.summaryRight)) : undefined
- };
- return true;
- }
- return false;
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'outlinePr';
- }
- }]);
- return OutlinePropertiesXform;
- }(BaseXform);
- module.exports = OutlinePropertiesXform;
- },{"../base-xform":31}],101:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var PageBreaksXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(PageBreaksXform, _BaseXform);
- var _super = _createSuper(PageBreaksXform);
- function PageBreaksXform() {
- _classCallCheck(this, PageBreaksXform);
- return _super.apply(this, arguments);
- }
- _createClass(PageBreaksXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.leafNode('brk', model);
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (node.name === 'brk') {
- this.model = node.attributes.ref;
- return true;
- }
- return false;
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'brk';
- }
- }]);
- return PageBreaksXform;
- }(BaseXform);
- module.exports = PageBreaksXform;
- },{"../base-xform":31}],102:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var _ = require('../../../utils/under-dash');
- var BaseXform = require('../base-xform');
- var PageMarginsXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(PageMarginsXform, _BaseXform);
- var _super = _createSuper(PageMarginsXform);
- function PageMarginsXform() {
- _classCallCheck(this, PageMarginsXform);
- return _super.apply(this, arguments);
- }
- _createClass(PageMarginsXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- if (model) {
- var attributes = {
- left: model.left,
- right: model.right,
- top: model.top,
- bottom: model.bottom,
- header: model.header,
- footer: model.footer
- };
- if (_.some(attributes, function (value) {
- return value !== undefined;
- })) {
- xmlStream.leafNode(this.tag, attributes);
- }
- }
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- switch (node.name) {
- case this.tag:
- this.model = {
- left: parseFloat(node.attributes.left || 0.7),
- right: parseFloat(node.attributes.right || 0.7),
- top: parseFloat(node.attributes.top || 0.75),
- bottom: parseFloat(node.attributes.bottom || 0.75),
- header: parseFloat(node.attributes.header || 0.3),
- footer: parseFloat(node.attributes.footer || 0.3)
- };
- return true;
- default:
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'pageMargins';
- }
- }]);
- return PageMarginsXform;
- }(BaseXform);
- module.exports = PageMarginsXform;
- },{"../../../utils/under-dash":25,"../base-xform":31}],103:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var PageSetupPropertiesXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(PageSetupPropertiesXform, _BaseXform);
- var _super = _createSuper(PageSetupPropertiesXform);
- function PageSetupPropertiesXform() {
- _classCallCheck(this, PageSetupPropertiesXform);
- return _super.apply(this, arguments);
- }
- _createClass(PageSetupPropertiesXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- if (model && model.fitToPage) {
- xmlStream.leafNode(this.tag, {
- fitToPage: model.fitToPage ? '1' : undefined
- });
- return true;
- }
- return false;
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (node.name === this.tag) {
- this.model = {
- fitToPage: node.attributes.fitToPage === '1'
- };
- return true;
- }
- return false;
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'pageSetUpPr';
- }
- }]);
- return PageSetupPropertiesXform;
- }(BaseXform);
- module.exports = PageSetupPropertiesXform;
- },{"../base-xform":31}],104:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var _ = require('../../../utils/under-dash');
- var BaseXform = require('../base-xform');
- function booleanToXml(model) {
- return model ? '1' : undefined;
- }
- function pageOrderToXml(model) {
- switch (model) {
- case 'overThenDown':
- return model;
- default:
- return undefined;
- }
- }
- function cellCommentsToXml(model) {
- switch (model) {
- case 'atEnd':
- case 'asDisplyed':
- return model;
- default:
- return undefined;
- }
- }
- function errorsToXml(model) {
- switch (model) {
- case 'dash':
- case 'blank':
- case 'NA':
- return model;
- default:
- return undefined;
- }
- }
- function pageSizeToModel(value) {
- return value !== undefined ? parseInt(value, 10) : undefined;
- }
- var PageSetupXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(PageSetupXform, _BaseXform);
- var _super = _createSuper(PageSetupXform);
- function PageSetupXform() {
- _classCallCheck(this, PageSetupXform);
- return _super.apply(this, arguments);
- }
- _createClass(PageSetupXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- if (model) {
- var attributes = {
- paperSize: model.paperSize,
- orientation: model.orientation,
- horizontalDpi: model.horizontalDpi,
- verticalDpi: model.verticalDpi,
- pageOrder: pageOrderToXml(model.pageOrder),
- blackAndWhite: booleanToXml(model.blackAndWhite),
- draft: booleanToXml(model.draft),
- cellComments: cellCommentsToXml(model.cellComments),
- errors: errorsToXml(model.errors),
- scale: model.scale,
- fitToWidth: model.fitToWidth,
- fitToHeight: model.fitToHeight,
- firstPageNumber: model.firstPageNumber,
- useFirstPageNumber: booleanToXml(model.firstPageNumber),
- usePrinterDefaults: booleanToXml(model.usePrinterDefaults),
- copies: model.copies
- };
- if (_.some(attributes, function (value) {
- return value !== undefined;
- })) {
- xmlStream.leafNode(this.tag, attributes);
- }
- }
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- switch (node.name) {
- case this.tag:
- this.model = {
- paperSize: pageSizeToModel(node.attributes.paperSize),
- orientation: node.attributes.orientation || 'portrait',
- horizontalDpi: parseInt(node.attributes.horizontalDpi || '4294967295', 10),
- verticalDpi: parseInt(node.attributes.verticalDpi || '4294967295', 10),
- pageOrder: node.attributes.pageOrder || 'downThenOver',
- blackAndWhite: node.attributes.blackAndWhite === '1',
- draft: node.attributes.draft === '1',
- cellComments: node.attributes.cellComments || 'None',
- errors: node.attributes.errors || 'displayed',
- scale: parseInt(node.attributes.scale || '100', 10),
- fitToWidth: parseInt(node.attributes.fitToWidth || '1', 10),
- fitToHeight: parseInt(node.attributes.fitToHeight || '1', 10),
- firstPageNumber: parseInt(node.attributes.firstPageNumber || '1', 10),
- useFirstPageNumber: node.attributes.useFirstPageNumber === '1',
- usePrinterDefaults: node.attributes.usePrinterDefaults === '1',
- copies: parseInt(node.attributes.copies || '1', 10)
- };
- return true;
- default:
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'pageSetup';
- }
- }]);
- return PageSetupXform;
- }(BaseXform);
- module.exports = PageSetupXform;
- },{"../../../utils/under-dash":25,"../base-xform":31}],105:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var PictureXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(PictureXform, _BaseXform);
- var _super = _createSuper(PictureXform);
- function PictureXform() {
- _classCallCheck(this, PictureXform);
- return _super.apply(this, arguments);
- }
- _createClass(PictureXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- if (model) {
- xmlStream.leafNode(this.tag, {
- 'r:id': model.rId
- });
- }
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- switch (node.name) {
- case this.tag:
- this.model = {
- rId: node.attributes['r:id']
- };
- return true;
- default:
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'picture';
- }
- }]);
- return PictureXform;
- }(BaseXform);
- module.exports = PictureXform;
- },{"../base-xform":31}],106:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var _ = require('../../../utils/under-dash');
- var BaseXform = require('../base-xform');
- function booleanToXml(model) {
- return model ? '1' : undefined;
- }
- var PrintOptionsXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(PrintOptionsXform, _BaseXform);
- var _super = _createSuper(PrintOptionsXform);
- function PrintOptionsXform() {
- _classCallCheck(this, PrintOptionsXform);
- return _super.apply(this, arguments);
- }
- _createClass(PrintOptionsXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- if (model) {
- var attributes = {
- headings: booleanToXml(model.showRowColHeaders),
- gridLines: booleanToXml(model.showGridLines),
- horizontalCentered: booleanToXml(model.horizontalCentered),
- verticalCentered: booleanToXml(model.verticalCentered)
- };
- if (_.some(attributes, function (value) {
- return value !== undefined;
- })) {
- xmlStream.leafNode(this.tag, attributes);
- }
- }
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- switch (node.name) {
- case this.tag:
- this.model = {
- showRowColHeaders: node.attributes.headings === '1',
- showGridLines: node.attributes.gridLines === '1',
- horizontalCentered: node.attributes.horizontalCentered === '1',
- verticalCentered: node.attributes.verticalCentered === '1'
- };
- return true;
- default:
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'printOptions';
- }
- }]);
- return PrintOptionsXform;
- }(BaseXform);
- module.exports = PrintOptionsXform;
- },{"../../../utils/under-dash":25,"../base-xform":31}],107:[function(require,module,exports){
- 'use strict';
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var PageBreaksXform = require('./page-breaks-xform');
- var ListXform = require('../list-xform');
- var RowBreaksXform = /*#__PURE__*/function (_ListXform) {
- _inherits(RowBreaksXform, _ListXform);
- var _super = _createSuper(RowBreaksXform);
- function RowBreaksXform() {
- _classCallCheck(this, RowBreaksXform);
- var options = {
- tag: 'rowBreaks',
- count: true,
- childXform: new PageBreaksXform()
- };
- return _super.call(this, options);
- } // get tag() { return 'rowBreaks'; }
- _createClass(RowBreaksXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- if (model && model.length) {
- xmlStream.openNode(this.tag, this.$);
- if (this.count) {
- xmlStream.addAttribute(this.$count, model.length);
- xmlStream.addAttribute('manualBreakCount', model.length);
- }
- var childXform = this.childXform;
- model.forEach(function (childModel) {
- childXform.render(xmlStream, childModel);
- });
- xmlStream.closeNode();
- } else if (this.empty) {
- xmlStream.leafNode(this.tag);
- }
- }
- }]);
- return RowBreaksXform;
- }(ListXform);
- module.exports = RowBreaksXform;
- },{"../list-xform":70,"./page-breaks-xform":101}],108:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var CellXform = require('./cell-xform');
- var RowXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(RowXform, _BaseXform);
- var _super = _createSuper(RowXform);
- function RowXform(options) {
- var _this;
- _classCallCheck(this, RowXform);
- _this = _super.call(this);
- _this.maxItems = options && options.maxItems;
- _this.map = {
- c: new CellXform()
- };
- return _this;
- }
- _createClass(RowXform, [{
- key: "prepare",
- value: function prepare(model, options) {
- var styleId = options.styles.addStyleModel(model.style);
- if (styleId) {
- model.styleId = styleId;
- }
- var cellXform = this.map.c;
- model.cells.forEach(function (cellModel) {
- cellXform.prepare(cellModel, options);
- });
- }
- }, {
- key: "render",
- value: function render(xmlStream, model, options) {
- xmlStream.openNode('row');
- xmlStream.addAttribute('r', model.number);
- if (model.height) {
- xmlStream.addAttribute('ht', model.height);
- xmlStream.addAttribute('customHeight', '1');
- }
- if (model.hidden) {
- xmlStream.addAttribute('hidden', '1');
- }
- if (model.min > 0 && model.max > 0 && model.min <= model.max) {
- xmlStream.addAttribute('spans', "".concat(model.min, ":").concat(model.max));
- }
- if (model.styleId) {
- xmlStream.addAttribute('s', model.styleId);
- xmlStream.addAttribute('customFormat', '1');
- }
- xmlStream.addAttribute('x14ac:dyDescent', '0.25');
- if (model.outlineLevel) {
- xmlStream.addAttribute('outlineLevel', model.outlineLevel);
- }
- if (model.collapsed) {
- xmlStream.addAttribute('collapsed', '1');
- }
- var cellXform = this.map.c;
- model.cells.forEach(function (cellModel) {
- cellXform.render(xmlStream, cellModel, options);
- });
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- if (node.name === 'row') {
- this.numRowsSeen += 1;
- var spans = node.attributes.spans ? node.attributes.spans.split(':').map(function (span) {
- return parseInt(span, 10);
- }) : [undefined, undefined];
- var model = this.model = {
- number: parseInt(node.attributes.r, 10),
- min: spans[0],
- max: spans[1],
- cells: []
- };
- if (node.attributes.s) {
- model.styleId = parseInt(node.attributes.s, 10);
- }
- if (node.attributes.hidden === true || node.attributes.hidden === 'true' || node.attributes.hidden === 1 || node.attributes.hidden === '1') {
- model.hidden = true;
- }
- if (node.attributes.bestFit) {
- model.bestFit = true;
- }
- if (node.attributes.ht) {
- model.height = parseFloat(node.attributes.ht);
- }
- if (node.attributes.outlineLevel) {
- model.outlineLevel = parseInt(node.attributes.outlineLevel, 10);
- }
- if (node.attributes.collapsed) {
- model.collapsed = true;
- }
- return true;
- }
- this.parser = this.map[node.name];
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- return false;
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.model.cells.push(this.parser.model);
- if (this.maxItems && this.model.cells.length > this.maxItems) {
- throw new Error("Max column count (".concat(this.maxItems, ") exceeded"));
- }
- this.parser = undefined;
- }
- return true;
- }
- return false;
- }
- }, {
- key: "reconcile",
- value: function reconcile(model, options) {
- model.style = model.styleId ? options.styles.getStyleModel(model.styleId) : {};
- if (model.styleId !== undefined) {
- model.styleId = undefined;
- }
- var cellXform = this.map.c;
- model.cells.forEach(function (cellModel) {
- cellXform.reconcile(cellModel, options);
- });
- }
- }, {
- key: "tag",
- get: function get() {
- return 'row';
- }
- }]);
- return RowXform;
- }(BaseXform);
- module.exports = RowXform;
- },{"../base-xform":31,"./cell-xform":72}],109:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var _ = require('../../../utils/under-dash');
- var BaseXform = require('../base-xform');
- var SheetFormatPropertiesXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(SheetFormatPropertiesXform, _BaseXform);
- var _super = _createSuper(SheetFormatPropertiesXform);
- function SheetFormatPropertiesXform() {
- _classCallCheck(this, SheetFormatPropertiesXform);
- return _super.apply(this, arguments);
- }
- _createClass(SheetFormatPropertiesXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- if (model) {
- var attributes = {
- defaultRowHeight: model.defaultRowHeight,
- outlineLevelRow: model.outlineLevelRow,
- outlineLevelCol: model.outlineLevelCol,
- 'x14ac:dyDescent': model.dyDescent
- };
- if (model.defaultColWidth) {
- attributes.defaultColWidth = model.defaultColWidth;
- } // default value for 'defaultRowHeight' is 15, this should not be 'custom'
- if (!model.defaultRowHeight || model.defaultRowHeight !== 15) {
- attributes.customHeight = '1';
- }
- if (_.some(attributes, function (value) {
- return value !== undefined;
- })) {
- xmlStream.leafNode('sheetFormatPr', attributes);
- }
- }
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (node.name === 'sheetFormatPr') {
- this.model = {
- defaultRowHeight: parseFloat(node.attributes.defaultRowHeight || '0'),
- dyDescent: parseFloat(node.attributes['x14ac:dyDescent'] || '0'),
- outlineLevelRow: parseInt(node.attributes.outlineLevelRow || '0', 10),
- outlineLevelCol: parseInt(node.attributes.outlineLevelCol || '0', 10)
- };
- if (node.attributes.defaultColWidth) {
- this.model.defaultColWidth = parseFloat(node.attributes.defaultColWidth);
- }
- return true;
- }
- return false;
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'sheetFormatPr';
- }
- }]);
- return SheetFormatPropertiesXform;
- }(BaseXform);
- module.exports = SheetFormatPropertiesXform;
- },{"../../../utils/under-dash":25,"../base-xform":31}],110:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var ColorXform = require('../style/color-xform');
- var PageSetupPropertiesXform = require('./page-setup-properties-xform');
- var OutlinePropertiesXform = require('./outline-properties-xform');
- var SheetPropertiesXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(SheetPropertiesXform, _BaseXform);
- var _super = _createSuper(SheetPropertiesXform);
- function SheetPropertiesXform() {
- var _this;
- _classCallCheck(this, SheetPropertiesXform);
- _this = _super.call(this);
- _this.map = {
- tabColor: new ColorXform('tabColor'),
- pageSetUpPr: new PageSetupPropertiesXform(),
- outlinePr: new OutlinePropertiesXform()
- };
- return _this;
- }
- _createClass(SheetPropertiesXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- if (model) {
- xmlStream.addRollback();
- xmlStream.openNode('sheetPr');
- var inner = false;
- inner = this.map.tabColor.render(xmlStream, model.tabColor) || inner;
- inner = this.map.pageSetUpPr.render(xmlStream, model.pageSetup) || inner;
- inner = this.map.outlinePr.render(xmlStream, model.outlineProperties) || inner;
- if (inner) {
- xmlStream.closeNode();
- xmlStream.commit();
- } else {
- xmlStream.rollback();
- }
- }
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- if (node.name === this.tag) {
- this.reset();
- return true;
- }
- if (this.map[node.name]) {
- this.parser = this.map[node.name];
- this.parser.parseOpen(node);
- return true;
- }
- return false;
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- return true;
- }
- return false;
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.parser = undefined;
- }
- return true;
- }
- if (this.map.tabColor.model || this.map.pageSetUpPr.model || this.map.outlinePr.model) {
- this.model = {};
- if (this.map.tabColor.model) {
- this.model.tabColor = this.map.tabColor.model;
- }
- if (this.map.pageSetUpPr.model) {
- this.model.pageSetup = this.map.pageSetUpPr.model;
- }
- if (this.map.outlinePr.model) {
- this.model.outlineProperties = this.map.outlinePr.model;
- }
- } else {
- this.model = null;
- }
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'sheetPr';
- }
- }]);
- return SheetPropertiesXform;
- }(BaseXform);
- module.exports = SheetPropertiesXform;
- },{"../base-xform":31,"../style/color-xform":127,"./outline-properties-xform":100,"./page-setup-properties-xform":103}],111:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var _ = require('../../../utils/under-dash');
- var BaseXform = require('../base-xform');
- function booleanToXml(model, value) {
- return model ? value : undefined;
- }
- function xmlToBoolean(value, equals) {
- return value === equals ? true : undefined;
- }
- var SheetProtectionXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(SheetProtectionXform, _BaseXform);
- var _super = _createSuper(SheetProtectionXform);
- function SheetProtectionXform() {
- _classCallCheck(this, SheetProtectionXform);
- return _super.apply(this, arguments);
- }
- _createClass(SheetProtectionXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- if (model) {
- var attributes = {
- sheet: booleanToXml(model.sheet, '1'),
- selectLockedCells: model.selectLockedCells === false ? '1' : undefined,
- selectUnlockedCells: model.selectUnlockedCells === false ? '1' : undefined,
- formatCells: booleanToXml(model.formatCells, '0'),
- formatColumns: booleanToXml(model.formatColumns, '0'),
- formatRows: booleanToXml(model.formatRows, '0'),
- insertColumns: booleanToXml(model.insertColumns, '0'),
- insertRows: booleanToXml(model.insertRows, '0'),
- insertHyperlinks: booleanToXml(model.insertHyperlinks, '0'),
- deleteColumns: booleanToXml(model.deleteColumns, '0'),
- deleteRows: booleanToXml(model.deleteRows, '0'),
- sort: booleanToXml(model.sort, '0'),
- autoFilter: booleanToXml(model.autoFilter, '0'),
- pivotTables: booleanToXml(model.pivotTables, '0')
- };
- if (model.sheet) {
- attributes.algorithmName = model.algorithmName;
- attributes.hashValue = model.hashValue;
- attributes.saltValue = model.saltValue;
- attributes.spinCount = model.spinCount;
- attributes.objects = booleanToXml(model.objects === false, '1');
- attributes.scenarios = booleanToXml(model.scenarios === false, '1');
- }
- if (_.some(attributes, function (value) {
- return value !== undefined;
- })) {
- xmlStream.leafNode(this.tag, attributes);
- }
- }
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- switch (node.name) {
- case this.tag:
- this.model = {
- sheet: xmlToBoolean(node.attributes.sheet, '1'),
- objects: node.attributes.objects === '1' ? false : undefined,
- scenarios: node.attributes.scenarios === '1' ? false : undefined,
- selectLockedCells: node.attributes.selectLockedCells === '1' ? false : undefined,
- selectUnlockedCells: node.attributes.selectUnlockedCells === '1' ? false : undefined,
- formatCells: xmlToBoolean(node.attributes.formatCells, '0'),
- formatColumns: xmlToBoolean(node.attributes.formatColumns, '0'),
- formatRows: xmlToBoolean(node.attributes.formatRows, '0'),
- insertColumns: xmlToBoolean(node.attributes.insertColumns, '0'),
- insertRows: xmlToBoolean(node.attributes.insertRows, '0'),
- insertHyperlinks: xmlToBoolean(node.attributes.insertHyperlinks, '0'),
- deleteColumns: xmlToBoolean(node.attributes.deleteColumns, '0'),
- deleteRows: xmlToBoolean(node.attributes.deleteRows, '0'),
- sort: xmlToBoolean(node.attributes.sort, '0'),
- autoFilter: xmlToBoolean(node.attributes.autoFilter, '0'),
- pivotTables: xmlToBoolean(node.attributes.pivotTables, '0')
- };
- if (node.attributes.algorithmName) {
- this.model.algorithmName = node.attributes.algorithmName;
- this.model.hashValue = node.attributes.hashValue;
- this.model.saltValue = node.attributes.saltValue;
- this.model.spinCount = parseInt(node.attributes.spinCount, 10);
- }
- return true;
- default:
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'sheetProtection';
- }
- }]);
- return SheetProtectionXform;
- }(BaseXform);
- module.exports = SheetProtectionXform;
- },{"../../../utils/under-dash":25,"../base-xform":31}],112:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var colCache = require('../../../utils/col-cache');
- var BaseXform = require('../base-xform');
- var VIEW_STATES = {
- frozen: 'frozen',
- frozenSplit: 'frozen',
- split: 'split'
- };
- var SheetViewXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(SheetViewXform, _BaseXform);
- var _super = _createSuper(SheetViewXform);
- function SheetViewXform() {
- _classCallCheck(this, SheetViewXform);
- return _super.apply(this, arguments);
- }
- _createClass(SheetViewXform, [{
- key: "prepare",
- value: function prepare(model) {
- switch (model.state) {
- case 'frozen':
- case 'split':
- break;
- default:
- model.state = 'normal';
- break;
- }
- }
- }, {
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openNode('sheetView', {
- workbookViewId: model.workbookViewId || 0
- });
- var add = function add(name, value, included) {
- if (included) {
- xmlStream.addAttribute(name, value);
- }
- };
- add('rightToLeft', '1', model.rightToLeft === true);
- add('tabSelected', '1', model.tabSelected);
- add('showRuler', '0', model.showRuler === false);
- add('showRowColHeaders', '0', model.showRowColHeaders === false);
- add('showGridLines', '0', model.showGridLines === false);
- add('zoomScale', model.zoomScale, model.zoomScale);
- add('zoomScaleNormal', model.zoomScaleNormal, model.zoomScaleNormal);
- add('view', model.style, model.style);
- var topLeftCell;
- var xSplit;
- var ySplit;
- var activePane;
- switch (model.state) {
- case 'frozen':
- xSplit = model.xSplit || 0;
- ySplit = model.ySplit || 0;
- topLeftCell = model.topLeftCell || colCache.getAddress(ySplit + 1, xSplit + 1).address;
- activePane = model.xSplit && model.ySplit && 'bottomRight' || model.xSplit && 'topRight' || 'bottomLeft';
- xmlStream.leafNode('pane', {
- xSplit: model.xSplit || undefined,
- ySplit: model.ySplit || undefined,
- topLeftCell: topLeftCell,
- activePane: activePane,
- state: 'frozen'
- });
- xmlStream.leafNode('selection', {
- pane: activePane,
- activeCell: model.activeCell,
- sqref: model.activeCell
- });
- break;
- case 'split':
- if (model.activePane === 'topLeft') {
- model.activePane = undefined;
- }
- xmlStream.leafNode('pane', {
- xSplit: model.xSplit || undefined,
- ySplit: model.ySplit || undefined,
- topLeftCell: model.topLeftCell,
- activePane: model.activePane
- });
- xmlStream.leafNode('selection', {
- pane: model.activePane,
- activeCell: model.activeCell,
- sqref: model.activeCell
- });
- break;
- case 'normal':
- if (model.activeCell) {
- xmlStream.leafNode('selection', {
- activeCell: model.activeCell,
- sqref: model.activeCell
- });
- }
- break;
- default:
- break;
- }
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- switch (node.name) {
- case 'sheetView':
- this.sheetView = {
- workbookViewId: parseInt(node.attributes.workbookViewId, 10),
- rightToLeft: node.attributes.rightToLeft === '1',
- tabSelected: node.attributes.tabSelected === '1',
- showRuler: !(node.attributes.showRuler === '0'),
- showRowColHeaders: !(node.attributes.showRowColHeaders === '0'),
- showGridLines: !(node.attributes.showGridLines === '0'),
- zoomScale: parseInt(node.attributes.zoomScale || '100', 10),
- zoomScaleNormal: parseInt(node.attributes.zoomScaleNormal || '100', 10),
- style: node.attributes.view
- };
- this.pane = undefined;
- this.selections = {};
- return true;
- case 'pane':
- this.pane = {
- xSplit: parseInt(node.attributes.xSplit || '0', 10),
- ySplit: parseInt(node.attributes.ySplit || '0', 10),
- topLeftCell: node.attributes.topLeftCell,
- activePane: node.attributes.activePane || 'topLeft',
- state: node.attributes.state
- };
- return true;
- case 'selection':
- {
- var name = node.attributes.pane || 'topLeft';
- this.selections[name] = {
- pane: name,
- activeCell: node.attributes.activeCell
- };
- return true;
- }
- default:
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- var model;
- var selection;
- switch (name) {
- case 'sheetView':
- if (this.sheetView && this.pane) {
- model = this.model = {
- workbookViewId: this.sheetView.workbookViewId,
- rightToLeft: this.sheetView.rightToLeft,
- state: VIEW_STATES[this.pane.state] || 'split',
- // split is default
- xSplit: this.pane.xSplit,
- ySplit: this.pane.ySplit,
- topLeftCell: this.pane.topLeftCell,
- showRuler: this.sheetView.showRuler,
- showRowColHeaders: this.sheetView.showRowColHeaders,
- showGridLines: this.sheetView.showGridLines,
- zoomScale: this.sheetView.zoomScale,
- zoomScaleNormal: this.sheetView.zoomScaleNormal
- };
- if (this.model.state === 'split') {
- model.activePane = this.pane.activePane;
- }
- selection = this.selections[this.pane.activePane];
- if (selection && selection.activeCell) {
- model.activeCell = selection.activeCell;
- }
- if (this.sheetView.style) {
- model.style = this.sheetView.style;
- }
- } else {
- model = this.model = {
- workbookViewId: this.sheetView.workbookViewId,
- rightToLeft: this.sheetView.rightToLeft,
- state: 'normal',
- showRuler: this.sheetView.showRuler,
- showRowColHeaders: this.sheetView.showRowColHeaders,
- showGridLines: this.sheetView.showGridLines,
- zoomScale: this.sheetView.zoomScale,
- zoomScaleNormal: this.sheetView.zoomScaleNormal
- };
- selection = this.selections.topLeft;
- if (selection && selection.activeCell) {
- model.activeCell = selection.activeCell;
- }
- if (this.sheetView.style) {
- model.style = this.sheetView.style;
- }
- }
- return false;
- default:
- return true;
- }
- }
- }, {
- key: "reconcile",
- value: function reconcile() {}
- }, {
- key: "tag",
- get: function get() {
- return 'sheetView';
- }
- }]);
- return SheetViewXform;
- }(BaseXform);
- module.exports = SheetViewXform;
- },{"../../../utils/col-cache":19,"../base-xform":31}],113:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var TablePartXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(TablePartXform, _BaseXform);
- var _super = _createSuper(TablePartXform);
- function TablePartXform() {
- _classCallCheck(this, TablePartXform);
- return _super.apply(this, arguments);
- }
- _createClass(TablePartXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- if (model) {
- xmlStream.leafNode(this.tag, {
- 'r:id': model.rId
- });
- }
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- switch (node.name) {
- case this.tag:
- this.model = {
- rId: node.attributes['r:id']
- };
- return true;
- default:
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'tablePart';
- }
- }]);
- return TablePartXform;
- }(BaseXform);
- module.exports = TablePartXform;
- },{"../base-xform":31}],114:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var _ = require('../../../utils/under-dash');
- var colCache = require('../../../utils/col-cache');
- var XmlStream = require('../../../utils/xml-stream');
- var RelType = require('../../rel-type');
- var Merges = require('./merges');
- var BaseXform = require('../base-xform');
- var ListXform = require('../list-xform');
- var RowXform = require('./row-xform');
- var ColXform = require('./col-xform');
- var DimensionXform = require('./dimension-xform');
- var HyperlinkXform = require('./hyperlink-xform');
- var MergeCellXform = require('./merge-cell-xform');
- var DataValidationsXform = require('./data-validations-xform');
- var SheetPropertiesXform = require('./sheet-properties-xform');
- var SheetFormatPropertiesXform = require('./sheet-format-properties-xform');
- var SheetViewXform = require('./sheet-view-xform');
- var SheetProtectionXform = require('./sheet-protection-xform');
- var PageMarginsXform = require('./page-margins-xform');
- var PageSetupXform = require('./page-setup-xform');
- var PrintOptionsXform = require('./print-options-xform');
- var AutoFilterXform = require('./auto-filter-xform');
- var PictureXform = require('./picture-xform');
- var DrawingXform = require('./drawing-xform');
- var TablePartXform = require('./table-part-xform');
- var RowBreaksXform = require('./row-breaks-xform');
- var HeaderFooterXform = require('./header-footer-xform');
- var ConditionalFormattingsXform = require('./cf/conditional-formattings-xform');
- var ExtListXform = require('./ext-lst-xform');
- var mergeRule = function mergeRule(rule, extRule) {
- Object.keys(extRule).forEach(function (key) {
- var value = rule[key];
- var extValue = extRule[key];
- if (value === undefined && extValue !== undefined) {
- rule[key] = extValue;
- }
- });
- };
- var mergeConditionalFormattings = function mergeConditionalFormattings(model, extModel) {
- // conditional formattings are rendered in worksheet.conditionalFormatting and also in
- // worksheet.extLst.ext.x14:conditionalFormattings
- // some (e.g. dataBar) are even spread across both!
- if (!extModel || !extModel.length) {
- return model;
- }
- if (!model || !model.length) {
- return extModel;
- } // index model rules by x14Id
- var cfMap = {};
- var ruleMap = {};
- model.forEach(function (cf) {
- cfMap[cf.ref] = cf;
- cf.rules.forEach(function (rule) {
- var x14Id = rule.x14Id;
- if (x14Id) {
- ruleMap[x14Id] = rule;
- }
- });
- });
- extModel.forEach(function (extCf) {
- extCf.rules.forEach(function (extRule) {
- var rule = ruleMap[extRule.x14Id];
- if (rule) {
- // merge with matching rule
- mergeRule(rule, extRule);
- } else if (cfMap[extCf.ref]) {
- // reuse existing cf ref
- cfMap[extCf.ref].rules.push(extRule);
- } else {
- // create new cf
- model.push({
- ref: extCf.ref,
- rules: [extRule]
- });
- }
- });
- }); // need to cope with rules in extModel that don't exist in model
- return model;
- };
- var WorkSheetXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(WorkSheetXform, _BaseXform);
- var _super = _createSuper(WorkSheetXform);
- function WorkSheetXform(options) {
- var _this;
- _classCallCheck(this, WorkSheetXform);
- _this = _super.call(this);
- var _ref = options || {},
- maxRows = _ref.maxRows,
- maxCols = _ref.maxCols;
- _this.map = {
- sheetPr: new SheetPropertiesXform(),
- dimension: new DimensionXform(),
- sheetViews: new ListXform({
- tag: 'sheetViews',
- count: false,
- childXform: new SheetViewXform()
- }),
- sheetFormatPr: new SheetFormatPropertiesXform(),
- cols: new ListXform({
- tag: 'cols',
- count: false,
- childXform: new ColXform()
- }),
- sheetData: new ListXform({
- tag: 'sheetData',
- count: false,
- empty: true,
- childXform: new RowXform({
- maxItems: maxCols
- }),
- maxItems: maxRows
- }),
- autoFilter: new AutoFilterXform(),
- mergeCells: new ListXform({
- tag: 'mergeCells',
- count: true,
- childXform: new MergeCellXform()
- }),
- rowBreaks: new RowBreaksXform(),
- hyperlinks: new ListXform({
- tag: 'hyperlinks',
- count: false,
- childXform: new HyperlinkXform()
- }),
- pageMargins: new PageMarginsXform(),
- dataValidations: new DataValidationsXform(),
- pageSetup: new PageSetupXform(),
- headerFooter: new HeaderFooterXform(),
- printOptions: new PrintOptionsXform(),
- picture: new PictureXform(),
- drawing: new DrawingXform(),
- sheetProtection: new SheetProtectionXform(),
- tableParts: new ListXform({
- tag: 'tableParts',
- count: true,
- childXform: new TablePartXform()
- }),
- conditionalFormatting: new ConditionalFormattingsXform(),
- extLst: new ExtListXform()
- };
- return _this;
- }
- _createClass(WorkSheetXform, [{
- key: "prepare",
- value: function prepare(model, options) {
- var _this2 = this;
- options.merges = new Merges();
- model.hyperlinks = options.hyperlinks = [];
- model.comments = options.comments = [];
- options.formulae = {};
- options.siFormulae = 0;
- this.map.cols.prepare(model.cols, options);
- this.map.sheetData.prepare(model.rows, options);
- this.map.conditionalFormatting.prepare(model.conditionalFormattings, options);
- model.mergeCells = options.merges.mergeCells; // prepare relationships
- var rels = model.rels = [];
- function nextRid(r) {
- return "rId".concat(r.length + 1);
- }
- model.hyperlinks.forEach(function (hyperlink) {
- var rId = nextRid(rels);
- hyperlink.rId = rId;
- rels.push({
- Id: rId,
- Type: RelType.Hyperlink,
- Target: hyperlink.target,
- TargetMode: 'External'
- });
- }); // prepare comment relationships
- if (model.comments.length > 0) {
- var comment = {
- Id: nextRid(rels),
- Type: RelType.Comments,
- Target: "../comments".concat(model.id, ".xml")
- };
- rels.push(comment);
- var vmlDrawing = {
- Id: nextRid(rels),
- Type: RelType.VmlDrawing,
- Target: "../drawings/vmlDrawing".concat(model.id, ".vml")
- };
- rels.push(vmlDrawing);
- model.comments.forEach(function (item) {
- item.refAddress = colCache.decodeAddress(item.ref);
- });
- options.commentRefs.push({
- commentName: "comments".concat(model.id),
- vmlDrawing: "vmlDrawing".concat(model.id)
- });
- }
- var drawingRelsHash = [];
- var bookImage;
- model.media.forEach(function (medium) {
- if (medium.type === 'background') {
- var rId = nextRid(rels);
- bookImage = options.media[medium.imageId];
- rels.push({
- Id: rId,
- Type: RelType.Image,
- Target: "../media/".concat(bookImage.name, ".").concat(bookImage.extension)
- });
- model.background = {
- rId: rId
- };
- model.image = options.media[medium.imageId];
- } else if (medium.type === 'image') {
- var drawing = model.drawing;
- bookImage = options.media[medium.imageId];
- if (!drawing) {
- drawing = model.drawing = {
- rId: nextRid(rels),
- name: "drawing".concat(++options.drawingsCount),
- anchors: [],
- rels: []
- };
- options.drawings.push(drawing);
- rels.push({
- Id: drawing.rId,
- Type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing',
- Target: "../drawings/".concat(drawing.name, ".xml")
- });
- }
- var rIdImage = _this2.preImageId === medium.imageId ? drawingRelsHash[medium.imageId] : drawingRelsHash[drawing.rels.length];
- if (!rIdImage) {
- rIdImage = nextRid(drawing.rels);
- drawingRelsHash[drawing.rels.length] = rIdImage;
- drawing.rels.push({
- Id: rIdImage,
- Type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',
- Target: "../media/".concat(bookImage.name, ".").concat(bookImage.extension)
- });
- }
- var anchor = {
- picture: {
- rId: rIdImage
- },
- range: medium.range
- };
- if (medium.hyperlinks && medium.hyperlinks.hyperlink) {
- var rIdHyperLink = nextRid(drawing.rels);
- drawingRelsHash[drawing.rels.length] = rIdHyperLink;
- anchor.picture.hyperlinks = {
- tooltip: medium.hyperlinks.tooltip,
- rId: rIdHyperLink
- };
- drawing.rels.push({
- Id: rIdHyperLink,
- Type: RelType.Hyperlink,
- Target: medium.hyperlinks.hyperlink,
- TargetMode: 'External'
- });
- }
- _this2.preImageId = medium.imageId;
- drawing.anchors.push(anchor);
- }
- }); // prepare tables
- model.tables.forEach(function (table) {
- // relationships
- var rId = nextRid(rels);
- table.rId = rId;
- rels.push({
- Id: rId,
- Type: RelType.Table,
- Target: "../tables/".concat(table.target)
- }); // dynamic styles
- table.columns.forEach(function (column) {
- var style = column.style;
- if (style) {
- column.dxfId = options.styles.addDxfStyle(style);
- }
- });
- }); // prepare ext items
- this.map.extLst.prepare(model, options);
- }
- }, {
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openXml(XmlStream.StdDocAttributes);
- xmlStream.openNode('worksheet', WorkSheetXform.WORKSHEET_ATTRIBUTES);
- var sheetFormatPropertiesModel = model.properties ? {
- defaultRowHeight: model.properties.defaultRowHeight,
- dyDescent: model.properties.dyDescent,
- outlineLevelCol: model.properties.outlineLevelCol,
- outlineLevelRow: model.properties.outlineLevelRow
- } : undefined;
- if (model.properties && model.properties.defaultColWidth) {
- sheetFormatPropertiesModel.defaultColWidth = model.properties.defaultColWidth;
- }
- var sheetPropertiesModel = {
- outlineProperties: model.properties && model.properties.outlineProperties,
- tabColor: model.properties && model.properties.tabColor,
- pageSetup: model.pageSetup && model.pageSetup.fitToPage ? {
- fitToPage: model.pageSetup.fitToPage
- } : undefined
- };
- var pageMarginsModel = model.pageSetup && model.pageSetup.margins;
- var printOptionsModel = {
- showRowColHeaders: model.pageSetup && model.pageSetup.showRowColHeaders,
- showGridLines: model.pageSetup && model.pageSetup.showGridLines,
- horizontalCentered: model.pageSetup && model.pageSetup.horizontalCentered,
- verticalCentered: model.pageSetup && model.pageSetup.verticalCentered
- };
- var sheetProtectionModel = model.sheetProtection;
- this.map.sheetPr.render(xmlStream, sheetPropertiesModel);
- this.map.dimension.render(xmlStream, model.dimensions);
- this.map.sheetViews.render(xmlStream, model.views);
- this.map.sheetFormatPr.render(xmlStream, sheetFormatPropertiesModel);
- this.map.cols.render(xmlStream, model.cols);
- this.map.sheetData.render(xmlStream, model.rows);
- this.map.sheetProtection.render(xmlStream, sheetProtectionModel); // Note: must be after sheetData and before autoFilter
- this.map.autoFilter.render(xmlStream, model.autoFilter);
- this.map.mergeCells.render(xmlStream, model.mergeCells);
- this.map.conditionalFormatting.render(xmlStream, model.conditionalFormattings); // Note: must be before dataValidations
- this.map.dataValidations.render(xmlStream, model.dataValidations); // For some reason hyperlinks have to be after the data validations
- this.map.hyperlinks.render(xmlStream, model.hyperlinks);
- this.map.printOptions.render(xmlStream, printOptionsModel); // Note: must be before pageMargins
- this.map.pageMargins.render(xmlStream, pageMarginsModel);
- this.map.pageSetup.render(xmlStream, model.pageSetup);
- this.map.headerFooter.render(xmlStream, model.headerFooter);
- this.map.rowBreaks.render(xmlStream, model.rowBreaks);
- this.map.drawing.render(xmlStream, model.drawing); // Note: must be after rowBreaks
- this.map.picture.render(xmlStream, model.background); // Note: must be after drawing
- this.map.tableParts.render(xmlStream, model.tables);
- this.map.extLst.render(xmlStream, model);
- if (model.rels) {
- // add a <legacyDrawing /> node for each comment
- model.rels.forEach(function (rel) {
- if (rel.Type === RelType.VmlDrawing) {
- xmlStream.leafNode('legacyDrawing', {
- 'r:id': rel.Id
- });
- }
- });
- }
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- if (node.name === 'worksheet') {
- _.each(this.map, function (xform) {
- xform.reset();
- });
- return true;
- }
- this.parser = this.map[node.name];
- if (this.parser) {
- this.parser.parseOpen(node);
- }
- return true;
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.parser = undefined;
- }
- return true;
- }
- switch (name) {
- case 'worksheet':
- {
- var properties = this.map.sheetFormatPr.model || {};
- if (this.map.sheetPr.model && this.map.sheetPr.model.tabColor) {
- properties.tabColor = this.map.sheetPr.model.tabColor;
- }
- if (this.map.sheetPr.model && this.map.sheetPr.model.outlineProperties) {
- properties.outlineProperties = this.map.sheetPr.model.outlineProperties;
- }
- var sheetProperties = {
- fitToPage: this.map.sheetPr.model && this.map.sheetPr.model.pageSetup && this.map.sheetPr.model.pageSetup.fitToPage || false,
- margins: this.map.pageMargins.model
- };
- var pageSetup = Object.assign(sheetProperties, this.map.pageSetup.model, this.map.printOptions.model);
- var conditionalFormattings = mergeConditionalFormattings(this.map.conditionalFormatting.model, this.map.extLst.model && this.map.extLst.model['x14:conditionalFormattings']);
- this.model = {
- dimensions: this.map.dimension.model,
- cols: this.map.cols.model,
- rows: this.map.sheetData.model,
- mergeCells: this.map.mergeCells.model,
- hyperlinks: this.map.hyperlinks.model,
- dataValidations: this.map.dataValidations.model,
- properties: properties,
- views: this.map.sheetViews.model,
- pageSetup: pageSetup,
- headerFooter: this.map.headerFooter.model,
- background: this.map.picture.model,
- drawing: this.map.drawing.model,
- tables: this.map.tableParts.model,
- conditionalFormattings: conditionalFormattings
- };
- if (this.map.autoFilter.model) {
- this.model.autoFilter = this.map.autoFilter.model;
- }
- if (this.map.sheetProtection.model) {
- this.model.sheetProtection = this.map.sheetProtection.model;
- }
- return false;
- }
- default:
- // not quite sure how we get here!
- return true;
- }
- }
- }, {
- key: "reconcile",
- value: function reconcile(model, options) {
- // options.merges = new Merges();
- // options.merges.reconcile(model.mergeCells, model.rows);
- var rels = (model.relationships || []).reduce(function (h, rel) {
- h[rel.Id] = rel;
- if (rel.Type === RelType.Comments) {
- model.comments = options.comments[rel.Target].comments;
- }
- if (rel.Type === RelType.VmlDrawing && model.comments && model.comments.length) {
- var vmlComment = options.vmlDrawings[rel.Target].comments;
- model.comments.forEach(function (comment, index) {
- comment.note = Object.assign({}, comment.note, vmlComment[index]);
- });
- }
- return h;
- }, {});
- options.commentsMap = (model.comments || []).reduce(function (h, comment) {
- if (comment.ref) {
- h[comment.ref] = comment;
- }
- return h;
- }, {});
- options.hyperlinkMap = (model.hyperlinks || []).reduce(function (h, hyperlink) {
- if (hyperlink.rId) {
- h[hyperlink.address] = rels[hyperlink.rId].Target;
- }
- return h;
- }, {});
- options.formulae = {}; // compact the rows and cells
- model.rows = model.rows && model.rows.filter(Boolean) || [];
- model.rows.forEach(function (row) {
- row.cells = row.cells && row.cells.filter(Boolean) || [];
- });
- this.map.cols.reconcile(model.cols, options);
- this.map.sheetData.reconcile(model.rows, options);
- this.map.conditionalFormatting.reconcile(model.conditionalFormattings, options);
- model.media = [];
- if (model.drawing) {
- var drawingRel = rels[model.drawing.rId];
- var match = drawingRel.Target.match(/\/drawings\/([a-zA-Z0-9]+)[.][a-zA-Z]{3,4}$/);
- if (match) {
- var drawingName = match[1];
- var drawing = options.drawings[drawingName];
- drawing.anchors.forEach(function (anchor) {
- if (anchor.medium) {
- var image = {
- type: 'image',
- imageId: anchor.medium.index,
- range: anchor.range,
- hyperlinks: anchor.picture.hyperlinks
- };
- model.media.push(image);
- }
- });
- }
- }
- var backgroundRel = model.background && rels[model.background.rId];
- if (backgroundRel) {
- var target = backgroundRel.Target.split('/media/')[1];
- var imageId = options.mediaIndex && options.mediaIndex[target];
- if (imageId !== undefined) {
- model.media.push({
- type: 'background',
- imageId: imageId
- });
- }
- }
- model.tables = (model.tables || []).map(function (tablePart) {
- var rel = rels[tablePart.rId];
- return options.tables[rel.Target];
- });
- delete model.relationships;
- delete model.hyperlinks;
- delete model.comments;
- }
- }]);
- return WorkSheetXform;
- }(BaseXform);
- WorkSheetXform.WORKSHEET_ATTRIBUTES = {
- xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',
- 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',
- 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',
- 'mc:Ignorable': 'x14ac',
- 'xmlns:x14ac': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac'
- };
- module.exports = WorkSheetXform;
- },{"../../../utils/col-cache":19,"../../../utils/under-dash":25,"../../../utils/xml-stream":27,"../../rel-type":30,"../base-xform":31,"../list-xform":70,"./auto-filter-xform":71,"./cf/conditional-formattings-xform":86,"./col-xform":91,"./data-validations-xform":92,"./dimension-xform":93,"./drawing-xform":94,"./ext-lst-xform":95,"./header-footer-xform":96,"./hyperlink-xform":97,"./merge-cell-xform":98,"./merges":99,"./page-margins-xform":102,"./page-setup-xform":104,"./picture-xform":105,"./print-options-xform":106,"./row-breaks-xform":107,"./row-xform":108,"./sheet-format-properties-xform":109,"./sheet-properties-xform":110,"./sheet-protection-xform":111,"./sheet-view-xform":112,"./table-part-xform":113}],115:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var BooleanXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(BooleanXform, _BaseXform);
- var _super = _createSuper(BooleanXform);
- function BooleanXform(options) {
- var _this;
- _classCallCheck(this, BooleanXform);
- _this = _super.call(this);
- _this.tag = options.tag;
- _this.attr = options.attr;
- return _this;
- }
- _createClass(BooleanXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- if (model) {
- xmlStream.openNode(this.tag);
- xmlStream.closeNode();
- }
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (node.name === this.tag) {
- this.model = true;
- }
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }]);
- return BooleanXform;
- }(BaseXform);
- module.exports = BooleanXform;
- },{"../base-xform":31}],116:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var DateXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(DateXform, _BaseXform);
- var _super = _createSuper(DateXform);
- function DateXform(options) {
- var _this;
- _classCallCheck(this, DateXform);
- _this = _super.call(this);
- _this.tag = options.tag;
- _this.attr = options.attr;
- _this.attrs = options.attrs;
- _this._format = options.format || function (dt) {
- try {
- if (Number.isNaN(dt.getTime())) return '';
- return dt.toISOString();
- } catch (e) {
- return '';
- }
- };
- _this._parse = options.parse || function (str) {
- return new Date(str);
- };
- return _this;
- }
- _createClass(DateXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- if (model) {
- xmlStream.openNode(this.tag);
- if (this.attrs) {
- xmlStream.addAttributes(this.attrs);
- }
- if (this.attr) {
- xmlStream.addAttribute(this.attr, this._format(model));
- } else {
- xmlStream.writeText(this._format(model));
- }
- xmlStream.closeNode();
- }
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (node.name === this.tag) {
- if (this.attr) {
- this.model = this._parse(node.attributes[this.attr]);
- } else {
- this.text = [];
- }
- }
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (!this.attr) {
- this.text.push(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose() {
- if (!this.attr) {
- this.model = this._parse(this.text.join(''));
- }
- return false;
- }
- }]);
- return DateXform;
- }(BaseXform);
- module.exports = DateXform;
- },{"../base-xform":31}],117:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var IntegerXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(IntegerXform, _BaseXform);
- var _super = _createSuper(IntegerXform);
- function IntegerXform(options) {
- var _this;
- _classCallCheck(this, IntegerXform);
- _this = _super.call(this);
- _this.tag = options.tag;
- _this.attr = options.attr;
- _this.attrs = options.attrs; // option to render zero
- _this.zero = options.zero;
- return _this;
- }
- _createClass(IntegerXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- // int is different to float in that zero is not rendered
- if (model || this.zero) {
- xmlStream.openNode(this.tag);
- if (this.attrs) {
- xmlStream.addAttributes(this.attrs);
- }
- if (this.attr) {
- xmlStream.addAttribute(this.attr, model);
- } else {
- xmlStream.writeText(model);
- }
- xmlStream.closeNode();
- }
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (node.name === this.tag) {
- if (this.attr) {
- this.model = parseInt(node.attributes[this.attr], 10);
- } else {
- this.text = [];
- }
- return true;
- }
- return false;
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (!this.attr) {
- this.text.push(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose() {
- if (!this.attr) {
- this.model = parseInt(this.text.join('') || 0, 10);
- }
- return false;
- }
- }]);
- return IntegerXform;
- }(BaseXform);
- module.exports = IntegerXform;
- },{"../base-xform":31}],118:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var StringXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(StringXform, _BaseXform);
- var _super = _createSuper(StringXform);
- function StringXform(options) {
- var _this;
- _classCallCheck(this, StringXform);
- _this = _super.call(this);
- _this.tag = options.tag;
- _this.attr = options.attr;
- _this.attrs = options.attrs;
- return _this;
- }
- _createClass(StringXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- if (model !== undefined) {
- xmlStream.openNode(this.tag);
- if (this.attrs) {
- xmlStream.addAttributes(this.attrs);
- }
- if (this.attr) {
- xmlStream.addAttribute(this.attr, model);
- } else {
- xmlStream.writeText(model);
- }
- xmlStream.closeNode();
- }
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (node.name === this.tag) {
- if (this.attr) {
- this.model = node.attributes[this.attr];
- } else {
- this.text = [];
- }
- }
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (!this.attr) {
- this.text.push(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose() {
- if (!this.attr) {
- this.model = this.text.join('');
- }
- return false;
- }
- }]);
- return StringXform;
- }(BaseXform);
- module.exports = StringXform;
- },{"../base-xform":31}],119:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('./base-xform');
- var XmlStream = require('../../utils/xml-stream'); // const model = {
- // tag: 'name',
- // $: {attr: 'value'},
- // c: [
- // { tag: 'child' }
- // ],
- // t: 'some text'
- // };
- function build(xmlStream, model) {
- xmlStream.openNode(model.tag, model.$);
- if (model.c) {
- model.c.forEach(function (child) {
- build(xmlStream, child);
- });
- }
- if (model.t) {
- xmlStream.writeText(model.t);
- }
- xmlStream.closeNode();
- }
- var StaticXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(StaticXform, _BaseXform);
- var _super = _createSuper(StaticXform);
- function StaticXform(model) {
- var _this;
- _classCallCheck(this, StaticXform);
- _this = _super.call(this); // This class is an optimisation for static (unimportant and unchanging) xml
- // It is stateless - apart from its static model and so can be used as a singleton
- // Being stateless - it will only track entry to and exit from it's root xml tag during parsing and nothing else
- // Known issues:
- // since stateless - parseOpen always returns true. Parent xform must know when to start using this xform
- // if the root tag is recursive, the parsing will behave unpredictably
- _this._model = model;
- return _this;
- }
- _createClass(StaticXform, [{
- key: "render",
- value: function render(xmlStream) {
- if (!this._xml) {
- var stream = new XmlStream();
- build(stream, this._model);
- this._xml = stream.xml;
- }
- xmlStream.writeXml(this._xml);
- }
- }, {
- key: "parseOpen",
- value: function parseOpen() {
- return true;
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- switch (name) {
- case this._model.tag:
- return false;
- default:
- return true;
- }
- }
- }]);
- return StaticXform;
- }(BaseXform);
- module.exports = StaticXform;
- },{"../../utils/xml-stream":27,"./base-xform":31}],120:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var TextXform = require('./text-xform');
- var RichTextXform = require('./rich-text-xform');
- var BaseXform = require('../base-xform'); // <rPh sb="0" eb="1">
- // <t>(its pronounciation in KATAKANA)</t>
- // </rPh>
- var PhoneticTextXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(PhoneticTextXform, _BaseXform);
- var _super = _createSuper(PhoneticTextXform);
- function PhoneticTextXform() {
- var _this;
- _classCallCheck(this, PhoneticTextXform);
- _this = _super.call(this);
- _this.map = {
- r: new RichTextXform(),
- t: new TextXform()
- };
- return _this;
- }
- _createClass(PhoneticTextXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openNode(this.tag, {
- sb: model.sb || 0,
- eb: model.eb || 0
- });
- if (model && model.hasOwnProperty('richText') && model.richText) {
- var r = this.map.r;
- model.richText.forEach(function (text) {
- r.render(xmlStream, text);
- });
- } else if (model) {
- this.map.t.render(xmlStream, model.text);
- }
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- var name = node.name;
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- if (name === this.tag) {
- this.model = {
- sb: parseInt(node.attributes.sb, 10),
- eb: parseInt(node.attributes.eb, 10)
- };
- return true;
- }
- this.parser = this.map[name];
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- return false;
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- switch (name) {
- case 'r':
- {
- var rt = this.model.richText;
- if (!rt) {
- rt = this.model.richText = [];
- }
- rt.push(this.parser.model);
- break;
- }
- case 't':
- this.model.text = this.parser.model;
- break;
- default:
- break;
- }
- this.parser = undefined;
- }
- return true;
- }
- switch (name) {
- case this.tag:
- return false;
- default:
- return true;
- }
- }
- }, {
- key: "tag",
- get: function get() {
- return 'rPh';
- }
- }]);
- return PhoneticTextXform;
- }(BaseXform);
- module.exports = PhoneticTextXform;
- },{"../base-xform":31,"./rich-text-xform":121,"./text-xform":124}],121:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var TextXform = require('./text-xform');
- var FontXform = require('../style/font-xform');
- var BaseXform = require('../base-xform'); // <r>
- // <rPr>
- // <sz val="11"/>
- // <color theme="1" tint="5"/>
- // <rFont val="Calibri"/>
- // <family val="2"/>
- // <scheme val="minor"/>
- // </rPr>
- // <t xml:space="preserve"> is </t>
- // </r>
- var RichTextXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(RichTextXform, _BaseXform);
- var _super = _createSuper(RichTextXform);
- function RichTextXform(model) {
- var _this;
- _classCallCheck(this, RichTextXform);
- _this = _super.call(this);
- _this.model = model;
- return _this;
- }
- _createClass(RichTextXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- model = model || this.model;
- xmlStream.openNode('r');
- if (model.font) {
- this.fontXform.render(xmlStream, model.font);
- }
- this.textXform.render(xmlStream, model.text);
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case 'r':
- this.model = {};
- return true;
- case 't':
- this.parser = this.textXform;
- this.parser.parseOpen(node);
- return true;
- case 'rPr':
- this.parser = this.fontXform;
- this.parser.parseOpen(node);
- return true;
- default:
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- switch (name) {
- case 'r':
- return false;
- case 't':
- this.model.text = this.parser.model;
- this.parser = undefined;
- return true;
- case 'rPr':
- this.model.font = this.parser.model;
- this.parser = undefined;
- return true;
- default:
- if (this.parser) {
- this.parser.parseClose(name);
- }
- return true;
- }
- }
- }, {
- key: "tag",
- get: function get() {
- return 'r';
- }
- }, {
- key: "textXform",
- get: function get() {
- return this._textXform || (this._textXform = new TextXform());
- }
- }, {
- key: "fontXform",
- get: function get() {
- return this._fontXform || (this._fontXform = new FontXform(RichTextXform.FONT_OPTIONS));
- }
- }]);
- return RichTextXform;
- }(BaseXform);
- RichTextXform.FONT_OPTIONS = {
- tagName: 'rPr',
- fontNameTag: 'rFont'
- };
- module.exports = RichTextXform;
- },{"../base-xform":31,"../style/font-xform":130,"./text-xform":124}],122:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var TextXform = require('./text-xform');
- var RichTextXform = require('./rich-text-xform');
- var PhoneticTextXform = require('./phonetic-text-xform');
- var BaseXform = require('../base-xform'); // <si>
- // <r></r><r></r>...
- // </si>
- // <si>
- // <t></t>
- // </si>
- var SharedStringXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(SharedStringXform, _BaseXform);
- var _super = _createSuper(SharedStringXform);
- function SharedStringXform(model) {
- var _this;
- _classCallCheck(this, SharedStringXform);
- _this = _super.call(this);
- _this.model = model;
- _this.map = {
- r: new RichTextXform(),
- t: new TextXform(),
- rPh: new PhoneticTextXform()
- };
- return _this;
- }
- _createClass(SharedStringXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- var _this2 = this;
- xmlStream.openNode(this.tag);
- if (model && model.hasOwnProperty('richText') && model.richText) {
- if (model.richText.length) {
- model.richText.forEach(function (text) {
- _this2.map.r.render(xmlStream, text);
- });
- } else {
- this.map.t.render(xmlStream, '');
- }
- } else if (model !== undefined && model !== null) {
- this.map.t.render(xmlStream, model);
- }
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- var name = node.name;
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- if (name === this.tag) {
- this.model = {};
- return true;
- }
- this.parser = this.map[name];
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- return false;
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- switch (name) {
- case 'r':
- {
- var rt = this.model.richText;
- if (!rt) {
- rt = this.model.richText = [];
- }
- rt.push(this.parser.model);
- break;
- }
- case 't':
- this.model = this.parser.model;
- break;
- default:
- break;
- }
- this.parser = undefined;
- }
- return true;
- }
- switch (name) {
- case this.tag:
- return false;
- default:
- return true;
- }
- }
- }, {
- key: "tag",
- get: function get() {
- return 'si';
- }
- }]);
- return SharedStringXform;
- }(BaseXform);
- module.exports = SharedStringXform;
- },{"../base-xform":31,"./phonetic-text-xform":120,"./rich-text-xform":121,"./text-xform":124}],123:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var XmlStream = require('../../../utils/xml-stream');
- var BaseXform = require('../base-xform');
- var SharedStringXform = require('./shared-string-xform');
- var SharedStringsXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(SharedStringsXform, _BaseXform);
- var _super = _createSuper(SharedStringsXform);
- function SharedStringsXform(model) {
- var _this;
- _classCallCheck(this, SharedStringsXform);
- _this = _super.call(this);
- _this.model = model || {
- values: [],
- count: 0
- };
- _this.hash = Object.create(null);
- _this.rich = Object.create(null);
- return _this;
- }
- _createClass(SharedStringsXform, [{
- key: "getString",
- value: function getString(index) {
- return this.model.values[index];
- }
- }, {
- key: "add",
- value: function add(value) {
- return value.richText ? this.addRichText(value) : this.addText(value);
- }
- }, {
- key: "addText",
- value: function addText(value) {
- var index = this.hash[value];
- if (index === undefined) {
- index = this.hash[value] = this.model.values.length;
- this.model.values.push(value);
- }
- this.model.count++;
- return index;
- }
- }, {
- key: "addRichText",
- value: function addRichText(value) {
- // TODO: add WeakMap here
- var xml = this.sharedStringXform.toXml(value);
- var index = this.rich[xml];
- if (index === undefined) {
- index = this.rich[xml] = this.model.values.length;
- this.model.values.push(value);
- }
- this.model.count++;
- return index;
- } // <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
- // <sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="<%=totalRefs%>" uniqueCount="<%=count%>">
- // <si><t><%=text%></t></si>
- // <si><r><rPr></rPr><t></t></r></si>
- // </sst>
- }, {
- key: "render",
- value: function render(xmlStream, model) {
- model = model || this._values;
- xmlStream.openXml(XmlStream.StdDocAttributes);
- xmlStream.openNode('sst', {
- xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',
- count: model.count,
- uniqueCount: model.values.length
- });
- var sx = this.sharedStringXform;
- model.values.forEach(function (sharedString) {
- sx.render(xmlStream, sharedString);
- });
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case 'sst':
- return true;
- case 'si':
- this.parser = this.sharedStringXform;
- this.parser.parseOpen(node);
- return true;
- default:
- throw new Error("Unexpected xml node in parseOpen: ".concat(JSON.stringify(node)));
- }
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.model.values.push(this.parser.model);
- this.model.count++;
- this.parser = undefined;
- }
- return true;
- }
- switch (name) {
- case 'sst':
- return false;
- default:
- throw new Error("Unexpected xml node in parseClose: ".concat(name));
- }
- }
- }, {
- key: "sharedStringXform",
- get: function get() {
- return this._sharedStringXform || (this._sharedStringXform = new SharedStringXform());
- }
- }, {
- key: "values",
- get: function get() {
- return this.model.values;
- }
- }, {
- key: "uniqueCount",
- get: function get() {
- return this.model.values.length;
- }
- }, {
- key: "count",
- get: function get() {
- return this.model.count;
- }
- }]);
- return SharedStringsXform;
- }(BaseXform);
- module.exports = SharedStringsXform;
- },{"../../../utils/xml-stream":27,"../base-xform":31,"./shared-string-xform":122}],124:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform'); // <t xml:space="preserve"> is </t>
- var TextXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(TextXform, _BaseXform);
- var _super = _createSuper(TextXform);
- function TextXform() {
- _classCallCheck(this, TextXform);
- return _super.apply(this, arguments);
- }
- _createClass(TextXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openNode('t');
- if (/^\s|\n|\s$/.test(model)) {
- xmlStream.addAttribute('xml:space', 'preserve');
- }
- xmlStream.writeText(model);
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- switch (node.name) {
- case 't':
- this._text = [];
- return true;
- default:
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- this._text.push(text);
- }
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return 't';
- }
- }, {
- key: "model",
- get: function get() {
- return this._text.join('').replace(/_x([0-9A-F]{4})_/g, function ($0, $1) {
- return String.fromCharCode(parseInt($1, 16));
- });
- }
- }]);
- return TextXform;
- }(BaseXform);
- module.exports = TextXform;
- },{"../base-xform":31}],125:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var Enums = require('../../../doc/enums');
- var utils = require('../../../utils/utils');
- var BaseXform = require('../base-xform');
- var validation = {
- horizontalValues: ['left', 'center', 'right', 'fill', 'centerContinuous', 'distributed', 'justify'].reduce(function (p, v) {
- p[v] = true;
- return p;
- }, {}),
- horizontal: function horizontal(value) {
- return this.horizontalValues[value] ? value : undefined;
- },
- verticalValues: ['top', 'middle', 'bottom', 'distributed', 'justify'].reduce(function (p, v) {
- p[v] = true;
- return p;
- }, {}),
- vertical: function vertical(value) {
- if (value === 'middle') return 'center';
- return this.verticalValues[value] ? value : undefined;
- },
- wrapText: function wrapText(value) {
- return value ? true : undefined;
- },
- shrinkToFit: function shrinkToFit(value) {
- return value ? true : undefined;
- },
- textRotation: function textRotation(value) {
- switch (value) {
- case 'vertical':
- return value;
- default:
- value = utils.validInt(value);
- return value >= -90 && value <= 90 ? value : undefined;
- }
- },
- indent: function indent(value) {
- value = utils.validInt(value);
- return Math.max(0, value);
- },
- readingOrder: function readingOrder(value) {
- switch (value) {
- case 'ltr':
- return Enums.ReadingOrder.LeftToRight;
- case 'rtl':
- return Enums.ReadingOrder.RightToLeft;
- default:
- return undefined;
- }
- }
- };
- var textRotationXform = {
- toXml: function toXml(textRotation) {
- textRotation = validation.textRotation(textRotation);
- if (textRotation) {
- if (textRotation === 'vertical') {
- return 255;
- }
- var tr = Math.round(textRotation);
- if (tr >= 0 && tr <= 90) {
- return tr;
- }
- if (tr < 0 && tr >= -90) {
- return 90 - tr;
- }
- }
- return undefined;
- },
- toModel: function toModel(textRotation) {
- var tr = utils.validInt(textRotation);
- if (tr !== undefined) {
- if (tr === 255) {
- return 'vertical';
- }
- if (tr >= 0 && tr <= 90) {
- return tr;
- }
- if (tr > 90 && tr <= 180) {
- return 90 - tr;
- }
- }
- return undefined;
- }
- }; // Alignment encapsulates translation from style.alignment model to/from xlsx
- var AlignmentXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(AlignmentXform, _BaseXform);
- var _super = _createSuper(AlignmentXform);
- function AlignmentXform() {
- _classCallCheck(this, AlignmentXform);
- return _super.apply(this, arguments);
- }
- _createClass(AlignmentXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.addRollback();
- xmlStream.openNode('alignment');
- var isValid = false;
- function add(name, value) {
- if (value) {
- xmlStream.addAttribute(name, value);
- isValid = true;
- }
- }
- add('horizontal', validation.horizontal(model.horizontal));
- add('vertical', validation.vertical(model.vertical));
- add('wrapText', validation.wrapText(model.wrapText) ? '1' : false);
- add('shrinkToFit', validation.shrinkToFit(model.shrinkToFit) ? '1' : false);
- add('indent', validation.indent(model.indent));
- add('textRotation', textRotationXform.toXml(model.textRotation));
- add('readingOrder', validation.readingOrder(model.readingOrder));
- xmlStream.closeNode();
- if (isValid) {
- xmlStream.commit();
- } else {
- xmlStream.rollback();
- }
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- var model = {};
- var valid = false;
- function add(truthy, name, value) {
- if (truthy) {
- model[name] = value;
- valid = true;
- }
- }
- add(node.attributes.horizontal, 'horizontal', node.attributes.horizontal);
- add(node.attributes.vertical, 'vertical', node.attributes.vertical === 'center' ? 'middle' : node.attributes.vertical);
- add(node.attributes.wrapText, 'wrapText', !!node.attributes.wrapText);
- add(node.attributes.shrinkToFit, 'shrinkToFit', !!node.attributes.shrinkToFit);
- add(node.attributes.indent, 'indent', parseInt(node.attributes.indent, 10));
- add(node.attributes.textRotation, 'textRotation', textRotationXform.toModel(node.attributes.textRotation));
- add(node.attributes.readingOrder, 'readingOrder', node.attributes.readingOrder === '2' ? 'rtl' : 'ltr');
- this.model = valid ? model : null;
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'alignment';
- }
- }]);
- return AlignmentXform;
- }(BaseXform);
- module.exports = AlignmentXform;
- },{"../../../doc/enums":7,"../../../utils/utils":26,"../base-xform":31}],126:[function(require,module,exports){
- "use strict";
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- /* eslint-disable max-classes-per-file */
- var BaseXform = require('../base-xform');
- var ColorXform = require('./color-xform');
- var EdgeXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(EdgeXform, _BaseXform);
- var _super = _createSuper(EdgeXform);
- function EdgeXform(name) {
- var _this;
- _classCallCheck(this, EdgeXform);
- _this = _super.call(this);
- _this.name = name;
- _this.map = {
- color: new ColorXform()
- };
- return _this;
- }
- _createClass(EdgeXform, [{
- key: "render",
- value: function render(xmlStream, model, defaultColor) {
- var color = model && model.color || defaultColor || this.defaultColor;
- xmlStream.openNode(this.name);
- if (model && model.style) {
- xmlStream.addAttribute('style', model.style);
- if (color) {
- this.map.color.render(xmlStream, color);
- }
- }
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case this.name:
- {
- var style = node.attributes.style;
- if (style) {
- this.model = {
- style: style
- };
- } else {
- this.model = undefined;
- }
- return true;
- }
- case 'color':
- this.parser = this.map.color;
- this.parser.parseOpen(node);
- return true;
- default:
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.parser = undefined;
- }
- return true;
- }
- if (name === this.name) {
- if (this.map.color.model) {
- if (!this.model) {
- this.model = {};
- }
- this.model.color = this.map.color.model;
- }
- }
- return false;
- }
- }, {
- key: "validStyle",
- value: function validStyle(value) {
- return EdgeXform.validStyleValues[value];
- }
- }, {
- key: "tag",
- get: function get() {
- return this.name;
- }
- }]);
- return EdgeXform;
- }(BaseXform);
- EdgeXform.validStyleValues = ['thin', 'dotted', 'dashDot', 'hair', 'dashDotDot', 'slantDashDot', 'mediumDashed', 'mediumDashDotDot', 'mediumDashDot', 'medium', 'double', 'thick'].reduce(function (p, v) {
- p[v] = true;
- return p;
- }, {}); // Border encapsulates translation from border model to/from xlsx
- var BorderXform = /*#__PURE__*/function (_BaseXform2) {
- _inherits(BorderXform, _BaseXform2);
- var _super2 = _createSuper(BorderXform);
- function BorderXform() {
- var _this2;
- _classCallCheck(this, BorderXform);
- _this2 = _super2.call(this);
- _this2.map = {
- top: new EdgeXform('top'),
- left: new EdgeXform('left'),
- bottom: new EdgeXform('bottom'),
- right: new EdgeXform('right'),
- diagonal: new EdgeXform('diagonal')
- };
- return _this2;
- }
- _createClass(BorderXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- var color = model.color;
- xmlStream.openNode('border');
- if (model.diagonal && model.diagonal.style) {
- if (model.diagonal.up) {
- xmlStream.addAttribute('diagonalUp', '1');
- }
- if (model.diagonal.down) {
- xmlStream.addAttribute('diagonalDown', '1');
- }
- }
- function add(edgeModel, edgeXform) {
- if (edgeModel && !edgeModel.color && model.color) {
- // don't mess with incoming models
- edgeModel = _objectSpread(_objectSpread({}, edgeModel), {}, {
- color: model.color
- });
- }
- edgeXform.render(xmlStream, edgeModel, color);
- }
- add(model.left, this.map.left);
- add(model.right, this.map.right);
- add(model.top, this.map.top);
- add(model.bottom, this.map.bottom);
- add(model.diagonal, this.map.diagonal);
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case 'border':
- this.reset();
- this.diagonalUp = !!node.attributes.diagonalUp;
- this.diagonalDown = !!node.attributes.diagonalDown;
- return true;
- default:
- this.parser = this.map[node.name];
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.parser = undefined;
- }
- return true;
- }
- if (name === 'border') {
- var model = this.model = {};
- var add = function add(key, edgeModel, extensions) {
- if (edgeModel) {
- if (extensions) {
- Object.assign(edgeModel, extensions);
- }
- model[key] = edgeModel;
- }
- };
- add('left', this.map.left.model);
- add('right', this.map.right.model);
- add('top', this.map.top.model);
- add('bottom', this.map.bottom.model);
- add('diagonal', this.map.diagonal.model, {
- up: this.diagonalUp,
- down: this.diagonalDown
- });
- }
- return false;
- }
- }]);
- return BorderXform;
- }(BaseXform);
- module.exports = BorderXform;
- },{"../base-xform":31,"./color-xform":127}],127:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform'); // Color encapsulates translation from color model to/from xlsx
- var ColorXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(ColorXform, _BaseXform);
- var _super = _createSuper(ColorXform);
- function ColorXform(name) {
- var _this;
- _classCallCheck(this, ColorXform);
- _this = _super.call(this); // this.name controls the xm node name
- _this.name = name || 'color';
- return _this;
- }
- _createClass(ColorXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- if (model) {
- xmlStream.openNode(this.name);
- if (model.argb) {
- xmlStream.addAttribute('rgb', model.argb);
- } else if (model.theme !== undefined) {
- xmlStream.addAttribute('theme', model.theme);
- if (model.tint !== undefined) {
- xmlStream.addAttribute('tint', model.tint);
- }
- } else if (model.indexed !== undefined) {
- xmlStream.addAttribute('indexed', model.indexed);
- } else {
- xmlStream.addAttribute('auto', '1');
- }
- xmlStream.closeNode();
- return true;
- }
- return false;
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (node.name === this.name) {
- if (node.attributes.rgb) {
- this.model = {
- argb: node.attributes.rgb
- };
- } else if (node.attributes.theme) {
- this.model = {
- theme: parseInt(node.attributes.theme, 10)
- };
- if (node.attributes.tint) {
- this.model.tint = parseFloat(node.attributes.tint);
- }
- } else if (node.attributes.indexed) {
- this.model = {
- indexed: parseInt(node.attributes.indexed, 10)
- };
- } else {
- this.model = undefined;
- }
- return true;
- }
- return false;
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return this.name;
- }
- }]);
- return ColorXform;
- }(BaseXform);
- module.exports = ColorXform;
- },{"../base-xform":31}],128:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var AlignmentXform = require('./alignment-xform');
- var BorderXform = require('./border-xform');
- var FillXform = require('./fill-xform');
- var FontXform = require('./font-xform');
- var NumFmtXform = require('./numfmt-xform');
- var ProtectionXform = require('./protection-xform'); // <xf numFmtId="[numFmtId]" fontId="[fontId]" fillId="[fillId]" borderId="[xf.borderId]" xfId="[xfId]">
- // Optional <alignment>
- // Optional <protection>
- // </xf>
- // Style assists translation from style model to/from xlsx
- var DxfXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(DxfXform, _BaseXform);
- var _super = _createSuper(DxfXform);
- function DxfXform() {
- var _this;
- _classCallCheck(this, DxfXform);
- _this = _super.call(this);
- _this.map = {
- alignment: new AlignmentXform(),
- border: new BorderXform(),
- fill: new FillXform(),
- font: new FontXform(),
- numFmt: new NumFmtXform(),
- protection: new ProtectionXform()
- };
- return _this;
- }
- _createClass(DxfXform, [{
- key: "render",
- // how do we generate dxfid?
- value: function render(xmlStream, model) {
- xmlStream.openNode(this.tag);
- if (model.font) {
- this.map.font.render(xmlStream, model.font);
- }
- if (model.numFmt) {
- this.map.numFmt.render(xmlStream, model.numFmt);
- }
- if (model.fill) {
- this.map.fill.render(xmlStream, model.fill);
- }
- if (model.alignment) {
- this.map.alignment.render(xmlStream, model.alignment);
- }
- if (model.border) {
- this.map.border.render(xmlStream, model.border);
- }
- if (model.protection) {
- this.map.protection.render(xmlStream, model.protection);
- }
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case this.tag:
- // this node is often repeated. Need to reset children
- this.reset();
- return true;
- default:
- this.parser = this.map[node.name];
- if (this.parser) {
- this.parser.parseOpen(node);
- }
- return true;
- }
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.parser = undefined;
- }
- return true;
- }
- if (name === this.tag) {
- this.model = {
- alignment: this.map.alignment.model,
- border: this.map.border.model,
- fill: this.map.fill.model,
- font: this.map.font.model,
- numFmt: this.map.numFmt.model,
- protection: this.map.protection.model
- };
- return false;
- }
- return true;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'dxf';
- }
- }]);
- return DxfXform;
- }(BaseXform);
- module.exports = DxfXform;
- },{"../base-xform":31,"./alignment-xform":125,"./border-xform":126,"./fill-xform":129,"./font-xform":130,"./numfmt-xform":131,"./protection-xform":132}],129:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- /* eslint-disable max-classes-per-file */
- var BaseXform = require('../base-xform');
- var ColorXform = require('./color-xform');
- var StopXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(StopXform, _BaseXform);
- var _super = _createSuper(StopXform);
- function StopXform() {
- var _this;
- _classCallCheck(this, StopXform);
- _this = _super.call(this);
- _this.map = {
- color: new ColorXform()
- };
- return _this;
- }
- _createClass(StopXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openNode('stop');
- xmlStream.addAttribute('position', model.position);
- this.map.color.render(xmlStream, model.color);
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case 'stop':
- this.model = {
- position: parseFloat(node.attributes.position)
- };
- return true;
- case 'color':
- this.parser = this.map.color;
- this.parser.parseOpen(node);
- return true;
- default:
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.model.color = this.parser.model;
- this.parser = undefined;
- }
- return true;
- }
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'stop';
- }
- }]);
- return StopXform;
- }(BaseXform);
- var PatternFillXform = /*#__PURE__*/function (_BaseXform2) {
- _inherits(PatternFillXform, _BaseXform2);
- var _super2 = _createSuper(PatternFillXform);
- function PatternFillXform() {
- var _this2;
- _classCallCheck(this, PatternFillXform);
- _this2 = _super2.call(this);
- _this2.map = {
- fgColor: new ColorXform('fgColor'),
- bgColor: new ColorXform('bgColor')
- };
- return _this2;
- }
- _createClass(PatternFillXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openNode('patternFill');
- xmlStream.addAttribute('patternType', model.pattern);
- if (model.fgColor) {
- this.map.fgColor.render(xmlStream, model.fgColor);
- }
- if (model.bgColor) {
- this.map.bgColor.render(xmlStream, model.bgColor);
- }
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case 'patternFill':
- this.model = {
- type: 'pattern',
- pattern: node.attributes.patternType
- };
- return true;
- default:
- this.parser = this.map[node.name];
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- if (this.parser.model) {
- this.model[name] = this.parser.model;
- }
- this.parser = undefined;
- }
- return true;
- }
- return false;
- }
- }, {
- key: "name",
- get: function get() {
- return 'pattern';
- }
- }, {
- key: "tag",
- get: function get() {
- return 'patternFill';
- }
- }]);
- return PatternFillXform;
- }(BaseXform);
- var GradientFillXform = /*#__PURE__*/function (_BaseXform3) {
- _inherits(GradientFillXform, _BaseXform3);
- var _super3 = _createSuper(GradientFillXform);
- function GradientFillXform() {
- var _this3;
- _classCallCheck(this, GradientFillXform);
- _this3 = _super3.call(this);
- _this3.map = {
- stop: new StopXform()
- }; // if (model) {
- // this.gradient = model.gradient;
- // if (model.center) {
- // this.center = model.center;
- // }
- // if (model.degree !== undefined) {
- // this.degree = model.degree;
- // }
- // this.stops = model.stops.map(function(stop) { return new StopXform(stop); });
- // } else {
- // this.stops = [];
- // }
- return _this3;
- }
- _createClass(GradientFillXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openNode('gradientFill');
- switch (model.gradient) {
- case 'angle':
- xmlStream.addAttribute('degree', model.degree);
- break;
- case 'path':
- xmlStream.addAttribute('type', 'path');
- if (model.center.left) {
- xmlStream.addAttribute('left', model.center.left);
- if (model.center.right === undefined) {
- xmlStream.addAttribute('right', model.center.left);
- }
- }
- if (model.center.right) {
- xmlStream.addAttribute('right', model.center.right);
- }
- if (model.center.top) {
- xmlStream.addAttribute('top', model.center.top);
- if (model.center.bottom === undefined) {
- xmlStream.addAttribute('bottom', model.center.top);
- }
- }
- if (model.center.bottom) {
- xmlStream.addAttribute('bottom', model.center.bottom);
- }
- break;
- default:
- break;
- }
- var stopXform = this.map.stop;
- model.stops.forEach(function (stopModel) {
- stopXform.render(xmlStream, stopModel);
- });
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case 'gradientFill':
- {
- var model = this.model = {
- stops: []
- };
- if (node.attributes.degree) {
- model.gradient = 'angle';
- model.degree = parseInt(node.attributes.degree, 10);
- } else if (node.attributes.type === 'path') {
- model.gradient = 'path';
- model.center = {
- left: node.attributes.left ? parseFloat(node.attributes.left) : 0,
- top: node.attributes.top ? parseFloat(node.attributes.top) : 0
- };
- if (node.attributes.right !== node.attributes.left) {
- model.center.right = node.attributes.right ? parseFloat(node.attributes.right) : 0;
- }
- if (node.attributes.bottom !== node.attributes.top) {
- model.center.bottom = node.attributes.bottom ? parseFloat(node.attributes.bottom) : 0;
- }
- }
- return true;
- }
- case 'stop':
- this.parser = this.map.stop;
- this.parser.parseOpen(node);
- return true;
- default:
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.model.stops.push(this.parser.model);
- this.parser = undefined;
- }
- return true;
- }
- return false;
- }
- }, {
- key: "name",
- get: function get() {
- return 'gradient';
- }
- }, {
- key: "tag",
- get: function get() {
- return 'gradientFill';
- }
- }]);
- return GradientFillXform;
- }(BaseXform); // Fill encapsulates translation from fill model to/from xlsx
- var FillXform = /*#__PURE__*/function (_BaseXform4) {
- _inherits(FillXform, _BaseXform4);
- var _super4 = _createSuper(FillXform);
- function FillXform() {
- var _this4;
- _classCallCheck(this, FillXform);
- _this4 = _super4.call(this);
- _this4.map = {
- patternFill: new PatternFillXform(),
- gradientFill: new GradientFillXform()
- };
- return _this4;
- }
- _createClass(FillXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.addRollback();
- xmlStream.openNode('fill');
- switch (model.type) {
- case 'pattern':
- this.map.patternFill.render(xmlStream, model);
- break;
- case 'gradient':
- this.map.gradientFill.render(xmlStream, model);
- break;
- default:
- xmlStream.rollback();
- return;
- }
- xmlStream.closeNode();
- xmlStream.commit();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case 'fill':
- this.model = {};
- return true;
- default:
- this.parser = this.map[node.name];
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.model = this.parser.model;
- this.model.type = this.parser.name;
- this.parser = undefined;
- }
- return true;
- }
- return false;
- }
- }, {
- key: "validStyle",
- value: function validStyle(value) {
- return FillXform.validPatternValues[value];
- }
- }, {
- key: "tag",
- get: function get() {
- return 'fill';
- }
- }]);
- return FillXform;
- }(BaseXform);
- FillXform.validPatternValues = ['none', 'solid', 'darkVertical', 'darkGray', 'mediumGray', 'lightGray', 'gray125', 'gray0625', 'darkHorizontal', 'darkVertical', 'darkDown', 'darkUp', 'darkGrid', 'darkTrellis', 'lightHorizontal', 'lightVertical', 'lightDown', 'lightUp', 'lightGrid', 'lightTrellis', 'lightGrid'].reduce(function (p, v) {
- p[v] = true;
- return p;
- }, {});
- FillXform.StopXform = StopXform;
- FillXform.PatternFillXform = PatternFillXform;
- FillXform.GradientFillXform = GradientFillXform;
- module.exports = FillXform;
- },{"../base-xform":31,"./color-xform":127}],130:[function(require,module,exports){
- 'use strict';
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var ColorXform = require('./color-xform');
- var BooleanXform = require('../simple/boolean-xform');
- var IntegerXform = require('../simple/integer-xform');
- var StringXform = require('../simple/string-xform');
- var UnderlineXform = require('./underline-xform');
- var _ = require('../../../utils/under-dash');
- var BaseXform = require('../base-xform'); // Font encapsulates translation from font model to xlsx
- var FontXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(FontXform, _BaseXform);
- var _super = _createSuper(FontXform);
- function FontXform(options) {
- var _this;
- _classCallCheck(this, FontXform);
- _this = _super.call(this);
- _this.options = options || FontXform.OPTIONS;
- _this.map = {
- b: {
- prop: 'bold',
- xform: new BooleanXform({
- tag: 'b',
- attr: 'val'
- })
- },
- i: {
- prop: 'italic',
- xform: new BooleanXform({
- tag: 'i',
- attr: 'val'
- })
- },
- u: {
- prop: 'underline',
- xform: new UnderlineXform()
- },
- charset: {
- prop: 'charset',
- xform: new IntegerXform({
- tag: 'charset',
- attr: 'val'
- })
- },
- color: {
- prop: 'color',
- xform: new ColorXform()
- },
- condense: {
- prop: 'condense',
- xform: new BooleanXform({
- tag: 'condense',
- attr: 'val'
- })
- },
- extend: {
- prop: 'extend',
- xform: new BooleanXform({
- tag: 'extend',
- attr: 'val'
- })
- },
- family: {
- prop: 'family',
- xform: new IntegerXform({
- tag: 'family',
- attr: 'val'
- })
- },
- outline: {
- prop: 'outline',
- xform: new BooleanXform({
- tag: 'outline',
- attr: 'val'
- })
- },
- vertAlign: {
- prop: 'vertAlign',
- xform: new StringXform({
- tag: 'vertAlign',
- attr: 'val'
- })
- },
- scheme: {
- prop: 'scheme',
- xform: new StringXform({
- tag: 'scheme',
- attr: 'val'
- })
- },
- shadow: {
- prop: 'shadow',
- xform: new BooleanXform({
- tag: 'shadow',
- attr: 'val'
- })
- },
- strike: {
- prop: 'strike',
- xform: new BooleanXform({
- tag: 'strike',
- attr: 'val'
- })
- },
- sz: {
- prop: 'size',
- xform: new IntegerXform({
- tag: 'sz',
- attr: 'val'
- })
- }
- };
- _this.map[_this.options.fontNameTag] = {
- prop: 'name',
- xform: new StringXform({
- tag: _this.options.fontNameTag,
- attr: 'val'
- })
- };
- return _this;
- }
- _createClass(FontXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- var map = this.map;
- xmlStream.openNode(this.options.tagName);
- _.each(this.map, function (defn, tag) {
- map[tag].xform.render(xmlStream, model[defn.prop]);
- });
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- if (this.map[node.name]) {
- this.parser = this.map[node.name].xform;
- return this.parser.parseOpen(node);
- }
- switch (node.name) {
- case this.options.tagName:
- this.model = {};
- return true;
- default:
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser && !this.parser.parseClose(name)) {
- var item = this.map[name];
- if (this.parser.model) {
- this.model[item.prop] = this.parser.model;
- }
- this.parser = undefined;
- return true;
- }
- switch (name) {
- case this.options.tagName:
- return false;
- default:
- return true;
- }
- }
- }, {
- key: "tag",
- get: function get() {
- return this.options.tagName;
- }
- }]);
- return FontXform;
- }(BaseXform);
- FontXform.OPTIONS = {
- tagName: 'font',
- fontNameTag: 'name'
- };
- module.exports = FontXform;
- },{"../../../utils/under-dash":25,"../base-xform":31,"../simple/boolean-xform":115,"../simple/integer-xform":117,"../simple/string-xform":118,"./color-xform":127,"./underline-xform":135}],131:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var _ = require('../../../utils/under-dash');
- var defaultNumFormats = require('../../defaultnumformats');
- var BaseXform = require('../base-xform');
- function hashDefaultFormats() {
- var hash = {};
- _.each(defaultNumFormats, function (dnf, id) {
- if (dnf.f) {
- hash[dnf.f] = parseInt(id, 10);
- } // at some point, add the other cultures here...
- });
- return hash;
- }
- var defaultFmtHash = hashDefaultFormats(); // NumFmt encapsulates translation between number format and xlsx
- var NumFmtXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(NumFmtXform, _BaseXform);
- var _super = _createSuper(NumFmtXform);
- function NumFmtXform(id, formatCode) {
- var _this;
- _classCallCheck(this, NumFmtXform);
- _this = _super.call(this);
- _this.id = id;
- _this.formatCode = formatCode;
- return _this;
- }
- _createClass(NumFmtXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.leafNode('numFmt', {
- numFmtId: model.id,
- formatCode: model.formatCode
- });
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- switch (node.name) {
- case 'numFmt':
- this.model = {
- id: parseInt(node.attributes.numFmtId, 10),
- formatCode: node.attributes.formatCode.replace(/[\\](.)/g, '$1')
- };
- return true;
- default:
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'numFmt';
- }
- }]);
- return NumFmtXform;
- }(BaseXform);
- NumFmtXform.getDefaultFmtId = function getDefaultFmtId(formatCode) {
- return defaultFmtHash[formatCode];
- };
- NumFmtXform.getDefaultFmtCode = function getDefaultFmtCode(numFmtId) {
- return defaultNumFormats[numFmtId] && defaultNumFormats[numFmtId].f;
- };
- module.exports = NumFmtXform;
- },{"../../../utils/under-dash":25,"../../defaultnumformats":29,"../base-xform":31}],132:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var validation = {
- boolean: function boolean(value, dflt) {
- if (value === undefined) {
- return dflt;
- }
- return value;
- }
- }; // Protection encapsulates translation from style.protection model to/from xlsx
- var ProtectionXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(ProtectionXform, _BaseXform);
- var _super = _createSuper(ProtectionXform);
- function ProtectionXform() {
- _classCallCheck(this, ProtectionXform);
- return _super.apply(this, arguments);
- }
- _createClass(ProtectionXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.addRollback();
- xmlStream.openNode('protection');
- var isValid = false;
- function add(name, value) {
- if (value !== undefined) {
- xmlStream.addAttribute(name, value);
- isValid = true;
- }
- }
- add('locked', validation.boolean(model.locked, true) ? undefined : '0');
- add('hidden', validation.boolean(model.hidden, false) ? '1' : undefined);
- xmlStream.closeNode();
- if (isValid) {
- xmlStream.commit();
- } else {
- xmlStream.rollback();
- }
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- var model = {
- locked: !(node.attributes.locked === '0'),
- hidden: node.attributes.hidden === '1'
- }; // only want to record models that differ from defaults
- var isSignificant = !model.locked || model.hidden;
- this.model = isSignificant ? model : null;
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'protection';
- }
- }]);
- return ProtectionXform;
- }(BaseXform);
- module.exports = ProtectionXform;
- },{"../base-xform":31}],133:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var AlignmentXform = require('./alignment-xform');
- var ProtectionXform = require('./protection-xform'); // <xf numFmtId="[numFmtId]" fontId="[fontId]" fillId="[fillId]" borderId="[xf.borderId]" xfId="[xfId]">
- // Optional <alignment>
- // Optional <protection>
- // </xf>
- // Style assists translation from style model to/from xlsx
- var StyleXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(StyleXform, _BaseXform);
- var _super = _createSuper(StyleXform);
- function StyleXform(options) {
- var _this;
- _classCallCheck(this, StyleXform);
- _this = _super.call(this);
- _this.xfId = !!(options && options.xfId);
- _this.map = {
- alignment: new AlignmentXform(),
- protection: new ProtectionXform()
- };
- return _this;
- }
- _createClass(StyleXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openNode('xf', {
- numFmtId: model.numFmtId || 0,
- fontId: model.fontId || 0,
- fillId: model.fillId || 0,
- borderId: model.borderId || 0
- });
- if (this.xfId) {
- xmlStream.addAttribute('xfId', model.xfId || 0);
- }
- if (model.numFmtId) {
- xmlStream.addAttribute('applyNumberFormat', '1');
- }
- if (model.fontId) {
- xmlStream.addAttribute('applyFont', '1');
- }
- if (model.fillId) {
- xmlStream.addAttribute('applyFill', '1');
- }
- if (model.borderId) {
- xmlStream.addAttribute('applyBorder', '1');
- }
- if (model.alignment) {
- xmlStream.addAttribute('applyAlignment', '1');
- }
- if (model.protection) {
- xmlStream.addAttribute('applyProtection', '1');
- }
- /**
- * Rendering tags causes close of XML stream.
- * Therefore adding attributes must be done before rendering tags.
- */
- if (model.alignment) {
- this.map.alignment.render(xmlStream, model.alignment);
- }
- if (model.protection) {
- this.map.protection.render(xmlStream, model.protection);
- }
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- } // used during sax parsing of xml to build font object
- switch (node.name) {
- case 'xf':
- this.model = {
- numFmtId: parseInt(node.attributes.numFmtId, 10),
- fontId: parseInt(node.attributes.fontId, 10),
- fillId: parseInt(node.attributes.fillId, 10),
- borderId: parseInt(node.attributes.borderId, 10)
- };
- if (this.xfId) {
- this.model.xfId = parseInt(node.attributes.xfId, 10);
- }
- return true;
- case 'alignment':
- this.parser = this.map.alignment;
- this.parser.parseOpen(node);
- return true;
- case 'protection':
- this.parser = this.map.protection;
- this.parser.parseOpen(node);
- return true;
- default:
- return false;
- }
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- if (this.map.protection === this.parser) {
- this.model.protection = this.parser.model;
- } else {
- this.model.alignment = this.parser.model;
- }
- this.parser = undefined;
- }
- return true;
- }
- return name !== 'xf';
- }
- }, {
- key: "tag",
- get: function get() {
- return 'xf';
- }
- }]);
- return StyleXform;
- }(BaseXform);
- module.exports = StyleXform;
- },{"../base-xform":31,"./alignment-xform":125,"./protection-xform":132}],134:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- /* eslint-disable max-classes-per-file */
- var Enums = require('../../../doc/enums');
- var XmlStream = require('../../../utils/xml-stream');
- var BaseXform = require('../base-xform');
- var StaticXform = require('../static-xform');
- var ListXform = require('../list-xform');
- var FontXform = require('./font-xform');
- var FillXform = require('./fill-xform');
- var BorderXform = require('./border-xform');
- var NumFmtXform = require('./numfmt-xform');
- var StyleXform = require('./style-xform');
- var DxfXform = require('./dxf-xform'); // custom numfmt ids start here
- var NUMFMT_BASE = 164; // =============================================================================
- // StylesXform is used to generate and parse the styles.xml file
- // it manages the collections of fonts, number formats, alignments, etc
- var StylesXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(StylesXform, _BaseXform);
- var _super = _createSuper(StylesXform);
- function StylesXform(initialise) {
- var _this;
- _classCallCheck(this, StylesXform);
- _this = _super.call(this);
- _this.map = {
- numFmts: new ListXform({
- tag: 'numFmts',
- count: true,
- childXform: new NumFmtXform()
- }),
- fonts: new ListXform({
- tag: 'fonts',
- count: true,
- childXform: new FontXform(),
- $: {
- 'x14ac:knownFonts': 1
- }
- }),
- fills: new ListXform({
- tag: 'fills',
- count: true,
- childXform: new FillXform()
- }),
- borders: new ListXform({
- tag: 'borders',
- count: true,
- childXform: new BorderXform()
- }),
- cellStyleXfs: new ListXform({
- tag: 'cellStyleXfs',
- count: true,
- childXform: new StyleXform()
- }),
- cellXfs: new ListXform({
- tag: 'cellXfs',
- count: true,
- childXform: new StyleXform({
- xfId: true
- })
- }),
- dxfs: new ListXform({
- tag: 'dxfs',
- always: true,
- count: true,
- childXform: new DxfXform()
- }),
- // for style manager
- numFmt: new NumFmtXform(),
- font: new FontXform(),
- fill: new FillXform(),
- border: new BorderXform(),
- style: new StyleXform({
- xfId: true
- }),
- cellStyles: StylesXform.STATIC_XFORMS.cellStyles,
- tableStyles: StylesXform.STATIC_XFORMS.tableStyles,
- extLst: StylesXform.STATIC_XFORMS.extLst
- };
- if (initialise) {
- // StylesXform also acts as style manager and is used to build up styles-model during worksheet processing
- _this.init();
- }
- return _this;
- }
- _createClass(StylesXform, [{
- key: "initIndex",
- value: function initIndex() {
- this.index = {
- style: {},
- numFmt: {},
- numFmtNextId: 164,
- // start custom format ids here
- font: {},
- border: {},
- fill: {}
- };
- }
- }, {
- key: "init",
- value: function init() {
- // Prepare for Style Manager role
- this.model = {
- styles: [],
- numFmts: [],
- fonts: [],
- borders: [],
- fills: [],
- dxfs: []
- };
- this.initIndex(); // default (zero) border
- this._addBorder({}); // add default (all zero) style
- this._addStyle({
- numFmtId: 0,
- fontId: 0,
- fillId: 0,
- borderId: 0,
- xfId: 0
- }); // add default fills
- this._addFill({
- type: 'pattern',
- pattern: 'none'
- });
- this._addFill({
- type: 'pattern',
- pattern: 'gray125'
- });
- this.weakMap = new WeakMap();
- }
- }, {
- key: "render",
- value: function render(xmlStream, model) {
- model = model || this.model; //
- // <fonts count="2" x14ac:knownFonts="1">
- xmlStream.openXml(XmlStream.StdDocAttributes);
- xmlStream.openNode('styleSheet', StylesXform.STYLESHEET_ATTRIBUTES);
- if (this.index) {
- // model has been built by style manager role (contains xml)
- if (model.numFmts && model.numFmts.length) {
- xmlStream.openNode('numFmts', {
- count: model.numFmts.length
- });
- model.numFmts.forEach(function (numFmtXml) {
- xmlStream.writeXml(numFmtXml);
- });
- xmlStream.closeNode();
- }
- if (!model.fonts.length) {
- // default (zero) font
- this._addFont({
- size: 11,
- color: {
- theme: 1
- },
- name: 'Calibri',
- family: 2,
- scheme: 'minor'
- });
- }
- xmlStream.openNode('fonts', {
- count: model.fonts.length,
- 'x14ac:knownFonts': 1
- });
- model.fonts.forEach(function (fontXml) {
- xmlStream.writeXml(fontXml);
- });
- xmlStream.closeNode();
- xmlStream.openNode('fills', {
- count: model.fills.length
- });
- model.fills.forEach(function (fillXml) {
- xmlStream.writeXml(fillXml);
- });
- xmlStream.closeNode();
- xmlStream.openNode('borders', {
- count: model.borders.length
- });
- model.borders.forEach(function (borderXml) {
- xmlStream.writeXml(borderXml);
- });
- xmlStream.closeNode();
- this.map.cellStyleXfs.render(xmlStream, [{
- numFmtId: 0,
- fontId: 0,
- fillId: 0,
- borderId: 0,
- xfId: 0
- }]);
- xmlStream.openNode('cellXfs', {
- count: model.styles.length
- });
- model.styles.forEach(function (styleXml) {
- xmlStream.writeXml(styleXml);
- });
- xmlStream.closeNode();
- } else {
- // model is plain JSON and needs to be xformed
- this.map.numFmts.render(xmlStream, model.numFmts);
- this.map.fonts.render(xmlStream, model.fonts);
- this.map.fills.render(xmlStream, model.fills);
- this.map.borders.render(xmlStream, model.borders);
- this.map.cellStyleXfs.render(xmlStream, [{
- numFmtId: 0,
- fontId: 0,
- fillId: 0,
- borderId: 0,
- xfId: 0
- }]);
- this.map.cellXfs.render(xmlStream, model.styles);
- }
- StylesXform.STATIC_XFORMS.cellStyles.render(xmlStream);
- this.map.dxfs.render(xmlStream, model.dxfs);
- StylesXform.STATIC_XFORMS.tableStyles.render(xmlStream);
- StylesXform.STATIC_XFORMS.extLst.render(xmlStream);
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case 'styleSheet':
- this.initIndex();
- return true;
- default:
- this.parser = this.map[node.name];
- if (this.parser) {
- this.parser.parseOpen(node);
- }
- return true;
- }
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- var _this2 = this;
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.parser = undefined;
- }
- return true;
- }
- switch (name) {
- case 'styleSheet':
- {
- this.model = {};
- var add = function add(propName, xform) {
- if (xform.model && xform.model.length) {
- _this2.model[propName] = xform.model;
- }
- };
- add('numFmts', this.map.numFmts);
- add('fonts', this.map.fonts);
- add('fills', this.map.fills);
- add('borders', this.map.borders);
- add('styles', this.map.cellXfs);
- add('dxfs', this.map.dxfs); // index numFmts
- this.index = {
- model: [],
- numFmt: []
- };
- if (this.model.numFmts) {
- var numFmtIndex = this.index.numFmt;
- this.model.numFmts.forEach(function (numFmt) {
- numFmtIndex[numFmt.id] = numFmt.formatCode;
- });
- }
- return false;
- }
- default:
- // not quite sure how we get here!
- return true;
- }
- } // add a cell's style model to the collection
- // each style property is processed and cross-referenced, etc.
- // the styleId is returned. Note: cellType is used when numFmt not defined
- }, {
- key: "addStyleModel",
- value: function addStyleModel(model, cellType) {
- if (!model) {
- return 0;
- } // if we have no default font, add it here now
- if (!this.model.fonts.length) {
- // default (zero) font
- this._addFont({
- size: 11,
- color: {
- theme: 1
- },
- name: 'Calibri',
- family: 2,
- scheme: 'minor'
- });
- } // if we have seen this style object before, assume it has the same styleId
- if (this.weakMap && this.weakMap.has(model)) {
- return this.weakMap.get(model);
- }
- var style = {};
- cellType = cellType || Enums.ValueType.Number;
- if (model.numFmt) {
- style.numFmtId = this._addNumFmtStr(model.numFmt);
- } else {
- switch (cellType) {
- case Enums.ValueType.Number:
- style.numFmtId = this._addNumFmtStr('General');
- break;
- case Enums.ValueType.Date:
- style.numFmtId = this._addNumFmtStr('mm-dd-yy');
- break;
- default:
- break;
- }
- }
- if (model.font) {
- style.fontId = this._addFont(model.font);
- }
- if (model.border) {
- style.borderId = this._addBorder(model.border);
- }
- if (model.fill) {
- style.fillId = this._addFill(model.fill);
- }
- if (model.alignment) {
- style.alignment = model.alignment;
- }
- if (model.protection) {
- style.protection = model.protection;
- }
- var styleId = this._addStyle(style);
- if (this.weakMap) {
- this.weakMap.set(model, styleId);
- }
- return styleId;
- } // given a styleId (i.e. s="n"), get the cell's style model
- // objects are shared where possible.
- }, {
- key: "getStyleModel",
- value: function getStyleModel(id) {
- // if the style doesn't exist return null
- var style = this.model.styles[id];
- if (!style) return null; // have we built this model before?
- var model = this.index.model[id];
- if (model) return model; // build a new model
- model = this.index.model[id] = {}; // -------------------------------------------------------
- // number format
- if (style.numFmtId) {
- var numFmt = this.index.numFmt[style.numFmtId] || NumFmtXform.getDefaultFmtCode(style.numFmtId);
- if (numFmt) {
- model.numFmt = numFmt;
- }
- }
- function addStyle(name, group, styleId) {
- if (styleId || styleId === 0) {
- var part = group[styleId];
- if (part) {
- model[name] = part;
- }
- }
- }
- addStyle('font', this.model.fonts, style.fontId);
- addStyle('border', this.model.borders, style.borderId);
- addStyle('fill', this.model.fills, style.fillId); // -------------------------------------------------------
- // alignment
- if (style.alignment) {
- model.alignment = style.alignment;
- } // -------------------------------------------------------
- // protection
- if (style.protection) {
- model.protection = style.protection;
- }
- return model;
- }
- }, {
- key: "addDxfStyle",
- value: function addDxfStyle(style) {
- this.model.dxfs.push(style);
- return this.model.dxfs.length - 1;
- }
- }, {
- key: "getDxfStyle",
- value: function getDxfStyle(id) {
- return this.model.dxfs[id];
- } // =========================================================================
- // Private Interface
- }, {
- key: "_addStyle",
- value: function _addStyle(style) {
- var xml = this.map.style.toXml(style);
- var index = this.index.style[xml];
- if (index === undefined) {
- index = this.index.style[xml] = this.model.styles.length;
- this.model.styles.push(xml);
- }
- return index;
- } // =========================================================================
- // Number Formats
- }, {
- key: "_addNumFmtStr",
- value: function _addNumFmtStr(formatCode) {
- // check if default format
- var index = NumFmtXform.getDefaultFmtId(formatCode);
- if (index !== undefined) return index; // check if already in
- index = this.index.numFmt[formatCode];
- if (index !== undefined) return index;
- index = this.index.numFmt[formatCode] = NUMFMT_BASE + this.model.numFmts.length;
- var xml = this.map.numFmt.toXml({
- id: index,
- formatCode: formatCode
- });
- this.model.numFmts.push(xml);
- return index;
- } // =========================================================================
- // Fonts
- }, {
- key: "_addFont",
- value: function _addFont(font) {
- var xml = this.map.font.toXml(font);
- var index = this.index.font[xml];
- if (index === undefined) {
- index = this.index.font[xml] = this.model.fonts.length;
- this.model.fonts.push(xml);
- }
- return index;
- } // =========================================================================
- // Borders
- }, {
- key: "_addBorder",
- value: function _addBorder(border) {
- var xml = this.map.border.toXml(border);
- var index = this.index.border[xml];
- if (index === undefined) {
- index = this.index.border[xml] = this.model.borders.length;
- this.model.borders.push(xml);
- }
- return index;
- } // =========================================================================
- // Fills
- }, {
- key: "_addFill",
- value: function _addFill(fill) {
- var xml = this.map.fill.toXml(fill);
- var index = this.index.fill[xml];
- if (index === undefined) {
- index = this.index.fill[xml] = this.model.fills.length;
- this.model.fills.push(xml);
- }
- return index;
- } // =========================================================================
- }]);
- return StylesXform;
- }(BaseXform);
- StylesXform.STYLESHEET_ATTRIBUTES = {
- xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',
- 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',
- 'mc:Ignorable': 'x14ac x16r2',
- 'xmlns:x14ac': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac',
- 'xmlns:x16r2': 'http://schemas.microsoft.com/office/spreadsheetml/2015/02/main'
- };
- StylesXform.STATIC_XFORMS = {
- cellStyles: new StaticXform({
- tag: 'cellStyles',
- $: {
- count: 1
- },
- c: [{
- tag: 'cellStyle',
- $: {
- name: 'Normal',
- xfId: 0,
- builtinId: 0
- }
- }]
- }),
- dxfs: new StaticXform({
- tag: 'dxfs',
- $: {
- count: 0
- }
- }),
- tableStyles: new StaticXform({
- tag: 'tableStyles',
- $: {
- count: 0,
- defaultTableStyle: 'TableStyleMedium2',
- defaultPivotStyle: 'PivotStyleLight16'
- }
- }),
- extLst: new StaticXform({
- tag: 'extLst',
- c: [{
- tag: 'ext',
- $: {
- uri: '{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}',
- 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main'
- },
- c: [{
- tag: 'x14:slicerStyles',
- $: {
- defaultSlicerStyle: 'SlicerStyleLight1'
- }
- }]
- }, {
- tag: 'ext',
- $: {
- uri: '{9260A510-F301-46a8-8635-F512D64BE5F5}',
- 'xmlns:x15': 'http://schemas.microsoft.com/office/spreadsheetml/2010/11/main'
- },
- c: [{
- tag: 'x15:timelineStyles',
- $: {
- defaultTimelineStyle: 'TimeSlicerStyleLight1'
- }
- }]
- }]
- })
- }; // the stylemanager mock acts like StyleManager except that it always returns 0 or {}
- var StylesXformMock = /*#__PURE__*/function (_StylesXform) {
- _inherits(StylesXformMock, _StylesXform);
- var _super2 = _createSuper(StylesXformMock);
- function StylesXformMock() {
- var _this3;
- _classCallCheck(this, StylesXformMock);
- _this3 = _super2.call(this);
- _this3.model = {
- styles: [{
- numFmtId: 0,
- fontId: 0,
- fillId: 0,
- borderId: 0,
- xfId: 0
- }],
- numFmts: [],
- fonts: [{
- size: 11,
- color: {
- theme: 1
- },
- name: 'Calibri',
- family: 2,
- scheme: 'minor'
- }],
- borders: [{}],
- fills: [{
- type: 'pattern',
- pattern: 'none'
- }, {
- type: 'pattern',
- pattern: 'gray125'
- }]
- };
- return _this3;
- } // =========================================================================
- // Style Manager Interface
- // override normal behaviour - consume and dispose
- _createClass(StylesXformMock, [{
- key: "parseStream",
- value: function parseStream(stream) {
- stream.autodrain();
- return Promise.resolve();
- } // add a cell's style model to the collection
- // each style property is processed and cross-referenced, etc.
- // the styleId is returned. Note: cellType is used when numFmt not defined
- }, {
- key: "addStyleModel",
- value: function addStyleModel(model, cellType) {
- switch (cellType) {
- case Enums.ValueType.Date:
- return this.dateStyleId;
- default:
- return 0;
- }
- }
- }, {
- key: "getStyleModel",
- // given a styleId (i.e. s="n"), get the cell's style model
- // objects are shared where possible.
- value: function getStyleModel()
- /* id */
- {
- return {};
- }
- }, {
- key: "dateStyleId",
- get: function get() {
- if (!this._dateStyleId) {
- var dateStyle = {
- numFmtId: NumFmtXform.getDefaultFmtId('mm-dd-yy')
- };
- this._dateStyleId = this.model.styles.length;
- this.model.styles.push(dateStyle);
- }
- return this._dateStyleId;
- }
- }]);
- return StylesXformMock;
- }(StylesXform);
- StylesXform.Mock = StylesXformMock;
- module.exports = StylesXform;
- },{"../../../doc/enums":7,"../../../utils/xml-stream":27,"../base-xform":31,"../list-xform":70,"../static-xform":119,"./border-xform":126,"./dxf-xform":128,"./fill-xform":129,"./font-xform":130,"./numfmt-xform":131,"./style-xform":133}],135:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var UnderlineXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(UnderlineXform, _BaseXform);
- var _super = _createSuper(UnderlineXform);
- function UnderlineXform(model) {
- var _this;
- _classCallCheck(this, UnderlineXform);
- _this = _super.call(this);
- _this.model = model;
- return _this;
- }
- _createClass(UnderlineXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- model = model || this.model;
- if (model === true) {
- xmlStream.leafNode('u');
- } else {
- var attr = UnderlineXform.Attributes[model];
- if (attr) {
- xmlStream.leafNode('u', attr);
- }
- }
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (node.name === 'u') {
- this.model = node.attributes.val || true;
- }
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'u';
- }
- }]);
- return UnderlineXform;
- }(BaseXform);
- UnderlineXform.Attributes = {
- single: {},
- double: {
- val: 'double'
- },
- singleAccounting: {
- val: 'singleAccounting'
- },
- doubleAccounting: {
- val: 'doubleAccounting'
- }
- };
- module.exports = UnderlineXform;
- },{"../base-xform":31}],136:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var FilterColumnXform = require('./filter-column-xform');
- var AutoFilterXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(AutoFilterXform, _BaseXform);
- var _super = _createSuper(AutoFilterXform);
- function AutoFilterXform() {
- var _this;
- _classCallCheck(this, AutoFilterXform);
- _this = _super.call(this);
- _this.map = {
- filterColumn: new FilterColumnXform()
- };
- return _this;
- }
- _createClass(AutoFilterXform, [{
- key: "prepare",
- value: function prepare(model) {
- var _this2 = this;
- model.columns.forEach(function (column, index) {
- _this2.map.filterColumn.prepare(column, {
- index: index
- });
- });
- }
- }, {
- key: "render",
- value: function render(xmlStream, model) {
- var _this3 = this;
- xmlStream.openNode(this.tag, {
- ref: model.autoFilterRef
- });
- model.columns.forEach(function (column) {
- _this3.map.filterColumn.render(xmlStream, column);
- });
- xmlStream.closeNode();
- return true;
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- switch (node.name) {
- case this.tag:
- this.model = {
- autoFilterRef: node.attributes.ref,
- columns: []
- };
- return true;
- default:
- this.parser = this.map[node.name];
- if (this.parser) {
- this.parseOpen(node);
- return true;
- }
- throw new Error("Unexpected xml node in parseOpen: ".concat(JSON.stringify(node)));
- }
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.model.columns.push(this.parser.model);
- this.parser = undefined;
- }
- return true;
- }
- switch (name) {
- case this.tag:
- return false;
- default:
- throw new Error("Unexpected xml node in parseClose: ".concat(name));
- }
- }
- }, {
- key: "tag",
- get: function get() {
- return 'autoFilter';
- }
- }]);
- return AutoFilterXform;
- }(BaseXform);
- module.exports = AutoFilterXform;
- },{"../base-xform":31,"./filter-column-xform":137}],137:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var FilterColumnXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(FilterColumnXform, _BaseXform);
- var _super = _createSuper(FilterColumnXform);
- function FilterColumnXform() {
- _classCallCheck(this, FilterColumnXform);
- return _super.apply(this, arguments);
- }
- _createClass(FilterColumnXform, [{
- key: "prepare",
- value: function prepare(model, options) {
- model.colId = options.index.toString();
- }
- }, {
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.leafNode(this.tag, {
- colId: model.colId,
- hiddenButton: model.filterButton ? '0' : '1'
- });
- return true;
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (node.name === this.tag) {
- var attributes = node.attributes;
- this.model = {
- filterButton: attributes.hiddenButton === '0'
- };
- return true;
- }
- return false;
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'filterColumn';
- }
- }]);
- return FilterColumnXform;
- }(BaseXform);
- module.exports = FilterColumnXform;
- },{"../base-xform":31}],138:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var TableColumnXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(TableColumnXform, _BaseXform);
- var _super = _createSuper(TableColumnXform);
- function TableColumnXform() {
- _classCallCheck(this, TableColumnXform);
- return _super.apply(this, arguments);
- }
- _createClass(TableColumnXform, [{
- key: "prepare",
- value: function prepare(model, options) {
- model.id = options.index + 1;
- }
- }, {
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.leafNode(this.tag, {
- id: model.id.toString(),
- name: model.name,
- totalsRowLabel: model.totalsRowLabel,
- totalsRowFunction: model.totalsRowFunction,
- dxfId: model.dxfId
- });
- return true;
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (node.name === this.tag) {
- var attributes = node.attributes;
- this.model = {
- name: attributes.name,
- totalsRowLabel: attributes.totalsRowLabel,
- totalsRowFunction: attributes.totalsRowFunction,
- dxfId: attributes.dxfId
- };
- return true;
- }
- return false;
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'tableColumn';
- }
- }]);
- return TableColumnXform;
- }(BaseXform);
- module.exports = TableColumnXform;
- },{"../base-xform":31}],139:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var BaseXform = require('../base-xform');
- var TableStyleInfoXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(TableStyleInfoXform, _BaseXform);
- var _super = _createSuper(TableStyleInfoXform);
- function TableStyleInfoXform() {
- _classCallCheck(this, TableStyleInfoXform);
- return _super.apply(this, arguments);
- }
- _createClass(TableStyleInfoXform, [{
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.leafNode(this.tag, {
- name: model.theme ? model.theme : undefined,
- showFirstColumn: model.showFirstColumn ? '1' : '0',
- showLastColumn: model.showLastColumn ? '1' : '0',
- showRowStripes: model.showRowStripes ? '1' : '0',
- showColumnStripes: model.showColumnStripes ? '1' : '0'
- });
- return true;
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (node.name === this.tag) {
- var attributes = node.attributes;
- this.model = {
- theme: attributes.name ? attributes.name : null,
- showFirstColumn: attributes.showFirstColumn === '1',
- showLastColumn: attributes.showLastColumn === '1',
- showRowStripes: attributes.showRowStripes === '1',
- showColumnStripes: attributes.showColumnStripes === '1'
- };
- return true;
- }
- return false;
- }
- }, {
- key: "parseText",
- value: function parseText() {}
- }, {
- key: "parseClose",
- value: function parseClose() {
- return false;
- }
- }, {
- key: "tag",
- get: function get() {
- return 'tableStyleInfo';
- }
- }]);
- return TableStyleInfoXform;
- }(BaseXform);
- module.exports = TableStyleInfoXform;
- },{"../base-xform":31}],140:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- var XmlStream = require('../../../utils/xml-stream');
- var BaseXform = require('../base-xform');
- var ListXform = require('../list-xform');
- var AutoFilterXform = require('./auto-filter-xform');
- var TableColumnXform = require('./table-column-xform');
- var TableStyleInfoXform = require('./table-style-info-xform');
- var TableXform = /*#__PURE__*/function (_BaseXform) {
- _inherits(TableXform, _BaseXform);
- var _super = _createSuper(TableXform);
- function TableXform() {
- var _this;
- _classCallCheck(this, TableXform);
- _this = _super.call(this);
- _this.map = {
- autoFilter: new AutoFilterXform(),
- tableColumns: new ListXform({
- tag: 'tableColumns',
- count: true,
- empty: true,
- childXform: new TableColumnXform()
- }),
- tableStyleInfo: new TableStyleInfoXform()
- };
- return _this;
- }
- _createClass(TableXform, [{
- key: "prepare",
- value: function prepare(model, options) {
- this.map.autoFilter.prepare(model);
- this.map.tableColumns.prepare(model.columns, options);
- }
- }, {
- key: "render",
- value: function render(xmlStream, model) {
- xmlStream.openXml(XmlStream.StdDocAttributes);
- xmlStream.openNode(this.tag, _objectSpread(_objectSpread({}, TableXform.TABLE_ATTRIBUTES), {}, {
- id: model.id,
- name: model.name,
- displayName: model.displayName || model.name,
- ref: model.tableRef,
- totalsRowCount: model.totalsRow ? '1' : undefined,
- totalsRowShown: model.totalsRow ? undefined : '1',
- headerRowCount: model.headerRow ? '1' : '0'
- }));
- this.map.autoFilter.render(xmlStream, model);
- this.map.tableColumns.render(xmlStream, model.columns);
- this.map.tableStyleInfo.render(xmlStream, model.style);
- xmlStream.closeNode();
- }
- }, {
- key: "parseOpen",
- value: function parseOpen(node) {
- if (this.parser) {
- this.parser.parseOpen(node);
- return true;
- }
- var name = node.name,
- attributes = node.attributes;
- switch (name) {
- case this.tag:
- this.reset();
- this.model = {
- name: attributes.name,
- displayName: attributes.displayName || attributes.name,
- tableRef: attributes.ref,
- totalsRow: attributes.totalsRowCount === '1',
- headerRow: attributes.headerRowCount === '1'
- };
- break;
- default:
- this.parser = this.map[node.name];
- if (this.parser) {
- this.parser.parseOpen(node);
- }
- break;
- }
- return true;
- }
- }, {
- key: "parseText",
- value: function parseText(text) {
- if (this.parser) {
- this.parser.parseText(text);
- }
- }
- }, {
- key: "parseClose",
- value: function parseClose(name) {
- var _this2 = this;
- if (this.parser) {
- if (!this.parser.parseClose(name)) {
- this.parser = undefined;
- }
- return true;
- }
- switch (name) {
- case this.tag:
- this.model.columns = this.map.tableColumns.model;
- if (this.map.autoFilter.model) {
- this.model.autoFilterRef = this.map.autoFilter.model.autoFilterRef;
- this.map.autoFilter.model.columns.forEach(function (column, index) {
- _this2.model.columns[index].filterButton = column.filterButton;
- });
- }
- this.model.style = this.map.tableStyleInfo.model;
- return false;
- default:
- // could be some unrecognised tags
- return true;
- }
- }
- }, {
- key: "reconcile",
- value: function reconcile(model, options) {
- // fetch the dfxs from styles
- model.columns.forEach(function (column) {
- if (column.dxfId !== undefined) {
- column.style = options.styles.getDxfStyle(column.dxfId);
- }
- });
- }
- }, {
- key: "tag",
- get: function get() {
- return 'table';
- }
- }]);
- return TableXform;
- }(BaseXform);
- TableXform.TABLE_ATTRIBUTES = {
- xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',
- 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',
- 'mc:Ignorable': 'xr xr3',
- 'xmlns:xr': 'http://schemas.microsoft.com/office/spreadsheetml/2014/revision',
- 'xmlns:xr3': 'http://schemas.microsoft.com/office/spreadsheetml/2016/revision3' // 'xr:uid': '{00000000-000C-0000-FFFF-FFFF00000000}',
- };
- module.exports = TableXform;
- },{"../../../utils/xml-stream":27,"../base-xform":31,"../list-xform":70,"./auto-filter-xform":136,"./table-column-xform":138,"./table-style-info-xform":139}],141:[function(require,module,exports){
- (function (process,Buffer){
- "use strict";
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
- function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _asyncIterator(iterable) { var method; if (typeof Symbol !== "undefined") { if (Symbol.asyncIterator) { method = iterable[Symbol.asyncIterator]; if (method != null) return method.call(iterable); } if (Symbol.iterator) { method = iterable[Symbol.iterator]; if (method != null) return method.call(iterable); } } throw new TypeError("Object is not async iterable"); }
- var fs = require('fs');
- var JSZip = require('jszip');
- var _require = require('readable-stream'),
- PassThrough = _require.PassThrough;
- var ZipStream = require('../utils/zip-stream');
- var StreamBuf = require('../utils/stream-buf');
- var utils = require('../utils/utils');
- var XmlStream = require('../utils/xml-stream');
- var _require2 = require('../utils/browser-buffer-decode'),
- bufferToString = _require2.bufferToString;
- var StylesXform = require('./xform/style/styles-xform');
- var CoreXform = require('./xform/core/core-xform');
- var SharedStringsXform = require('./xform/strings/shared-strings-xform');
- var RelationshipsXform = require('./xform/core/relationships-xform');
- var ContentTypesXform = require('./xform/core/content-types-xform');
- var AppXform = require('./xform/core/app-xform');
- var WorkbookXform = require('./xform/book/workbook-xform');
- var WorksheetXform = require('./xform/sheet/worksheet-xform');
- var DrawingXform = require('./xform/drawing/drawing-xform');
- var TableXform = require('./xform/table/table-xform');
- var CommentsXform = require('./xform/comment/comments-xform');
- var VmlNotesXform = require('./xform/comment/vml-notes-xform');
- var theme1Xml = require('./xml/theme1.js');
- function fsReadFileAsync(filename, options) {
- return new Promise(function (resolve, reject) {
- fs.readFile(filename, options, function (error, data) {
- if (error) {
- reject(error);
- } else {
- resolve(data);
- }
- });
- });
- }
- var XLSX = /*#__PURE__*/function () {
- function XLSX(workbook) {
- _classCallCheck(this, XLSX);
- this.workbook = workbook;
- } // ===============================================================================
- // Workbook
- // =========================================================================
- // Read
- _createClass(XLSX, [{
- key: "readFile",
- value: function () {
- var _readFile = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(filename, options) {
- var stream, workbook;
- return regeneratorRuntime.wrap(function _callee$(_context) {
- while (1) {
- switch (_context.prev = _context.next) {
- case 0:
- _context.next = 2;
- return utils.fs.exists(filename);
- case 2:
- if (_context.sent) {
- _context.next = 4;
- break;
- }
- throw new Error("File not found: ".concat(filename));
- case 4:
- stream = fs.createReadStream(filename);
- _context.prev = 5;
- _context.next = 8;
- return this.read(stream, options);
- case 8:
- workbook = _context.sent;
- stream.close();
- return _context.abrupt("return", workbook);
- case 13:
- _context.prev = 13;
- _context.t0 = _context["catch"](5);
- stream.close();
- throw _context.t0;
- case 17:
- case "end":
- return _context.stop();
- }
- }
- }, _callee, this, [[5, 13]]);
- }));
- function readFile(_x, _x2) {
- return _readFile.apply(this, arguments);
- }
- return readFile;
- }()
- }, {
- key: "parseRels",
- value: function parseRels(stream) {
- var xform = new RelationshipsXform();
- return xform.parseStream(stream);
- }
- }, {
- key: "parseWorkbook",
- value: function parseWorkbook(stream) {
- var xform = new WorkbookXform();
- return xform.parseStream(stream);
- }
- }, {
- key: "parseSharedStrings",
- value: function parseSharedStrings(stream) {
- var xform = new SharedStringsXform();
- return xform.parseStream(stream);
- }
- }, {
- key: "reconcile",
- value: function reconcile(model, options) {
- var workbookXform = new WorkbookXform();
- var worksheetXform = new WorksheetXform(options);
- var drawingXform = new DrawingXform();
- var tableXform = new TableXform();
- workbookXform.reconcile(model); // reconcile drawings with their rels
- var drawingOptions = {
- media: model.media,
- mediaIndex: model.mediaIndex
- };
- Object.keys(model.drawings).forEach(function (name) {
- var drawing = model.drawings[name];
- var drawingRel = model.drawingRels[name];
- if (drawingRel) {
- drawingOptions.rels = drawingRel.reduce(function (o, rel) {
- o[rel.Id] = rel;
- return o;
- }, {});
- (drawing.anchors || []).forEach(function (anchor) {
- var hyperlinks = anchor.picture && anchor.picture.hyperlinks;
- if (hyperlinks && drawingOptions.rels[hyperlinks.rId]) {
- hyperlinks.hyperlink = drawingOptions.rels[hyperlinks.rId].Target;
- delete hyperlinks.rId;
- }
- });
- drawingXform.reconcile(drawing, drawingOptions);
- }
- }); // reconcile tables with the default styles
- var tableOptions = {
- styles: model.styles
- };
- Object.values(model.tables).forEach(function (table) {
- tableXform.reconcile(table, tableOptions);
- });
- var sheetOptions = {
- styles: model.styles,
- sharedStrings: model.sharedStrings,
- media: model.media,
- mediaIndex: model.mediaIndex,
- date1904: model.properties && model.properties.date1904,
- drawings: model.drawings,
- comments: model.comments,
- tables: model.tables,
- vmlDrawings: model.vmlDrawings
- };
- model.worksheets.forEach(function (worksheet) {
- worksheet.relationships = model.worksheetRels[worksheet.sheetNo];
- worksheetXform.reconcile(worksheet, sheetOptions);
- }); // delete unnecessary parts
- delete model.worksheetHash;
- delete model.worksheetRels;
- delete model.globalRels;
- delete model.sharedStrings;
- delete model.workbookRels;
- delete model.sheetDefs;
- delete model.styles;
- delete model.mediaIndex;
- delete model.drawings;
- delete model.drawingRels;
- delete model.vmlDrawings;
- }
- }, {
- key: "_processWorksheetEntry",
- value: function () {
- var _processWorksheetEntry2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(stream, model, sheetNo, options, path) {
- var xform, worksheet;
- return regeneratorRuntime.wrap(function _callee2$(_context2) {
- while (1) {
- switch (_context2.prev = _context2.next) {
- case 0:
- xform = new WorksheetXform(options);
- _context2.next = 3;
- return xform.parseStream(stream);
- case 3:
- worksheet = _context2.sent;
- worksheet.sheetNo = sheetNo;
- model.worksheetHash[path] = worksheet;
- model.worksheets.push(worksheet);
- case 7:
- case "end":
- return _context2.stop();
- }
- }
- }, _callee2);
- }));
- function _processWorksheetEntry(_x3, _x4, _x5, _x6, _x7) {
- return _processWorksheetEntry2.apply(this, arguments);
- }
- return _processWorksheetEntry;
- }()
- }, {
- key: "_processCommentEntry",
- value: function () {
- var _processCommentEntry2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3(stream, model, name) {
- var xform, comments;
- return regeneratorRuntime.wrap(function _callee3$(_context3) {
- while (1) {
- switch (_context3.prev = _context3.next) {
- case 0:
- xform = new CommentsXform();
- _context3.next = 3;
- return xform.parseStream(stream);
- case 3:
- comments = _context3.sent;
- model.comments["../".concat(name, ".xml")] = comments;
- case 5:
- case "end":
- return _context3.stop();
- }
- }
- }, _callee3);
- }));
- function _processCommentEntry(_x8, _x9, _x10) {
- return _processCommentEntry2.apply(this, arguments);
- }
- return _processCommentEntry;
- }()
- }, {
- key: "_processTableEntry",
- value: function () {
- var _processTableEntry2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4(stream, model, name) {
- var xform, table;
- return regeneratorRuntime.wrap(function _callee4$(_context4) {
- while (1) {
- switch (_context4.prev = _context4.next) {
- case 0:
- xform = new TableXform();
- _context4.next = 3;
- return xform.parseStream(stream);
- case 3:
- table = _context4.sent;
- model.tables["../tables/".concat(name, ".xml")] = table;
- case 5:
- case "end":
- return _context4.stop();
- }
- }
- }, _callee4);
- }));
- function _processTableEntry(_x11, _x12, _x13) {
- return _processTableEntry2.apply(this, arguments);
- }
- return _processTableEntry;
- }()
- }, {
- key: "_processWorksheetRelsEntry",
- value: function () {
- var _processWorksheetRelsEntry2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee5(stream, model, sheetNo) {
- var xform, relationships;
- return regeneratorRuntime.wrap(function _callee5$(_context5) {
- while (1) {
- switch (_context5.prev = _context5.next) {
- case 0:
- xform = new RelationshipsXform();
- _context5.next = 3;
- return xform.parseStream(stream);
- case 3:
- relationships = _context5.sent;
- model.worksheetRels[sheetNo] = relationships;
- case 5:
- case "end":
- return _context5.stop();
- }
- }
- }, _callee5);
- }));
- function _processWorksheetRelsEntry(_x14, _x15, _x16) {
- return _processWorksheetRelsEntry2.apply(this, arguments);
- }
- return _processWorksheetRelsEntry;
- }()
- }, {
- key: "_processMediaEntry",
- value: function () {
- var _processMediaEntry2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee6(entry, model, filename) {
- var lastDot, extension, name;
- return regeneratorRuntime.wrap(function _callee6$(_context6) {
- while (1) {
- switch (_context6.prev = _context6.next) {
- case 0:
- lastDot = filename.lastIndexOf('.'); // if we can't determine extension, ignore it
- if (!(lastDot >= 1)) {
- _context6.next = 6;
- break;
- }
- extension = filename.substr(lastDot + 1);
- name = filename.substr(0, lastDot);
- _context6.next = 6;
- return new Promise(function (resolve, reject) {
- var streamBuf = new StreamBuf();
- streamBuf.on('finish', function () {
- model.mediaIndex[filename] = model.media.length;
- model.mediaIndex[name] = model.media.length;
- var medium = {
- type: 'image',
- name: name,
- extension: extension,
- buffer: streamBuf.toBuffer()
- };
- model.media.push(medium);
- resolve();
- });
- entry.on('error', function (error) {
- reject(error);
- });
- entry.pipe(streamBuf);
- });
- case 6:
- case "end":
- return _context6.stop();
- }
- }
- }, _callee6);
- }));
- function _processMediaEntry(_x17, _x18, _x19) {
- return _processMediaEntry2.apply(this, arguments);
- }
- return _processMediaEntry;
- }()
- }, {
- key: "_processDrawingEntry",
- value: function () {
- var _processDrawingEntry2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee7(entry, model, name) {
- var xform, drawing;
- return regeneratorRuntime.wrap(function _callee7$(_context7) {
- while (1) {
- switch (_context7.prev = _context7.next) {
- case 0:
- xform = new DrawingXform();
- _context7.next = 3;
- return xform.parseStream(entry);
- case 3:
- drawing = _context7.sent;
- model.drawings[name] = drawing;
- case 5:
- case "end":
- return _context7.stop();
- }
- }
- }, _callee7);
- }));
- function _processDrawingEntry(_x20, _x21, _x22) {
- return _processDrawingEntry2.apply(this, arguments);
- }
- return _processDrawingEntry;
- }()
- }, {
- key: "_processDrawingRelsEntry",
- value: function () {
- var _processDrawingRelsEntry2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee8(entry, model, name) {
- var xform, relationships;
- return regeneratorRuntime.wrap(function _callee8$(_context8) {
- while (1) {
- switch (_context8.prev = _context8.next) {
- case 0:
- xform = new RelationshipsXform();
- _context8.next = 3;
- return xform.parseStream(entry);
- case 3:
- relationships = _context8.sent;
- model.drawingRels[name] = relationships;
- case 5:
- case "end":
- return _context8.stop();
- }
- }
- }, _callee8);
- }));
- function _processDrawingRelsEntry(_x23, _x24, _x25) {
- return _processDrawingRelsEntry2.apply(this, arguments);
- }
- return _processDrawingRelsEntry;
- }()
- }, {
- key: "_processVmlDrawingEntry",
- value: function () {
- var _processVmlDrawingEntry2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee9(entry, model, name) {
- var xform, vmlDrawing;
- return regeneratorRuntime.wrap(function _callee9$(_context9) {
- while (1) {
- switch (_context9.prev = _context9.next) {
- case 0:
- xform = new VmlNotesXform();
- _context9.next = 3;
- return xform.parseStream(entry);
- case 3:
- vmlDrawing = _context9.sent;
- model.vmlDrawings["../drawings/".concat(name, ".vml")] = vmlDrawing;
- case 5:
- case "end":
- return _context9.stop();
- }
- }
- }, _callee9);
- }));
- function _processVmlDrawingEntry(_x26, _x27, _x28) {
- return _processVmlDrawingEntry2.apply(this, arguments);
- }
- return _processVmlDrawingEntry;
- }()
- }, {
- key: "_processThemeEntry",
- value: function () {
- var _processThemeEntry2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee10(entry, model, name) {
- return regeneratorRuntime.wrap(function _callee10$(_context10) {
- while (1) {
- switch (_context10.prev = _context10.next) {
- case 0:
- _context10.next = 2;
- return new Promise(function (resolve, reject) {
- // TODO: stream entry into buffer and store the xml in the model.themes[]
- var stream = new StreamBuf();
- entry.on('error', reject);
- stream.on('error', reject);
- stream.on('finish', function () {
- model.themes[name] = stream.read().toString();
- resolve();
- });
- entry.pipe(stream);
- });
- case 2:
- case "end":
- return _context10.stop();
- }
- }
- }, _callee10);
- }));
- function _processThemeEntry(_x29, _x30, _x31) {
- return _processThemeEntry2.apply(this, arguments);
- }
- return _processThemeEntry;
- }()
- /**
- * @deprecated since version 4.0. You should use `#read` instead. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md
- */
- }, {
- key: "createInputStream",
- value: function createInputStream() {
- throw new Error('`XLSX#createInputStream` is deprecated. You should use `XLSX#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md');
- }
- }, {
- key: "read",
- value: function () {
- var _read = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee11(stream, options) {
- var chunks, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _value, chunk;
- return regeneratorRuntime.wrap(function _callee11$(_context11) {
- while (1) {
- switch (_context11.prev = _context11.next) {
- case 0:
- // TODO: Remove once node v8 is deprecated
- // Detect and upgrade old streams
- if (!stream[Symbol.asyncIterator] && stream.pipe) {
- stream = stream.pipe(new PassThrough());
- }
- chunks = [];
- _iteratorNormalCompletion = true;
- _didIteratorError = false;
- _context11.prev = 4;
- _iterator = _asyncIterator(stream);
- case 6:
- _context11.next = 8;
- return _iterator.next();
- case 8:
- _step = _context11.sent;
- _iteratorNormalCompletion = _step.done;
- _context11.next = 12;
- return _step.value;
- case 12:
- _value = _context11.sent;
- if (_iteratorNormalCompletion) {
- _context11.next = 19;
- break;
- }
- chunk = _value;
- chunks.push(chunk);
- case 16:
- _iteratorNormalCompletion = true;
- _context11.next = 6;
- break;
- case 19:
- _context11.next = 25;
- break;
- case 21:
- _context11.prev = 21;
- _context11.t0 = _context11["catch"](4);
- _didIteratorError = true;
- _iteratorError = _context11.t0;
- case 25:
- _context11.prev = 25;
- _context11.prev = 26;
- if (!(!_iteratorNormalCompletion && _iterator.return != null)) {
- _context11.next = 30;
- break;
- }
- _context11.next = 30;
- return _iterator.return();
- case 30:
- _context11.prev = 30;
- if (!_didIteratorError) {
- _context11.next = 33;
- break;
- }
- throw _iteratorError;
- case 33:
- return _context11.finish(30);
- case 34:
- return _context11.finish(25);
- case 35:
- return _context11.abrupt("return", this.load(Buffer.concat(chunks), options));
- case 36:
- case "end":
- return _context11.stop();
- }
- }
- }, _callee11, this, [[4, 21, 25, 35], [26,, 30, 34]]);
- }));
- function read(_x32, _x33) {
- return _read.apply(this, arguments);
- }
- return read;
- }()
- }, {
- key: "load",
- value: function () {
- var _load = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee12(data, options) {
- var buffer, model, zip, _i, _Object$values, entry, entryName, stream, content, chunkSize, i, workbook, appXform, appProperties, coreXform, coreProperties, match;
- return regeneratorRuntime.wrap(function _callee12$(_context12) {
- while (1) {
- switch (_context12.prev = _context12.next) {
- case 0:
- if (options && options.base64) {
- buffer = Buffer.from(data.toString(), 'base64');
- } else {
- buffer = data;
- }
- model = {
- worksheets: [],
- worksheetHash: {},
- worksheetRels: [],
- themes: {},
- media: [],
- mediaIndex: {},
- drawings: {},
- drawingRels: {},
- comments: {},
- tables: {},
- vmlDrawings: {}
- };
- _context12.next = 4;
- return JSZip.loadAsync(buffer);
- case 4:
- zip = _context12.sent;
- _i = 0, _Object$values = Object.values(zip.files);
- case 6:
- if (!(_i < _Object$values.length)) {
- _context12.next = 126;
- break;
- }
- entry = _Object$values[_i];
- if (entry.dir) {
- _context12.next = 123;
- break;
- }
- entryName = entry.name;
- if (entryName[0] === '/') {
- entryName = entryName.substr(1);
- }
- stream = void 0;
- if (!(entryName.match(/xl\/media\//) || // themes are not parsed as stream
- entryName.match(/xl\/theme\/([a-zA-Z0-9]+)[.]xml/))) {
- _context12.next = 21;
- break;
- }
- stream = new PassThrough();
- _context12.t0 = stream;
- _context12.next = 17;
- return entry.async('nodebuffer');
- case 17:
- _context12.t1 = _context12.sent;
- _context12.t0.write.call(_context12.t0, _context12.t1);
- _context12.next = 36;
- break;
- case 21:
- // use object mode to avoid buffer-string convention
- stream = new PassThrough({
- writableObjectMode: true,
- readableObjectMode: true
- });
- content = void 0; // https://www.npmjs.com/package/process
- if (!process.browser) {
- _context12.next = 31;
- break;
- }
- _context12.t2 = bufferToString;
- _context12.next = 27;
- return entry.async('nodebuffer');
- case 27:
- _context12.t3 = _context12.sent;
- content = (0, _context12.t2)(_context12.t3);
- _context12.next = 34;
- break;
- case 31:
- _context12.next = 33;
- return entry.async('string');
- case 33:
- content = _context12.sent;
- case 34:
- chunkSize = 16 * 1024;
- for (i = 0; i < content.length; i += chunkSize) {
- stream.write(content.substring(i, i + chunkSize));
- }
- case 36:
- stream.end();
- _context12.t4 = entryName;
- _context12.next = _context12.t4 === '_rels/.rels' ? 40 : _context12.t4 === 'xl/workbook.xml' ? 44 : _context12.t4 === 'xl/_rels/workbook.xml.rels' ? 53 : _context12.t4 === 'xl/sharedStrings.xml' ? 57 : _context12.t4 === 'xl/styles.xml' ? 61 : _context12.t4 === 'docProps/app.xml' ? 65 : _context12.t4 === 'docProps/core.xml' ? 72 : 78;
- break;
- case 40:
- _context12.next = 42;
- return this.parseRels(stream);
- case 42:
- model.globalRels = _context12.sent;
- return _context12.abrupt("break", 123);
- case 44:
- _context12.next = 46;
- return this.parseWorkbook(stream);
- case 46:
- workbook = _context12.sent;
- model.sheets = workbook.sheets;
- model.definedNames = workbook.definedNames;
- model.views = workbook.views;
- model.properties = workbook.properties;
- model.calcProperties = workbook.calcProperties;
- return _context12.abrupt("break", 123);
- case 53:
- _context12.next = 55;
- return this.parseRels(stream);
- case 55:
- model.workbookRels = _context12.sent;
- return _context12.abrupt("break", 123);
- case 57:
- model.sharedStrings = new SharedStringsXform();
- _context12.next = 60;
- return model.sharedStrings.parseStream(stream);
- case 60:
- return _context12.abrupt("break", 123);
- case 61:
- model.styles = new StylesXform();
- _context12.next = 64;
- return model.styles.parseStream(stream);
- case 64:
- return _context12.abrupt("break", 123);
- case 65:
- appXform = new AppXform();
- _context12.next = 68;
- return appXform.parseStream(stream);
- case 68:
- appProperties = _context12.sent;
- model.company = appProperties.company;
- model.manager = appProperties.manager;
- return _context12.abrupt("break", 123);
- case 72:
- coreXform = new CoreXform();
- _context12.next = 75;
- return coreXform.parseStream(stream);
- case 75:
- coreProperties = _context12.sent;
- Object.assign(model, coreProperties);
- return _context12.abrupt("break", 123);
- case 78:
- match = entryName.match(/xl\/worksheets\/sheet(\d+)[.]xml/);
- if (!match) {
- _context12.next = 83;
- break;
- }
- _context12.next = 82;
- return this._processWorksheetEntry(stream, model, match[1], options, entryName);
- case 82:
- return _context12.abrupt("break", 123);
- case 83:
- match = entryName.match(/xl\/worksheets\/_rels\/sheet(\d+)[.]xml.rels/);
- if (!match) {
- _context12.next = 88;
- break;
- }
- _context12.next = 87;
- return this._processWorksheetRelsEntry(stream, model, match[1]);
- case 87:
- return _context12.abrupt("break", 123);
- case 88:
- match = entryName.match(/xl\/theme\/([a-zA-Z0-9]+)[.]xml/);
- if (!match) {
- _context12.next = 93;
- break;
- }
- _context12.next = 92;
- return this._processThemeEntry(stream, model, match[1]);
- case 92:
- return _context12.abrupt("break", 123);
- case 93:
- match = entryName.match(/xl\/media\/([a-zA-Z0-9]+[.][a-zA-Z0-9]{3,4})$/);
- if (!match) {
- _context12.next = 98;
- break;
- }
- _context12.next = 97;
- return this._processMediaEntry(stream, model, match[1]);
- case 97:
- return _context12.abrupt("break", 123);
- case 98:
- match = entryName.match(/xl\/drawings\/([a-zA-Z0-9]+)[.]xml/);
- if (!match) {
- _context12.next = 103;
- break;
- }
- _context12.next = 102;
- return this._processDrawingEntry(stream, model, match[1]);
- case 102:
- return _context12.abrupt("break", 123);
- case 103:
- match = entryName.match(/xl\/(comments\d+)[.]xml/);
- if (!match) {
- _context12.next = 108;
- break;
- }
- _context12.next = 107;
- return this._processCommentEntry(stream, model, match[1]);
- case 107:
- return _context12.abrupt("break", 123);
- case 108:
- match = entryName.match(/xl\/tables\/(table\d+)[.]xml/);
- if (!match) {
- _context12.next = 113;
- break;
- }
- _context12.next = 112;
- return this._processTableEntry(stream, model, match[1]);
- case 112:
- return _context12.abrupt("break", 123);
- case 113:
- match = entryName.match(/xl\/drawings\/_rels\/([a-zA-Z0-9]+)[.]xml[.]rels/);
- if (!match) {
- _context12.next = 118;
- break;
- }
- _context12.next = 117;
- return this._processDrawingRelsEntry(stream, model, match[1]);
- case 117:
- return _context12.abrupt("break", 123);
- case 118:
- match = entryName.match(/xl\/drawings\/(vmlDrawing\d+)[.]vml/);
- if (!match) {
- _context12.next = 123;
- break;
- }
- _context12.next = 122;
- return this._processVmlDrawingEntry(stream, model, match[1]);
- case 122:
- return _context12.abrupt("break", 123);
- case 123:
- _i++;
- _context12.next = 6;
- break;
- case 126:
- this.reconcile(model, options); // apply model
- this.workbook.model = model;
- return _context12.abrupt("return", this.workbook);
- case 129:
- case "end":
- return _context12.stop();
- }
- }
- }, _callee12, this);
- }));
- function load(_x34, _x35) {
- return _load.apply(this, arguments);
- }
- return load;
- }() // =========================================================================
- // Write
- }, {
- key: "addMedia",
- value: function () {
- var _addMedia = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee14(zip, model) {
- return regeneratorRuntime.wrap(function _callee14$(_context14) {
- while (1) {
- switch (_context14.prev = _context14.next) {
- case 0:
- _context14.next = 2;
- return Promise.all(model.media.map( /*#__PURE__*/function () {
- var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee13(medium) {
- var filename, data, dataimg64, content;
- return regeneratorRuntime.wrap(function _callee13$(_context13) {
- while (1) {
- switch (_context13.prev = _context13.next) {
- case 0:
- if (!(medium.type === 'image')) {
- _context13.next = 13;
- break;
- }
- filename = "xl/media/".concat(medium.name, ".").concat(medium.extension);
- if (!medium.filename) {
- _context13.next = 7;
- break;
- }
- _context13.next = 5;
- return fsReadFileAsync(medium.filename);
- case 5:
- data = _context13.sent;
- return _context13.abrupt("return", zip.append(data, {
- name: filename
- }));
- case 7:
- if (!medium.buffer) {
- _context13.next = 9;
- break;
- }
- return _context13.abrupt("return", zip.append(medium.buffer, {
- name: filename
- }));
- case 9:
- if (!medium.base64) {
- _context13.next = 13;
- break;
- }
- dataimg64 = medium.base64;
- content = dataimg64.substring(dataimg64.indexOf(',') + 1);
- return _context13.abrupt("return", zip.append(content, {
- name: filename,
- base64: true
- }));
- case 13:
- throw new Error('Unsupported media');
- case 14:
- case "end":
- return _context13.stop();
- }
- }
- }, _callee13);
- }));
- return function (_x38) {
- return _ref.apply(this, arguments);
- };
- }()));
- case 2:
- case "end":
- return _context14.stop();
- }
- }
- }, _callee14);
- }));
- function addMedia(_x36, _x37) {
- return _addMedia.apply(this, arguments);
- }
- return addMedia;
- }()
- }, {
- key: "addDrawings",
- value: function addDrawings(zip, model) {
- var drawingXform = new DrawingXform();
- var relsXform = new RelationshipsXform();
- model.worksheets.forEach(function (worksheet) {
- var drawing = worksheet.drawing;
- if (drawing) {
- drawingXform.prepare(drawing, {});
- var xml = drawingXform.toXml(drawing);
- zip.append(xml, {
- name: "xl/drawings/".concat(drawing.name, ".xml")
- });
- xml = relsXform.toXml(drawing.rels);
- zip.append(xml, {
- name: "xl/drawings/_rels/".concat(drawing.name, ".xml.rels")
- });
- }
- });
- }
- }, {
- key: "addTables",
- value: function addTables(zip, model) {
- var tableXform = new TableXform();
- model.worksheets.forEach(function (worksheet) {
- var tables = worksheet.tables;
- tables.forEach(function (table) {
- tableXform.prepare(table, {});
- var tableXml = tableXform.toXml(table);
- zip.append(tableXml, {
- name: "xl/tables/".concat(table.target)
- });
- });
- });
- }
- }, {
- key: "addContentTypes",
- value: function () {
- var _addContentTypes = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee15(zip, model) {
- var xform, xml;
- return regeneratorRuntime.wrap(function _callee15$(_context15) {
- while (1) {
- switch (_context15.prev = _context15.next) {
- case 0:
- xform = new ContentTypesXform();
- xml = xform.toXml(model);
- zip.append(xml, {
- name: '[Content_Types].xml'
- });
- case 3:
- case "end":
- return _context15.stop();
- }
- }
- }, _callee15);
- }));
- function addContentTypes(_x39, _x40) {
- return _addContentTypes.apply(this, arguments);
- }
- return addContentTypes;
- }()
- }, {
- key: "addApp",
- value: function () {
- var _addApp = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee16(zip, model) {
- var xform, xml;
- return regeneratorRuntime.wrap(function _callee16$(_context16) {
- while (1) {
- switch (_context16.prev = _context16.next) {
- case 0:
- xform = new AppXform();
- xml = xform.toXml(model);
- zip.append(xml, {
- name: 'docProps/app.xml'
- });
- case 3:
- case "end":
- return _context16.stop();
- }
- }
- }, _callee16);
- }));
- function addApp(_x41, _x42) {
- return _addApp.apply(this, arguments);
- }
- return addApp;
- }()
- }, {
- key: "addCore",
- value: function () {
- var _addCore = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee17(zip, model) {
- var coreXform;
- return regeneratorRuntime.wrap(function _callee17$(_context17) {
- while (1) {
- switch (_context17.prev = _context17.next) {
- case 0:
- coreXform = new CoreXform();
- zip.append(coreXform.toXml(model), {
- name: 'docProps/core.xml'
- });
- case 2:
- case "end":
- return _context17.stop();
- }
- }
- }, _callee17);
- }));
- function addCore(_x43, _x44) {
- return _addCore.apply(this, arguments);
- }
- return addCore;
- }()
- }, {
- key: "addThemes",
- value: function () {
- var _addThemes = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee18(zip, model) {
- var themes;
- return regeneratorRuntime.wrap(function _callee18$(_context18) {
- while (1) {
- switch (_context18.prev = _context18.next) {
- case 0:
- themes = model.themes || {
- theme1: theme1Xml
- };
- Object.keys(themes).forEach(function (name) {
- var xml = themes[name];
- var path = "xl/theme/".concat(name, ".xml");
- zip.append(xml, {
- name: path
- });
- });
- case 2:
- case "end":
- return _context18.stop();
- }
- }
- }, _callee18);
- }));
- function addThemes(_x45, _x46) {
- return _addThemes.apply(this, arguments);
- }
- return addThemes;
- }()
- }, {
- key: "addOfficeRels",
- value: function () {
- var _addOfficeRels = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee19(zip) {
- var xform, xml;
- return regeneratorRuntime.wrap(function _callee19$(_context19) {
- while (1) {
- switch (_context19.prev = _context19.next) {
- case 0:
- xform = new RelationshipsXform();
- xml = xform.toXml([{
- Id: 'rId1',
- Type: XLSX.RelType.OfficeDocument,
- Target: 'xl/workbook.xml'
- }, {
- Id: 'rId2',
- Type: XLSX.RelType.CoreProperties,
- Target: 'docProps/core.xml'
- }, {
- Id: 'rId3',
- Type: XLSX.RelType.ExtenderProperties,
- Target: 'docProps/app.xml'
- }]);
- zip.append(xml, {
- name: '_rels/.rels'
- });
- case 3:
- case "end":
- return _context19.stop();
- }
- }
- }, _callee19);
- }));
- function addOfficeRels(_x47) {
- return _addOfficeRels.apply(this, arguments);
- }
- return addOfficeRels;
- }()
- }, {
- key: "addWorkbookRels",
- value: function () {
- var _addWorkbookRels = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee20(zip, model) {
- var count, relationships, xform, xml;
- return regeneratorRuntime.wrap(function _callee20$(_context20) {
- while (1) {
- switch (_context20.prev = _context20.next) {
- case 0:
- count = 1;
- relationships = [{
- Id: "rId".concat(count++),
- Type: XLSX.RelType.Styles,
- Target: 'styles.xml'
- }, {
- Id: "rId".concat(count++),
- Type: XLSX.RelType.Theme,
- Target: 'theme/theme1.xml'
- }];
- if (model.sharedStrings.count) {
- relationships.push({
- Id: "rId".concat(count++),
- Type: XLSX.RelType.SharedStrings,
- Target: 'sharedStrings.xml'
- });
- }
- model.worksheets.forEach(function (worksheet) {
- worksheet.rId = "rId".concat(count++);
- relationships.push({
- Id: worksheet.rId,
- Type: XLSX.RelType.Worksheet,
- Target: "worksheets/sheet".concat(worksheet.id, ".xml")
- });
- });
- xform = new RelationshipsXform();
- xml = xform.toXml(relationships);
- zip.append(xml, {
- name: 'xl/_rels/workbook.xml.rels'
- });
- case 7:
- case "end":
- return _context20.stop();
- }
- }
- }, _callee20);
- }));
- function addWorkbookRels(_x48, _x49) {
- return _addWorkbookRels.apply(this, arguments);
- }
- return addWorkbookRels;
- }()
- }, {
- key: "addSharedStrings",
- value: function () {
- var _addSharedStrings = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee21(zip, model) {
- return regeneratorRuntime.wrap(function _callee21$(_context21) {
- while (1) {
- switch (_context21.prev = _context21.next) {
- case 0:
- if (model.sharedStrings && model.sharedStrings.count) {
- zip.append(model.sharedStrings.xml, {
- name: 'xl/sharedStrings.xml'
- });
- }
- case 1:
- case "end":
- return _context21.stop();
- }
- }
- }, _callee21);
- }));
- function addSharedStrings(_x50, _x51) {
- return _addSharedStrings.apply(this, arguments);
- }
- return addSharedStrings;
- }()
- }, {
- key: "addStyles",
- value: function () {
- var _addStyles = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee22(zip, model) {
- var xml;
- return regeneratorRuntime.wrap(function _callee22$(_context22) {
- while (1) {
- switch (_context22.prev = _context22.next) {
- case 0:
- xml = model.styles.xml;
- if (xml) {
- zip.append(xml, {
- name: 'xl/styles.xml'
- });
- }
- case 2:
- case "end":
- return _context22.stop();
- }
- }
- }, _callee22);
- }));
- function addStyles(_x52, _x53) {
- return _addStyles.apply(this, arguments);
- }
- return addStyles;
- }()
- }, {
- key: "addWorkbook",
- value: function () {
- var _addWorkbook = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee23(zip, model) {
- var xform;
- return regeneratorRuntime.wrap(function _callee23$(_context23) {
- while (1) {
- switch (_context23.prev = _context23.next) {
- case 0:
- xform = new WorkbookXform();
- zip.append(xform.toXml(model), {
- name: 'xl/workbook.xml'
- });
- case 2:
- case "end":
- return _context23.stop();
- }
- }
- }, _callee23);
- }));
- function addWorkbook(_x54, _x55) {
- return _addWorkbook.apply(this, arguments);
- }
- return addWorkbook;
- }()
- }, {
- key: "addWorksheets",
- value: function () {
- var _addWorksheets = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee24(zip, model) {
- var worksheetXform, relationshipsXform, commentsXform, vmlNotesXform;
- return regeneratorRuntime.wrap(function _callee24$(_context24) {
- while (1) {
- switch (_context24.prev = _context24.next) {
- case 0:
- // preparation phase
- worksheetXform = new WorksheetXform();
- relationshipsXform = new RelationshipsXform();
- commentsXform = new CommentsXform();
- vmlNotesXform = new VmlNotesXform(); // write sheets
- model.worksheets.forEach(function (worksheet) {
- var xmlStream = new XmlStream();
- worksheetXform.render(xmlStream, worksheet);
- zip.append(xmlStream.xml, {
- name: "xl/worksheets/sheet".concat(worksheet.id, ".xml")
- });
- if (worksheet.rels && worksheet.rels.length) {
- xmlStream = new XmlStream();
- relationshipsXform.render(xmlStream, worksheet.rels);
- zip.append(xmlStream.xml, {
- name: "xl/worksheets/_rels/sheet".concat(worksheet.id, ".xml.rels")
- });
- }
- if (worksheet.comments.length > 0) {
- xmlStream = new XmlStream();
- commentsXform.render(xmlStream, worksheet);
- zip.append(xmlStream.xml, {
- name: "xl/comments".concat(worksheet.id, ".xml")
- });
- xmlStream = new XmlStream();
- vmlNotesXform.render(xmlStream, worksheet);
- zip.append(xmlStream.xml, {
- name: "xl/drawings/vmlDrawing".concat(worksheet.id, ".vml")
- });
- }
- });
- case 5:
- case "end":
- return _context24.stop();
- }
- }
- }, _callee24);
- }));
- function addWorksheets(_x56, _x57) {
- return _addWorksheets.apply(this, arguments);
- }
- return addWorksheets;
- }()
- }, {
- key: "_finalize",
- value: function _finalize(zip) {
- var _this = this;
- return new Promise(function (resolve, reject) {
- zip.on('finish', function () {
- resolve(_this);
- });
- zip.on('error', reject);
- zip.finalize();
- });
- }
- }, {
- key: "prepareModel",
- value: function prepareModel(model, options) {
- // ensure following properties have sane values
- model.creator = model.creator || 'ExcelJS';
- model.lastModifiedBy = model.lastModifiedBy || 'ExcelJS';
- model.created = model.created || new Date();
- model.modified = model.modified || new Date();
- model.useSharedStrings = options.useSharedStrings !== undefined ? options.useSharedStrings : true;
- model.useStyles = options.useStyles !== undefined ? options.useStyles : true; // Manage the shared strings
- model.sharedStrings = new SharedStringsXform(); // add a style manager to handle cell formats, fonts, etc.
- model.styles = model.useStyles ? new StylesXform(true) : new StylesXform.Mock(); // prepare all of the things before the render
- var workbookXform = new WorkbookXform();
- var worksheetXform = new WorksheetXform();
- workbookXform.prepare(model);
- var worksheetOptions = {
- sharedStrings: model.sharedStrings,
- styles: model.styles,
- date1904: model.properties.date1904,
- drawingsCount: 0,
- media: model.media
- };
- worksheetOptions.drawings = model.drawings = [];
- worksheetOptions.commentRefs = model.commentRefs = [];
- var tableCount = 0;
- model.tables = [];
- model.worksheets.forEach(function (worksheet) {
- // assign unique filenames to tables
- worksheet.tables.forEach(function (table) {
- tableCount++;
- table.target = "table".concat(tableCount, ".xml");
- table.id = tableCount;
- model.tables.push(table);
- });
- worksheetXform.prepare(worksheet, worksheetOptions);
- }); // TODO: workbook drawing list
- }
- }, {
- key: "write",
- value: function () {
- var _write = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee25(stream, options) {
- var model, zip;
- return regeneratorRuntime.wrap(function _callee25$(_context25) {
- while (1) {
- switch (_context25.prev = _context25.next) {
- case 0:
- options = options || {};
- model = this.workbook.model;
- zip = new ZipStream.ZipWriter(options.zip);
- zip.pipe(stream);
- this.prepareModel(model, options); // render
- _context25.next = 7;
- return this.addContentTypes(zip, model);
- case 7:
- _context25.next = 9;
- return this.addOfficeRels(zip, model);
- case 9:
- _context25.next = 11;
- return this.addWorkbookRels(zip, model);
- case 11:
- _context25.next = 13;
- return this.addWorksheets(zip, model);
- case 13:
- _context25.next = 15;
- return this.addSharedStrings(zip, model);
- case 15:
- _context25.next = 17;
- return this.addDrawings(zip, model);
- case 17:
- _context25.next = 19;
- return this.addTables(zip, model);
- case 19:
- _context25.next = 21;
- return Promise.all([this.addThemes(zip, model), this.addStyles(zip, model)]);
- case 21:
- _context25.next = 23;
- return this.addMedia(zip, model);
- case 23:
- _context25.next = 25;
- return Promise.all([this.addApp(zip, model), this.addCore(zip, model)]);
- case 25:
- _context25.next = 27;
- return this.addWorkbook(zip, model);
- case 27:
- return _context25.abrupt("return", this._finalize(zip));
- case 28:
- case "end":
- return _context25.stop();
- }
- }
- }, _callee25, this);
- }));
- function write(_x58, _x59) {
- return _write.apply(this, arguments);
- }
- return write;
- }()
- }, {
- key: "writeFile",
- value: function writeFile(filename, options) {
- var _this2 = this;
- var stream = fs.createWriteStream(filename);
- return new Promise(function (resolve, reject) {
- stream.on('finish', function () {
- resolve();
- });
- stream.on('error', function (error) {
- reject(error);
- });
- _this2.write(stream, options).then(function () {
- stream.end();
- });
- });
- }
- }, {
- key: "writeBuffer",
- value: function () {
- var _writeBuffer = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee26(options) {
- var stream;
- return regeneratorRuntime.wrap(function _callee26$(_context26) {
- while (1) {
- switch (_context26.prev = _context26.next) {
- case 0:
- stream = new StreamBuf();
- _context26.next = 3;
- return this.write(stream, options);
- case 3:
- return _context26.abrupt("return", stream.read());
- case 4:
- case "end":
- return _context26.stop();
- }
- }
- }, _callee26, this);
- }));
- function writeBuffer(_x60) {
- return _writeBuffer.apply(this, arguments);
- }
- return writeBuffer;
- }()
- }]);
- return XLSX;
- }();
- XLSX.RelType = require('./rel-type');
- module.exports = XLSX;
- }).call(this,require('_process'),require("buffer").Buffer)
- },{"../utils/browser-buffer-decode":16,"../utils/stream-buf":23,"../utils/utils":26,"../utils/xml-stream":27,"../utils/zip-stream":28,"./rel-type":30,"./xform/book/workbook-xform":37,"./xform/comment/comments-xform":39,"./xform/comment/vml-notes-xform":44,"./xform/core/app-xform":50,"./xform/core/content-types-xform":51,"./xform/core/core-xform":52,"./xform/core/relationships-xform":54,"./xform/drawing/drawing-xform":61,"./xform/sheet/worksheet-xform":114,"./xform/strings/shared-strings-xform":123,"./xform/style/styles-xform":134,"./xform/table/table-xform":140,"./xml/theme1.js":142,"_process":358,"buffer":216,"fs":215,"jszip":290,"readable-stream":382}],142:[function(require,module,exports){
- "use strict";
- /* eslint-disable */
- module.exports = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme"> <a:themeElements> <a:clrScheme name="Office"> <a:dk1> <a:sysClr val="windowText" lastClr="000000"/> </a:dk1> <a:lt1> <a:sysClr val="window" lastClr="FFFFFF"/> </a:lt1> <a:dk2> <a:srgbClr val="1F497D"/> </a:dk2> <a:lt2> <a:srgbClr val="EEECE1"/> </a:lt2> <a:accent1> <a:srgbClr val="4F81BD"/> </a:accent1> <a:accent2> <a:srgbClr val="C0504D"/> </a:accent2> <a:accent3> <a:srgbClr val="9BBB59"/> </a:accent3> <a:accent4> <a:srgbClr val="8064A2"/> </a:accent4> <a:accent5> <a:srgbClr val="4BACC6"/> </a:accent5> <a:accent6> <a:srgbClr val="F79646"/> </a:accent6> <a:hlink> <a:srgbClr val="0000FF"/> </a:hlink> <a:folHlink> <a:srgbClr val="800080"/> </a:folHlink> </a:clrScheme> <a:fontScheme name="Office"> <a:majorFont> <a:latin typeface="Cambria"/> <a:ea typeface=""/> <a:cs typeface=""/> <a:font script="Jpan" typeface="MS Pゴシック"/> <a:font script="Hang" typeface="맑은 고딕"/> <a:font script="Hans" typeface="宋体"/> <a:font script="Hant" typeface="新細明體"/> <a:font script="Arab" typeface="Times New Roman"/> <a:font script="Hebr" typeface="Times New Roman"/> <a:font script="Thai" typeface="Tahoma"/> <a:font script="Ethi" typeface="Nyala"/> <a:font script="Beng" typeface="Vrinda"/> <a:font script="Gujr" typeface="Shruti"/> <a:font script="Khmr" typeface="MoolBoran"/> <a:font script="Knda" typeface="Tunga"/> <a:font script="Guru" typeface="Raavi"/> <a:font script="Cans" typeface="Euphemia"/> <a:font script="Cher" typeface="Plantagenet Cherokee"/> <a:font script="Yiii" typeface="Microsoft Yi Baiti"/> <a:font script="Tibt" typeface="Microsoft Himalaya"/> <a:font script="Thaa" typeface="MV Boli"/> <a:font script="Deva" typeface="Mangal"/> <a:font script="Telu" typeface="Gautami"/> <a:font script="Taml" typeface="Latha"/> <a:font script="Syrc" typeface="Estrangelo Edessa"/> <a:font script="Orya" typeface="Kalinga"/> <a:font script="Mlym" typeface="Kartika"/> <a:font script="Laoo" typeface="DokChampa"/> <a:font script="Sinh" typeface="Iskoola Pota"/> <a:font script="Mong" typeface="Mongolian Baiti"/> <a:font script="Viet" typeface="Times New Roman"/> <a:font script="Uigh" typeface="Microsoft Uighur"/> <a:font script="Geor" typeface="Sylfaen"/> </a:majorFont> <a:minorFont> <a:latin typeface="Calibri"/> <a:ea typeface=""/> <a:cs typeface=""/> <a:font script="Jpan" typeface="MS Pゴシック"/> <a:font script="Hang" typeface="맑은 고딕"/> <a:font script="Hans" typeface="宋体"/> <a:font script="Hant" typeface="新細明體"/> <a:font script="Arab" typeface="Arial"/> <a:font script="Hebr" typeface="Arial"/> <a:font script="Thai" typeface="Tahoma"/> <a:font script="Ethi" typeface="Nyala"/> <a:font script="Beng" typeface="Vrinda"/> <a:font script="Gujr" typeface="Shruti"/> <a:font script="Khmr" typeface="DaunPenh"/> <a:font script="Knda" typeface="Tunga"/> <a:font script="Guru" typeface="Raavi"/> <a:font script="Cans" typeface="Euphemia"/> <a:font script="Cher" typeface="Plantagenet Cherokee"/> <a:font script="Yiii" typeface="Microsoft Yi Baiti"/> <a:font script="Tibt" typeface="Microsoft Himalaya"/> <a:font script="Thaa" typeface="MV Boli"/> <a:font script="Deva" typeface="Mangal"/> <a:font script="Telu" typeface="Gautami"/> <a:font script="Taml" typeface="Latha"/> <a:font script="Syrc" typeface="Estrangelo Edessa"/> <a:font script="Orya" typeface="Kalinga"/> <a:font script="Mlym" typeface="Kartika"/> <a:font script="Laoo" typeface="DokChampa"/> <a:font script="Sinh" typeface="Iskoola Pota"/> <a:font script="Mong" typeface="Mongolian Baiti"/> <a:font script="Viet" typeface="Arial"/> <a:font script="Uigh" typeface="Microsoft Uighur"/> <a:font script="Geor" typeface="Sylfaen"/> </a:minorFont> </a:fontScheme> <a:fmtScheme name="Office"> <a:fillStyleLst> <a:solidFill> <a:schemeClr val="phClr"/> </a:solidFill> <a:gradFill rotWithShape="1"> <a:gsLst> <a:gs pos="0"> <a:schemeClr val="phClr"> <a:tint val="50000"/> <a:satMod val="300000"/> </a:schemeClr> </a:gs> <a:gs pos="35000"> <a:schemeClr val="phClr"> <a:tint val="37000"/> <a:satMod val="300000"/> </a:schemeClr> </a:gs> <a:gs pos="100000"> <a:schemeClr val="phClr"> <a:tint val="15000"/> <a:satMod val="350000"/> </a:schemeClr> </a:gs> </a:gsLst> <a:lin ang="16200000" scaled="1"/> </a:gradFill> <a:gradFill rotWithShape="1"> <a:gsLst> <a:gs pos="0"> <a:schemeClr val="phClr"> <a:tint val="100000"/> <a:shade val="100000"/> <a:satMod val="130000"/> </a:schemeClr> </a:gs> <a:gs pos="100000"> <a:schemeClr val="phClr"> <a:tint val="50000"/> <a:shade val="100000"/> <a:satMod val="350000"/> </a:schemeClr> </a:gs> </a:gsLst> <a:lin ang="16200000" scaled="0"/> </a:gradFill> </a:fillStyleLst> <a:lnStyleLst> <a:ln w="9525" cap="flat" cmpd="sng" algn="ctr"> <a:solidFill> <a:schemeClr val="phClr"> <a:shade val="95000"/> <a:satMod val="105000"/> </a:schemeClr> </a:solidFill> <a:prstDash val="solid"/> </a:ln> <a:ln w="25400" cap="flat" cmpd="sng" algn="ctr"> <a:solidFill> <a:schemeClr val="phClr"/> </a:solidFill> <a:prstDash val="solid"/> </a:ln> <a:ln w="38100" cap="flat" cmpd="sng" algn="ctr"> <a:solidFill> <a:schemeClr val="phClr"/> </a:solidFill> <a:prstDash val="solid"/> </a:ln> </a:lnStyleLst> <a:effectStyleLst> <a:effectStyle> <a:effectLst> <a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0"> <a:srgbClr val="000000"> <a:alpha val="38000"/> </a:srgbClr> </a:outerShdw> </a:effectLst> </a:effectStyle> <a:effectStyle> <a:effectLst> <a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"> <a:srgbClr val="000000"> <a:alpha val="35000"/> </a:srgbClr> </a:outerShdw> </a:effectLst> </a:effectStyle> <a:effectStyle> <a:effectLst> <a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"> <a:srgbClr val="000000"> <a:alpha val="35000"/> </a:srgbClr> </a:outerShdw> </a:effectLst> <a:scene3d> <a:camera prst="orthographicFront"> <a:rot lat="0" lon="0" rev="0"/> </a:camera> <a:lightRig rig="threePt" dir="t"> <a:rot lat="0" lon="0" rev="1200000"/> </a:lightRig> </a:scene3d> <a:sp3d> <a:bevelT w="63500" h="25400"/> </a:sp3d> </a:effectStyle> </a:effectStyleLst> <a:bgFillStyleLst> <a:solidFill> <a:schemeClr val="phClr"/> </a:solidFill> <a:gradFill rotWithShape="1"> <a:gsLst> <a:gs pos="0"> <a:schemeClr val="phClr"> <a:tint val="40000"/> <a:satMod val="350000"/> </a:schemeClr> </a:gs> <a:gs pos="40000"> <a:schemeClr val="phClr"> <a:tint val="45000"/> <a:shade val="99000"/> <a:satMod val="350000"/> </a:schemeClr> </a:gs> <a:gs pos="100000"> <a:schemeClr val="phClr"> <a:shade val="20000"/> <a:satMod val="255000"/> </a:schemeClr> </a:gs> </a:gsLst> <a:path path="circle"> <a:fillToRect l="50000" t="-80000" r="50000" b="180000"/> </a:path> </a:gradFill> <a:gradFill rotWithShape="1"> <a:gsLst> <a:gs pos="0"> <a:schemeClr val="phClr"> <a:tint val="80000"/> <a:satMod val="300000"/> </a:schemeClr> </a:gs> <a:gs pos="100000"> <a:schemeClr val="phClr"> <a:shade val="30000"/> <a:satMod val="200000"/> </a:schemeClr> </a:gs> </a:gsLst> <a:path path="circle"> <a:fillToRect l="50000" t="50000" r="50000" b="50000"/> </a:path> </a:gradFill> </a:bgFillStyleLst> </a:fmtScheme> </a:themeElements> <a:objectDefaults> <a:spDef> <a:spPr/> <a:bodyPr/> <a:lstStyle/> <a:style> <a:lnRef idx="1"> <a:schemeClr val="accent1"/> </a:lnRef> <a:fillRef idx="3"> <a:schemeClr val="accent1"/> </a:fillRef> <a:effectRef idx="2"> <a:schemeClr val="accent1"/> </a:effectRef> <a:fontRef idx="minor"> <a:schemeClr val="lt1"/> </a:fontRef> </a:style> </a:spDef> <a:lnDef> <a:spPr/> <a:bodyPr/> <a:lstStyle/> <a:style> <a:lnRef idx="2"> <a:schemeClr val="accent1"/> </a:lnRef> <a:fillRef idx="0"> <a:schemeClr val="accent1"/> </a:fillRef> <a:effectRef idx="1"> <a:schemeClr val="accent1"/> </a:effectRef> <a:fontRef idx="minor"> <a:schemeClr val="tx1"/> </a:fontRef> </a:style> </a:lnDef> </a:objectDefaults> <a:extraClrSchemeLst/> </a:theme>';
- },{}],143:[function(require,module,exports){
- (function (Buffer){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.CsvFormatterStream = void 0;
- var stream_1 = require("stream");
- var formatter_1 = require("./formatter");
- var CsvFormatterStream = /*#__PURE__*/function (_stream_1$Transform) {
- _inherits(CsvFormatterStream, _stream_1$Transform);
- var _super = _createSuper(CsvFormatterStream);
- function CsvFormatterStream(formatterOptions) {
- var _this;
- _classCallCheck(this, CsvFormatterStream);
- _this = _super.call(this, {
- writableObjectMode: formatterOptions.objectMode
- });
- _this.hasWrittenBOM = false;
- _this.formatterOptions = formatterOptions;
- _this.rowFormatter = new formatter_1.RowFormatter(formatterOptions); // if writeBOM is false then set to true
- // if writeBOM is true then set to false by default so it is written out
- _this.hasWrittenBOM = !formatterOptions.writeBOM;
- return _this;
- }
- _createClass(CsvFormatterStream, [{
- key: "transform",
- value: function transform(transformFunction) {
- this.rowFormatter.rowTransform = transformFunction;
- return this;
- }
- }, {
- key: "_transform",
- value: function _transform(row, encoding, cb) {
- var _this2 = this;
- var cbCalled = false;
- try {
- if (!this.hasWrittenBOM) {
- this.push(this.formatterOptions.BOM);
- this.hasWrittenBOM = true;
- }
- this.rowFormatter.format(row, function (err, rows) {
- if (err) {
- cbCalled = true;
- return cb(err);
- }
- if (rows) {
- rows.forEach(function (r) {
- _this2.push(Buffer.from(r, 'utf8'));
- });
- }
- cbCalled = true;
- return cb();
- });
- } catch (e) {
- if (cbCalled) {
- throw e;
- }
- cb(e);
- }
- }
- }, {
- key: "_flush",
- value: function _flush(cb) {
- var _this3 = this;
- this.rowFormatter.finish(function (err, rows) {
- if (err) {
- return cb(err);
- }
- if (rows) {
- rows.forEach(function (r) {
- _this3.push(Buffer.from(r, 'utf8'));
- });
- }
- return cb();
- });
- }
- }]);
- return CsvFormatterStream;
- }(stream_1.Transform);
- exports.CsvFormatterStream = CsvFormatterStream;
- }).call(this,require("buffer").Buffer)
- },{"./formatter":147,"buffer":216,"stream":396}],144:[function(require,module,exports){
- "use strict";
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.FormatterOptions = void 0;
- var FormatterOptions = function FormatterOptions() {
- var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
- _classCallCheck(this, FormatterOptions);
- var _a;
- this.objectMode = true;
- this.delimiter = ',';
- this.rowDelimiter = '\n';
- this.quote = '"';
- this.escape = this.quote;
- this.quoteColumns = false;
- this.quoteHeaders = this.quoteColumns;
- this.headers = null;
- this.includeEndRowDelimiter = false;
- this.writeBOM = false;
- this.BOM = "\uFEFF";
- this.alwaysWriteHeaders = false;
- Object.assign(this, opts || {});
- if (typeof (opts === null || opts === void 0 ? void 0 : opts.quoteHeaders) === 'undefined') {
- this.quoteHeaders = this.quoteColumns;
- }
- if ((opts === null || opts === void 0 ? void 0 : opts.quote) === true) {
- this.quote = '"';
- } else if ((opts === null || opts === void 0 ? void 0 : opts.quote) === false) {
- this.quote = '';
- }
- if (typeof (opts === null || opts === void 0 ? void 0 : opts.escape) !== 'string') {
- this.escape = this.quote;
- }
- this.shouldWriteHeaders = !!this.headers && ((_a = opts.writeHeaders) !== null && _a !== void 0 ? _a : true);
- this.headers = Array.isArray(this.headers) ? this.headers : null;
- this.escapedQuote = "".concat(this.escape).concat(this.quote);
- };
- exports.FormatterOptions = FormatterOptions;
- },{}],145:[function(require,module,exports){
- "use strict";
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
- return mod && mod.__esModule ? mod : {
- "default": mod
- };
- };
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.FieldFormatter = void 0;
- var lodash_isboolean_1 = __importDefault(require("lodash.isboolean"));
- var lodash_isnil_1 = __importDefault(require("lodash.isnil"));
- var lodash_escaperegexp_1 = __importDefault(require("lodash.escaperegexp"));
- var FieldFormatter = /*#__PURE__*/function () {
- function FieldFormatter(formatterOptions) {
- _classCallCheck(this, FieldFormatter);
- this._headers = null;
- this.formatterOptions = formatterOptions;
- if (formatterOptions.headers !== null) {
- this.headers = formatterOptions.headers;
- }
- this.REPLACE_REGEXP = new RegExp(formatterOptions.quote, 'g');
- var escapePattern = "[".concat(formatterOptions.delimiter).concat(lodash_escaperegexp_1.default(formatterOptions.rowDelimiter), "|\r|\n']");
- this.ESCAPE_REGEXP = new RegExp(escapePattern);
- }
- _createClass(FieldFormatter, [{
- key: "shouldQuote",
- value: function shouldQuote(fieldIndex, isHeader) {
- var quoteConfig = isHeader ? this.formatterOptions.quoteHeaders : this.formatterOptions.quoteColumns;
- if (lodash_isboolean_1.default(quoteConfig)) {
- return quoteConfig;
- }
- if (Array.isArray(quoteConfig)) {
- return quoteConfig[fieldIndex];
- }
- if (this._headers !== null) {
- return quoteConfig[this._headers[fieldIndex]];
- }
- return false;
- }
- }, {
- key: "format",
- value: function format(field, fieldIndex, isHeader) {
- var preparedField = "".concat(lodash_isnil_1.default(field) ? '' : field).replace(/\0/g, '');
- var formatterOptions = this.formatterOptions;
- if (formatterOptions.quote !== '') {
- var shouldEscape = preparedField.indexOf(formatterOptions.quote) !== -1;
- if (shouldEscape) {
- return this.quoteField(preparedField.replace(this.REPLACE_REGEXP, formatterOptions.escapedQuote));
- }
- }
- var hasEscapeCharacters = preparedField.search(this.ESCAPE_REGEXP) !== -1;
- if (hasEscapeCharacters || this.shouldQuote(fieldIndex, isHeader)) {
- return this.quoteField(preparedField);
- }
- return preparedField;
- }
- }, {
- key: "quoteField",
- value: function quoteField(field) {
- var quote = this.formatterOptions.quote;
- return "".concat(quote).concat(field).concat(quote);
- }
- }, {
- key: "headers",
- set: function set(headers) {
- this._headers = headers;
- }
- }]);
- return FieldFormatter;
- }();
- exports.FieldFormatter = FieldFormatter;
- },{"lodash.escaperegexp":317,"lodash.isboolean":319,"lodash.isnil":322}],146:[function(require,module,exports){
- "use strict";
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
- return mod && mod.__esModule ? mod : {
- "default": mod
- };
- };
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.RowFormatter = void 0;
- var lodash_isfunction_1 = __importDefault(require("lodash.isfunction"));
- var lodash_isequal_1 = __importDefault(require("lodash.isequal"));
- var FieldFormatter_1 = require("./FieldFormatter");
- var types_1 = require("../types");
- var RowFormatter = /*#__PURE__*/function () {
- function RowFormatter(formatterOptions) {
- _classCallCheck(this, RowFormatter);
- this.rowCount = 0;
- this.formatterOptions = formatterOptions;
- this.fieldFormatter = new FieldFormatter_1.FieldFormatter(formatterOptions);
- this.headers = formatterOptions.headers;
- this.shouldWriteHeaders = formatterOptions.shouldWriteHeaders;
- this.hasWrittenHeaders = false;
- if (this.headers !== null) {
- this.fieldFormatter.headers = this.headers;
- }
- if (formatterOptions.transform) {
- this.rowTransform = formatterOptions.transform;
- }
- }
- _createClass(RowFormatter, [{
- key: "format",
- value: function format(row, cb) {
- var _this = this;
- this.callTransformer(row, function (err, transformedRow) {
- if (err) {
- return cb(err);
- }
- if (!row) {
- return cb(null);
- }
- var rows = [];
- if (transformedRow) {
- var _this$checkHeaders = _this.checkHeaders(transformedRow),
- shouldFormatColumns = _this$checkHeaders.shouldFormatColumns,
- headers = _this$checkHeaders.headers;
- if (_this.shouldWriteHeaders && headers && !_this.hasWrittenHeaders) {
- rows.push(_this.formatColumns(headers, true));
- _this.hasWrittenHeaders = true;
- }
- if (shouldFormatColumns) {
- var columns = _this.gatherColumns(transformedRow);
- rows.push(_this.formatColumns(columns, false));
- }
- }
- return cb(null, rows);
- });
- }
- }, {
- key: "finish",
- value: function finish(cb) {
- var rows = []; // check if we should write headers and we didnt get any rows
- if (this.formatterOptions.alwaysWriteHeaders && this.rowCount === 0) {
- if (!this.headers) {
- return cb(new Error('`alwaysWriteHeaders` option is set to true but `headers` option not provided.'));
- }
- rows.push(this.formatColumns(this.headers, true));
- }
- if (this.formatterOptions.includeEndRowDelimiter) {
- rows.push(this.formatterOptions.rowDelimiter);
- }
- return cb(null, rows);
- } // check if we need to write header return true if we should also write a row
- // could be false if headers is true and the header row(first item) is passed in
- }, {
- key: "checkHeaders",
- value: function checkHeaders(row) {
- if (this.headers) {
- // either the headers were provided by the user or we have already gathered them.
- return {
- shouldFormatColumns: true,
- headers: this.headers
- };
- }
- var headers = RowFormatter.gatherHeaders(row);
- this.headers = headers;
- this.fieldFormatter.headers = headers;
- if (!this.shouldWriteHeaders) {
- // if we are not supposed to write the headers then
- // always format the columns
- return {
- shouldFormatColumns: true,
- headers: null
- };
- } // if the row is equal to headers dont format
- return {
- shouldFormatColumns: !lodash_isequal_1.default(headers, row),
- headers: headers
- };
- } // todo change this method to unknown[]
- }, {
- key: "gatherColumns",
- value: function gatherColumns(row) {
- if (this.headers === null) {
- throw new Error('Headers is currently null');
- }
- if (!Array.isArray(row)) {
- return this.headers.map(function (header) {
- return row[header];
- });
- }
- if (RowFormatter.isHashArray(row)) {
- return this.headers.map(function (header, i) {
- var col = row[i];
- if (col) {
- return col[1];
- }
- return '';
- });
- }
- return this.headers.map(function (header, i) {
- return row[i];
- });
- }
- }, {
- key: "callTransformer",
- value: function callTransformer(row, cb) {
- if (!this._rowTransform) {
- return cb(null, row);
- }
- return this._rowTransform(row, cb);
- }
- }, {
- key: "formatColumns",
- value: function formatColumns(columns, isHeadersRow) {
- var _this2 = this;
- var formattedCols = columns.map(function (field, i) {
- return _this2.fieldFormatter.format(field, i, isHeadersRow);
- }).join(this.formatterOptions.delimiter);
- var rowCount = this.rowCount;
- this.rowCount += 1;
- if (rowCount) {
- return [this.formatterOptions.rowDelimiter, formattedCols].join('');
- }
- return formattedCols;
- }
- }, {
- key: "rowTransform",
- set: function set(transformFunction) {
- if (!lodash_isfunction_1.default(transformFunction)) {
- throw new TypeError('The transform should be a function');
- }
- this._rowTransform = RowFormatter.createTransform(transformFunction);
- }
- }], [{
- key: "isHashArray",
- value: function isHashArray(row) {
- if (Array.isArray(row)) {
- return Array.isArray(row[0]) && row[0].length === 2;
- }
- return false;
- } // get headers from a row item
- }, {
- key: "gatherHeaders",
- value: function gatherHeaders(row) {
- if (RowFormatter.isHashArray(row)) {
- // lets assume a multi-dimesional array with item 0 being the header
- return row.map(function (it) {
- return it[0];
- });
- }
- if (Array.isArray(row)) {
- return row;
- }
- return Object.keys(row);
- }
- }, {
- key: "createTransform",
- value: function createTransform(transformFunction) {
- if (types_1.isSyncTransform(transformFunction)) {
- return function (row, cb) {
- var transformedRow = null;
- try {
- transformedRow = transformFunction(row);
- } catch (e) {
- return cb(e);
- }
- return cb(null, transformedRow);
- };
- }
- return function (row, cb) {
- transformFunction(row, cb);
- };
- }
- }]);
- return RowFormatter;
- }();
- exports.RowFormatter = RowFormatter;
- },{"../types":149,"./FieldFormatter":145,"lodash.isequal":320,"lodash.isfunction":321}],147:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var RowFormatter_1 = require("./RowFormatter");
- Object.defineProperty(exports, "RowFormatter", {
- enumerable: true,
- get: function get() {
- return RowFormatter_1.RowFormatter;
- }
- });
- var FieldFormatter_1 = require("./FieldFormatter");
- Object.defineProperty(exports, "FieldFormatter", {
- enumerable: true,
- get: function get() {
- return FieldFormatter_1.FieldFormatter;
- }
- });
- },{"./FieldFormatter":145,"./RowFormatter":146}],148:[function(require,module,exports){
- (function (Buffer){
- "use strict";
- var __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, {
- enumerable: true,
- get: function get() {
- return m[k];
- }
- });
- } : function (o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
- });
- var __setModuleDefault = void 0 && (void 0).__setModuleDefault || (Object.create ? function (o, v) {
- Object.defineProperty(o, "default", {
- enumerable: true,
- value: v
- });
- } : function (o, v) {
- o["default"] = v;
- });
- var __importStar = void 0 && (void 0).__importStar || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) {
- if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- }
- __setModuleDefault(result, mod);
- return result;
- };
- var __exportStar = void 0 && (void 0).__exportStar || function (m, exports) {
- for (var p in m) {
- if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
- }
- };
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.writeToPath = exports.writeToString = exports.writeToBuffer = exports.writeToStream = exports.write = exports.format = void 0;
- var util_1 = require("util");
- var stream_1 = require("stream");
- var fs = __importStar(require("fs"));
- var FormatterOptions_1 = require("./FormatterOptions");
- var CsvFormatterStream_1 = require("./CsvFormatterStream");
- __exportStar(require("./types"), exports);
- var CsvFormatterStream_2 = require("./CsvFormatterStream");
- Object.defineProperty(exports, "CsvFormatterStream", {
- enumerable: true,
- get: function get() {
- return CsvFormatterStream_2.CsvFormatterStream;
- }
- });
- var FormatterOptions_2 = require("./FormatterOptions");
- Object.defineProperty(exports, "FormatterOptions", {
- enumerable: true,
- get: function get() {
- return FormatterOptions_2.FormatterOptions;
- }
- });
- exports.format = function (options) {
- return new CsvFormatterStream_1.CsvFormatterStream(new FormatterOptions_1.FormatterOptions(options));
- };
- exports.write = function (rows, options) {
- var csvStream = exports.format(options);
- var promiseWrite = util_1.promisify(function (row, cb) {
- csvStream.write(row, undefined, cb);
- });
- rows.reduce(function (prev, row) {
- return prev.then(function () {
- return promiseWrite(row);
- });
- }, Promise.resolve()).then(function () {
- return csvStream.end();
- }).catch(function (err) {
- csvStream.emit('error', err);
- });
- return csvStream;
- };
- exports.writeToStream = function (ws, rows, options) {
- return exports.write(rows, options).pipe(ws);
- };
- exports.writeToBuffer = function (rows) {
- var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- var buffers = [];
- var ws = new stream_1.Writable({
- write: function write(data, enc, writeCb) {
- buffers.push(data);
- writeCb();
- }
- });
- return new Promise(function (res, rej) {
- ws.on('error', rej).on('finish', function () {
- return res(Buffer.concat(buffers));
- });
- exports.write(rows, opts).pipe(ws);
- });
- };
- exports.writeToString = function (rows, options) {
- return exports.writeToBuffer(rows, options).then(function (buffer) {
- return buffer.toString();
- });
- };
- exports.writeToPath = function (path, rows, options) {
- var stream = fs.createWriteStream(path, {
- encoding: 'utf8'
- });
- return exports.write(rows, options).pipe(stream);
- };
- }).call(this,require("buffer").Buffer)
- },{"./CsvFormatterStream":143,"./FormatterOptions":144,"./types":149,"buffer":216,"fs":215,"stream":396,"util":415}],149:[function(require,module,exports){
- "use strict";
- /* eslint-disable @typescript-eslint/no-explicit-any */
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.isSyncTransform = void 0;
- exports.isSyncTransform = function (transform) {
- return transform.length === 1;
- };
- },{}],150:[function(require,module,exports){
- (function (setImmediate){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }
- function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.CsvParserStream = void 0;
- var string_decoder_1 = require("string_decoder");
- var stream_1 = require("stream");
- var transforms_1 = require("./transforms");
- var parser_1 = require("./parser");
- var CsvParserStream = /*#__PURE__*/function (_stream_1$Transform) {
- _inherits(CsvParserStream, _stream_1$Transform);
- var _super = _createSuper(CsvParserStream);
- function CsvParserStream(parserOptions) {
- var _this;
- _classCallCheck(this, CsvParserStream);
- _this = _super.call(this, {
- objectMode: parserOptions.objectMode
- });
- _this.lines = '';
- _this.rowCount = 0;
- _this.parsedRowCount = 0;
- _this.parsedLineCount = 0;
- _this.endEmitted = false;
- _this.headersEmitted = false;
- _this.parserOptions = parserOptions;
- _this.parser = new parser_1.Parser(parserOptions);
- _this.headerTransformer = new transforms_1.HeaderTransformer(parserOptions);
- _this.decoder = new string_decoder_1.StringDecoder(parserOptions.encoding);
- _this.rowTransformerValidator = new transforms_1.RowTransformerValidator();
- return _this;
- }
- _createClass(CsvParserStream, [{
- key: "transform",
- value: function transform(transformFunction) {
- this.rowTransformerValidator.rowTransform = transformFunction;
- return this;
- }
- }, {
- key: "validate",
- value: function validate(validateFunction) {
- this.rowTransformerValidator.rowValidator = validateFunction;
- return this;
- } // eslint-disable-next-line @typescript-eslint/no-explicit-any
- }, {
- key: "emit",
- value: function emit(event) {
- var _get2;
- if (event === 'end') {
- if (!this.endEmitted) {
- this.endEmitted = true;
- _get(_getPrototypeOf(CsvParserStream.prototype), "emit", this).call(this, 'end', this.rowCount);
- }
- return false;
- }
- for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
- rest[_key - 1] = arguments[_key];
- }
- return (_get2 = _get(_getPrototypeOf(CsvParserStream.prototype), "emit", this)).call.apply(_get2, [this, event].concat(rest));
- }
- }, {
- key: "_transform",
- value: function _transform(data, encoding, done) {
- // if we have hit our maxRows parsing limit then skip parsing
- if (this.hasHitRowLimit) {
- return done();
- }
- try {
- var lines = this.lines;
- var newLine = lines + this.decoder.write(data);
- var rows = this.parse(newLine, true);
- return this.processRows(rows, done);
- } catch (e) {
- return done(e);
- }
- }
- }, {
- key: "_flush",
- value: function _flush(done) {
- // if we have hit our maxRows parsing limit then skip parsing
- if (this.hasHitRowLimit) {
- return done();
- }
- try {
- var newLine = this.lines + this.decoder.end();
- var rows = this.parse(newLine, false);
- return this.processRows(rows, done);
- } catch (e) {
- return done(e);
- }
- }
- }, {
- key: "parse",
- value: function parse(data, hasMoreData) {
- if (!data) {
- return [];
- }
- var _this$parser$parse = this.parser.parse(data, hasMoreData),
- line = _this$parser$parse.line,
- rows = _this$parser$parse.rows;
- this.lines = line;
- return rows;
- }
- }, {
- key: "processRows",
- value: function processRows(rows, cb) {
- var _this2 = this;
- var rowsLength = rows.length;
- var iterate = function iterate(i) {
- var callNext = function callNext(err) {
- if (err) {
- return cb(err);
- }
- if (i % 100 === 0) {
- // incase the transform are sync insert a next tick to prevent stack overflow
- setImmediate(function () {
- return iterate(i + 1);
- });
- return undefined;
- }
- return iterate(i + 1);
- };
- _this2.checkAndEmitHeaders(); // if we have emitted all rows or we have hit the maxRows limit option
- // then end
- if (i >= rowsLength || _this2.hasHitRowLimit) {
- return cb();
- }
- _this2.parsedLineCount += 1;
- if (_this2.shouldSkipLine) {
- return callNext();
- }
- var row = rows[i];
- _this2.rowCount += 1;
- _this2.parsedRowCount += 1;
- var nextRowCount = _this2.rowCount;
- return _this2.transformRow(row, function (err, transformResult) {
- if (err) {
- _this2.rowCount -= 1;
- return callNext(err);
- }
- if (!transformResult) {
- return callNext(new Error('expected transform result'));
- }
- if (!transformResult.isValid) {
- _this2.emit('data-invalid', transformResult.row, nextRowCount, transformResult.reason);
- } else if (transformResult.row) {
- return _this2.pushRow(transformResult.row, callNext);
- }
- return callNext();
- });
- };
- iterate(0);
- }
- }, {
- key: "transformRow",
- value: function transformRow(parsedRow, cb) {
- var _this3 = this;
- try {
- this.headerTransformer.transform(parsedRow, function (err, withHeaders) {
- if (err) {
- return cb(err);
- }
- if (!withHeaders) {
- return cb(new Error('Expected result from header transform'));
- }
- if (!withHeaders.isValid) {
- if (_this3.shouldEmitRows) {
- return cb(null, {
- isValid: false,
- row: parsedRow
- });
- } // skipped because of skipRows option remove from total row count
- return _this3.skipRow(cb);
- }
- if (withHeaders.row) {
- if (_this3.shouldEmitRows) {
- return _this3.rowTransformerValidator.transformAndValidate(withHeaders.row, cb);
- } // skipped because of skipRows option remove from total row count
- return _this3.skipRow(cb);
- } // this is a header row dont include in the rowCount or parsedRowCount
- _this3.rowCount -= 1;
- _this3.parsedRowCount -= 1;
- return cb(null, {
- row: null,
- isValid: true
- });
- });
- } catch (e) {
- cb(e);
- }
- }
- }, {
- key: "checkAndEmitHeaders",
- value: function checkAndEmitHeaders() {
- if (!this.headersEmitted && this.headerTransformer.headers) {
- this.headersEmitted = true;
- this.emit('headers', this.headerTransformer.headers);
- }
- }
- }, {
- key: "skipRow",
- value: function skipRow(cb) {
- // skipped because of skipRows option remove from total row count
- this.rowCount -= 1;
- return cb(null, {
- row: null,
- isValid: true
- });
- }
- }, {
- key: "pushRow",
- value: function pushRow(row, cb) {
- try {
- if (!this.parserOptions.objectMode) {
- this.push(JSON.stringify(row));
- } else {
- this.push(row);
- }
- cb();
- } catch (e) {
- cb(e);
- }
- }
- }, {
- key: "hasHitRowLimit",
- get: function get() {
- return this.parserOptions.limitRows && this.rowCount >= this.parserOptions.maxRows;
- }
- }, {
- key: "shouldEmitRows",
- get: function get() {
- return this.parsedRowCount > this.parserOptions.skipRows;
- }
- }, {
- key: "shouldSkipLine",
- get: function get() {
- return this.parsedLineCount <= this.parserOptions.skipLines;
- }
- }]);
- return CsvParserStream;
- }(stream_1.Transform);
- exports.CsvParserStream = CsvParserStream;
- }).call(this,require("timers").setImmediate)
- },{"./parser":162,"./transforms":165,"stream":396,"string_decoder":410,"timers":411}],151:[function(require,module,exports){
- "use strict";
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
- return mod && mod.__esModule ? mod : {
- "default": mod
- };
- };
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.ParserOptions = void 0;
- var lodash_escaperegexp_1 = __importDefault(require("lodash.escaperegexp"));
- var lodash_isnil_1 = __importDefault(require("lodash.isnil"));
- var ParserOptions = function ParserOptions(opts) {
- _classCallCheck(this, ParserOptions);
- var _a;
- this.objectMode = true;
- this.delimiter = ',';
- this.ignoreEmpty = false;
- this.quote = '"';
- this.escape = null;
- this.escapeChar = this.quote;
- this.comment = null;
- this.supportsComments = false;
- this.ltrim = false;
- this.rtrim = false;
- this.trim = false;
- this.headers = null;
- this.renameHeaders = false;
- this.strictColumnHandling = false;
- this.discardUnmappedColumns = false;
- this.carriageReturn = '\r';
- this.encoding = 'utf8';
- this.limitRows = false;
- this.maxRows = 0;
- this.skipLines = 0;
- this.skipRows = 0;
- Object.assign(this, opts || {});
- if (this.delimiter.length > 1) {
- throw new Error('delimiter option must be one character long');
- }
- this.escapedDelimiter = lodash_escaperegexp_1.default(this.delimiter);
- this.escapeChar = (_a = this.escape) !== null && _a !== void 0 ? _a : this.quote;
- this.supportsComments = !lodash_isnil_1.default(this.comment);
- this.NEXT_TOKEN_REGEXP = new RegExp("([^\\s]|\\r\\n|\\n|\\r|".concat(this.escapedDelimiter, ")"));
- if (this.maxRows > 0) {
- this.limitRows = true;
- }
- };
- exports.ParserOptions = ParserOptions;
- },{"lodash.escaperegexp":317,"lodash.isnil":322}],152:[function(require,module,exports){
- "use strict";
- var __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, {
- enumerable: true,
- get: function get() {
- return m[k];
- }
- });
- } : function (o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
- });
- var __setModuleDefault = void 0 && (void 0).__setModuleDefault || (Object.create ? function (o, v) {
- Object.defineProperty(o, "default", {
- enumerable: true,
- value: v
- });
- } : function (o, v) {
- o["default"] = v;
- });
- var __importStar = void 0 && (void 0).__importStar || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) {
- if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- }
- __setModuleDefault(result, mod);
- return result;
- };
- var __exportStar = void 0 && (void 0).__exportStar || function (m, exports) {
- for (var p in m) {
- if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
- }
- };
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.parseString = exports.parseFile = exports.parseStream = exports.parse = void 0;
- var fs = __importStar(require("fs"));
- var stream_1 = require("stream");
- var ParserOptions_1 = require("./ParserOptions");
- var CsvParserStream_1 = require("./CsvParserStream");
- __exportStar(require("./types"), exports);
- var CsvParserStream_2 = require("./CsvParserStream");
- Object.defineProperty(exports, "CsvParserStream", {
- enumerable: true,
- get: function get() {
- return CsvParserStream_2.CsvParserStream;
- }
- });
- var ParserOptions_2 = require("./ParserOptions");
- Object.defineProperty(exports, "ParserOptions", {
- enumerable: true,
- get: function get() {
- return ParserOptions_2.ParserOptions;
- }
- });
- exports.parse = function (args) {
- return new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(args));
- };
- exports.parseStream = function (stream, options) {
- return stream.pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options)));
- };
- exports.parseFile = function (location) {
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- return fs.createReadStream(location).pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options)));
- };
- exports.parseString = function (string, options) {
- var rs = new stream_1.Readable();
- rs.push(string);
- rs.push(null);
- return rs.pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options)));
- };
- },{"./CsvParserStream":150,"./ParserOptions":151,"./types":166,"fs":215,"stream":396}],153:[function(require,module,exports){
- "use strict";
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.Parser = void 0;
- var Scanner_1 = require("./Scanner");
- var RowParser_1 = require("./RowParser");
- var Token_1 = require("./Token");
- var EMPTY_ROW_REGEXP = /^\s*(?:''|"")?\s*(?:,\s*(?:''|"")?\s*)*$/;
- var Parser = /*#__PURE__*/function () {
- function Parser(parserOptions) {
- _classCallCheck(this, Parser);
- this.parserOptions = parserOptions;
- this.rowParser = new RowParser_1.RowParser(this.parserOptions);
- }
- _createClass(Parser, [{
- key: "parse",
- value: function parse(line, hasMoreData) {
- var scanner = new Scanner_1.Scanner({
- line: Parser.removeBOM(line),
- parserOptions: this.parserOptions,
- hasMoreData: hasMoreData
- });
- if (this.parserOptions.supportsComments) {
- return this.parseWithComments(scanner);
- }
- return this.parseWithoutComments(scanner);
- }
- }, {
- key: "parseWithoutComments",
- value: function parseWithoutComments(scanner) {
- var rows = [];
- var shouldContinue = true;
- while (shouldContinue) {
- shouldContinue = this.parseRow(scanner, rows);
- }
- return {
- line: scanner.line,
- rows: rows
- };
- }
- }, {
- key: "parseWithComments",
- value: function parseWithComments(scanner) {
- var parserOptions = this.parserOptions;
- var rows = [];
- for (var nextToken = scanner.nextCharacterToken; nextToken !== null; nextToken = scanner.nextCharacterToken) {
- if (Token_1.Token.isTokenComment(nextToken, parserOptions)) {
- var cursor = scanner.advancePastLine();
- if (cursor === null) {
- return {
- line: scanner.lineFromCursor,
- rows: rows
- };
- }
- if (!scanner.hasMoreCharacters) {
- return {
- line: scanner.lineFromCursor,
- rows: rows
- };
- }
- scanner.truncateToCursor();
- } else if (!this.parseRow(scanner, rows)) {
- break;
- }
- }
- return {
- line: scanner.line,
- rows: rows
- };
- }
- }, {
- key: "parseRow",
- value: function parseRow(scanner, rows) {
- var nextToken = scanner.nextNonSpaceToken;
- if (!nextToken) {
- return false;
- }
- var row = this.rowParser.parse(scanner);
- if (row === null) {
- return false;
- }
- if (this.parserOptions.ignoreEmpty && EMPTY_ROW_REGEXP.test(row.join(''))) {
- return true;
- }
- rows.push(row);
- return true;
- }
- }], [{
- key: "removeBOM",
- value: function removeBOM(line) {
- // Catches EFBBBF (UTF-8 BOM) because the buffer-to-string
- // conversion translates it to FEFF (UTF-16 BOM)
- if (line && line.charCodeAt(0) === 0xfeff) {
- return line.slice(1);
- }
- return line;
- }
- }]);
- return Parser;
- }();
- exports.Parser = Parser;
- },{"./RowParser":154,"./Scanner":155,"./Token":156}],154:[function(require,module,exports){
- "use strict";
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.RowParser = void 0;
- var column_1 = require("./column");
- var Token_1 = require("./Token");
- var _Token_1$Token = Token_1.Token,
- isTokenRowDelimiter = _Token_1$Token.isTokenRowDelimiter,
- isTokenCarriageReturn = _Token_1$Token.isTokenCarriageReturn,
- isTokenDelimiter = _Token_1$Token.isTokenDelimiter;
- var RowParser = /*#__PURE__*/function () {
- function RowParser(parserOptions) {
- _classCallCheck(this, RowParser);
- this.parserOptions = parserOptions;
- this.columnParser = new column_1.ColumnParser(parserOptions);
- }
- _createClass(RowParser, [{
- key: "parse",
- value: function parse(scanner) {
- var parserOptions = this.parserOptions;
- var hasMoreData = scanner.hasMoreData;
- var currentScanner = scanner;
- var columns = [];
- var currentToken = this.getStartToken(currentScanner, columns);
- while (currentToken) {
- if (isTokenRowDelimiter(currentToken)) {
- currentScanner.advancePastToken(currentToken); // if ends with CR and there is more data, keep unparsed due to possible
- // coming LF in CRLF
- if (!currentScanner.hasMoreCharacters && isTokenCarriageReturn(currentToken, parserOptions) && hasMoreData) {
- return null;
- }
- currentScanner.truncateToCursor();
- return columns;
- }
- if (!this.shouldSkipColumnParse(currentScanner, currentToken, columns)) {
- var item = this.columnParser.parse(currentScanner);
- if (item === null) {
- return null;
- }
- columns.push(item);
- }
- currentToken = currentScanner.nextNonSpaceToken;
- }
- if (!hasMoreData) {
- currentScanner.truncateToCursor();
- return columns;
- }
- return null;
- }
- }, {
- key: "getStartToken",
- value: function getStartToken(scanner, columns) {
- var currentToken = scanner.nextNonSpaceToken;
- if (currentToken !== null && isTokenDelimiter(currentToken, this.parserOptions)) {
- columns.push('');
- return scanner.nextNonSpaceToken;
- }
- return currentToken;
- }
- }, {
- key: "shouldSkipColumnParse",
- value: function shouldSkipColumnParse(scanner, currentToken, columns) {
- var parserOptions = this.parserOptions;
- if (isTokenDelimiter(currentToken, parserOptions)) {
- scanner.advancePastToken(currentToken); // if the delimiter is at the end of a line
- var nextToken = scanner.nextCharacterToken;
- if (!scanner.hasMoreCharacters || nextToken !== null && isTokenRowDelimiter(nextToken)) {
- columns.push('');
- return true;
- }
- if (nextToken !== null && isTokenDelimiter(nextToken, parserOptions)) {
- columns.push('');
- return true;
- }
- }
- return false;
- }
- }]);
- return RowParser;
- }();
- exports.RowParser = RowParser;
- },{"./Token":156,"./column":161}],155:[function(require,module,exports){
- "use strict";
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.Scanner = void 0;
- var Token_1 = require("./Token");
- var ROW_DELIMITER = /((?:\r\n)|\n|\r)/;
- var Scanner = /*#__PURE__*/function () {
- function Scanner(args) {
- _classCallCheck(this, Scanner);
- this.cursor = 0;
- this.line = args.line;
- this.lineLength = this.line.length;
- this.parserOptions = args.parserOptions;
- this.hasMoreData = args.hasMoreData;
- this.cursor = args.cursor || 0;
- }
- _createClass(Scanner, [{
- key: "advancePastLine",
- value: function advancePastLine() {
- var match = ROW_DELIMITER.exec(this.lineFromCursor);
- if (!match) {
- if (this.hasMoreData) {
- return null;
- }
- this.cursor = this.lineLength;
- return this;
- }
- this.cursor += (match.index || 0) + match[0].length;
- return this;
- }
- }, {
- key: "advanceTo",
- value: function advanceTo(cursor) {
- this.cursor = cursor;
- return this;
- }
- }, {
- key: "advanceToToken",
- value: function advanceToToken(token) {
- this.cursor = token.startCursor;
- return this;
- }
- }, {
- key: "advancePastToken",
- value: function advancePastToken(token) {
- this.cursor = token.endCursor + 1;
- return this;
- }
- }, {
- key: "truncateToCursor",
- value: function truncateToCursor() {
- this.line = this.lineFromCursor;
- this.lineLength = this.line.length;
- this.cursor = 0;
- return this;
- }
- }, {
- key: "hasMoreCharacters",
- get: function get() {
- return this.lineLength > this.cursor;
- }
- }, {
- key: "nextNonSpaceToken",
- get: function get() {
- var lineFromCursor = this.lineFromCursor;
- var regex = this.parserOptions.NEXT_TOKEN_REGEXP;
- if (lineFromCursor.search(regex) === -1) {
- return null;
- }
- var match = regex.exec(lineFromCursor);
- if (match == null) {
- return null;
- }
- var token = match[1];
- var startCursor = this.cursor + (match.index || 0);
- return new Token_1.Token({
- token: token,
- startCursor: startCursor,
- endCursor: startCursor + token.length - 1
- });
- }
- }, {
- key: "nextCharacterToken",
- get: function get() {
- var cursor = this.cursor,
- lineLength = this.lineLength;
- if (lineLength <= cursor) {
- return null;
- }
- return new Token_1.Token({
- token: this.line[cursor],
- startCursor: cursor,
- endCursor: cursor
- });
- }
- }, {
- key: "lineFromCursor",
- get: function get() {
- return this.line.substr(this.cursor);
- }
- }]);
- return Scanner;
- }();
- exports.Scanner = Scanner;
- },{"./Token":156}],156:[function(require,module,exports){
- "use strict";
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.Token = void 0;
- var Token = /*#__PURE__*/function () {
- function Token(tokenArgs) {
- _classCallCheck(this, Token);
- this.token = tokenArgs.token;
- this.startCursor = tokenArgs.startCursor;
- this.endCursor = tokenArgs.endCursor;
- }
- _createClass(Token, null, [{
- key: "isTokenRowDelimiter",
- value: function isTokenRowDelimiter(token) {
- var content = token.token;
- return content === '\r' || content === '\n' || content === '\r\n';
- }
- }, {
- key: "isTokenCarriageReturn",
- value: function isTokenCarriageReturn(token, parserOptions) {
- return token.token === parserOptions.carriageReturn;
- }
- }, {
- key: "isTokenComment",
- value: function isTokenComment(token, parserOptions) {
- return parserOptions.supportsComments && !!token && token.token === parserOptions.comment;
- }
- }, {
- key: "isTokenEscapeCharacter",
- value: function isTokenEscapeCharacter(token, parserOptions) {
- return token.token === parserOptions.escapeChar;
- }
- }, {
- key: "isTokenQuote",
- value: function isTokenQuote(token, parserOptions) {
- return token.token === parserOptions.quote;
- }
- }, {
- key: "isTokenDelimiter",
- value: function isTokenDelimiter(token, parserOptions) {
- return token.token === parserOptions.delimiter;
- }
- }]);
- return Token;
- }();
- exports.Token = Token;
- },{}],157:[function(require,module,exports){
- "use strict";
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.ColumnFormatter = void 0;
- var ColumnFormatter = function ColumnFormatter(parserOptions) {
- _classCallCheck(this, ColumnFormatter);
- if (parserOptions.trim) {
- this.format = function (col) {
- return col.trim();
- };
- } else if (parserOptions.ltrim) {
- this.format = function (col) {
- return col.trimLeft();
- };
- } else if (parserOptions.rtrim) {
- this.format = function (col) {
- return col.trimRight();
- };
- } else {
- this.format = function (col) {
- return col;
- };
- }
- };
- exports.ColumnFormatter = ColumnFormatter;
- },{}],158:[function(require,module,exports){
- "use strict";
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.ColumnParser = void 0;
- var NonQuotedColumnParser_1 = require("./NonQuotedColumnParser");
- var QuotedColumnParser_1 = require("./QuotedColumnParser");
- var Token_1 = require("../Token");
- var ColumnParser = /*#__PURE__*/function () {
- function ColumnParser(parserOptions) {
- _classCallCheck(this, ColumnParser);
- this.parserOptions = parserOptions;
- this.quotedColumnParser = new QuotedColumnParser_1.QuotedColumnParser(parserOptions);
- this.nonQuotedColumnParser = new NonQuotedColumnParser_1.NonQuotedColumnParser(parserOptions);
- }
- _createClass(ColumnParser, [{
- key: "parse",
- value: function parse(scanner) {
- var nextNonSpaceToken = scanner.nextNonSpaceToken;
- if (nextNonSpaceToken !== null && Token_1.Token.isTokenQuote(nextNonSpaceToken, this.parserOptions)) {
- scanner.advanceToToken(nextNonSpaceToken);
- return this.quotedColumnParser.parse(scanner);
- }
- return this.nonQuotedColumnParser.parse(scanner);
- }
- }]);
- return ColumnParser;
- }();
- exports.ColumnParser = ColumnParser;
- },{"../Token":156,"./NonQuotedColumnParser":159,"./QuotedColumnParser":160}],159:[function(require,module,exports){
- "use strict";
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.NonQuotedColumnParser = void 0;
- var ColumnFormatter_1 = require("./ColumnFormatter");
- var Token_1 = require("../Token");
- var _Token_1$Token = Token_1.Token,
- isTokenDelimiter = _Token_1$Token.isTokenDelimiter,
- isTokenRowDelimiter = _Token_1$Token.isTokenRowDelimiter;
- var NonQuotedColumnParser = /*#__PURE__*/function () {
- function NonQuotedColumnParser(parserOptions) {
- _classCallCheck(this, NonQuotedColumnParser);
- this.parserOptions = parserOptions;
- this.columnFormatter = new ColumnFormatter_1.ColumnFormatter(parserOptions);
- }
- _createClass(NonQuotedColumnParser, [{
- key: "parse",
- value: function parse(scanner) {
- if (!scanner.hasMoreCharacters) {
- return null;
- }
- var parserOptions = this.parserOptions;
- var characters = [];
- var nextToken = scanner.nextCharacterToken;
- for (; nextToken; nextToken = scanner.nextCharacterToken) {
- if (isTokenDelimiter(nextToken, parserOptions) || isTokenRowDelimiter(nextToken)) {
- break;
- }
- characters.push(nextToken.token);
- scanner.advancePastToken(nextToken);
- }
- return this.columnFormatter.format(characters.join(''));
- }
- }]);
- return NonQuotedColumnParser;
- }();
- exports.NonQuotedColumnParser = NonQuotedColumnParser;
- },{"../Token":156,"./ColumnFormatter":157}],160:[function(require,module,exports){
- "use strict";
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.QuotedColumnParser = void 0;
- var ColumnFormatter_1 = require("./ColumnFormatter");
- var Token_1 = require("../Token");
- var _Token_1$Token = Token_1.Token,
- isTokenDelimiter = _Token_1$Token.isTokenDelimiter,
- isTokenRowDelimiter = _Token_1$Token.isTokenRowDelimiter,
- isTokenEscapeCharacter = _Token_1$Token.isTokenEscapeCharacter,
- isTokenQuote = _Token_1$Token.isTokenQuote;
- var QuotedColumnParser = /*#__PURE__*/function () {
- function QuotedColumnParser(parserOptions) {
- _classCallCheck(this, QuotedColumnParser);
- this.parserOptions = parserOptions;
- this.columnFormatter = new ColumnFormatter_1.ColumnFormatter(parserOptions);
- }
- _createClass(QuotedColumnParser, [{
- key: "parse",
- value: function parse(scanner) {
- if (!scanner.hasMoreCharacters) {
- return null;
- }
- var originalCursor = scanner.cursor;
- var _this$gatherDataBetwe = this.gatherDataBetweenQuotes(scanner),
- foundClosingQuote = _this$gatherDataBetwe.foundClosingQuote,
- col = _this$gatherDataBetwe.col;
- if (!foundClosingQuote) {
- // reset the cursor to the original
- scanner.advanceTo(originalCursor); // if we didnt find a closing quote but we potentially have more data then skip the parsing
- // and return the original scanner.
- if (!scanner.hasMoreData) {
- throw new Error("Parse Error: missing closing: '".concat(this.parserOptions.quote || '', "' in line: at '").concat(scanner.lineFromCursor.replace(/[\r\n]/g, "\\n'"), "'"));
- }
- return null;
- }
- this.checkForMalformedColumn(scanner);
- return col;
- }
- }, {
- key: "gatherDataBetweenQuotes",
- value: function gatherDataBetweenQuotes(scanner) {
- var parserOptions = this.parserOptions;
- var foundStartingQuote = false;
- var foundClosingQuote = false;
- var characters = [];
- var nextToken = scanner.nextCharacterToken;
- for (; !foundClosingQuote && nextToken !== null; nextToken = scanner.nextCharacterToken) {
- var isQuote = isTokenQuote(nextToken, parserOptions); // ignore first quote
- if (!foundStartingQuote && isQuote) {
- foundStartingQuote = true;
- } else if (foundStartingQuote) {
- if (isTokenEscapeCharacter(nextToken, parserOptions)) {
- // advance past the escape character so we can get the next one in line
- scanner.advancePastToken(nextToken);
- var tokenFollowingEscape = scanner.nextCharacterToken; // if the character following the escape is a quote character then just add
- // the quote and advance to that character
- if (tokenFollowingEscape !== null && (isTokenQuote(tokenFollowingEscape, parserOptions) || isTokenEscapeCharacter(tokenFollowingEscape, parserOptions))) {
- characters.push(tokenFollowingEscape.token);
- nextToken = tokenFollowingEscape;
- } else if (isQuote) {
- // if the escape is also a quote then we found our closing quote and finish early
- foundClosingQuote = true;
- } else {
- // other wise add the escape token to the characters since it wast escaping anything
- characters.push(nextToken.token);
- }
- } else if (isQuote) {
- // we found our closing quote!
- foundClosingQuote = true;
- } else {
- // add the token to the characters
- characters.push(nextToken.token);
- }
- }
- scanner.advancePastToken(nextToken);
- }
- return {
- col: this.columnFormatter.format(characters.join('')),
- foundClosingQuote: foundClosingQuote
- };
- }
- }, {
- key: "checkForMalformedColumn",
- value: function checkForMalformedColumn(scanner) {
- var parserOptions = this.parserOptions;
- var nextNonSpaceToken = scanner.nextNonSpaceToken;
- if (nextNonSpaceToken) {
- var isNextTokenADelimiter = isTokenDelimiter(nextNonSpaceToken, parserOptions);
- var isNextTokenARowDelimiter = isTokenRowDelimiter(nextNonSpaceToken);
- if (!(isNextTokenADelimiter || isNextTokenARowDelimiter)) {
- // if the final quote was NOT followed by a column (,) or row(\n) delimiter then its a bad column
- // tldr: only part of the column was quoted
- var linePreview = scanner.lineFromCursor.substr(0, 10).replace(/[\r\n]/g, "\\n'");
- throw new Error("Parse Error: expected: '".concat(parserOptions.escapedDelimiter, "' OR new line got: '").concat(nextNonSpaceToken.token, "'. at '").concat(linePreview));
- }
- scanner.advanceToToken(nextNonSpaceToken);
- } else if (!scanner.hasMoreData) {
- scanner.advancePastLine();
- }
- }
- }]);
- return QuotedColumnParser;
- }();
- exports.QuotedColumnParser = QuotedColumnParser;
- },{"../Token":156,"./ColumnFormatter":157}],161:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var ColumnParser_1 = require("./ColumnParser");
- Object.defineProperty(exports, "ColumnParser", {
- enumerable: true,
- get: function get() {
- return ColumnParser_1.ColumnParser;
- }
- });
- var NonQuotedColumnParser_1 = require("./NonQuotedColumnParser");
- Object.defineProperty(exports, "NonQuotedColumnParser", {
- enumerable: true,
- get: function get() {
- return NonQuotedColumnParser_1.NonQuotedColumnParser;
- }
- });
- var QuotedColumnParser_1 = require("./QuotedColumnParser");
- Object.defineProperty(exports, "QuotedColumnParser", {
- enumerable: true,
- get: function get() {
- return QuotedColumnParser_1.QuotedColumnParser;
- }
- });
- var ColumnFormatter_1 = require("./ColumnFormatter");
- Object.defineProperty(exports, "ColumnFormatter", {
- enumerable: true,
- get: function get() {
- return ColumnFormatter_1.ColumnFormatter;
- }
- });
- },{"./ColumnFormatter":157,"./ColumnParser":158,"./NonQuotedColumnParser":159,"./QuotedColumnParser":160}],162:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var Parser_1 = require("./Parser");
- Object.defineProperty(exports, "Parser", {
- enumerable: true,
- get: function get() {
- return Parser_1.Parser;
- }
- });
- var RowParser_1 = require("./RowParser");
- Object.defineProperty(exports, "RowParser", {
- enumerable: true,
- get: function get() {
- return RowParser_1.RowParser;
- }
- });
- var Scanner_1 = require("./Scanner");
- Object.defineProperty(exports, "Scanner", {
- enumerable: true,
- get: function get() {
- return Scanner_1.Scanner;
- }
- });
- var Token_1 = require("./Token");
- Object.defineProperty(exports, "Token", {
- enumerable: true,
- get: function get() {
- return Token_1.Token;
- }
- });
- var column_1 = require("./column");
- Object.defineProperty(exports, "ColumnParser", {
- enumerable: true,
- get: function get() {
- return column_1.ColumnParser;
- }
- });
- Object.defineProperty(exports, "NonQuotedColumnParser", {
- enumerable: true,
- get: function get() {
- return column_1.NonQuotedColumnParser;
- }
- });
- Object.defineProperty(exports, "QuotedColumnParser", {
- enumerable: true,
- get: function get() {
- return column_1.QuotedColumnParser;
- }
- });
- },{"./Parser":153,"./RowParser":154,"./Scanner":155,"./Token":156,"./column":161}],163:[function(require,module,exports){
- "use strict";
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
- return mod && mod.__esModule ? mod : {
- "default": mod
- };
- };
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.HeaderTransformer = void 0;
- var lodash_isundefined_1 = __importDefault(require("lodash.isundefined"));
- var lodash_isfunction_1 = __importDefault(require("lodash.isfunction"));
- var lodash_uniq_1 = __importDefault(require("lodash.uniq"));
- var lodash_groupby_1 = __importDefault(require("lodash.groupby"));
- var HeaderTransformer = /*#__PURE__*/function () {
- function HeaderTransformer(parserOptions) {
- _classCallCheck(this, HeaderTransformer);
- this.headers = null;
- this.receivedHeaders = false;
- this.shouldUseFirstRow = false;
- this.processedFirstRow = false;
- this.headersLength = 0;
- this.parserOptions = parserOptions;
- if (parserOptions.headers === true) {
- this.shouldUseFirstRow = true;
- } else if (Array.isArray(parserOptions.headers)) {
- this.setHeaders(parserOptions.headers);
- } else if (lodash_isfunction_1.default(parserOptions.headers)) {
- this.headersTransform = parserOptions.headers;
- }
- }
- _createClass(HeaderTransformer, [{
- key: "transform",
- value: function transform(row, cb) {
- if (!this.shouldMapRow(row)) {
- return cb(null, {
- row: null,
- isValid: true
- });
- }
- return cb(null, this.processRow(row));
- }
- }, {
- key: "shouldMapRow",
- value: function shouldMapRow(row) {
- var parserOptions = this.parserOptions;
- if (!this.headersTransform && parserOptions.renameHeaders && !this.processedFirstRow) {
- if (!this.receivedHeaders) {
- throw new Error('Error renaming headers: new headers must be provided in an array');
- }
- this.processedFirstRow = true;
- return false;
- }
- if (!this.receivedHeaders && Array.isArray(row)) {
- if (this.headersTransform) {
- this.setHeaders(this.headersTransform(row));
- } else if (this.shouldUseFirstRow) {
- this.setHeaders(row);
- } else {
- // dont do anything with the headers if we didnt receive a transform or shouldnt use the first row.
- return true;
- }
- return false;
- }
- return true;
- }
- }, {
- key: "processRow",
- value: function processRow(row) {
- if (!this.headers) {
- return {
- row: row,
- isValid: true
- };
- }
- var parserOptions = this.parserOptions;
- if (!parserOptions.discardUnmappedColumns && row.length > this.headersLength) {
- if (!parserOptions.strictColumnHandling) {
- throw new Error("Unexpected Error: column header mismatch expected: ".concat(this.headersLength, " columns got: ").concat(row.length));
- }
- return {
- row: row,
- isValid: false,
- reason: "Column header mismatch expected: ".concat(this.headersLength, " columns got: ").concat(row.length)
- };
- }
- if (parserOptions.strictColumnHandling && row.length < this.headersLength) {
- return {
- row: row,
- isValid: false,
- reason: "Column header mismatch expected: ".concat(this.headersLength, " columns got: ").concat(row.length)
- };
- }
- return {
- row: this.mapHeaders(row),
- isValid: true
- };
- }
- }, {
- key: "mapHeaders",
- value: function mapHeaders(row) {
- var rowMap = {};
- var headers = this.headers,
- headersLength = this.headersLength;
- for (var i = 0; i < headersLength; i += 1) {
- var header = headers[i];
- if (!lodash_isundefined_1.default(header)) {
- var val = row[i]; // eslint-disable-next-line no-param-reassign
- if (lodash_isundefined_1.default(val)) {
- rowMap[header] = '';
- } else {
- rowMap[header] = val;
- }
- }
- }
- return rowMap;
- }
- }, {
- key: "setHeaders",
- value: function setHeaders(headers) {
- var _a;
- var filteredHeaders = headers.filter(function (h) {
- return !!h;
- });
- if (lodash_uniq_1.default(filteredHeaders).length !== filteredHeaders.length) {
- var grouped = lodash_groupby_1.default(filteredHeaders);
- var duplicates = Object.keys(grouped).filter(function (dup) {
- return grouped[dup].length > 1;
- });
- throw new Error("Duplicate headers found ".concat(JSON.stringify(duplicates)));
- }
- this.headers = headers;
- this.receivedHeaders = true;
- this.headersLength = ((_a = this.headers) === null || _a === void 0 ? void 0 : _a.length) || 0;
- }
- }]);
- return HeaderTransformer;
- }();
- exports.HeaderTransformer = HeaderTransformer;
- },{"lodash.groupby":318,"lodash.isfunction":321,"lodash.isundefined":323,"lodash.uniq":324}],164:[function(require,module,exports){
- "use strict";
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
- return mod && mod.__esModule ? mod : {
- "default": mod
- };
- };
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.RowTransformerValidator = void 0;
- var lodash_isfunction_1 = __importDefault(require("lodash.isfunction"));
- var types_1 = require("../types");
- var RowTransformerValidator = /*#__PURE__*/function () {
- function RowTransformerValidator() {
- _classCallCheck(this, RowTransformerValidator);
- this._rowTransform = null;
- this._rowValidator = null;
- }
- _createClass(RowTransformerValidator, [{
- key: "transformAndValidate",
- value: function transformAndValidate(row, cb) {
- var _this = this;
- return this.callTransformer(row, function (transformErr, transformedRow) {
- if (transformErr) {
- return cb(transformErr);
- }
- if (!transformedRow) {
- return cb(null, {
- row: null,
- isValid: true
- });
- }
- return _this.callValidator(transformedRow, function (validateErr, validationResult) {
- if (validateErr) {
- return cb(validateErr);
- }
- if (validationResult && !validationResult.isValid) {
- return cb(null, {
- row: transformedRow,
- isValid: false,
- reason: validationResult.reason
- });
- }
- return cb(null, {
- row: transformedRow,
- isValid: true
- });
- });
- });
- }
- }, {
- key: "callTransformer",
- value: function callTransformer(row, cb) {
- if (!this._rowTransform) {
- return cb(null, row);
- }
- return this._rowTransform(row, cb);
- }
- }, {
- key: "callValidator",
- value: function callValidator(row, cb) {
- if (!this._rowValidator) {
- return cb(null, {
- row: row,
- isValid: true
- });
- }
- return this._rowValidator(row, cb);
- }
- }, {
- key: "rowTransform",
- set: function set(transformFunction) {
- if (!lodash_isfunction_1.default(transformFunction)) {
- throw new TypeError('The transform should be a function');
- }
- this._rowTransform = RowTransformerValidator.createTransform(transformFunction);
- }
- }, {
- key: "rowValidator",
- set: function set(validateFunction) {
- if (!lodash_isfunction_1.default(validateFunction)) {
- throw new TypeError('The validate should be a function');
- }
- this._rowValidator = RowTransformerValidator.createValidator(validateFunction);
- }
- }], [{
- key: "createTransform",
- value: function createTransform(transformFunction) {
- if (types_1.isSyncTransform(transformFunction)) {
- return function (row, cb) {
- var transformed = null;
- try {
- transformed = transformFunction(row);
- } catch (e) {
- return cb(e);
- }
- return cb(null, transformed);
- };
- }
- return transformFunction;
- }
- }, {
- key: "createValidator",
- value: function createValidator(validateFunction) {
- if (types_1.isSyncValidate(validateFunction)) {
- return function (row, cb) {
- cb(null, {
- row: row,
- isValid: validateFunction(row)
- });
- };
- }
- return function (row, cb) {
- validateFunction(row, function (err, isValid, reason) {
- if (err) {
- return cb(err);
- }
- if (isValid) {
- return cb(null, {
- row: row,
- isValid: isValid,
- reason: reason
- });
- }
- return cb(null, {
- row: row,
- isValid: false,
- reason: reason
- });
- });
- };
- }
- }]);
- return RowTransformerValidator;
- }();
- exports.RowTransformerValidator = RowTransformerValidator;
- },{"../types":166,"lodash.isfunction":321}],165:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var RowTransformerValidator_1 = require("./RowTransformerValidator");
- Object.defineProperty(exports, "RowTransformerValidator", {
- enumerable: true,
- get: function get() {
- return RowTransformerValidator_1.RowTransformerValidator;
- }
- });
- var HeaderTransformer_1 = require("./HeaderTransformer");
- Object.defineProperty(exports, "HeaderTransformer", {
- enumerable: true,
- get: function get() {
- return HeaderTransformer_1.HeaderTransformer;
- }
- });
- },{"./HeaderTransformer":163,"./RowTransformerValidator":164}],166:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.isSyncValidate = exports.isSyncTransform = void 0;
- exports.isSyncTransform = function (transform) {
- return transform.length === 1;
- };
- exports.isSyncValidate = function (validate) {
- return validate.length === 1;
- };
- },{}],167:[function(require,module,exports){
- 'use strict';
- var asn1 = exports;
- asn1.bignum = require('bn.js');
- asn1.define = require('./asn1/api').define;
- asn1.base = require('./asn1/base');
- asn1.constants = require('./asn1/constants');
- asn1.decoders = require('./asn1/decoders');
- asn1.encoders = require('./asn1/encoders');
- },{"./asn1/api":168,"./asn1/base":170,"./asn1/constants":174,"./asn1/decoders":176,"./asn1/encoders":179,"bn.js":181}],168:[function(require,module,exports){
- 'use strict';
- var encoders = require('./encoders');
- var decoders = require('./decoders');
- var inherits = require('inherits');
- var api = exports;
- api.define = function define(name, body) {
- return new Entity(name, body);
- };
- function Entity(name, body) {
- this.name = name;
- this.body = body;
- this.decoders = {};
- this.encoders = {};
- }
- Entity.prototype._createNamed = function createNamed(Base) {
- var name = this.name;
- function Generated(entity) {
- this._initNamed(entity, name);
- }
- inherits(Generated, Base);
- Generated.prototype._initNamed = function _initNamed(entity, name) {
- Base.call(this, entity, name);
- };
- return new Generated(this);
- };
- Entity.prototype._getDecoder = function _getDecoder(enc) {
- enc = enc || 'der'; // Lazily create decoder
- if (!this.decoders.hasOwnProperty(enc)) this.decoders[enc] = this._createNamed(decoders[enc]);
- return this.decoders[enc];
- };
- Entity.prototype.decode = function decode(data, enc, options) {
- return this._getDecoder(enc).decode(data, options);
- };
- Entity.prototype._getEncoder = function _getEncoder(enc) {
- enc = enc || 'der'; // Lazily create encoder
- if (!this.encoders.hasOwnProperty(enc)) this.encoders[enc] = this._createNamed(encoders[enc]);
- return this.encoders[enc];
- };
- Entity.prototype.encode = function encode(data, enc,
- /* internal */
- reporter) {
- return this._getEncoder(enc).encode(data, reporter);
- };
- },{"./decoders":176,"./encoders":179,"inherits":278}],169:[function(require,module,exports){
- 'use strict';
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- var inherits = require('inherits');
- var Reporter = require('../base/reporter').Reporter;
- var Buffer = require('safer-buffer').Buffer;
- function DecoderBuffer(base, options) {
- Reporter.call(this, options);
- if (!Buffer.isBuffer(base)) {
- this.error('Input not Buffer');
- return;
- }
- this.base = base;
- this.offset = 0;
- this.length = base.length;
- }
- inherits(DecoderBuffer, Reporter);
- exports.DecoderBuffer = DecoderBuffer;
- DecoderBuffer.isDecoderBuffer = function isDecoderBuffer(data) {
- if (data instanceof DecoderBuffer) {
- return true;
- } // Or accept compatible API
- var isCompatible = _typeof(data) === 'object' && Buffer.isBuffer(data.base) && data.constructor.name === 'DecoderBuffer' && typeof data.offset === 'number' && typeof data.length === 'number' && typeof data.save === 'function' && typeof data.restore === 'function' && typeof data.isEmpty === 'function' && typeof data.readUInt8 === 'function' && typeof data.skip === 'function' && typeof data.raw === 'function';
- return isCompatible;
- };
- DecoderBuffer.prototype.save = function save() {
- return {
- offset: this.offset,
- reporter: Reporter.prototype.save.call(this)
- };
- };
- DecoderBuffer.prototype.restore = function restore(save) {
- // Return skipped data
- var res = new DecoderBuffer(this.base);
- res.offset = save.offset;
- res.length = this.offset;
- this.offset = save.offset;
- Reporter.prototype.restore.call(this, save.reporter);
- return res;
- };
- DecoderBuffer.prototype.isEmpty = function isEmpty() {
- return this.offset === this.length;
- };
- DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {
- if (this.offset + 1 <= this.length) return this.base.readUInt8(this.offset++, true);else return this.error(fail || 'DecoderBuffer overrun');
- };
- DecoderBuffer.prototype.skip = function skip(bytes, fail) {
- if (!(this.offset + bytes <= this.length)) return this.error(fail || 'DecoderBuffer overrun');
- var res = new DecoderBuffer(this.base); // Share reporter state
- res._reporterState = this._reporterState;
- res.offset = this.offset;
- res.length = this.offset + bytes;
- this.offset += bytes;
- return res;
- };
- DecoderBuffer.prototype.raw = function raw(save) {
- return this.base.slice(save ? save.offset : this.offset, this.length);
- };
- function EncoderBuffer(value, reporter) {
- if (Array.isArray(value)) {
- this.length = 0;
- this.value = value.map(function (item) {
- if (!EncoderBuffer.isEncoderBuffer(item)) item = new EncoderBuffer(item, reporter);
- this.length += item.length;
- return item;
- }, this);
- } else if (typeof value === 'number') {
- if (!(0 <= value && value <= 0xff)) return reporter.error('non-byte EncoderBuffer value');
- this.value = value;
- this.length = 1;
- } else if (typeof value === 'string') {
- this.value = value;
- this.length = Buffer.byteLength(value);
- } else if (Buffer.isBuffer(value)) {
- this.value = value;
- this.length = value.length;
- } else {
- return reporter.error('Unsupported type: ' + _typeof(value));
- }
- }
- exports.EncoderBuffer = EncoderBuffer;
- EncoderBuffer.isEncoderBuffer = function isEncoderBuffer(data) {
- if (data instanceof EncoderBuffer) {
- return true;
- } // Or accept compatible API
- var isCompatible = _typeof(data) === 'object' && data.constructor.name === 'EncoderBuffer' && typeof data.length === 'number' && typeof data.join === 'function';
- return isCompatible;
- };
- EncoderBuffer.prototype.join = function join(out, offset) {
- if (!out) out = Buffer.alloc(this.length);
- if (!offset) offset = 0;
- if (this.length === 0) return out;
- if (Array.isArray(this.value)) {
- this.value.forEach(function (item) {
- item.join(out, offset);
- offset += item.length;
- });
- } else {
- if (typeof this.value === 'number') out[offset] = this.value;else if (typeof this.value === 'string') out.write(this.value, offset);else if (Buffer.isBuffer(this.value)) this.value.copy(out, offset);
- offset += this.length;
- }
- return out;
- };
- },{"../base/reporter":172,"inherits":278,"safer-buffer":385}],170:[function(require,module,exports){
- 'use strict';
- var base = exports;
- base.Reporter = require('./reporter').Reporter;
- base.DecoderBuffer = require('./buffer').DecoderBuffer;
- base.EncoderBuffer = require('./buffer').EncoderBuffer;
- base.Node = require('./node');
- },{"./buffer":169,"./node":171,"./reporter":172}],171:[function(require,module,exports){
- 'use strict';
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- var Reporter = require('../base/reporter').Reporter;
- var EncoderBuffer = require('../base/buffer').EncoderBuffer;
- var DecoderBuffer = require('../base/buffer').DecoderBuffer;
- var assert = require('minimalistic-assert'); // Supported tags
- var tags = ['seq', 'seqof', 'set', 'setof', 'objid', 'bool', 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc', 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str', 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr']; // Public methods list
- var methods = ['key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice', 'any', 'contains'].concat(tags); // Overrided methods list
- var overrided = ['_peekTag', '_decodeTag', '_use', '_decodeStr', '_decodeObjid', '_decodeTime', '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList', '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime', '_encodeNull', '_encodeInt', '_encodeBool'];
- function Node(enc, parent, name) {
- var state = {};
- this._baseState = state;
- state.name = name;
- state.enc = enc;
- state.parent = parent || null;
- state.children = null; // State
- state.tag = null;
- state.args = null;
- state.reverseArgs = null;
- state.choice = null;
- state.optional = false;
- state.any = false;
- state.obj = false;
- state.use = null;
- state.useDecoder = null;
- state.key = null;
- state['default'] = null;
- state.explicit = null;
- state.implicit = null;
- state.contains = null; // Should create new instance on each method
- if (!state.parent) {
- state.children = [];
- this._wrap();
- }
- }
- module.exports = Node;
- var stateProps = ['enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice', 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit', 'implicit', 'contains'];
- Node.prototype.clone = function clone() {
- var state = this._baseState;
- var cstate = {};
- stateProps.forEach(function (prop) {
- cstate[prop] = state[prop];
- });
- var res = new this.constructor(cstate.parent);
- res._baseState = cstate;
- return res;
- };
- Node.prototype._wrap = function wrap() {
- var state = this._baseState;
- methods.forEach(function (method) {
- this[method] = function _wrappedMethod() {
- var clone = new this.constructor(this);
- state.children.push(clone);
- return clone[method].apply(clone, arguments);
- };
- }, this);
- };
- Node.prototype._init = function init(body) {
- var state = this._baseState;
- assert(state.parent === null);
- body.call(this); // Filter children
- state.children = state.children.filter(function (child) {
- return child._baseState.parent === this;
- }, this);
- assert.equal(state.children.length, 1, 'Root node can have only one child');
- };
- Node.prototype._useArgs = function useArgs(args) {
- var state = this._baseState; // Filter children and args
- var children = args.filter(function (arg) {
- return arg instanceof this.constructor;
- }, this);
- args = args.filter(function (arg) {
- return !(arg instanceof this.constructor);
- }, this);
- if (children.length !== 0) {
- assert(state.children === null);
- state.children = children; // Replace parent to maintain backward link
- children.forEach(function (child) {
- child._baseState.parent = this;
- }, this);
- }
- if (args.length !== 0) {
- assert(state.args === null);
- state.args = args;
- state.reverseArgs = args.map(function (arg) {
- if (_typeof(arg) !== 'object' || arg.constructor !== Object) return arg;
- var res = {};
- Object.keys(arg).forEach(function (key) {
- if (key == (key | 0)) key |= 0;
- var value = arg[key];
- res[value] = key;
- });
- return res;
- });
- }
- }; //
- // Overrided methods
- //
- overrided.forEach(function (method) {
- Node.prototype[method] = function _overrided() {
- var state = this._baseState;
- throw new Error(method + ' not implemented for encoding: ' + state.enc);
- };
- }); //
- // Public methods
- //
- tags.forEach(function (tag) {
- Node.prototype[tag] = function _tagMethod() {
- var state = this._baseState;
- var args = Array.prototype.slice.call(arguments);
- assert(state.tag === null);
- state.tag = tag;
- this._useArgs(args);
- return this;
- };
- });
- Node.prototype.use = function use(item) {
- assert(item);
- var state = this._baseState;
- assert(state.use === null);
- state.use = item;
- return this;
- };
- Node.prototype.optional = function optional() {
- var state = this._baseState;
- state.optional = true;
- return this;
- };
- Node.prototype.def = function def(val) {
- var state = this._baseState;
- assert(state['default'] === null);
- state['default'] = val;
- state.optional = true;
- return this;
- };
- Node.prototype.explicit = function explicit(num) {
- var state = this._baseState;
- assert(state.explicit === null && state.implicit === null);
- state.explicit = num;
- return this;
- };
- Node.prototype.implicit = function implicit(num) {
- var state = this._baseState;
- assert(state.explicit === null && state.implicit === null);
- state.implicit = num;
- return this;
- };
- Node.prototype.obj = function obj() {
- var state = this._baseState;
- var args = Array.prototype.slice.call(arguments);
- state.obj = true;
- if (args.length !== 0) this._useArgs(args);
- return this;
- };
- Node.prototype.key = function key(newKey) {
- var state = this._baseState;
- assert(state.key === null);
- state.key = newKey;
- return this;
- };
- Node.prototype.any = function any() {
- var state = this._baseState;
- state.any = true;
- return this;
- };
- Node.prototype.choice = function choice(obj) {
- var state = this._baseState;
- assert(state.choice === null);
- state.choice = obj;
- this._useArgs(Object.keys(obj).map(function (key) {
- return obj[key];
- }));
- return this;
- };
- Node.prototype.contains = function contains(item) {
- var state = this._baseState;
- assert(state.use === null);
- state.contains = item;
- return this;
- }; //
- // Decoding
- //
- Node.prototype._decode = function decode(input, options) {
- var state = this._baseState; // Decode root node
- if (state.parent === null) return input.wrapResult(state.children[0]._decode(input, options));
- var result = state['default'];
- var present = true;
- var prevKey = null;
- if (state.key !== null) prevKey = input.enterKey(state.key); // Check if tag is there
- if (state.optional) {
- var tag = null;
- if (state.explicit !== null) tag = state.explicit;else if (state.implicit !== null) tag = state.implicit;else if (state.tag !== null) tag = state.tag;
- if (tag === null && !state.any) {
- // Trial and Error
- var save = input.save();
- try {
- if (state.choice === null) this._decodeGeneric(state.tag, input, options);else this._decodeChoice(input, options);
- present = true;
- } catch (e) {
- present = false;
- }
- input.restore(save);
- } else {
- present = this._peekTag(input, tag, state.any);
- if (input.isError(present)) return present;
- }
- } // Push object on stack
- var prevObj;
- if (state.obj && present) prevObj = input.enterObject();
- if (present) {
- // Unwrap explicit values
- if (state.explicit !== null) {
- var explicit = this._decodeTag(input, state.explicit);
- if (input.isError(explicit)) return explicit;
- input = explicit;
- }
- var start = input.offset; // Unwrap implicit and normal values
- if (state.use === null && state.choice === null) {
- var _save;
- if (state.any) _save = input.save();
- var body = this._decodeTag(input, state.implicit !== null ? state.implicit : state.tag, state.any);
- if (input.isError(body)) return body;
- if (state.any) result = input.raw(_save);else input = body;
- }
- if (options && options.track && state.tag !== null) options.track(input.path(), start, input.length, 'tagged');
- if (options && options.track && state.tag !== null) options.track(input.path(), input.offset, input.length, 'content'); // Select proper method for tag
- if (state.any) {// no-op
- } else if (state.choice === null) {
- result = this._decodeGeneric(state.tag, input, options);
- } else {
- result = this._decodeChoice(input, options);
- }
- if (input.isError(result)) return result; // Decode children
- if (!state.any && state.choice === null && state.children !== null) {
- state.children.forEach(function decodeChildren(child) {
- // NOTE: We are ignoring errors here, to let parser continue with other
- // parts of encoded data
- child._decode(input, options);
- });
- } // Decode contained/encoded by schema, only in bit or octet strings
- if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {
- var data = new DecoderBuffer(result);
- result = this._getUse(state.contains, input._reporterState.obj)._decode(data, options);
- }
- } // Pop object
- if (state.obj && present) result = input.leaveObject(prevObj); // Set key
- if (state.key !== null && (result !== null || present === true)) input.leaveKey(prevKey, state.key, result);else if (prevKey !== null) input.exitKey(prevKey);
- return result;
- };
- Node.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {
- var state = this._baseState;
- if (tag === 'seq' || tag === 'set') return null;
- if (tag === 'seqof' || tag === 'setof') return this._decodeList(input, tag, state.args[0], options);else if (/str$/.test(tag)) return this._decodeStr(input, tag, options);else if (tag === 'objid' && state.args) return this._decodeObjid(input, state.args[0], state.args[1], options);else if (tag === 'objid') return this._decodeObjid(input, null, null, options);else if (tag === 'gentime' || tag === 'utctime') return this._decodeTime(input, tag, options);else if (tag === 'null_') return this._decodeNull(input, options);else if (tag === 'bool') return this._decodeBool(input, options);else if (tag === 'objDesc') return this._decodeStr(input, tag, options);else if (tag === 'int' || tag === 'enum') return this._decodeInt(input, state.args && state.args[0], options);
- if (state.use !== null) {
- return this._getUse(state.use, input._reporterState.obj)._decode(input, options);
- } else {
- return input.error('unknown tag: ' + tag);
- }
- };
- Node.prototype._getUse = function _getUse(entity, obj) {
- var state = this._baseState; // Create altered use decoder if implicit is set
- state.useDecoder = this._use(entity, obj);
- assert(state.useDecoder._baseState.parent === null);
- state.useDecoder = state.useDecoder._baseState.children[0];
- if (state.implicit !== state.useDecoder._baseState.implicit) {
- state.useDecoder = state.useDecoder.clone();
- state.useDecoder._baseState.implicit = state.implicit;
- }
- return state.useDecoder;
- };
- Node.prototype._decodeChoice = function decodeChoice(input, options) {
- var state = this._baseState;
- var result = null;
- var match = false;
- Object.keys(state.choice).some(function (key) {
- var save = input.save();
- var node = state.choice[key];
- try {
- var value = node._decode(input, options);
- if (input.isError(value)) return false;
- result = {
- type: key,
- value: value
- };
- match = true;
- } catch (e) {
- input.restore(save);
- return false;
- }
- return true;
- }, this);
- if (!match) return input.error('Choice not matched');
- return result;
- }; //
- // Encoding
- //
- Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) {
- return new EncoderBuffer(data, this.reporter);
- };
- Node.prototype._encode = function encode(data, reporter, parent) {
- var state = this._baseState;
- if (state['default'] !== null && state['default'] === data) return;
- var result = this._encodeValue(data, reporter, parent);
- if (result === undefined) return;
- if (this._skipDefault(result, reporter, parent)) return;
- return result;
- };
- Node.prototype._encodeValue = function encode(data, reporter, parent) {
- var state = this._baseState; // Decode root node
- if (state.parent === null) return state.children[0]._encode(data, reporter || new Reporter());
- var result = null; // Set reporter to share it with a child class
- this.reporter = reporter; // Check if data is there
- if (state.optional && data === undefined) {
- if (state['default'] !== null) data = state['default'];else return;
- } // Encode children first
- var content = null;
- var primitive = false;
- if (state.any) {
- // Anything that was given is translated to buffer
- result = this._createEncoderBuffer(data);
- } else if (state.choice) {
- result = this._encodeChoice(data, reporter);
- } else if (state.contains) {
- content = this._getUse(state.contains, parent)._encode(data, reporter);
- primitive = true;
- } else if (state.children) {
- content = state.children.map(function (child) {
- if (child._baseState.tag === 'null_') return child._encode(null, reporter, data);
- if (child._baseState.key === null) return reporter.error('Child should have a key');
- var prevKey = reporter.enterKey(child._baseState.key);
- if (_typeof(data) !== 'object') return reporter.error('Child expected, but input is not object');
- var res = child._encode(data[child._baseState.key], reporter, data);
- reporter.leaveKey(prevKey);
- return res;
- }, this).filter(function (child) {
- return child;
- });
- content = this._createEncoderBuffer(content);
- } else {
- if (state.tag === 'seqof' || state.tag === 'setof') {
- // TODO(indutny): this should be thrown on DSL level
- if (!(state.args && state.args.length === 1)) return reporter.error('Too many args for : ' + state.tag);
- if (!Array.isArray(data)) return reporter.error('seqof/setof, but data is not Array');
- var child = this.clone();
- child._baseState.implicit = null;
- content = this._createEncoderBuffer(data.map(function (item) {
- var state = this._baseState;
- return this._getUse(state.args[0], data)._encode(item, reporter);
- }, child));
- } else if (state.use !== null) {
- result = this._getUse(state.use, parent)._encode(data, reporter);
- } else {
- content = this._encodePrimitive(state.tag, data);
- primitive = true;
- }
- } // Encode data itself
- if (!state.any && state.choice === null) {
- var tag = state.implicit !== null ? state.implicit : state.tag;
- var cls = state.implicit === null ? 'universal' : 'context';
- if (tag === null) {
- if (state.use === null) reporter.error('Tag could be omitted only for .use()');
- } else {
- if (state.use === null) result = this._encodeComposite(tag, primitive, cls, content);
- }
- } // Wrap in explicit
- if (state.explicit !== null) result = this._encodeComposite(state.explicit, false, 'context', result);
- return result;
- };
- Node.prototype._encodeChoice = function encodeChoice(data, reporter) {
- var state = this._baseState;
- var node = state.choice[data.type];
- if (!node) {
- assert(false, data.type + ' not found in ' + JSON.stringify(Object.keys(state.choice)));
- }
- return node._encode(data.value, reporter);
- };
- Node.prototype._encodePrimitive = function encodePrimitive(tag, data) {
- var state = this._baseState;
- if (/str$/.test(tag)) return this._encodeStr(data, tag);else if (tag === 'objid' && state.args) return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);else if (tag === 'objid') return this._encodeObjid(data, null, null);else if (tag === 'gentime' || tag === 'utctime') return this._encodeTime(data, tag);else if (tag === 'null_') return this._encodeNull();else if (tag === 'int' || tag === 'enum') return this._encodeInt(data, state.args && state.reverseArgs[0]);else if (tag === 'bool') return this._encodeBool(data);else if (tag === 'objDesc') return this._encodeStr(data, tag);else throw new Error('Unsupported tag: ' + tag);
- };
- Node.prototype._isNumstr = function isNumstr(str) {
- return /^[0-9 ]*$/.test(str);
- };
- Node.prototype._isPrintstr = function isPrintstr(str) {
- return /^[A-Za-z0-9 '()+,-./:=?]*$/.test(str);
- };
- },{"../base/buffer":169,"../base/reporter":172,"minimalistic-assert":328}],172:[function(require,module,exports){
- 'use strict';
- var inherits = require('inherits');
- function Reporter(options) {
- this._reporterState = {
- obj: null,
- path: [],
- options: options || {},
- errors: []
- };
- }
- exports.Reporter = Reporter;
- Reporter.prototype.isError = function isError(obj) {
- return obj instanceof ReporterError;
- };
- Reporter.prototype.save = function save() {
- var state = this._reporterState;
- return {
- obj: state.obj,
- pathLen: state.path.length
- };
- };
- Reporter.prototype.restore = function restore(data) {
- var state = this._reporterState;
- state.obj = data.obj;
- state.path = state.path.slice(0, data.pathLen);
- };
- Reporter.prototype.enterKey = function enterKey(key) {
- return this._reporterState.path.push(key);
- };
- Reporter.prototype.exitKey = function exitKey(index) {
- var state = this._reporterState;
- state.path = state.path.slice(0, index - 1);
- };
- Reporter.prototype.leaveKey = function leaveKey(index, key, value) {
- var state = this._reporterState;
- this.exitKey(index);
- if (state.obj !== null) state.obj[key] = value;
- };
- Reporter.prototype.path = function path() {
- return this._reporterState.path.join('/');
- };
- Reporter.prototype.enterObject = function enterObject() {
- var state = this._reporterState;
- var prev = state.obj;
- state.obj = {};
- return prev;
- };
- Reporter.prototype.leaveObject = function leaveObject(prev) {
- var state = this._reporterState;
- var now = state.obj;
- state.obj = prev;
- return now;
- };
- Reporter.prototype.error = function error(msg) {
- var err;
- var state = this._reporterState;
- var inherited = msg instanceof ReporterError;
- if (inherited) {
- err = msg;
- } else {
- err = new ReporterError(state.path.map(function (elem) {
- return '[' + JSON.stringify(elem) + ']';
- }).join(''), msg.message || msg, msg.stack);
- }
- if (!state.options.partial) throw err;
- if (!inherited) state.errors.push(err);
- return err;
- };
- Reporter.prototype.wrapResult = function wrapResult(result) {
- var state = this._reporterState;
- if (!state.options.partial) return result;
- return {
- result: this.isError(result) ? null : result,
- errors: state.errors
- };
- };
- function ReporterError(path, msg) {
- this.path = path;
- this.rethrow(msg);
- }
- inherits(ReporterError, Error);
- ReporterError.prototype.rethrow = function rethrow(msg) {
- this.message = msg + ' at: ' + (this.path || '(shallow)');
- if (Error.captureStackTrace) Error.captureStackTrace(this, ReporterError);
- if (!this.stack) {
- try {
- // IE only adds stack when thrown
- throw new Error(this.message);
- } catch (e) {
- this.stack = e.stack;
- }
- }
- return this;
- };
- },{"inherits":278}],173:[function(require,module,exports){
- 'use strict'; // Helper
- function reverse(map) {
- var res = {};
- Object.keys(map).forEach(function (key) {
- // Convert key to integer if it is stringified
- if ((key | 0) == key) key = key | 0;
- var value = map[key];
- res[value] = key;
- });
- return res;
- }
- exports.tagClass = {
- 0: 'universal',
- 1: 'application',
- 2: 'context',
- 3: 'private'
- };
- exports.tagClassByName = reverse(exports.tagClass);
- exports.tag = {
- 0x00: 'end',
- 0x01: 'bool',
- 0x02: 'int',
- 0x03: 'bitstr',
- 0x04: 'octstr',
- 0x05: 'null_',
- 0x06: 'objid',
- 0x07: 'objDesc',
- 0x08: 'external',
- 0x09: 'real',
- 0x0a: 'enum',
- 0x0b: 'embed',
- 0x0c: 'utf8str',
- 0x0d: 'relativeOid',
- 0x10: 'seq',
- 0x11: 'set',
- 0x12: 'numstr',
- 0x13: 'printstr',
- 0x14: 't61str',
- 0x15: 'videostr',
- 0x16: 'ia5str',
- 0x17: 'utctime',
- 0x18: 'gentime',
- 0x19: 'graphstr',
- 0x1a: 'iso646str',
- 0x1b: 'genstr',
- 0x1c: 'unistr',
- 0x1d: 'charstr',
- 0x1e: 'bmpstr'
- };
- exports.tagByName = reverse(exports.tag);
- },{}],174:[function(require,module,exports){
- 'use strict';
- var constants = exports; // Helper
- constants._reverse = function reverse(map) {
- var res = {};
- Object.keys(map).forEach(function (key) {
- // Convert key to integer if it is stringified
- if ((key | 0) == key) key = key | 0;
- var value = map[key];
- res[value] = key;
- });
- return res;
- };
- constants.der = require('./der');
- },{"./der":173}],175:[function(require,module,exports){
- 'use strict';
- var inherits = require('inherits');
- var bignum = require('bn.js');
- var DecoderBuffer = require('../base/buffer').DecoderBuffer;
- var Node = require('../base/node'); // Import DER constants
- var der = require('../constants/der');
- function DERDecoder(entity) {
- this.enc = 'der';
- this.name = entity.name;
- this.entity = entity; // Construct base tree
- this.tree = new DERNode();
- this.tree._init(entity.body);
- }
- module.exports = DERDecoder;
- DERDecoder.prototype.decode = function decode(data, options) {
- if (!DecoderBuffer.isDecoderBuffer(data)) {
- data = new DecoderBuffer(data, options);
- }
- return this.tree._decode(data, options);
- }; // Tree methods
- function DERNode(parent) {
- Node.call(this, 'der', parent);
- }
- inherits(DERNode, Node);
- DERNode.prototype._peekTag = function peekTag(buffer, tag, any) {
- if (buffer.isEmpty()) return false;
- var state = buffer.save();
- var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: "' + tag + '"');
- if (buffer.isError(decodedTag)) return decodedTag;
- buffer.restore(state);
- return decodedTag.tag === tag || decodedTag.tagStr === tag || decodedTag.tagStr + 'of' === tag || any;
- };
- DERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {
- var decodedTag = derDecodeTag(buffer, 'Failed to decode tag of "' + tag + '"');
- if (buffer.isError(decodedTag)) return decodedTag;
- var len = derDecodeLen(buffer, decodedTag.primitive, 'Failed to get length of "' + tag + '"'); // Failure
- if (buffer.isError(len)) return len;
- if (!any && decodedTag.tag !== tag && decodedTag.tagStr !== tag && decodedTag.tagStr + 'of' !== tag) {
- return buffer.error('Failed to match tag: "' + tag + '"');
- }
- if (decodedTag.primitive || len !== null) return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); // Indefinite length... find END tag
- var state = buffer.save();
- var res = this._skipUntilEnd(buffer, 'Failed to skip indefinite length body: "' + this.tag + '"');
- if (buffer.isError(res)) return res;
- len = buffer.offset - state.offset;
- buffer.restore(state);
- return buffer.skip(len, 'Failed to match body of: "' + tag + '"');
- };
- DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {
- for (;;) {
- var tag = derDecodeTag(buffer, fail);
- if (buffer.isError(tag)) return tag;
- var len = derDecodeLen(buffer, tag.primitive, fail);
- if (buffer.isError(len)) return len;
- var res = void 0;
- if (tag.primitive || len !== null) res = buffer.skip(len);else res = this._skipUntilEnd(buffer, fail); // Failure
- if (buffer.isError(res)) return res;
- if (tag.tagStr === 'end') break;
- }
- };
- DERNode.prototype._decodeList = function decodeList(buffer, tag, decoder, options) {
- var result = [];
- while (!buffer.isEmpty()) {
- var possibleEnd = this._peekTag(buffer, 'end');
- if (buffer.isError(possibleEnd)) return possibleEnd;
- var res = decoder.decode(buffer, 'der', options);
- if (buffer.isError(res) && possibleEnd) break;
- result.push(res);
- }
- return result;
- };
- DERNode.prototype._decodeStr = function decodeStr(buffer, tag) {
- if (tag === 'bitstr') {
- var unused = buffer.readUInt8();
- if (buffer.isError(unused)) return unused;
- return {
- unused: unused,
- data: buffer.raw()
- };
- } else if (tag === 'bmpstr') {
- var raw = buffer.raw();
- if (raw.length % 2 === 1) return buffer.error('Decoding of string type: bmpstr length mismatch');
- var str = '';
- for (var i = 0; i < raw.length / 2; i++) {
- str += String.fromCharCode(raw.readUInt16BE(i * 2));
- }
- return str;
- } else if (tag === 'numstr') {
- var numstr = buffer.raw().toString('ascii');
- if (!this._isNumstr(numstr)) {
- return buffer.error('Decoding of string type: ' + 'numstr unsupported characters');
- }
- return numstr;
- } else if (tag === 'octstr') {
- return buffer.raw();
- } else if (tag === 'objDesc') {
- return buffer.raw();
- } else if (tag === 'printstr') {
- var printstr = buffer.raw().toString('ascii');
- if (!this._isPrintstr(printstr)) {
- return buffer.error('Decoding of string type: ' + 'printstr unsupported characters');
- }
- return printstr;
- } else if (/str$/.test(tag)) {
- return buffer.raw().toString();
- } else {
- return buffer.error('Decoding of string type: ' + tag + ' unsupported');
- }
- };
- DERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {
- var result;
- var identifiers = [];
- var ident = 0;
- var subident = 0;
- while (!buffer.isEmpty()) {
- subident = buffer.readUInt8();
- ident <<= 7;
- ident |= subident & 0x7f;
- if ((subident & 0x80) === 0) {
- identifiers.push(ident);
- ident = 0;
- }
- }
- if (subident & 0x80) identifiers.push(ident);
- var first = identifiers[0] / 40 | 0;
- var second = identifiers[0] % 40;
- if (relative) result = identifiers;else result = [first, second].concat(identifiers.slice(1));
- if (values) {
- var tmp = values[result.join(' ')];
- if (tmp === undefined) tmp = values[result.join('.')];
- if (tmp !== undefined) result = tmp;
- }
- return result;
- };
- DERNode.prototype._decodeTime = function decodeTime(buffer, tag) {
- var str = buffer.raw().toString();
- var year;
- var mon;
- var day;
- var hour;
- var min;
- var sec;
- if (tag === 'gentime') {
- year = str.slice(0, 4) | 0;
- mon = str.slice(4, 6) | 0;
- day = str.slice(6, 8) | 0;
- hour = str.slice(8, 10) | 0;
- min = str.slice(10, 12) | 0;
- sec = str.slice(12, 14) | 0;
- } else if (tag === 'utctime') {
- year = str.slice(0, 2) | 0;
- mon = str.slice(2, 4) | 0;
- day = str.slice(4, 6) | 0;
- hour = str.slice(6, 8) | 0;
- min = str.slice(8, 10) | 0;
- sec = str.slice(10, 12) | 0;
- if (year < 70) year = 2000 + year;else year = 1900 + year;
- } else {
- return buffer.error('Decoding ' + tag + ' time is not supported yet');
- }
- return Date.UTC(year, mon - 1, day, hour, min, sec, 0);
- };
- DERNode.prototype._decodeNull = function decodeNull() {
- return null;
- };
- DERNode.prototype._decodeBool = function decodeBool(buffer) {
- var res = buffer.readUInt8();
- if (buffer.isError(res)) return res;else return res !== 0;
- };
- DERNode.prototype._decodeInt = function decodeInt(buffer, values) {
- // Bigint, return as it is (assume big endian)
- var raw = buffer.raw();
- var res = new bignum(raw);
- if (values) res = values[res.toString(10)] || res;
- return res;
- };
- DERNode.prototype._use = function use(entity, obj) {
- if (typeof entity === 'function') entity = entity(obj);
- return entity._getDecoder('der').tree;
- }; // Utility methods
- function derDecodeTag(buf, fail) {
- var tag = buf.readUInt8(fail);
- if (buf.isError(tag)) return tag;
- var cls = der.tagClass[tag >> 6];
- var primitive = (tag & 0x20) === 0; // Multi-octet tag - load
- if ((tag & 0x1f) === 0x1f) {
- var oct = tag;
- tag = 0;
- while ((oct & 0x80) === 0x80) {
- oct = buf.readUInt8(fail);
- if (buf.isError(oct)) return oct;
- tag <<= 7;
- tag |= oct & 0x7f;
- }
- } else {
- tag &= 0x1f;
- }
- var tagStr = der.tag[tag];
- return {
- cls: cls,
- primitive: primitive,
- tag: tag,
- tagStr: tagStr
- };
- }
- function derDecodeLen(buf, primitive, fail) {
- var len = buf.readUInt8(fail);
- if (buf.isError(len)) return len; // Indefinite form
- if (!primitive && len === 0x80) return null; // Definite form
- if ((len & 0x80) === 0) {
- // Short form
- return len;
- } // Long form
- var num = len & 0x7f;
- if (num > 4) return buf.error('length octect is too long');
- len = 0;
- for (var i = 0; i < num; i++) {
- len <<= 8;
- var j = buf.readUInt8(fail);
- if (buf.isError(j)) return j;
- len |= j;
- }
- return len;
- }
- },{"../base/buffer":169,"../base/node":171,"../constants/der":173,"bn.js":181,"inherits":278}],176:[function(require,module,exports){
- 'use strict';
- var decoders = exports;
- decoders.der = require('./der');
- decoders.pem = require('./pem');
- },{"./der":175,"./pem":177}],177:[function(require,module,exports){
- 'use strict';
- var inherits = require('inherits');
- var Buffer = require('safer-buffer').Buffer;
- var DERDecoder = require('./der');
- function PEMDecoder(entity) {
- DERDecoder.call(this, entity);
- this.enc = 'pem';
- }
- inherits(PEMDecoder, DERDecoder);
- module.exports = PEMDecoder;
- PEMDecoder.prototype.decode = function decode(data, options) {
- var lines = data.toString().split(/[\r\n]+/g);
- var label = options.label.toUpperCase();
- var re = /^-----(BEGIN|END) ([^-]+)-----$/;
- var start = -1;
- var end = -1;
- for (var i = 0; i < lines.length; i++) {
- var match = lines[i].match(re);
- if (match === null) continue;
- if (match[2] !== label) continue;
- if (start === -1) {
- if (match[1] !== 'BEGIN') break;
- start = i;
- } else {
- if (match[1] !== 'END') break;
- end = i;
- break;
- }
- }
- if (start === -1 || end === -1) throw new Error('PEM section not found for: ' + label);
- var base64 = lines.slice(start + 1, end).join(''); // Remove excessive symbols
- base64.replace(/[^a-z0-9+/=]+/gi, '');
- var input = Buffer.from(base64, 'base64');
- return DERDecoder.prototype.decode.call(this, input, options);
- };
- },{"./der":175,"inherits":278,"safer-buffer":385}],178:[function(require,module,exports){
- 'use strict';
- var inherits = require('inherits');
- var Buffer = require('safer-buffer').Buffer;
- var Node = require('../base/node'); // Import DER constants
- var der = require('../constants/der');
- function DEREncoder(entity) {
- this.enc = 'der';
- this.name = entity.name;
- this.entity = entity; // Construct base tree
- this.tree = new DERNode();
- this.tree._init(entity.body);
- }
- module.exports = DEREncoder;
- DEREncoder.prototype.encode = function encode(data, reporter) {
- return this.tree._encode(data, reporter).join();
- }; // Tree methods
- function DERNode(parent) {
- Node.call(this, 'der', parent);
- }
- inherits(DERNode, Node);
- DERNode.prototype._encodeComposite = function encodeComposite(tag, primitive, cls, content) {
- var encodedTag = encodeTag(tag, primitive, cls, this.reporter); // Short form
- if (content.length < 0x80) {
- var _header = Buffer.alloc(2);
- _header[0] = encodedTag;
- _header[1] = content.length;
- return this._createEncoderBuffer([_header, content]);
- } // Long form
- // Count octets required to store length
- var lenOctets = 1;
- for (var i = content.length; i >= 0x100; i >>= 8) {
- lenOctets++;
- }
- var header = Buffer.alloc(1 + 1 + lenOctets);
- header[0] = encodedTag;
- header[1] = 0x80 | lenOctets;
- for (var _i = 1 + lenOctets, j = content.length; j > 0; _i--, j >>= 8) {
- header[_i] = j & 0xff;
- }
- return this._createEncoderBuffer([header, content]);
- };
- DERNode.prototype._encodeStr = function encodeStr(str, tag) {
- if (tag === 'bitstr') {
- return this._createEncoderBuffer([str.unused | 0, str.data]);
- } else if (tag === 'bmpstr') {
- var buf = Buffer.alloc(str.length * 2);
- for (var i = 0; i < str.length; i++) {
- buf.writeUInt16BE(str.charCodeAt(i), i * 2);
- }
- return this._createEncoderBuffer(buf);
- } else if (tag === 'numstr') {
- if (!this._isNumstr(str)) {
- return this.reporter.error('Encoding of string type: numstr supports ' + 'only digits and space');
- }
- return this._createEncoderBuffer(str);
- } else if (tag === 'printstr') {
- if (!this._isPrintstr(str)) {
- return this.reporter.error('Encoding of string type: printstr supports ' + 'only latin upper and lower case letters, ' + 'digits, space, apostrophe, left and rigth ' + 'parenthesis, plus sign, comma, hyphen, ' + 'dot, slash, colon, equal sign, ' + 'question mark');
- }
- return this._createEncoderBuffer(str);
- } else if (/str$/.test(tag)) {
- return this._createEncoderBuffer(str);
- } else if (tag === 'objDesc') {
- return this._createEncoderBuffer(str);
- } else {
- return this.reporter.error('Encoding of string type: ' + tag + ' unsupported');
- }
- };
- DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {
- if (typeof id === 'string') {
- if (!values) return this.reporter.error('string objid given, but no values map found');
- if (!values.hasOwnProperty(id)) return this.reporter.error('objid not found in values map');
- id = values[id].split(/[\s.]+/g);
- for (var i = 0; i < id.length; i++) {
- id[i] |= 0;
- }
- } else if (Array.isArray(id)) {
- id = id.slice();
- for (var _i2 = 0; _i2 < id.length; _i2++) {
- id[_i2] |= 0;
- }
- }
- if (!Array.isArray(id)) {
- return this.reporter.error('objid() should be either array or string, ' + 'got: ' + JSON.stringify(id));
- }
- if (!relative) {
- if (id[1] >= 40) return this.reporter.error('Second objid identifier OOB');
- id.splice(0, 2, id[0] * 40 + id[1]);
- } // Count number of octets
- var size = 0;
- for (var _i3 = 0; _i3 < id.length; _i3++) {
- var ident = id[_i3];
- for (size++; ident >= 0x80; ident >>= 7) {
- size++;
- }
- }
- var objid = Buffer.alloc(size);
- var offset = objid.length - 1;
- for (var _i4 = id.length - 1; _i4 >= 0; _i4--) {
- var _ident = id[_i4];
- objid[offset--] = _ident & 0x7f;
- while ((_ident >>= 7) > 0) {
- objid[offset--] = 0x80 | _ident & 0x7f;
- }
- }
- return this._createEncoderBuffer(objid);
- };
- function two(num) {
- if (num < 10) return '0' + num;else return num;
- }
- DERNode.prototype._encodeTime = function encodeTime(time, tag) {
- var str;
- var date = new Date(time);
- if (tag === 'gentime') {
- str = [two(date.getUTCFullYear()), two(date.getUTCMonth() + 1), two(date.getUTCDate()), two(date.getUTCHours()), two(date.getUTCMinutes()), two(date.getUTCSeconds()), 'Z'].join('');
- } else if (tag === 'utctime') {
- str = [two(date.getUTCFullYear() % 100), two(date.getUTCMonth() + 1), two(date.getUTCDate()), two(date.getUTCHours()), two(date.getUTCMinutes()), two(date.getUTCSeconds()), 'Z'].join('');
- } else {
- this.reporter.error('Encoding ' + tag + ' time is not supported yet');
- }
- return this._encodeStr(str, 'octstr');
- };
- DERNode.prototype._encodeNull = function encodeNull() {
- return this._createEncoderBuffer('');
- };
- DERNode.prototype._encodeInt = function encodeInt(num, values) {
- if (typeof num === 'string') {
- if (!values) return this.reporter.error('String int or enum given, but no values map');
- if (!values.hasOwnProperty(num)) {
- return this.reporter.error('Values map doesn\'t contain: ' + JSON.stringify(num));
- }
- num = values[num];
- } // Bignum, assume big endian
- if (typeof num !== 'number' && !Buffer.isBuffer(num)) {
- var numArray = num.toArray();
- if (!num.sign && numArray[0] & 0x80) {
- numArray.unshift(0);
- }
- num = Buffer.from(numArray);
- }
- if (Buffer.isBuffer(num)) {
- var _size = num.length;
- if (num.length === 0) _size++;
- var _out = Buffer.alloc(_size);
- num.copy(_out);
- if (num.length === 0) _out[0] = 0;
- return this._createEncoderBuffer(_out);
- }
- if (num < 0x80) return this._createEncoderBuffer(num);
- if (num < 0x100) return this._createEncoderBuffer([0, num]);
- var size = 1;
- for (var i = num; i >= 0x100; i >>= 8) {
- size++;
- }
- var out = new Array(size);
- for (var _i5 = out.length - 1; _i5 >= 0; _i5--) {
- out[_i5] = num & 0xff;
- num >>= 8;
- }
- if (out[0] & 0x80) {
- out.unshift(0);
- }
- return this._createEncoderBuffer(Buffer.from(out));
- };
- DERNode.prototype._encodeBool = function encodeBool(value) {
- return this._createEncoderBuffer(value ? 0xff : 0);
- };
- DERNode.prototype._use = function use(entity, obj) {
- if (typeof entity === 'function') entity = entity(obj);
- return entity._getEncoder('der').tree;
- };
- DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {
- var state = this._baseState;
- var i;
- if (state['default'] === null) return false;
- var data = dataBuffer.join();
- if (state.defaultBuffer === undefined) state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();
- if (data.length !== state.defaultBuffer.length) return false;
- for (i = 0; i < data.length; i++) {
- if (data[i] !== state.defaultBuffer[i]) return false;
- }
- return true;
- }; // Utility methods
- function encodeTag(tag, primitive, cls, reporter) {
- var res;
- if (tag === 'seqof') tag = 'seq';else if (tag === 'setof') tag = 'set';
- if (der.tagByName.hasOwnProperty(tag)) res = der.tagByName[tag];else if (typeof tag === 'number' && (tag | 0) === tag) res = tag;else return reporter.error('Unknown tag: ' + tag);
- if (res >= 0x1f) return reporter.error('Multi-octet tag encoding unsupported');
- if (!primitive) res |= 0x20;
- res |= der.tagClassByName[cls || 'universal'] << 6;
- return res;
- }
- },{"../base/node":171,"../constants/der":173,"inherits":278,"safer-buffer":385}],179:[function(require,module,exports){
- 'use strict';
- var encoders = exports;
- encoders.der = require('./der');
- encoders.pem = require('./pem');
- },{"./der":178,"./pem":180}],180:[function(require,module,exports){
- 'use strict';
- var inherits = require('inherits');
- var DEREncoder = require('./der');
- function PEMEncoder(entity) {
- DEREncoder.call(this, entity);
- this.enc = 'pem';
- }
- inherits(PEMEncoder, DEREncoder);
- module.exports = PEMEncoder;
- PEMEncoder.prototype.encode = function encode(data, options) {
- var buf = DEREncoder.prototype.encode.call(this, data);
- var p = buf.toString('base64');
- var out = ['-----BEGIN ' + options.label + '-----'];
- for (var i = 0; i < p.length; i += 64) {
- out.push(p.slice(i, i + 64));
- }
- out.push('-----END ' + options.label + '-----');
- return out.join('\n');
- };
- },{"./der":178,"inherits":278}],181:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- (function (module, exports) {
- 'use strict'; // Utils
- function assert(val, msg) {
- if (!val) throw new Error(msg || 'Assertion failed');
- } // Could use `inherits` module, but don't want to move from single file
- // architecture yet.
- function inherits(ctor, superCtor) {
- ctor.super_ = superCtor;
- var TempCtor = function TempCtor() {};
- TempCtor.prototype = superCtor.prototype;
- ctor.prototype = new TempCtor();
- ctor.prototype.constructor = ctor;
- } // BN
- function BN(number, base, endian) {
- if (BN.isBN(number)) {
- return number;
- }
- this.negative = 0;
- this.words = null;
- this.length = 0; // Reduction context
- this.red = null;
- if (number !== null) {
- if (base === 'le' || base === 'be') {
- endian = base;
- base = 10;
- }
- this._init(number || 0, base || 10, endian || 'be');
- }
- }
- if (_typeof(module) === 'object') {
- module.exports = BN;
- } else {
- exports.BN = BN;
- }
- BN.BN = BN;
- BN.wordSize = 26;
- var Buffer;
- try {
- Buffer = require('buffer').Buffer;
- } catch (e) {}
- BN.isBN = function isBN(num) {
- if (num instanceof BN) {
- return true;
- }
- return num !== null && _typeof(num) === 'object' && num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
- };
- BN.max = function max(left, right) {
- if (left.cmp(right) > 0) return left;
- return right;
- };
- BN.min = function min(left, right) {
- if (left.cmp(right) < 0) return left;
- return right;
- };
- BN.prototype._init = function init(number, base, endian) {
- if (typeof number === 'number') {
- return this._initNumber(number, base, endian);
- }
- if (_typeof(number) === 'object') {
- return this._initArray(number, base, endian);
- }
- if (base === 'hex') {
- base = 16;
- }
- assert(base === (base | 0) && base >= 2 && base <= 36);
- number = number.toString().replace(/\s+/g, '');
- var start = 0;
- if (number[0] === '-') {
- start++;
- }
- if (base === 16) {
- this._parseHex(number, start);
- } else {
- this._parseBase(number, base, start);
- }
- if (number[0] === '-') {
- this.negative = 1;
- }
- this.strip();
- if (endian !== 'le') return;
- this._initArray(this.toArray(), base, endian);
- };
- BN.prototype._initNumber = function _initNumber(number, base, endian) {
- if (number < 0) {
- this.negative = 1;
- number = -number;
- }
- if (number < 0x4000000) {
- this.words = [number & 0x3ffffff];
- this.length = 1;
- } else if (number < 0x10000000000000) {
- this.words = [number & 0x3ffffff, number / 0x4000000 & 0x3ffffff];
- this.length = 2;
- } else {
- assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
- this.words = [number & 0x3ffffff, number / 0x4000000 & 0x3ffffff, 1];
- this.length = 3;
- }
- if (endian !== 'le') return; // Reverse the bytes
- this._initArray(this.toArray(), base, endian);
- };
- BN.prototype._initArray = function _initArray(number, base, endian) {
- // Perhaps a Uint8Array
- assert(typeof number.length === 'number');
- if (number.length <= 0) {
- this.words = [0];
- this.length = 1;
- return this;
- }
- this.length = Math.ceil(number.length / 3);
- this.words = new Array(this.length);
- for (var i = 0; i < this.length; i++) {
- this.words[i] = 0;
- }
- var j, w;
- var off = 0;
- if (endian === 'be') {
- for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
- w = number[i] | number[i - 1] << 8 | number[i - 2] << 16;
- this.words[j] |= w << off & 0x3ffffff;
- this.words[j + 1] = w >>> 26 - off & 0x3ffffff;
- off += 24;
- if (off >= 26) {
- off -= 26;
- j++;
- }
- }
- } else if (endian === 'le') {
- for (i = 0, j = 0; i < number.length; i += 3) {
- w = number[i] | number[i + 1] << 8 | number[i + 2] << 16;
- this.words[j] |= w << off & 0x3ffffff;
- this.words[j + 1] = w >>> 26 - off & 0x3ffffff;
- off += 24;
- if (off >= 26) {
- off -= 26;
- j++;
- }
- }
- }
- return this.strip();
- };
- function parseHex(str, start, end) {
- var r = 0;
- var len = Math.min(str.length, end);
- for (var i = start; i < len; i++) {
- var c = str.charCodeAt(i) - 48;
- r <<= 4; // 'a' - 'f'
- if (c >= 49 && c <= 54) {
- r |= c - 49 + 0xa; // 'A' - 'F'
- } else if (c >= 17 && c <= 22) {
- r |= c - 17 + 0xa; // '0' - '9'
- } else {
- r |= c & 0xf;
- }
- }
- return r;
- }
- BN.prototype._parseHex = function _parseHex(number, start) {
- // Create possibly bigger array to ensure that it fits the number
- this.length = Math.ceil((number.length - start) / 6);
- this.words = new Array(this.length);
- for (var i = 0; i < this.length; i++) {
- this.words[i] = 0;
- }
- var j, w; // Scan 24-bit chunks and add them to the number
- var off = 0;
- for (i = number.length - 6, j = 0; i >= start; i -= 6) {
- w = parseHex(number, i, i + 6);
- this.words[j] |= w << off & 0x3ffffff; // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
- this.words[j + 1] |= w >>> 26 - off & 0x3fffff;
- off += 24;
- if (off >= 26) {
- off -= 26;
- j++;
- }
- }
- if (i + 6 !== start) {
- w = parseHex(number, start, i + 6);
- this.words[j] |= w << off & 0x3ffffff;
- this.words[j + 1] |= w >>> 26 - off & 0x3fffff;
- }
- this.strip();
- };
- function parseBase(str, start, end, mul) {
- var r = 0;
- var len = Math.min(str.length, end);
- for (var i = start; i < len; i++) {
- var c = str.charCodeAt(i) - 48;
- r *= mul; // 'a'
- if (c >= 49) {
- r += c - 49 + 0xa; // 'A'
- } else if (c >= 17) {
- r += c - 17 + 0xa; // '0' - '9'
- } else {
- r += c;
- }
- }
- return r;
- }
- BN.prototype._parseBase = function _parseBase(number, base, start) {
- // Initialize as zero
- this.words = [0];
- this.length = 1; // Find length of limb in base
- for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
- limbLen++;
- }
- limbLen--;
- limbPow = limbPow / base | 0;
- var total = number.length - start;
- var mod = total % limbLen;
- var end = Math.min(total, total - mod) + start;
- var word = 0;
- for (var i = start; i < end; i += limbLen) {
- word = parseBase(number, i, i + limbLen, base);
- this.imuln(limbPow);
- if (this.words[0] + word < 0x4000000) {
- this.words[0] += word;
- } else {
- this._iaddn(word);
- }
- }
- if (mod !== 0) {
- var pow = 1;
- word = parseBase(number, i, number.length, base);
- for (i = 0; i < mod; i++) {
- pow *= base;
- }
- this.imuln(pow);
- if (this.words[0] + word < 0x4000000) {
- this.words[0] += word;
- } else {
- this._iaddn(word);
- }
- }
- };
- BN.prototype.copy = function copy(dest) {
- dest.words = new Array(this.length);
- for (var i = 0; i < this.length; i++) {
- dest.words[i] = this.words[i];
- }
- dest.length = this.length;
- dest.negative = this.negative;
- dest.red = this.red;
- };
- BN.prototype.clone = function clone() {
- var r = new BN(null);
- this.copy(r);
- return r;
- };
- BN.prototype._expand = function _expand(size) {
- while (this.length < size) {
- this.words[this.length++] = 0;
- }
- return this;
- }; // Remove leading `0` from `this`
- BN.prototype.strip = function strip() {
- while (this.length > 1 && this.words[this.length - 1] === 0) {
- this.length--;
- }
- return this._normSign();
- };
- BN.prototype._normSign = function _normSign() {
- // -0 = 0
- if (this.length === 1 && this.words[0] === 0) {
- this.negative = 0;
- }
- return this;
- };
- BN.prototype.inspect = function inspect() {
- return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
- };
- /*
- var zeros = [];
- var groupSizes = [];
- var groupBases = [];
- var s = '';
- var i = -1;
- while (++i < BN.wordSize) {
- zeros[i] = s;
- s += '0';
- }
- groupSizes[0] = 0;
- groupSizes[1] = 0;
- groupBases[0] = 0;
- groupBases[1] = 0;
- var base = 2 - 1;
- while (++base < 36 + 1) {
- var groupSize = 0;
- var groupBase = 1;
- while (groupBase < (1 << BN.wordSize) / base) {
- groupBase *= base;
- groupSize += 1;
- }
- groupSizes[base] = groupSize;
- groupBases[base] = groupBase;
- }
- */
- var zeros = ['', '0', '00', '000', '0000', '00000', '000000', '0000000', '00000000', '000000000', '0000000000', '00000000000', '000000000000', '0000000000000', '00000000000000', '000000000000000', '0000000000000000', '00000000000000000', '000000000000000000', '0000000000000000000', '00000000000000000000', '000000000000000000000', '0000000000000000000000', '00000000000000000000000', '000000000000000000000000', '0000000000000000000000000'];
- var groupSizes = [0, 0, 25, 16, 12, 11, 10, 9, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5];
- var groupBases = [0, 0, 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176];
- BN.prototype.toString = function toString(base, padding) {
- base = base || 10;
- padding = padding | 0 || 1;
- var out;
- if (base === 16 || base === 'hex') {
- out = '';
- var off = 0;
- var carry = 0;
- for (var i = 0; i < this.length; i++) {
- var w = this.words[i];
- var word = ((w << off | carry) & 0xffffff).toString(16);
- carry = w >>> 24 - off & 0xffffff;
- if (carry !== 0 || i !== this.length - 1) {
- out = zeros[6 - word.length] + word + out;
- } else {
- out = word + out;
- }
- off += 2;
- if (off >= 26) {
- off -= 26;
- i--;
- }
- }
- if (carry !== 0) {
- out = carry.toString(16) + out;
- }
- while (out.length % padding !== 0) {
- out = '0' + out;
- }
- if (this.negative !== 0) {
- out = '-' + out;
- }
- return out;
- }
- if (base === (base | 0) && base >= 2 && base <= 36) {
- // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
- var groupSize = groupSizes[base]; // var groupBase = Math.pow(base, groupSize);
- var groupBase = groupBases[base];
- out = '';
- var c = this.clone();
- c.negative = 0;
- while (!c.isZero()) {
- var r = c.modn(groupBase).toString(base);
- c = c.idivn(groupBase);
- if (!c.isZero()) {
- out = zeros[groupSize - r.length] + r + out;
- } else {
- out = r + out;
- }
- }
- if (this.isZero()) {
- out = '0' + out;
- }
- while (out.length % padding !== 0) {
- out = '0' + out;
- }
- if (this.negative !== 0) {
- out = '-' + out;
- }
- return out;
- }
- assert(false, 'Base should be between 2 and 36');
- };
- BN.prototype.toNumber = function toNumber() {
- var ret = this.words[0];
- if (this.length === 2) {
- ret += this.words[1] * 0x4000000;
- } else if (this.length === 3 && this.words[2] === 0x01) {
- // NOTE: at this stage it is known that the top bit is set
- ret += 0x10000000000000 + this.words[1] * 0x4000000;
- } else if (this.length > 2) {
- assert(false, 'Number can only safely store up to 53 bits');
- }
- return this.negative !== 0 ? -ret : ret;
- };
- BN.prototype.toJSON = function toJSON() {
- return this.toString(16);
- };
- BN.prototype.toBuffer = function toBuffer(endian, length) {
- assert(typeof Buffer !== 'undefined');
- return this.toArrayLike(Buffer, endian, length);
- };
- BN.prototype.toArray = function toArray(endian, length) {
- return this.toArrayLike(Array, endian, length);
- };
- BN.prototype.toArrayLike = function toArrayLike(ArrayType, endian, length) {
- var byteLength = this.byteLength();
- var reqLength = length || Math.max(1, byteLength);
- assert(byteLength <= reqLength, 'byte array longer than desired length');
- assert(reqLength > 0, 'Requested array length <= 0');
- this.strip();
- var littleEndian = endian === 'le';
- var res = new ArrayType(reqLength);
- var b, i;
- var q = this.clone();
- if (!littleEndian) {
- // Assume big-endian
- for (i = 0; i < reqLength - byteLength; i++) {
- res[i] = 0;
- }
- for (i = 0; !q.isZero(); i++) {
- b = q.andln(0xff);
- q.iushrn(8);
- res[reqLength - i - 1] = b;
- }
- } else {
- for (i = 0; !q.isZero(); i++) {
- b = q.andln(0xff);
- q.iushrn(8);
- res[i] = b;
- }
- for (; i < reqLength; i++) {
- res[i] = 0;
- }
- }
- return res;
- };
- if (Math.clz32) {
- BN.prototype._countBits = function _countBits(w) {
- return 32 - Math.clz32(w);
- };
- } else {
- BN.prototype._countBits = function _countBits(w) {
- var t = w;
- var r = 0;
- if (t >= 0x1000) {
- r += 13;
- t >>>= 13;
- }
- if (t >= 0x40) {
- r += 7;
- t >>>= 7;
- }
- if (t >= 0x8) {
- r += 4;
- t >>>= 4;
- }
- if (t >= 0x02) {
- r += 2;
- t >>>= 2;
- }
- return r + t;
- };
- }
- BN.prototype._zeroBits = function _zeroBits(w) {
- // Short-cut
- if (w === 0) return 26;
- var t = w;
- var r = 0;
- if ((t & 0x1fff) === 0) {
- r += 13;
- t >>>= 13;
- }
- if ((t & 0x7f) === 0) {
- r += 7;
- t >>>= 7;
- }
- if ((t & 0xf) === 0) {
- r += 4;
- t >>>= 4;
- }
- if ((t & 0x3) === 0) {
- r += 2;
- t >>>= 2;
- }
- if ((t & 0x1) === 0) {
- r++;
- }
- return r;
- }; // Return number of used bits in a BN
- BN.prototype.bitLength = function bitLength() {
- var w = this.words[this.length - 1];
- var hi = this._countBits(w);
- return (this.length - 1) * 26 + hi;
- };
- function toBitArray(num) {
- var w = new Array(num.bitLength());
- for (var bit = 0; bit < w.length; bit++) {
- var off = bit / 26 | 0;
- var wbit = bit % 26;
- w[bit] = (num.words[off] & 1 << wbit) >>> wbit;
- }
- return w;
- } // Number of trailing zero bits
- BN.prototype.zeroBits = function zeroBits() {
- if (this.isZero()) return 0;
- var r = 0;
- for (var i = 0; i < this.length; i++) {
- var b = this._zeroBits(this.words[i]);
- r += b;
- if (b !== 26) break;
- }
- return r;
- };
- BN.prototype.byteLength = function byteLength() {
- return Math.ceil(this.bitLength() / 8);
- };
- BN.prototype.toTwos = function toTwos(width) {
- if (this.negative !== 0) {
- return this.abs().inotn(width).iaddn(1);
- }
- return this.clone();
- };
- BN.prototype.fromTwos = function fromTwos(width) {
- if (this.testn(width - 1)) {
- return this.notn(width).iaddn(1).ineg();
- }
- return this.clone();
- };
- BN.prototype.isNeg = function isNeg() {
- return this.negative !== 0;
- }; // Return negative clone of `this`
- BN.prototype.neg = function neg() {
- return this.clone().ineg();
- };
- BN.prototype.ineg = function ineg() {
- if (!this.isZero()) {
- this.negative ^= 1;
- }
- return this;
- }; // Or `num` with `this` in-place
- BN.prototype.iuor = function iuor(num) {
- while (this.length < num.length) {
- this.words[this.length++] = 0;
- }
- for (var i = 0; i < num.length; i++) {
- this.words[i] = this.words[i] | num.words[i];
- }
- return this.strip();
- };
- BN.prototype.ior = function ior(num) {
- assert((this.negative | num.negative) === 0);
- return this.iuor(num);
- }; // Or `num` with `this`
- BN.prototype.or = function or(num) {
- if (this.length > num.length) return this.clone().ior(num);
- return num.clone().ior(this);
- };
- BN.prototype.uor = function uor(num) {
- if (this.length > num.length) return this.clone().iuor(num);
- return num.clone().iuor(this);
- }; // And `num` with `this` in-place
- BN.prototype.iuand = function iuand(num) {
- // b = min-length(num, this)
- var b;
- if (this.length > num.length) {
- b = num;
- } else {
- b = this;
- }
- for (var i = 0; i < b.length; i++) {
- this.words[i] = this.words[i] & num.words[i];
- }
- this.length = b.length;
- return this.strip();
- };
- BN.prototype.iand = function iand(num) {
- assert((this.negative | num.negative) === 0);
- return this.iuand(num);
- }; // And `num` with `this`
- BN.prototype.and = function and(num) {
- if (this.length > num.length) return this.clone().iand(num);
- return num.clone().iand(this);
- };
- BN.prototype.uand = function uand(num) {
- if (this.length > num.length) return this.clone().iuand(num);
- return num.clone().iuand(this);
- }; // Xor `num` with `this` in-place
- BN.prototype.iuxor = function iuxor(num) {
- // a.length > b.length
- var a;
- var b;
- if (this.length > num.length) {
- a = this;
- b = num;
- } else {
- a = num;
- b = this;
- }
- for (var i = 0; i < b.length; i++) {
- this.words[i] = a.words[i] ^ b.words[i];
- }
- if (this !== a) {
- for (; i < a.length; i++) {
- this.words[i] = a.words[i];
- }
- }
- this.length = a.length;
- return this.strip();
- };
- BN.prototype.ixor = function ixor(num) {
- assert((this.negative | num.negative) === 0);
- return this.iuxor(num);
- }; // Xor `num` with `this`
- BN.prototype.xor = function xor(num) {
- if (this.length > num.length) return this.clone().ixor(num);
- return num.clone().ixor(this);
- };
- BN.prototype.uxor = function uxor(num) {
- if (this.length > num.length) return this.clone().iuxor(num);
- return num.clone().iuxor(this);
- }; // Not ``this`` with ``width`` bitwidth
- BN.prototype.inotn = function inotn(width) {
- assert(typeof width === 'number' && width >= 0);
- var bytesNeeded = Math.ceil(width / 26) | 0;
- var bitsLeft = width % 26; // Extend the buffer with leading zeroes
- this._expand(bytesNeeded);
- if (bitsLeft > 0) {
- bytesNeeded--;
- } // Handle complete words
- for (var i = 0; i < bytesNeeded; i++) {
- this.words[i] = ~this.words[i] & 0x3ffffff;
- } // Handle the residue
- if (bitsLeft > 0) {
- this.words[i] = ~this.words[i] & 0x3ffffff >> 26 - bitsLeft;
- } // And remove leading zeroes
- return this.strip();
- };
- BN.prototype.notn = function notn(width) {
- return this.clone().inotn(width);
- }; // Set `bit` of `this`
- BN.prototype.setn = function setn(bit, val) {
- assert(typeof bit === 'number' && bit >= 0);
- var off = bit / 26 | 0;
- var wbit = bit % 26;
- this._expand(off + 1);
- if (val) {
- this.words[off] = this.words[off] | 1 << wbit;
- } else {
- this.words[off] = this.words[off] & ~(1 << wbit);
- }
- return this.strip();
- }; // Add `num` to `this` in-place
- BN.prototype.iadd = function iadd(num) {
- var r; // negative + positive
- if (this.negative !== 0 && num.negative === 0) {
- this.negative = 0;
- r = this.isub(num);
- this.negative ^= 1;
- return this._normSign(); // positive + negative
- } else if (this.negative === 0 && num.negative !== 0) {
- num.negative = 0;
- r = this.isub(num);
- num.negative = 1;
- return r._normSign();
- } // a.length > b.length
- var a, b;
- if (this.length > num.length) {
- a = this;
- b = num;
- } else {
- a = num;
- b = this;
- }
- var carry = 0;
- for (var i = 0; i < b.length; i++) {
- r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
- this.words[i] = r & 0x3ffffff;
- carry = r >>> 26;
- }
- for (; carry !== 0 && i < a.length; i++) {
- r = (a.words[i] | 0) + carry;
- this.words[i] = r & 0x3ffffff;
- carry = r >>> 26;
- }
- this.length = a.length;
- if (carry !== 0) {
- this.words[this.length] = carry;
- this.length++; // Copy the rest of the words
- } else if (a !== this) {
- for (; i < a.length; i++) {
- this.words[i] = a.words[i];
- }
- }
- return this;
- }; // Add `num` to `this`
- BN.prototype.add = function add(num) {
- var res;
- if (num.negative !== 0 && this.negative === 0) {
- num.negative = 0;
- res = this.sub(num);
- num.negative ^= 1;
- return res;
- } else if (num.negative === 0 && this.negative !== 0) {
- this.negative = 0;
- res = num.sub(this);
- this.negative = 1;
- return res;
- }
- if (this.length > num.length) return this.clone().iadd(num);
- return num.clone().iadd(this);
- }; // Subtract `num` from `this` in-place
- BN.prototype.isub = function isub(num) {
- // this - (-num) = this + num
- if (num.negative !== 0) {
- num.negative = 0;
- var r = this.iadd(num);
- num.negative = 1;
- return r._normSign(); // -this - num = -(this + num)
- } else if (this.negative !== 0) {
- this.negative = 0;
- this.iadd(num);
- this.negative = 1;
- return this._normSign();
- } // At this point both numbers are positive
- var cmp = this.cmp(num); // Optimization - zeroify
- if (cmp === 0) {
- this.negative = 0;
- this.length = 1;
- this.words[0] = 0;
- return this;
- } // a > b
- var a, b;
- if (cmp > 0) {
- a = this;
- b = num;
- } else {
- a = num;
- b = this;
- }
- var carry = 0;
- for (var i = 0; i < b.length; i++) {
- r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
- carry = r >> 26;
- this.words[i] = r & 0x3ffffff;
- }
- for (; carry !== 0 && i < a.length; i++) {
- r = (a.words[i] | 0) + carry;
- carry = r >> 26;
- this.words[i] = r & 0x3ffffff;
- } // Copy rest of the words
- if (carry === 0 && i < a.length && a !== this) {
- for (; i < a.length; i++) {
- this.words[i] = a.words[i];
- }
- }
- this.length = Math.max(this.length, i);
- if (a !== this) {
- this.negative = 1;
- }
- return this.strip();
- }; // Subtract `num` from `this`
- BN.prototype.sub = function sub(num) {
- return this.clone().isub(num);
- };
- function smallMulTo(self, num, out) {
- out.negative = num.negative ^ self.negative;
- var len = self.length + num.length | 0;
- out.length = len;
- len = len - 1 | 0; // Peel one iteration (compiler can't do it, because of code complexity)
- var a = self.words[0] | 0;
- var b = num.words[0] | 0;
- var r = a * b;
- var lo = r & 0x3ffffff;
- var carry = r / 0x4000000 | 0;
- out.words[0] = lo;
- for (var k = 1; k < len; k++) {
- // Sum all words with the same `i + j = k` and accumulate `ncarry`,
- // note that ncarry could be >= 0x3ffffff
- var ncarry = carry >>> 26;
- var rword = carry & 0x3ffffff;
- var maxJ = Math.min(k, num.length - 1);
- for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
- var i = k - j | 0;
- a = self.words[i] | 0;
- b = num.words[j] | 0;
- r = a * b + rword;
- ncarry += r / 0x4000000 | 0;
- rword = r & 0x3ffffff;
- }
- out.words[k] = rword | 0;
- carry = ncarry | 0;
- }
- if (carry !== 0) {
- out.words[k] = carry | 0;
- } else {
- out.length--;
- }
- return out.strip();
- } // TODO(indutny): it may be reasonable to omit it for users who don't need
- // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
- // multiplication (like elliptic secp256k1).
- var comb10MulTo = function comb10MulTo(self, num, out) {
- var a = self.words;
- var b = num.words;
- var o = out.words;
- var c = 0;
- var lo;
- var mid;
- var hi;
- var a0 = a[0] | 0;
- var al0 = a0 & 0x1fff;
- var ah0 = a0 >>> 13;
- var a1 = a[1] | 0;
- var al1 = a1 & 0x1fff;
- var ah1 = a1 >>> 13;
- var a2 = a[2] | 0;
- var al2 = a2 & 0x1fff;
- var ah2 = a2 >>> 13;
- var a3 = a[3] | 0;
- var al3 = a3 & 0x1fff;
- var ah3 = a3 >>> 13;
- var a4 = a[4] | 0;
- var al4 = a4 & 0x1fff;
- var ah4 = a4 >>> 13;
- var a5 = a[5] | 0;
- var al5 = a5 & 0x1fff;
- var ah5 = a5 >>> 13;
- var a6 = a[6] | 0;
- var al6 = a6 & 0x1fff;
- var ah6 = a6 >>> 13;
- var a7 = a[7] | 0;
- var al7 = a7 & 0x1fff;
- var ah7 = a7 >>> 13;
- var a8 = a[8] | 0;
- var al8 = a8 & 0x1fff;
- var ah8 = a8 >>> 13;
- var a9 = a[9] | 0;
- var al9 = a9 & 0x1fff;
- var ah9 = a9 >>> 13;
- var b0 = b[0] | 0;
- var bl0 = b0 & 0x1fff;
- var bh0 = b0 >>> 13;
- var b1 = b[1] | 0;
- var bl1 = b1 & 0x1fff;
- var bh1 = b1 >>> 13;
- var b2 = b[2] | 0;
- var bl2 = b2 & 0x1fff;
- var bh2 = b2 >>> 13;
- var b3 = b[3] | 0;
- var bl3 = b3 & 0x1fff;
- var bh3 = b3 >>> 13;
- var b4 = b[4] | 0;
- var bl4 = b4 & 0x1fff;
- var bh4 = b4 >>> 13;
- var b5 = b[5] | 0;
- var bl5 = b5 & 0x1fff;
- var bh5 = b5 >>> 13;
- var b6 = b[6] | 0;
- var bl6 = b6 & 0x1fff;
- var bh6 = b6 >>> 13;
- var b7 = b[7] | 0;
- var bl7 = b7 & 0x1fff;
- var bh7 = b7 >>> 13;
- var b8 = b[8] | 0;
- var bl8 = b8 & 0x1fff;
- var bh8 = b8 >>> 13;
- var b9 = b[9] | 0;
- var bl9 = b9 & 0x1fff;
- var bh9 = b9 >>> 13;
- out.negative = self.negative ^ num.negative;
- out.length = 19;
- /* k = 0 */
- lo = Math.imul(al0, bl0);
- mid = Math.imul(al0, bh0);
- mid = mid + Math.imul(ah0, bl0) | 0;
- hi = Math.imul(ah0, bh0);
- var w0 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w0 >>> 26) | 0;
- w0 &= 0x3ffffff;
- /* k = 1 */
- lo = Math.imul(al1, bl0);
- mid = Math.imul(al1, bh0);
- mid = mid + Math.imul(ah1, bl0) | 0;
- hi = Math.imul(ah1, bh0);
- lo = lo + Math.imul(al0, bl1) | 0;
- mid = mid + Math.imul(al0, bh1) | 0;
- mid = mid + Math.imul(ah0, bl1) | 0;
- hi = hi + Math.imul(ah0, bh1) | 0;
- var w1 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w1 >>> 26) | 0;
- w1 &= 0x3ffffff;
- /* k = 2 */
- lo = Math.imul(al2, bl0);
- mid = Math.imul(al2, bh0);
- mid = mid + Math.imul(ah2, bl0) | 0;
- hi = Math.imul(ah2, bh0);
- lo = lo + Math.imul(al1, bl1) | 0;
- mid = mid + Math.imul(al1, bh1) | 0;
- mid = mid + Math.imul(ah1, bl1) | 0;
- hi = hi + Math.imul(ah1, bh1) | 0;
- lo = lo + Math.imul(al0, bl2) | 0;
- mid = mid + Math.imul(al0, bh2) | 0;
- mid = mid + Math.imul(ah0, bl2) | 0;
- hi = hi + Math.imul(ah0, bh2) | 0;
- var w2 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w2 >>> 26) | 0;
- w2 &= 0x3ffffff;
- /* k = 3 */
- lo = Math.imul(al3, bl0);
- mid = Math.imul(al3, bh0);
- mid = mid + Math.imul(ah3, bl0) | 0;
- hi = Math.imul(ah3, bh0);
- lo = lo + Math.imul(al2, bl1) | 0;
- mid = mid + Math.imul(al2, bh1) | 0;
- mid = mid + Math.imul(ah2, bl1) | 0;
- hi = hi + Math.imul(ah2, bh1) | 0;
- lo = lo + Math.imul(al1, bl2) | 0;
- mid = mid + Math.imul(al1, bh2) | 0;
- mid = mid + Math.imul(ah1, bl2) | 0;
- hi = hi + Math.imul(ah1, bh2) | 0;
- lo = lo + Math.imul(al0, bl3) | 0;
- mid = mid + Math.imul(al0, bh3) | 0;
- mid = mid + Math.imul(ah0, bl3) | 0;
- hi = hi + Math.imul(ah0, bh3) | 0;
- var w3 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w3 >>> 26) | 0;
- w3 &= 0x3ffffff;
- /* k = 4 */
- lo = Math.imul(al4, bl0);
- mid = Math.imul(al4, bh0);
- mid = mid + Math.imul(ah4, bl0) | 0;
- hi = Math.imul(ah4, bh0);
- lo = lo + Math.imul(al3, bl1) | 0;
- mid = mid + Math.imul(al3, bh1) | 0;
- mid = mid + Math.imul(ah3, bl1) | 0;
- hi = hi + Math.imul(ah3, bh1) | 0;
- lo = lo + Math.imul(al2, bl2) | 0;
- mid = mid + Math.imul(al2, bh2) | 0;
- mid = mid + Math.imul(ah2, bl2) | 0;
- hi = hi + Math.imul(ah2, bh2) | 0;
- lo = lo + Math.imul(al1, bl3) | 0;
- mid = mid + Math.imul(al1, bh3) | 0;
- mid = mid + Math.imul(ah1, bl3) | 0;
- hi = hi + Math.imul(ah1, bh3) | 0;
- lo = lo + Math.imul(al0, bl4) | 0;
- mid = mid + Math.imul(al0, bh4) | 0;
- mid = mid + Math.imul(ah0, bl4) | 0;
- hi = hi + Math.imul(ah0, bh4) | 0;
- var w4 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w4 >>> 26) | 0;
- w4 &= 0x3ffffff;
- /* k = 5 */
- lo = Math.imul(al5, bl0);
- mid = Math.imul(al5, bh0);
- mid = mid + Math.imul(ah5, bl0) | 0;
- hi = Math.imul(ah5, bh0);
- lo = lo + Math.imul(al4, bl1) | 0;
- mid = mid + Math.imul(al4, bh1) | 0;
- mid = mid + Math.imul(ah4, bl1) | 0;
- hi = hi + Math.imul(ah4, bh1) | 0;
- lo = lo + Math.imul(al3, bl2) | 0;
- mid = mid + Math.imul(al3, bh2) | 0;
- mid = mid + Math.imul(ah3, bl2) | 0;
- hi = hi + Math.imul(ah3, bh2) | 0;
- lo = lo + Math.imul(al2, bl3) | 0;
- mid = mid + Math.imul(al2, bh3) | 0;
- mid = mid + Math.imul(ah2, bl3) | 0;
- hi = hi + Math.imul(ah2, bh3) | 0;
- lo = lo + Math.imul(al1, bl4) | 0;
- mid = mid + Math.imul(al1, bh4) | 0;
- mid = mid + Math.imul(ah1, bl4) | 0;
- hi = hi + Math.imul(ah1, bh4) | 0;
- lo = lo + Math.imul(al0, bl5) | 0;
- mid = mid + Math.imul(al0, bh5) | 0;
- mid = mid + Math.imul(ah0, bl5) | 0;
- hi = hi + Math.imul(ah0, bh5) | 0;
- var w5 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w5 >>> 26) | 0;
- w5 &= 0x3ffffff;
- /* k = 6 */
- lo = Math.imul(al6, bl0);
- mid = Math.imul(al6, bh0);
- mid = mid + Math.imul(ah6, bl0) | 0;
- hi = Math.imul(ah6, bh0);
- lo = lo + Math.imul(al5, bl1) | 0;
- mid = mid + Math.imul(al5, bh1) | 0;
- mid = mid + Math.imul(ah5, bl1) | 0;
- hi = hi + Math.imul(ah5, bh1) | 0;
- lo = lo + Math.imul(al4, bl2) | 0;
- mid = mid + Math.imul(al4, bh2) | 0;
- mid = mid + Math.imul(ah4, bl2) | 0;
- hi = hi + Math.imul(ah4, bh2) | 0;
- lo = lo + Math.imul(al3, bl3) | 0;
- mid = mid + Math.imul(al3, bh3) | 0;
- mid = mid + Math.imul(ah3, bl3) | 0;
- hi = hi + Math.imul(ah3, bh3) | 0;
- lo = lo + Math.imul(al2, bl4) | 0;
- mid = mid + Math.imul(al2, bh4) | 0;
- mid = mid + Math.imul(ah2, bl4) | 0;
- hi = hi + Math.imul(ah2, bh4) | 0;
- lo = lo + Math.imul(al1, bl5) | 0;
- mid = mid + Math.imul(al1, bh5) | 0;
- mid = mid + Math.imul(ah1, bl5) | 0;
- hi = hi + Math.imul(ah1, bh5) | 0;
- lo = lo + Math.imul(al0, bl6) | 0;
- mid = mid + Math.imul(al0, bh6) | 0;
- mid = mid + Math.imul(ah0, bl6) | 0;
- hi = hi + Math.imul(ah0, bh6) | 0;
- var w6 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w6 >>> 26) | 0;
- w6 &= 0x3ffffff;
- /* k = 7 */
- lo = Math.imul(al7, bl0);
- mid = Math.imul(al7, bh0);
- mid = mid + Math.imul(ah7, bl0) | 0;
- hi = Math.imul(ah7, bh0);
- lo = lo + Math.imul(al6, bl1) | 0;
- mid = mid + Math.imul(al6, bh1) | 0;
- mid = mid + Math.imul(ah6, bl1) | 0;
- hi = hi + Math.imul(ah6, bh1) | 0;
- lo = lo + Math.imul(al5, bl2) | 0;
- mid = mid + Math.imul(al5, bh2) | 0;
- mid = mid + Math.imul(ah5, bl2) | 0;
- hi = hi + Math.imul(ah5, bh2) | 0;
- lo = lo + Math.imul(al4, bl3) | 0;
- mid = mid + Math.imul(al4, bh3) | 0;
- mid = mid + Math.imul(ah4, bl3) | 0;
- hi = hi + Math.imul(ah4, bh3) | 0;
- lo = lo + Math.imul(al3, bl4) | 0;
- mid = mid + Math.imul(al3, bh4) | 0;
- mid = mid + Math.imul(ah3, bl4) | 0;
- hi = hi + Math.imul(ah3, bh4) | 0;
- lo = lo + Math.imul(al2, bl5) | 0;
- mid = mid + Math.imul(al2, bh5) | 0;
- mid = mid + Math.imul(ah2, bl5) | 0;
- hi = hi + Math.imul(ah2, bh5) | 0;
- lo = lo + Math.imul(al1, bl6) | 0;
- mid = mid + Math.imul(al1, bh6) | 0;
- mid = mid + Math.imul(ah1, bl6) | 0;
- hi = hi + Math.imul(ah1, bh6) | 0;
- lo = lo + Math.imul(al0, bl7) | 0;
- mid = mid + Math.imul(al0, bh7) | 0;
- mid = mid + Math.imul(ah0, bl7) | 0;
- hi = hi + Math.imul(ah0, bh7) | 0;
- var w7 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w7 >>> 26) | 0;
- w7 &= 0x3ffffff;
- /* k = 8 */
- lo = Math.imul(al8, bl0);
- mid = Math.imul(al8, bh0);
- mid = mid + Math.imul(ah8, bl0) | 0;
- hi = Math.imul(ah8, bh0);
- lo = lo + Math.imul(al7, bl1) | 0;
- mid = mid + Math.imul(al7, bh1) | 0;
- mid = mid + Math.imul(ah7, bl1) | 0;
- hi = hi + Math.imul(ah7, bh1) | 0;
- lo = lo + Math.imul(al6, bl2) | 0;
- mid = mid + Math.imul(al6, bh2) | 0;
- mid = mid + Math.imul(ah6, bl2) | 0;
- hi = hi + Math.imul(ah6, bh2) | 0;
- lo = lo + Math.imul(al5, bl3) | 0;
- mid = mid + Math.imul(al5, bh3) | 0;
- mid = mid + Math.imul(ah5, bl3) | 0;
- hi = hi + Math.imul(ah5, bh3) | 0;
- lo = lo + Math.imul(al4, bl4) | 0;
- mid = mid + Math.imul(al4, bh4) | 0;
- mid = mid + Math.imul(ah4, bl4) | 0;
- hi = hi + Math.imul(ah4, bh4) | 0;
- lo = lo + Math.imul(al3, bl5) | 0;
- mid = mid + Math.imul(al3, bh5) | 0;
- mid = mid + Math.imul(ah3, bl5) | 0;
- hi = hi + Math.imul(ah3, bh5) | 0;
- lo = lo + Math.imul(al2, bl6) | 0;
- mid = mid + Math.imul(al2, bh6) | 0;
- mid = mid + Math.imul(ah2, bl6) | 0;
- hi = hi + Math.imul(ah2, bh6) | 0;
- lo = lo + Math.imul(al1, bl7) | 0;
- mid = mid + Math.imul(al1, bh7) | 0;
- mid = mid + Math.imul(ah1, bl7) | 0;
- hi = hi + Math.imul(ah1, bh7) | 0;
- lo = lo + Math.imul(al0, bl8) | 0;
- mid = mid + Math.imul(al0, bh8) | 0;
- mid = mid + Math.imul(ah0, bl8) | 0;
- hi = hi + Math.imul(ah0, bh8) | 0;
- var w8 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w8 >>> 26) | 0;
- w8 &= 0x3ffffff;
- /* k = 9 */
- lo = Math.imul(al9, bl0);
- mid = Math.imul(al9, bh0);
- mid = mid + Math.imul(ah9, bl0) | 0;
- hi = Math.imul(ah9, bh0);
- lo = lo + Math.imul(al8, bl1) | 0;
- mid = mid + Math.imul(al8, bh1) | 0;
- mid = mid + Math.imul(ah8, bl1) | 0;
- hi = hi + Math.imul(ah8, bh1) | 0;
- lo = lo + Math.imul(al7, bl2) | 0;
- mid = mid + Math.imul(al7, bh2) | 0;
- mid = mid + Math.imul(ah7, bl2) | 0;
- hi = hi + Math.imul(ah7, bh2) | 0;
- lo = lo + Math.imul(al6, bl3) | 0;
- mid = mid + Math.imul(al6, bh3) | 0;
- mid = mid + Math.imul(ah6, bl3) | 0;
- hi = hi + Math.imul(ah6, bh3) | 0;
- lo = lo + Math.imul(al5, bl4) | 0;
- mid = mid + Math.imul(al5, bh4) | 0;
- mid = mid + Math.imul(ah5, bl4) | 0;
- hi = hi + Math.imul(ah5, bh4) | 0;
- lo = lo + Math.imul(al4, bl5) | 0;
- mid = mid + Math.imul(al4, bh5) | 0;
- mid = mid + Math.imul(ah4, bl5) | 0;
- hi = hi + Math.imul(ah4, bh5) | 0;
- lo = lo + Math.imul(al3, bl6) | 0;
- mid = mid + Math.imul(al3, bh6) | 0;
- mid = mid + Math.imul(ah3, bl6) | 0;
- hi = hi + Math.imul(ah3, bh6) | 0;
- lo = lo + Math.imul(al2, bl7) | 0;
- mid = mid + Math.imul(al2, bh7) | 0;
- mid = mid + Math.imul(ah2, bl7) | 0;
- hi = hi + Math.imul(ah2, bh7) | 0;
- lo = lo + Math.imul(al1, bl8) | 0;
- mid = mid + Math.imul(al1, bh8) | 0;
- mid = mid + Math.imul(ah1, bl8) | 0;
- hi = hi + Math.imul(ah1, bh8) | 0;
- lo = lo + Math.imul(al0, bl9) | 0;
- mid = mid + Math.imul(al0, bh9) | 0;
- mid = mid + Math.imul(ah0, bl9) | 0;
- hi = hi + Math.imul(ah0, bh9) | 0;
- var w9 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w9 >>> 26) | 0;
- w9 &= 0x3ffffff;
- /* k = 10 */
- lo = Math.imul(al9, bl1);
- mid = Math.imul(al9, bh1);
- mid = mid + Math.imul(ah9, bl1) | 0;
- hi = Math.imul(ah9, bh1);
- lo = lo + Math.imul(al8, bl2) | 0;
- mid = mid + Math.imul(al8, bh2) | 0;
- mid = mid + Math.imul(ah8, bl2) | 0;
- hi = hi + Math.imul(ah8, bh2) | 0;
- lo = lo + Math.imul(al7, bl3) | 0;
- mid = mid + Math.imul(al7, bh3) | 0;
- mid = mid + Math.imul(ah7, bl3) | 0;
- hi = hi + Math.imul(ah7, bh3) | 0;
- lo = lo + Math.imul(al6, bl4) | 0;
- mid = mid + Math.imul(al6, bh4) | 0;
- mid = mid + Math.imul(ah6, bl4) | 0;
- hi = hi + Math.imul(ah6, bh4) | 0;
- lo = lo + Math.imul(al5, bl5) | 0;
- mid = mid + Math.imul(al5, bh5) | 0;
- mid = mid + Math.imul(ah5, bl5) | 0;
- hi = hi + Math.imul(ah5, bh5) | 0;
- lo = lo + Math.imul(al4, bl6) | 0;
- mid = mid + Math.imul(al4, bh6) | 0;
- mid = mid + Math.imul(ah4, bl6) | 0;
- hi = hi + Math.imul(ah4, bh6) | 0;
- lo = lo + Math.imul(al3, bl7) | 0;
- mid = mid + Math.imul(al3, bh7) | 0;
- mid = mid + Math.imul(ah3, bl7) | 0;
- hi = hi + Math.imul(ah3, bh7) | 0;
- lo = lo + Math.imul(al2, bl8) | 0;
- mid = mid + Math.imul(al2, bh8) | 0;
- mid = mid + Math.imul(ah2, bl8) | 0;
- hi = hi + Math.imul(ah2, bh8) | 0;
- lo = lo + Math.imul(al1, bl9) | 0;
- mid = mid + Math.imul(al1, bh9) | 0;
- mid = mid + Math.imul(ah1, bl9) | 0;
- hi = hi + Math.imul(ah1, bh9) | 0;
- var w10 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w10 >>> 26) | 0;
- w10 &= 0x3ffffff;
- /* k = 11 */
- lo = Math.imul(al9, bl2);
- mid = Math.imul(al9, bh2);
- mid = mid + Math.imul(ah9, bl2) | 0;
- hi = Math.imul(ah9, bh2);
- lo = lo + Math.imul(al8, bl3) | 0;
- mid = mid + Math.imul(al8, bh3) | 0;
- mid = mid + Math.imul(ah8, bl3) | 0;
- hi = hi + Math.imul(ah8, bh3) | 0;
- lo = lo + Math.imul(al7, bl4) | 0;
- mid = mid + Math.imul(al7, bh4) | 0;
- mid = mid + Math.imul(ah7, bl4) | 0;
- hi = hi + Math.imul(ah7, bh4) | 0;
- lo = lo + Math.imul(al6, bl5) | 0;
- mid = mid + Math.imul(al6, bh5) | 0;
- mid = mid + Math.imul(ah6, bl5) | 0;
- hi = hi + Math.imul(ah6, bh5) | 0;
- lo = lo + Math.imul(al5, bl6) | 0;
- mid = mid + Math.imul(al5, bh6) | 0;
- mid = mid + Math.imul(ah5, bl6) | 0;
- hi = hi + Math.imul(ah5, bh6) | 0;
- lo = lo + Math.imul(al4, bl7) | 0;
- mid = mid + Math.imul(al4, bh7) | 0;
- mid = mid + Math.imul(ah4, bl7) | 0;
- hi = hi + Math.imul(ah4, bh7) | 0;
- lo = lo + Math.imul(al3, bl8) | 0;
- mid = mid + Math.imul(al3, bh8) | 0;
- mid = mid + Math.imul(ah3, bl8) | 0;
- hi = hi + Math.imul(ah3, bh8) | 0;
- lo = lo + Math.imul(al2, bl9) | 0;
- mid = mid + Math.imul(al2, bh9) | 0;
- mid = mid + Math.imul(ah2, bl9) | 0;
- hi = hi + Math.imul(ah2, bh9) | 0;
- var w11 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w11 >>> 26) | 0;
- w11 &= 0x3ffffff;
- /* k = 12 */
- lo = Math.imul(al9, bl3);
- mid = Math.imul(al9, bh3);
- mid = mid + Math.imul(ah9, bl3) | 0;
- hi = Math.imul(ah9, bh3);
- lo = lo + Math.imul(al8, bl4) | 0;
- mid = mid + Math.imul(al8, bh4) | 0;
- mid = mid + Math.imul(ah8, bl4) | 0;
- hi = hi + Math.imul(ah8, bh4) | 0;
- lo = lo + Math.imul(al7, bl5) | 0;
- mid = mid + Math.imul(al7, bh5) | 0;
- mid = mid + Math.imul(ah7, bl5) | 0;
- hi = hi + Math.imul(ah7, bh5) | 0;
- lo = lo + Math.imul(al6, bl6) | 0;
- mid = mid + Math.imul(al6, bh6) | 0;
- mid = mid + Math.imul(ah6, bl6) | 0;
- hi = hi + Math.imul(ah6, bh6) | 0;
- lo = lo + Math.imul(al5, bl7) | 0;
- mid = mid + Math.imul(al5, bh7) | 0;
- mid = mid + Math.imul(ah5, bl7) | 0;
- hi = hi + Math.imul(ah5, bh7) | 0;
- lo = lo + Math.imul(al4, bl8) | 0;
- mid = mid + Math.imul(al4, bh8) | 0;
- mid = mid + Math.imul(ah4, bl8) | 0;
- hi = hi + Math.imul(ah4, bh8) | 0;
- lo = lo + Math.imul(al3, bl9) | 0;
- mid = mid + Math.imul(al3, bh9) | 0;
- mid = mid + Math.imul(ah3, bl9) | 0;
- hi = hi + Math.imul(ah3, bh9) | 0;
- var w12 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w12 >>> 26) | 0;
- w12 &= 0x3ffffff;
- /* k = 13 */
- lo = Math.imul(al9, bl4);
- mid = Math.imul(al9, bh4);
- mid = mid + Math.imul(ah9, bl4) | 0;
- hi = Math.imul(ah9, bh4);
- lo = lo + Math.imul(al8, bl5) | 0;
- mid = mid + Math.imul(al8, bh5) | 0;
- mid = mid + Math.imul(ah8, bl5) | 0;
- hi = hi + Math.imul(ah8, bh5) | 0;
- lo = lo + Math.imul(al7, bl6) | 0;
- mid = mid + Math.imul(al7, bh6) | 0;
- mid = mid + Math.imul(ah7, bl6) | 0;
- hi = hi + Math.imul(ah7, bh6) | 0;
- lo = lo + Math.imul(al6, bl7) | 0;
- mid = mid + Math.imul(al6, bh7) | 0;
- mid = mid + Math.imul(ah6, bl7) | 0;
- hi = hi + Math.imul(ah6, bh7) | 0;
- lo = lo + Math.imul(al5, bl8) | 0;
- mid = mid + Math.imul(al5, bh8) | 0;
- mid = mid + Math.imul(ah5, bl8) | 0;
- hi = hi + Math.imul(ah5, bh8) | 0;
- lo = lo + Math.imul(al4, bl9) | 0;
- mid = mid + Math.imul(al4, bh9) | 0;
- mid = mid + Math.imul(ah4, bl9) | 0;
- hi = hi + Math.imul(ah4, bh9) | 0;
- var w13 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w13 >>> 26) | 0;
- w13 &= 0x3ffffff;
- /* k = 14 */
- lo = Math.imul(al9, bl5);
- mid = Math.imul(al9, bh5);
- mid = mid + Math.imul(ah9, bl5) | 0;
- hi = Math.imul(ah9, bh5);
- lo = lo + Math.imul(al8, bl6) | 0;
- mid = mid + Math.imul(al8, bh6) | 0;
- mid = mid + Math.imul(ah8, bl6) | 0;
- hi = hi + Math.imul(ah8, bh6) | 0;
- lo = lo + Math.imul(al7, bl7) | 0;
- mid = mid + Math.imul(al7, bh7) | 0;
- mid = mid + Math.imul(ah7, bl7) | 0;
- hi = hi + Math.imul(ah7, bh7) | 0;
- lo = lo + Math.imul(al6, bl8) | 0;
- mid = mid + Math.imul(al6, bh8) | 0;
- mid = mid + Math.imul(ah6, bl8) | 0;
- hi = hi + Math.imul(ah6, bh8) | 0;
- lo = lo + Math.imul(al5, bl9) | 0;
- mid = mid + Math.imul(al5, bh9) | 0;
- mid = mid + Math.imul(ah5, bl9) | 0;
- hi = hi + Math.imul(ah5, bh9) | 0;
- var w14 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w14 >>> 26) | 0;
- w14 &= 0x3ffffff;
- /* k = 15 */
- lo = Math.imul(al9, bl6);
- mid = Math.imul(al9, bh6);
- mid = mid + Math.imul(ah9, bl6) | 0;
- hi = Math.imul(ah9, bh6);
- lo = lo + Math.imul(al8, bl7) | 0;
- mid = mid + Math.imul(al8, bh7) | 0;
- mid = mid + Math.imul(ah8, bl7) | 0;
- hi = hi + Math.imul(ah8, bh7) | 0;
- lo = lo + Math.imul(al7, bl8) | 0;
- mid = mid + Math.imul(al7, bh8) | 0;
- mid = mid + Math.imul(ah7, bl8) | 0;
- hi = hi + Math.imul(ah7, bh8) | 0;
- lo = lo + Math.imul(al6, bl9) | 0;
- mid = mid + Math.imul(al6, bh9) | 0;
- mid = mid + Math.imul(ah6, bl9) | 0;
- hi = hi + Math.imul(ah6, bh9) | 0;
- var w15 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w15 >>> 26) | 0;
- w15 &= 0x3ffffff;
- /* k = 16 */
- lo = Math.imul(al9, bl7);
- mid = Math.imul(al9, bh7);
- mid = mid + Math.imul(ah9, bl7) | 0;
- hi = Math.imul(ah9, bh7);
- lo = lo + Math.imul(al8, bl8) | 0;
- mid = mid + Math.imul(al8, bh8) | 0;
- mid = mid + Math.imul(ah8, bl8) | 0;
- hi = hi + Math.imul(ah8, bh8) | 0;
- lo = lo + Math.imul(al7, bl9) | 0;
- mid = mid + Math.imul(al7, bh9) | 0;
- mid = mid + Math.imul(ah7, bl9) | 0;
- hi = hi + Math.imul(ah7, bh9) | 0;
- var w16 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w16 >>> 26) | 0;
- w16 &= 0x3ffffff;
- /* k = 17 */
- lo = Math.imul(al9, bl8);
- mid = Math.imul(al9, bh8);
- mid = mid + Math.imul(ah9, bl8) | 0;
- hi = Math.imul(ah9, bh8);
- lo = lo + Math.imul(al8, bl9) | 0;
- mid = mid + Math.imul(al8, bh9) | 0;
- mid = mid + Math.imul(ah8, bl9) | 0;
- hi = hi + Math.imul(ah8, bh9) | 0;
- var w17 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w17 >>> 26) | 0;
- w17 &= 0x3ffffff;
- /* k = 18 */
- lo = Math.imul(al9, bl9);
- mid = Math.imul(al9, bh9);
- mid = mid + Math.imul(ah9, bl9) | 0;
- hi = Math.imul(ah9, bh9);
- var w18 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w18 >>> 26) | 0;
- w18 &= 0x3ffffff;
- o[0] = w0;
- o[1] = w1;
- o[2] = w2;
- o[3] = w3;
- o[4] = w4;
- o[5] = w5;
- o[6] = w6;
- o[7] = w7;
- o[8] = w8;
- o[9] = w9;
- o[10] = w10;
- o[11] = w11;
- o[12] = w12;
- o[13] = w13;
- o[14] = w14;
- o[15] = w15;
- o[16] = w16;
- o[17] = w17;
- o[18] = w18;
- if (c !== 0) {
- o[19] = c;
- out.length++;
- }
- return out;
- }; // Polyfill comb
- if (!Math.imul) {
- comb10MulTo = smallMulTo;
- }
- function bigMulTo(self, num, out) {
- out.negative = num.negative ^ self.negative;
- out.length = self.length + num.length;
- var carry = 0;
- var hncarry = 0;
- for (var k = 0; k < out.length - 1; k++) {
- // Sum all words with the same `i + j = k` and accumulate `ncarry`,
- // note that ncarry could be >= 0x3ffffff
- var ncarry = hncarry;
- hncarry = 0;
- var rword = carry & 0x3ffffff;
- var maxJ = Math.min(k, num.length - 1);
- for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
- var i = k - j;
- var a = self.words[i] | 0;
- var b = num.words[j] | 0;
- var r = a * b;
- var lo = r & 0x3ffffff;
- ncarry = ncarry + (r / 0x4000000 | 0) | 0;
- lo = lo + rword | 0;
- rword = lo & 0x3ffffff;
- ncarry = ncarry + (lo >>> 26) | 0;
- hncarry += ncarry >>> 26;
- ncarry &= 0x3ffffff;
- }
- out.words[k] = rword;
- carry = ncarry;
- ncarry = hncarry;
- }
- if (carry !== 0) {
- out.words[k] = carry;
- } else {
- out.length--;
- }
- return out.strip();
- }
- function jumboMulTo(self, num, out) {
- var fftm = new FFTM();
- return fftm.mulp(self, num, out);
- }
- BN.prototype.mulTo = function mulTo(num, out) {
- var res;
- var len = this.length + num.length;
- if (this.length === 10 && num.length === 10) {
- res = comb10MulTo(this, num, out);
- } else if (len < 63) {
- res = smallMulTo(this, num, out);
- } else if (len < 1024) {
- res = bigMulTo(this, num, out);
- } else {
- res = jumboMulTo(this, num, out);
- }
- return res;
- }; // Cooley-Tukey algorithm for FFT
- // slightly revisited to rely on looping instead of recursion
- function FFTM(x, y) {
- this.x = x;
- this.y = y;
- }
- FFTM.prototype.makeRBT = function makeRBT(N) {
- var t = new Array(N);
- var l = BN.prototype._countBits(N) - 1;
- for (var i = 0; i < N; i++) {
- t[i] = this.revBin(i, l, N);
- }
- return t;
- }; // Returns binary-reversed representation of `x`
- FFTM.prototype.revBin = function revBin(x, l, N) {
- if (x === 0 || x === N - 1) return x;
- var rb = 0;
- for (var i = 0; i < l; i++) {
- rb |= (x & 1) << l - i - 1;
- x >>= 1;
- }
- return rb;
- }; // Performs "tweedling" phase, therefore 'emulating'
- // behaviour of the recursive algorithm
- FFTM.prototype.permute = function permute(rbt, rws, iws, rtws, itws, N) {
- for (var i = 0; i < N; i++) {
- rtws[i] = rws[rbt[i]];
- itws[i] = iws[rbt[i]];
- }
- };
- FFTM.prototype.transform = function transform(rws, iws, rtws, itws, N, rbt) {
- this.permute(rbt, rws, iws, rtws, itws, N);
- for (var s = 1; s < N; s <<= 1) {
- var l = s << 1;
- var rtwdf = Math.cos(2 * Math.PI / l);
- var itwdf = Math.sin(2 * Math.PI / l);
- for (var p = 0; p < N; p += l) {
- var rtwdf_ = rtwdf;
- var itwdf_ = itwdf;
- for (var j = 0; j < s; j++) {
- var re = rtws[p + j];
- var ie = itws[p + j];
- var ro = rtws[p + j + s];
- var io = itws[p + j + s];
- var rx = rtwdf_ * ro - itwdf_ * io;
- io = rtwdf_ * io + itwdf_ * ro;
- ro = rx;
- rtws[p + j] = re + ro;
- itws[p + j] = ie + io;
- rtws[p + j + s] = re - ro;
- itws[p + j + s] = ie - io;
- /* jshint maxdepth : false */
- if (j !== l) {
- rx = rtwdf * rtwdf_ - itwdf * itwdf_;
- itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
- rtwdf_ = rx;
- }
- }
- }
- }
- };
- FFTM.prototype.guessLen13b = function guessLen13b(n, m) {
- var N = Math.max(m, n) | 1;
- var odd = N & 1;
- var i = 0;
- for (N = N / 2 | 0; N; N = N >>> 1) {
- i++;
- }
- return 1 << i + 1 + odd;
- };
- FFTM.prototype.conjugate = function conjugate(rws, iws, N) {
- if (N <= 1) return;
- for (var i = 0; i < N / 2; i++) {
- var t = rws[i];
- rws[i] = rws[N - i - 1];
- rws[N - i - 1] = t;
- t = iws[i];
- iws[i] = -iws[N - i - 1];
- iws[N - i - 1] = -t;
- }
- };
- FFTM.prototype.normalize13b = function normalize13b(ws, N) {
- var carry = 0;
- for (var i = 0; i < N / 2; i++) {
- var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + Math.round(ws[2 * i] / N) + carry;
- ws[i] = w & 0x3ffffff;
- if (w < 0x4000000) {
- carry = 0;
- } else {
- carry = w / 0x4000000 | 0;
- }
- }
- return ws;
- };
- FFTM.prototype.convert13b = function convert13b(ws, len, rws, N) {
- var carry = 0;
- for (var i = 0; i < len; i++) {
- carry = carry + (ws[i] | 0);
- rws[2 * i] = carry & 0x1fff;
- carry = carry >>> 13;
- rws[2 * i + 1] = carry & 0x1fff;
- carry = carry >>> 13;
- } // Pad with zeroes
- for (i = 2 * len; i < N; ++i) {
- rws[i] = 0;
- }
- assert(carry === 0);
- assert((carry & ~0x1fff) === 0);
- };
- FFTM.prototype.stub = function stub(N) {
- var ph = new Array(N);
- for (var i = 0; i < N; i++) {
- ph[i] = 0;
- }
- return ph;
- };
- FFTM.prototype.mulp = function mulp(x, y, out) {
- var N = 2 * this.guessLen13b(x.length, y.length);
- var rbt = this.makeRBT(N);
- var _ = this.stub(N);
- var rws = new Array(N);
- var rwst = new Array(N);
- var iwst = new Array(N);
- var nrws = new Array(N);
- var nrwst = new Array(N);
- var niwst = new Array(N);
- var rmws = out.words;
- rmws.length = N;
- this.convert13b(x.words, x.length, rws, N);
- this.convert13b(y.words, y.length, nrws, N);
- this.transform(rws, _, rwst, iwst, N, rbt);
- this.transform(nrws, _, nrwst, niwst, N, rbt);
- for (var i = 0; i < N; i++) {
- var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
- iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
- rwst[i] = rx;
- }
- this.conjugate(rwst, iwst, N);
- this.transform(rwst, iwst, rmws, _, N, rbt);
- this.conjugate(rmws, _, N);
- this.normalize13b(rmws, N);
- out.negative = x.negative ^ y.negative;
- out.length = x.length + y.length;
- return out.strip();
- }; // Multiply `this` by `num`
- BN.prototype.mul = function mul(num) {
- var out = new BN(null);
- out.words = new Array(this.length + num.length);
- return this.mulTo(num, out);
- }; // Multiply employing FFT
- BN.prototype.mulf = function mulf(num) {
- var out = new BN(null);
- out.words = new Array(this.length + num.length);
- return jumboMulTo(this, num, out);
- }; // In-place Multiplication
- BN.prototype.imul = function imul(num) {
- return this.clone().mulTo(num, this);
- };
- BN.prototype.imuln = function imuln(num) {
- assert(typeof num === 'number');
- assert(num < 0x4000000); // Carry
- var carry = 0;
- for (var i = 0; i < this.length; i++) {
- var w = (this.words[i] | 0) * num;
- var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
- carry >>= 26;
- carry += w / 0x4000000 | 0; // NOTE: lo is 27bit maximum
- carry += lo >>> 26;
- this.words[i] = lo & 0x3ffffff;
- }
- if (carry !== 0) {
- this.words[i] = carry;
- this.length++;
- }
- return this;
- };
- BN.prototype.muln = function muln(num) {
- return this.clone().imuln(num);
- }; // `this` * `this`
- BN.prototype.sqr = function sqr() {
- return this.mul(this);
- }; // `this` * `this` in-place
- BN.prototype.isqr = function isqr() {
- return this.imul(this.clone());
- }; // Math.pow(`this`, `num`)
- BN.prototype.pow = function pow(num) {
- var w = toBitArray(num);
- if (w.length === 0) return new BN(1); // Skip leading zeroes
- var res = this;
- for (var i = 0; i < w.length; i++, res = res.sqr()) {
- if (w[i] !== 0) break;
- }
- if (++i < w.length) {
- for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
- if (w[i] === 0) continue;
- res = res.mul(q);
- }
- }
- return res;
- }; // Shift-left in-place
- BN.prototype.iushln = function iushln(bits) {
- assert(typeof bits === 'number' && bits >= 0);
- var r = bits % 26;
- var s = (bits - r) / 26;
- var carryMask = 0x3ffffff >>> 26 - r << 26 - r;
- var i;
- if (r !== 0) {
- var carry = 0;
- for (i = 0; i < this.length; i++) {
- var newCarry = this.words[i] & carryMask;
- var c = (this.words[i] | 0) - newCarry << r;
- this.words[i] = c | carry;
- carry = newCarry >>> 26 - r;
- }
- if (carry) {
- this.words[i] = carry;
- this.length++;
- }
- }
- if (s !== 0) {
- for (i = this.length - 1; i >= 0; i--) {
- this.words[i + s] = this.words[i];
- }
- for (i = 0; i < s; i++) {
- this.words[i] = 0;
- }
- this.length += s;
- }
- return this.strip();
- };
- BN.prototype.ishln = function ishln(bits) {
- // TODO(indutny): implement me
- assert(this.negative === 0);
- return this.iushln(bits);
- }; // Shift-right in-place
- // NOTE: `hint` is a lowest bit before trailing zeroes
- // NOTE: if `extended` is present - it will be filled with destroyed bits
- BN.prototype.iushrn = function iushrn(bits, hint, extended) {
- assert(typeof bits === 'number' && bits >= 0);
- var h;
- if (hint) {
- h = (hint - hint % 26) / 26;
- } else {
- h = 0;
- }
- var r = bits % 26;
- var s = Math.min((bits - r) / 26, this.length);
- var mask = 0x3ffffff ^ 0x3ffffff >>> r << r;
- var maskedWords = extended;
- h -= s;
- h = Math.max(0, h); // Extended mode, copy masked part
- if (maskedWords) {
- for (var i = 0; i < s; i++) {
- maskedWords.words[i] = this.words[i];
- }
- maskedWords.length = s;
- }
- if (s === 0) {// No-op, we should not move anything at all
- } else if (this.length > s) {
- this.length -= s;
- for (i = 0; i < this.length; i++) {
- this.words[i] = this.words[i + s];
- }
- } else {
- this.words[0] = 0;
- this.length = 1;
- }
- var carry = 0;
- for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
- var word = this.words[i] | 0;
- this.words[i] = carry << 26 - r | word >>> r;
- carry = word & mask;
- } // Push carried bits as a mask
- if (maskedWords && carry !== 0) {
- maskedWords.words[maskedWords.length++] = carry;
- }
- if (this.length === 0) {
- this.words[0] = 0;
- this.length = 1;
- }
- return this.strip();
- };
- BN.prototype.ishrn = function ishrn(bits, hint, extended) {
- // TODO(indutny): implement me
- assert(this.negative === 0);
- return this.iushrn(bits, hint, extended);
- }; // Shift-left
- BN.prototype.shln = function shln(bits) {
- return this.clone().ishln(bits);
- };
- BN.prototype.ushln = function ushln(bits) {
- return this.clone().iushln(bits);
- }; // Shift-right
- BN.prototype.shrn = function shrn(bits) {
- return this.clone().ishrn(bits);
- };
- BN.prototype.ushrn = function ushrn(bits) {
- return this.clone().iushrn(bits);
- }; // Test if n bit is set
- BN.prototype.testn = function testn(bit) {
- assert(typeof bit === 'number' && bit >= 0);
- var r = bit % 26;
- var s = (bit - r) / 26;
- var q = 1 << r; // Fast case: bit is much higher than all existing words
- if (this.length <= s) return false; // Check bit and return
- var w = this.words[s];
- return !!(w & q);
- }; // Return only lowers bits of number (in-place)
- BN.prototype.imaskn = function imaskn(bits) {
- assert(typeof bits === 'number' && bits >= 0);
- var r = bits % 26;
- var s = (bits - r) / 26;
- assert(this.negative === 0, 'imaskn works only with positive numbers');
- if (this.length <= s) {
- return this;
- }
- if (r !== 0) {
- s++;
- }
- this.length = Math.min(s, this.length);
- if (r !== 0) {
- var mask = 0x3ffffff ^ 0x3ffffff >>> r << r;
- this.words[this.length - 1] &= mask;
- }
- return this.strip();
- }; // Return only lowers bits of number
- BN.prototype.maskn = function maskn(bits) {
- return this.clone().imaskn(bits);
- }; // Add plain number `num` to `this`
- BN.prototype.iaddn = function iaddn(num) {
- assert(typeof num === 'number');
- assert(num < 0x4000000);
- if (num < 0) return this.isubn(-num); // Possible sign change
- if (this.negative !== 0) {
- if (this.length === 1 && (this.words[0] | 0) < num) {
- this.words[0] = num - (this.words[0] | 0);
- this.negative = 0;
- return this;
- }
- this.negative = 0;
- this.isubn(num);
- this.negative = 1;
- return this;
- } // Add without checks
- return this._iaddn(num);
- };
- BN.prototype._iaddn = function _iaddn(num) {
- this.words[0] += num; // Carry
- for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
- this.words[i] -= 0x4000000;
- if (i === this.length - 1) {
- this.words[i + 1] = 1;
- } else {
- this.words[i + 1]++;
- }
- }
- this.length = Math.max(this.length, i + 1);
- return this;
- }; // Subtract plain number `num` from `this`
- BN.prototype.isubn = function isubn(num) {
- assert(typeof num === 'number');
- assert(num < 0x4000000);
- if (num < 0) return this.iaddn(-num);
- if (this.negative !== 0) {
- this.negative = 0;
- this.iaddn(num);
- this.negative = 1;
- return this;
- }
- this.words[0] -= num;
- if (this.length === 1 && this.words[0] < 0) {
- this.words[0] = -this.words[0];
- this.negative = 1;
- } else {
- // Carry
- for (var i = 0; i < this.length && this.words[i] < 0; i++) {
- this.words[i] += 0x4000000;
- this.words[i + 1] -= 1;
- }
- }
- return this.strip();
- };
- BN.prototype.addn = function addn(num) {
- return this.clone().iaddn(num);
- };
- BN.prototype.subn = function subn(num) {
- return this.clone().isubn(num);
- };
- BN.prototype.iabs = function iabs() {
- this.negative = 0;
- return this;
- };
- BN.prototype.abs = function abs() {
- return this.clone().iabs();
- };
- BN.prototype._ishlnsubmul = function _ishlnsubmul(num, mul, shift) {
- var len = num.length + shift;
- var i;
- this._expand(len);
- var w;
- var carry = 0;
- for (i = 0; i < num.length; i++) {
- w = (this.words[i + shift] | 0) + carry;
- var right = (num.words[i] | 0) * mul;
- w -= right & 0x3ffffff;
- carry = (w >> 26) - (right / 0x4000000 | 0);
- this.words[i + shift] = w & 0x3ffffff;
- }
- for (; i < this.length - shift; i++) {
- w = (this.words[i + shift] | 0) + carry;
- carry = w >> 26;
- this.words[i + shift] = w & 0x3ffffff;
- }
- if (carry === 0) return this.strip(); // Subtraction overflow
- assert(carry === -1);
- carry = 0;
- for (i = 0; i < this.length; i++) {
- w = -(this.words[i] | 0) + carry;
- carry = w >> 26;
- this.words[i] = w & 0x3ffffff;
- }
- this.negative = 1;
- return this.strip();
- };
- BN.prototype._wordDiv = function _wordDiv(num, mode) {
- var shift = this.length - num.length;
- var a = this.clone();
- var b = num; // Normalize
- var bhi = b.words[b.length - 1] | 0;
- var bhiBits = this._countBits(bhi);
- shift = 26 - bhiBits;
- if (shift !== 0) {
- b = b.ushln(shift);
- a.iushln(shift);
- bhi = b.words[b.length - 1] | 0;
- } // Initialize quotient
- var m = a.length - b.length;
- var q;
- if (mode !== 'mod') {
- q = new BN(null);
- q.length = m + 1;
- q.words = new Array(q.length);
- for (var i = 0; i < q.length; i++) {
- q.words[i] = 0;
- }
- }
- var diff = a.clone()._ishlnsubmul(b, 1, m);
- if (diff.negative === 0) {
- a = diff;
- if (q) {
- q.words[m] = 1;
- }
- }
- for (var j = m - 1; j >= 0; j--) {
- var qj = (a.words[b.length + j] | 0) * 0x4000000 + (a.words[b.length + j - 1] | 0); // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
- // (0x7ffffff)
- qj = Math.min(qj / bhi | 0, 0x3ffffff);
- a._ishlnsubmul(b, qj, j);
- while (a.negative !== 0) {
- qj--;
- a.negative = 0;
- a._ishlnsubmul(b, 1, j);
- if (!a.isZero()) {
- a.negative ^= 1;
- }
- }
- if (q) {
- q.words[j] = qj;
- }
- }
- if (q) {
- q.strip();
- }
- a.strip(); // Denormalize
- if (mode !== 'div' && shift !== 0) {
- a.iushrn(shift);
- }
- return {
- div: q || null,
- mod: a
- };
- }; // NOTE: 1) `mode` can be set to `mod` to request mod only,
- // to `div` to request div only, or be absent to
- // request both div & mod
- // 2) `positive` is true if unsigned mod is requested
- BN.prototype.divmod = function divmod(num, mode, positive) {
- assert(!num.isZero());
- if (this.isZero()) {
- return {
- div: new BN(0),
- mod: new BN(0)
- };
- }
- var div, mod, res;
- if (this.negative !== 0 && num.negative === 0) {
- res = this.neg().divmod(num, mode);
- if (mode !== 'mod') {
- div = res.div.neg();
- }
- if (mode !== 'div') {
- mod = res.mod.neg();
- if (positive && mod.negative !== 0) {
- mod.iadd(num);
- }
- }
- return {
- div: div,
- mod: mod
- };
- }
- if (this.negative === 0 && num.negative !== 0) {
- res = this.divmod(num.neg(), mode);
- if (mode !== 'mod') {
- div = res.div.neg();
- }
- return {
- div: div,
- mod: res.mod
- };
- }
- if ((this.negative & num.negative) !== 0) {
- res = this.neg().divmod(num.neg(), mode);
- if (mode !== 'div') {
- mod = res.mod.neg();
- if (positive && mod.negative !== 0) {
- mod.isub(num);
- }
- }
- return {
- div: res.div,
- mod: mod
- };
- } // Both numbers are positive at this point
- // Strip both numbers to approximate shift value
- if (num.length > this.length || this.cmp(num) < 0) {
- return {
- div: new BN(0),
- mod: this
- };
- } // Very short reduction
- if (num.length === 1) {
- if (mode === 'div') {
- return {
- div: this.divn(num.words[0]),
- mod: null
- };
- }
- if (mode === 'mod') {
- return {
- div: null,
- mod: new BN(this.modn(num.words[0]))
- };
- }
- return {
- div: this.divn(num.words[0]),
- mod: new BN(this.modn(num.words[0]))
- };
- }
- return this._wordDiv(num, mode);
- }; // Find `this` / `num`
- BN.prototype.div = function div(num) {
- return this.divmod(num, 'div', false).div;
- }; // Find `this` % `num`
- BN.prototype.mod = function mod(num) {
- return this.divmod(num, 'mod', false).mod;
- };
- BN.prototype.umod = function umod(num) {
- return this.divmod(num, 'mod', true).mod;
- }; // Find Round(`this` / `num`)
- BN.prototype.divRound = function divRound(num) {
- var dm = this.divmod(num); // Fast case - exact division
- if (dm.mod.isZero()) return dm.div;
- var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
- var half = num.ushrn(1);
- var r2 = num.andln(1);
- var cmp = mod.cmp(half); // Round down
- if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; // Round up
- return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
- };
- BN.prototype.modn = function modn(num) {
- assert(num <= 0x3ffffff);
- var p = (1 << 26) % num;
- var acc = 0;
- for (var i = this.length - 1; i >= 0; i--) {
- acc = (p * acc + (this.words[i] | 0)) % num;
- }
- return acc;
- }; // In-place division by number
- BN.prototype.idivn = function idivn(num) {
- assert(num <= 0x3ffffff);
- var carry = 0;
- for (var i = this.length - 1; i >= 0; i--) {
- var w = (this.words[i] | 0) + carry * 0x4000000;
- this.words[i] = w / num | 0;
- carry = w % num;
- }
- return this.strip();
- };
- BN.prototype.divn = function divn(num) {
- return this.clone().idivn(num);
- };
- BN.prototype.egcd = function egcd(p) {
- assert(p.negative === 0);
- assert(!p.isZero());
- var x = this;
- var y = p.clone();
- if (x.negative !== 0) {
- x = x.umod(p);
- } else {
- x = x.clone();
- } // A * x + B * y = x
- var A = new BN(1);
- var B = new BN(0); // C * x + D * y = y
- var C = new BN(0);
- var D = new BN(1);
- var g = 0;
- while (x.isEven() && y.isEven()) {
- x.iushrn(1);
- y.iushrn(1);
- ++g;
- }
- var yp = y.clone();
- var xp = x.clone();
- while (!x.isZero()) {
- for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1) {
- ;
- }
- if (i > 0) {
- x.iushrn(i);
- while (i-- > 0) {
- if (A.isOdd() || B.isOdd()) {
- A.iadd(yp);
- B.isub(xp);
- }
- A.iushrn(1);
- B.iushrn(1);
- }
- }
- for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1) {
- ;
- }
- if (j > 0) {
- y.iushrn(j);
- while (j-- > 0) {
- if (C.isOdd() || D.isOdd()) {
- C.iadd(yp);
- D.isub(xp);
- }
- C.iushrn(1);
- D.iushrn(1);
- }
- }
- if (x.cmp(y) >= 0) {
- x.isub(y);
- A.isub(C);
- B.isub(D);
- } else {
- y.isub(x);
- C.isub(A);
- D.isub(B);
- }
- }
- return {
- a: C,
- b: D,
- gcd: y.iushln(g)
- };
- }; // This is reduced incarnation of the binary EEA
- // above, designated to invert members of the
- // _prime_ fields F(p) at a maximal speed
- BN.prototype._invmp = function _invmp(p) {
- assert(p.negative === 0);
- assert(!p.isZero());
- var a = this;
- var b = p.clone();
- if (a.negative !== 0) {
- a = a.umod(p);
- } else {
- a = a.clone();
- }
- var x1 = new BN(1);
- var x2 = new BN(0);
- var delta = b.clone();
- while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
- for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1) {
- ;
- }
- if (i > 0) {
- a.iushrn(i);
- while (i-- > 0) {
- if (x1.isOdd()) {
- x1.iadd(delta);
- }
- x1.iushrn(1);
- }
- }
- for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1) {
- ;
- }
- if (j > 0) {
- b.iushrn(j);
- while (j-- > 0) {
- if (x2.isOdd()) {
- x2.iadd(delta);
- }
- x2.iushrn(1);
- }
- }
- if (a.cmp(b) >= 0) {
- a.isub(b);
- x1.isub(x2);
- } else {
- b.isub(a);
- x2.isub(x1);
- }
- }
- var res;
- if (a.cmpn(1) === 0) {
- res = x1;
- } else {
- res = x2;
- }
- if (res.cmpn(0) < 0) {
- res.iadd(p);
- }
- return res;
- };
- BN.prototype.gcd = function gcd(num) {
- if (this.isZero()) return num.abs();
- if (num.isZero()) return this.abs();
- var a = this.clone();
- var b = num.clone();
- a.negative = 0;
- b.negative = 0; // Remove common factor of two
- for (var shift = 0; a.isEven() && b.isEven(); shift++) {
- a.iushrn(1);
- b.iushrn(1);
- }
- do {
- while (a.isEven()) {
- a.iushrn(1);
- }
- while (b.isEven()) {
- b.iushrn(1);
- }
- var r = a.cmp(b);
- if (r < 0) {
- // Swap `a` and `b` to make `a` always bigger than `b`
- var t = a;
- a = b;
- b = t;
- } else if (r === 0 || b.cmpn(1) === 0) {
- break;
- }
- a.isub(b);
- } while (true);
- return b.iushln(shift);
- }; // Invert number in the field F(num)
- BN.prototype.invm = function invm(num) {
- return this.egcd(num).a.umod(num);
- };
- BN.prototype.isEven = function isEven() {
- return (this.words[0] & 1) === 0;
- };
- BN.prototype.isOdd = function isOdd() {
- return (this.words[0] & 1) === 1;
- }; // And first word and num
- BN.prototype.andln = function andln(num) {
- return this.words[0] & num;
- }; // Increment at the bit position in-line
- BN.prototype.bincn = function bincn(bit) {
- assert(typeof bit === 'number');
- var r = bit % 26;
- var s = (bit - r) / 26;
- var q = 1 << r; // Fast case: bit is much higher than all existing words
- if (this.length <= s) {
- this._expand(s + 1);
- this.words[s] |= q;
- return this;
- } // Add bit and propagate, if needed
- var carry = q;
- for (var i = s; carry !== 0 && i < this.length; i++) {
- var w = this.words[i] | 0;
- w += carry;
- carry = w >>> 26;
- w &= 0x3ffffff;
- this.words[i] = w;
- }
- if (carry !== 0) {
- this.words[i] = carry;
- this.length++;
- }
- return this;
- };
- BN.prototype.isZero = function isZero() {
- return this.length === 1 && this.words[0] === 0;
- };
- BN.prototype.cmpn = function cmpn(num) {
- var negative = num < 0;
- if (this.negative !== 0 && !negative) return -1;
- if (this.negative === 0 && negative) return 1;
- this.strip();
- var res;
- if (this.length > 1) {
- res = 1;
- } else {
- if (negative) {
- num = -num;
- }
- assert(num <= 0x3ffffff, 'Number is too big');
- var w = this.words[0] | 0;
- res = w === num ? 0 : w < num ? -1 : 1;
- }
- if (this.negative !== 0) return -res | 0;
- return res;
- }; // Compare two numbers and return:
- // 1 - if `this` > `num`
- // 0 - if `this` == `num`
- // -1 - if `this` < `num`
- BN.prototype.cmp = function cmp(num) {
- if (this.negative !== 0 && num.negative === 0) return -1;
- if (this.negative === 0 && num.negative !== 0) return 1;
- var res = this.ucmp(num);
- if (this.negative !== 0) return -res | 0;
- return res;
- }; // Unsigned comparison
- BN.prototype.ucmp = function ucmp(num) {
- // At this point both numbers have the same sign
- if (this.length > num.length) return 1;
- if (this.length < num.length) return -1;
- var res = 0;
- for (var i = this.length - 1; i >= 0; i--) {
- var a = this.words[i] | 0;
- var b = num.words[i] | 0;
- if (a === b) continue;
- if (a < b) {
- res = -1;
- } else if (a > b) {
- res = 1;
- }
- break;
- }
- return res;
- };
- BN.prototype.gtn = function gtn(num) {
- return this.cmpn(num) === 1;
- };
- BN.prototype.gt = function gt(num) {
- return this.cmp(num) === 1;
- };
- BN.prototype.gten = function gten(num) {
- return this.cmpn(num) >= 0;
- };
- BN.prototype.gte = function gte(num) {
- return this.cmp(num) >= 0;
- };
- BN.prototype.ltn = function ltn(num) {
- return this.cmpn(num) === -1;
- };
- BN.prototype.lt = function lt(num) {
- return this.cmp(num) === -1;
- };
- BN.prototype.lten = function lten(num) {
- return this.cmpn(num) <= 0;
- };
- BN.prototype.lte = function lte(num) {
- return this.cmp(num) <= 0;
- };
- BN.prototype.eqn = function eqn(num) {
- return this.cmpn(num) === 0;
- };
- BN.prototype.eq = function eq(num) {
- return this.cmp(num) === 0;
- }; //
- // A reduce context, could be using montgomery or something better, depending
- // on the `m` itself.
- //
- BN.red = function red(num) {
- return new Red(num);
- };
- BN.prototype.toRed = function toRed(ctx) {
- assert(!this.red, 'Already a number in reduction context');
- assert(this.negative === 0, 'red works only with positives');
- return ctx.convertTo(this)._forceRed(ctx);
- };
- BN.prototype.fromRed = function fromRed() {
- assert(this.red, 'fromRed works only with numbers in reduction context');
- return this.red.convertFrom(this);
- };
- BN.prototype._forceRed = function _forceRed(ctx) {
- this.red = ctx;
- return this;
- };
- BN.prototype.forceRed = function forceRed(ctx) {
- assert(!this.red, 'Already a number in reduction context');
- return this._forceRed(ctx);
- };
- BN.prototype.redAdd = function redAdd(num) {
- assert(this.red, 'redAdd works only with red numbers');
- return this.red.add(this, num);
- };
- BN.prototype.redIAdd = function redIAdd(num) {
- assert(this.red, 'redIAdd works only with red numbers');
- return this.red.iadd(this, num);
- };
- BN.prototype.redSub = function redSub(num) {
- assert(this.red, 'redSub works only with red numbers');
- return this.red.sub(this, num);
- };
- BN.prototype.redISub = function redISub(num) {
- assert(this.red, 'redISub works only with red numbers');
- return this.red.isub(this, num);
- };
- BN.prototype.redShl = function redShl(num) {
- assert(this.red, 'redShl works only with red numbers');
- return this.red.shl(this, num);
- };
- BN.prototype.redMul = function redMul(num) {
- assert(this.red, 'redMul works only with red numbers');
- this.red._verify2(this, num);
- return this.red.mul(this, num);
- };
- BN.prototype.redIMul = function redIMul(num) {
- assert(this.red, 'redMul works only with red numbers');
- this.red._verify2(this, num);
- return this.red.imul(this, num);
- };
- BN.prototype.redSqr = function redSqr() {
- assert(this.red, 'redSqr works only with red numbers');
- this.red._verify1(this);
- return this.red.sqr(this);
- };
- BN.prototype.redISqr = function redISqr() {
- assert(this.red, 'redISqr works only with red numbers');
- this.red._verify1(this);
- return this.red.isqr(this);
- }; // Square root over p
- BN.prototype.redSqrt = function redSqrt() {
- assert(this.red, 'redSqrt works only with red numbers');
- this.red._verify1(this);
- return this.red.sqrt(this);
- };
- BN.prototype.redInvm = function redInvm() {
- assert(this.red, 'redInvm works only with red numbers');
- this.red._verify1(this);
- return this.red.invm(this);
- }; // Return negative clone of `this` % `red modulo`
- BN.prototype.redNeg = function redNeg() {
- assert(this.red, 'redNeg works only with red numbers');
- this.red._verify1(this);
- return this.red.neg(this);
- };
- BN.prototype.redPow = function redPow(num) {
- assert(this.red && !num.red, 'redPow(normalNum)');
- this.red._verify1(this);
- return this.red.pow(this, num);
- }; // Prime numbers with efficient reduction
- var primes = {
- k256: null,
- p224: null,
- p192: null,
- p25519: null
- }; // Pseudo-Mersenne prime
- function MPrime(name, p) {
- // P = 2 ^ N - K
- this.name = name;
- this.p = new BN(p, 16);
- this.n = this.p.bitLength();
- this.k = new BN(1).iushln(this.n).isub(this.p);
- this.tmp = this._tmp();
- }
- MPrime.prototype._tmp = function _tmp() {
- var tmp = new BN(null);
- tmp.words = new Array(Math.ceil(this.n / 13));
- return tmp;
- };
- MPrime.prototype.ireduce = function ireduce(num) {
- // Assumes that `num` is less than `P^2`
- // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
- var r = num;
- var rlen;
- do {
- this.split(r, this.tmp);
- r = this.imulK(r);
- r = r.iadd(this.tmp);
- rlen = r.bitLength();
- } while (rlen > this.n);
- var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
- if (cmp === 0) {
- r.words[0] = 0;
- r.length = 1;
- } else if (cmp > 0) {
- r.isub(this.p);
- } else {
- if (r.strip !== undefined) {
- // r is BN v4 instance
- r.strip();
- } else {
- // r is BN v5 instance
- r._strip();
- }
- }
- return r;
- };
- MPrime.prototype.split = function split(input, out) {
- input.iushrn(this.n, 0, out);
- };
- MPrime.prototype.imulK = function imulK(num) {
- return num.imul(this.k);
- };
- function K256() {
- MPrime.call(this, 'k256', 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
- }
- inherits(K256, MPrime);
- K256.prototype.split = function split(input, output) {
- // 256 = 9 * 26 + 22
- var mask = 0x3fffff;
- var outLen = Math.min(input.length, 9);
- for (var i = 0; i < outLen; i++) {
- output.words[i] = input.words[i];
- }
- output.length = outLen;
- if (input.length <= 9) {
- input.words[0] = 0;
- input.length = 1;
- return;
- } // Shift by 9 limbs
- var prev = input.words[9];
- output.words[output.length++] = prev & mask;
- for (i = 10; i < input.length; i++) {
- var next = input.words[i] | 0;
- input.words[i - 10] = (next & mask) << 4 | prev >>> 22;
- prev = next;
- }
- prev >>>= 22;
- input.words[i - 10] = prev;
- if (prev === 0 && input.length > 10) {
- input.length -= 10;
- } else {
- input.length -= 9;
- }
- };
- K256.prototype.imulK = function imulK(num) {
- // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
- num.words[num.length] = 0;
- num.words[num.length + 1] = 0;
- num.length += 2; // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
- var lo = 0;
- for (var i = 0; i < num.length; i++) {
- var w = num.words[i] | 0;
- lo += w * 0x3d1;
- num.words[i] = lo & 0x3ffffff;
- lo = w * 0x40 + (lo / 0x4000000 | 0);
- } // Fast length reduction
- if (num.words[num.length - 1] === 0) {
- num.length--;
- if (num.words[num.length - 1] === 0) {
- num.length--;
- }
- }
- return num;
- };
- function P224() {
- MPrime.call(this, 'p224', 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
- }
- inherits(P224, MPrime);
- function P192() {
- MPrime.call(this, 'p192', 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
- }
- inherits(P192, MPrime);
- function P25519() {
- // 2 ^ 255 - 19
- MPrime.call(this, '25519', '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
- }
- inherits(P25519, MPrime);
- P25519.prototype.imulK = function imulK(num) {
- // K = 0x13
- var carry = 0;
- for (var i = 0; i < num.length; i++) {
- var hi = (num.words[i] | 0) * 0x13 + carry;
- var lo = hi & 0x3ffffff;
- hi >>>= 26;
- num.words[i] = lo;
- carry = hi;
- }
- if (carry !== 0) {
- num.words[num.length++] = carry;
- }
- return num;
- }; // Exported mostly for testing purposes, use plain name instead
- BN._prime = function prime(name) {
- // Cached version of prime
- if (primes[name]) return primes[name];
- var prime;
- if (name === 'k256') {
- prime = new K256();
- } else if (name === 'p224') {
- prime = new P224();
- } else if (name === 'p192') {
- prime = new P192();
- } else if (name === 'p25519') {
- prime = new P25519();
- } else {
- throw new Error('Unknown prime ' + name);
- }
- primes[name] = prime;
- return prime;
- }; //
- // Base reduction engine
- //
- function Red(m) {
- if (typeof m === 'string') {
- var prime = BN._prime(m);
- this.m = prime.p;
- this.prime = prime;
- } else {
- assert(m.gtn(1), 'modulus must be greater than 1');
- this.m = m;
- this.prime = null;
- }
- }
- Red.prototype._verify1 = function _verify1(a) {
- assert(a.negative === 0, 'red works only with positives');
- assert(a.red, 'red works only with red numbers');
- };
- Red.prototype._verify2 = function _verify2(a, b) {
- assert((a.negative | b.negative) === 0, 'red works only with positives');
- assert(a.red && a.red === b.red, 'red works only with red numbers');
- };
- Red.prototype.imod = function imod(a) {
- if (this.prime) return this.prime.ireduce(a)._forceRed(this);
- return a.umod(this.m)._forceRed(this);
- };
- Red.prototype.neg = function neg(a) {
- if (a.isZero()) {
- return a.clone();
- }
- return this.m.sub(a)._forceRed(this);
- };
- Red.prototype.add = function add(a, b) {
- this._verify2(a, b);
- var res = a.add(b);
- if (res.cmp(this.m) >= 0) {
- res.isub(this.m);
- }
- return res._forceRed(this);
- };
- Red.prototype.iadd = function iadd(a, b) {
- this._verify2(a, b);
- var res = a.iadd(b);
- if (res.cmp(this.m) >= 0) {
- res.isub(this.m);
- }
- return res;
- };
- Red.prototype.sub = function sub(a, b) {
- this._verify2(a, b);
- var res = a.sub(b);
- if (res.cmpn(0) < 0) {
- res.iadd(this.m);
- }
- return res._forceRed(this);
- };
- Red.prototype.isub = function isub(a, b) {
- this._verify2(a, b);
- var res = a.isub(b);
- if (res.cmpn(0) < 0) {
- res.iadd(this.m);
- }
- return res;
- };
- Red.prototype.shl = function shl(a, num) {
- this._verify1(a);
- return this.imod(a.ushln(num));
- };
- Red.prototype.imul = function imul(a, b) {
- this._verify2(a, b);
- return this.imod(a.imul(b));
- };
- Red.prototype.mul = function mul(a, b) {
- this._verify2(a, b);
- return this.imod(a.mul(b));
- };
- Red.prototype.isqr = function isqr(a) {
- return this.imul(a, a.clone());
- };
- Red.prototype.sqr = function sqr(a) {
- return this.mul(a, a);
- };
- Red.prototype.sqrt = function sqrt(a) {
- if (a.isZero()) return a.clone();
- var mod3 = this.m.andln(3);
- assert(mod3 % 2 === 1); // Fast case
- if (mod3 === 3) {
- var pow = this.m.add(new BN(1)).iushrn(2);
- return this.pow(a, pow);
- } // Tonelli-Shanks algorithm (Totally unoptimized and slow)
- //
- // Find Q and S, that Q * 2 ^ S = (P - 1)
- var q = this.m.subn(1);
- var s = 0;
- while (!q.isZero() && q.andln(1) === 0) {
- s++;
- q.iushrn(1);
- }
- assert(!q.isZero());
- var one = new BN(1).toRed(this);
- var nOne = one.redNeg(); // Find quadratic non-residue
- // NOTE: Max is such because of generalized Riemann hypothesis.
- var lpow = this.m.subn(1).iushrn(1);
- var z = this.m.bitLength();
- z = new BN(2 * z * z).toRed(this);
- while (this.pow(z, lpow).cmp(nOne) !== 0) {
- z.redIAdd(nOne);
- }
- var c = this.pow(z, q);
- var r = this.pow(a, q.addn(1).iushrn(1));
- var t = this.pow(a, q);
- var m = s;
- while (t.cmp(one) !== 0) {
- var tmp = t;
- for (var i = 0; tmp.cmp(one) !== 0; i++) {
- tmp = tmp.redSqr();
- }
- assert(i < m);
- var b = this.pow(c, new BN(1).iushln(m - i - 1));
- r = r.redMul(b);
- c = b.redSqr();
- t = t.redMul(c);
- m = i;
- }
- return r;
- };
- Red.prototype.invm = function invm(a) {
- var inv = a._invmp(this.m);
- if (inv.negative !== 0) {
- inv.negative = 0;
- return this.imod(inv).redNeg();
- } else {
- return this.imod(inv);
- }
- };
- Red.prototype.pow = function pow(a, num) {
- if (num.isZero()) return new BN(1).toRed(this);
- if (num.cmpn(1) === 0) return a.clone();
- var windowSize = 4;
- var wnd = new Array(1 << windowSize);
- wnd[0] = new BN(1).toRed(this);
- wnd[1] = a;
- for (var i = 2; i < wnd.length; i++) {
- wnd[i] = this.mul(wnd[i - 1], a);
- }
- var res = wnd[0];
- var current = 0;
- var currentLen = 0;
- var start = num.bitLength() % 26;
- if (start === 0) {
- start = 26;
- }
- for (i = num.length - 1; i >= 0; i--) {
- var word = num.words[i];
- for (var j = start - 1; j >= 0; j--) {
- var bit = word >> j & 1;
- if (res !== wnd[0]) {
- res = this.sqr(res);
- }
- if (bit === 0 && current === 0) {
- currentLen = 0;
- continue;
- }
- current <<= 1;
- current |= bit;
- currentLen++;
- if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
- res = this.mul(res, wnd[current]);
- currentLen = 0;
- current = 0;
- }
- start = 26;
- }
- return res;
- };
- Red.prototype.convertTo = function convertTo(num) {
- var r = num.umod(this.m);
- return r === num ? r.clone() : r;
- };
- Red.prototype.convertFrom = function convertFrom(num) {
- var res = num.clone();
- res.red = null;
- return res;
- }; //
- // Montgomery method engine
- //
- BN.mont = function mont(num) {
- return new Mont(num);
- };
- function Mont(m) {
- Red.call(this, m);
- this.shift = this.m.bitLength();
- if (this.shift % 26 !== 0) {
- this.shift += 26 - this.shift % 26;
- }
- this.r = new BN(1).iushln(this.shift);
- this.r2 = this.imod(this.r.sqr());
- this.rinv = this.r._invmp(this.m);
- this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
- this.minv = this.minv.umod(this.r);
- this.minv = this.r.sub(this.minv);
- }
- inherits(Mont, Red);
- Mont.prototype.convertTo = function convertTo(num) {
- return this.imod(num.ushln(this.shift));
- };
- Mont.prototype.convertFrom = function convertFrom(num) {
- var r = this.imod(num.mul(this.rinv));
- r.red = null;
- return r;
- };
- Mont.prototype.imul = function imul(a, b) {
- if (a.isZero() || b.isZero()) {
- a.words[0] = 0;
- a.length = 1;
- return a;
- }
- var t = a.imul(b);
- var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
- var u = t.isub(c).iushrn(this.shift);
- var res = u;
- if (u.cmp(this.m) >= 0) {
- res = u.isub(this.m);
- } else if (u.cmpn(0) < 0) {
- res = u.iadd(this.m);
- }
- return res._forceRed(this);
- };
- Mont.prototype.mul = function mul(a, b) {
- if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
- var t = a.mul(b);
- var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
- var u = t.isub(c).iushrn(this.shift);
- var res = u;
- if (u.cmp(this.m) >= 0) {
- res = u.isub(this.m);
- } else if (u.cmpn(0) < 0) {
- res = u.iadd(this.m);
- }
- return res._forceRed(this);
- };
- Mont.prototype.invm = function invm(a) {
- // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
- var res = this.imod(a._invmp(this.m).mul(this.r2));
- return res._forceRed(this);
- };
- })(typeof module === 'undefined' || module, void 0);
- },{"buffer":185}],182:[function(require,module,exports){
- 'use strict';
- exports.byteLength = byteLength;
- exports.toByteArray = toByteArray;
- exports.fromByteArray = fromByteArray;
- var lookup = [];
- var revLookup = [];
- var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;
- var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
- for (var i = 0, len = code.length; i < len; ++i) {
- lookup[i] = code[i];
- revLookup[code.charCodeAt(i)] = i;
- } // Support decoding URL-safe base64 strings, as Node.js does.
- // See: https://en.wikipedia.org/wiki/Base64#URL_applications
- revLookup['-'.charCodeAt(0)] = 62;
- revLookup['_'.charCodeAt(0)] = 63;
- function getLens(b64) {
- var len = b64.length;
- if (len % 4 > 0) {
- throw new Error('Invalid string. Length must be a multiple of 4');
- } // Trim off extra bytes after placeholder bytes are found
- // See: https://github.com/beatgammit/base64-js/issues/42
- var validLen = b64.indexOf('=');
- if (validLen === -1) validLen = len;
- var placeHoldersLen = validLen === len ? 0 : 4 - validLen % 4;
- return [validLen, placeHoldersLen];
- } // base64 is 4/3 + up to two characters of the original data
- function byteLength(b64) {
- var lens = getLens(b64);
- var validLen = lens[0];
- var placeHoldersLen = lens[1];
- return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;
- }
- function _byteLength(b64, validLen, placeHoldersLen) {
- return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;
- }
- function toByteArray(b64) {
- var tmp;
- var lens = getLens(b64);
- var validLen = lens[0];
- var placeHoldersLen = lens[1];
- var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));
- var curByte = 0; // if there are placeholders, only get up to the last complete 4 chars
- var len = placeHoldersLen > 0 ? validLen - 4 : validLen;
- var i;
- for (i = 0; i < len; i += 4) {
- tmp = revLookup[b64.charCodeAt(i)] << 18 | revLookup[b64.charCodeAt(i + 1)] << 12 | revLookup[b64.charCodeAt(i + 2)] << 6 | revLookup[b64.charCodeAt(i + 3)];
- arr[curByte++] = tmp >> 16 & 0xFF;
- arr[curByte++] = tmp >> 8 & 0xFF;
- arr[curByte++] = tmp & 0xFF;
- }
- if (placeHoldersLen === 2) {
- tmp = revLookup[b64.charCodeAt(i)] << 2 | revLookup[b64.charCodeAt(i + 1)] >> 4;
- arr[curByte++] = tmp & 0xFF;
- }
- if (placeHoldersLen === 1) {
- tmp = revLookup[b64.charCodeAt(i)] << 10 | revLookup[b64.charCodeAt(i + 1)] << 4 | revLookup[b64.charCodeAt(i + 2)] >> 2;
- arr[curByte++] = tmp >> 8 & 0xFF;
- arr[curByte++] = tmp & 0xFF;
- }
- return arr;
- }
- function tripletToBase64(num) {
- return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F];
- }
- function encodeChunk(uint8, start, end) {
- var tmp;
- var output = [];
- for (var i = start; i < end; i += 3) {
- tmp = (uint8[i] << 16 & 0xFF0000) + (uint8[i + 1] << 8 & 0xFF00) + (uint8[i + 2] & 0xFF);
- output.push(tripletToBase64(tmp));
- }
- return output.join('');
- }
- function fromByteArray(uint8) {
- var tmp;
- var len = uint8.length;
- var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes
- var parts = [];
- var maxChunkLength = 16383; // must be multiple of 3
- // go through the array every three bytes, we'll deal with trailing stuff later
- for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
- parts.push(encodeChunk(uint8, i, i + maxChunkLength > len2 ? len2 : i + maxChunkLength));
- } // pad the end with zeros, but make sure to not forget the extra bytes
- if (extraBytes === 1) {
- tmp = uint8[len - 1];
- parts.push(lookup[tmp >> 2] + lookup[tmp << 4 & 0x3F] + '==');
- } else if (extraBytes === 2) {
- tmp = (uint8[len - 2] << 8) + uint8[len - 1];
- parts.push(lookup[tmp >> 10] + lookup[tmp >> 4 & 0x3F] + lookup[tmp << 2 & 0x3F] + '=');
- }
- return parts.join('');
- }
- },{}],183:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- (function (module, exports) {
- 'use strict'; // Utils
- function assert(val, msg) {
- if (!val) throw new Error(msg || 'Assertion failed');
- } // Could use `inherits` module, but don't want to move from single file
- // architecture yet.
- function inherits(ctor, superCtor) {
- ctor.super_ = superCtor;
- var TempCtor = function TempCtor() {};
- TempCtor.prototype = superCtor.prototype;
- ctor.prototype = new TempCtor();
- ctor.prototype.constructor = ctor;
- } // BN
- function BN(number, base, endian) {
- if (BN.isBN(number)) {
- return number;
- }
- this.negative = 0;
- this.words = null;
- this.length = 0; // Reduction context
- this.red = null;
- if (number !== null) {
- if (base === 'le' || base === 'be') {
- endian = base;
- base = 10;
- }
- this._init(number || 0, base || 10, endian || 'be');
- }
- }
- if (_typeof(module) === 'object') {
- module.exports = BN;
- } else {
- exports.BN = BN;
- }
- BN.BN = BN;
- BN.wordSize = 26;
- var Buffer;
- try {
- Buffer = require('buffer').Buffer;
- } catch (e) {}
- BN.isBN = function isBN(num) {
- if (num instanceof BN) {
- return true;
- }
- return num !== null && _typeof(num) === 'object' && num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
- };
- BN.max = function max(left, right) {
- if (left.cmp(right) > 0) return left;
- return right;
- };
- BN.min = function min(left, right) {
- if (left.cmp(right) < 0) return left;
- return right;
- };
- BN.prototype._init = function init(number, base, endian) {
- if (typeof number === 'number') {
- return this._initNumber(number, base, endian);
- }
- if (_typeof(number) === 'object') {
- return this._initArray(number, base, endian);
- }
- if (base === 'hex') {
- base = 16;
- }
- assert(base === (base | 0) && base >= 2 && base <= 36);
- number = number.toString().replace(/\s+/g, '');
- var start = 0;
- if (number[0] === '-') {
- start++;
- }
- if (base === 16) {
- this._parseHex(number, start);
- } else {
- this._parseBase(number, base, start);
- }
- if (number[0] === '-') {
- this.negative = 1;
- }
- this._strip();
- if (endian !== 'le') return;
- this._initArray(this.toArray(), base, endian);
- };
- BN.prototype._initNumber = function _initNumber(number, base, endian) {
- if (number < 0) {
- this.negative = 1;
- number = -number;
- }
- if (number < 0x4000000) {
- this.words = [number & 0x3ffffff];
- this.length = 1;
- } else if (number < 0x10000000000000) {
- this.words = [number & 0x3ffffff, number / 0x4000000 & 0x3ffffff];
- this.length = 2;
- } else {
- assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
- this.words = [number & 0x3ffffff, number / 0x4000000 & 0x3ffffff, 1];
- this.length = 3;
- }
- if (endian !== 'le') return; // Reverse the bytes
- this._initArray(this.toArray(), base, endian);
- };
- BN.prototype._initArray = function _initArray(number, base, endian) {
- // Perhaps a Uint8Array
- assert(typeof number.length === 'number');
- if (number.length <= 0) {
- this.words = [0];
- this.length = 1;
- return this;
- }
- this.length = Math.ceil(number.length / 3);
- this.words = new Array(this.length);
- for (var i = 0; i < this.length; i++) {
- this.words[i] = 0;
- }
- var j, w;
- var off = 0;
- if (endian === 'be') {
- for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
- w = number[i] | number[i - 1] << 8 | number[i - 2] << 16;
- this.words[j] |= w << off & 0x3ffffff;
- this.words[j + 1] = w >>> 26 - off & 0x3ffffff;
- off += 24;
- if (off >= 26) {
- off -= 26;
- j++;
- }
- }
- } else if (endian === 'le') {
- for (i = 0, j = 0; i < number.length; i += 3) {
- w = number[i] | number[i + 1] << 8 | number[i + 2] << 16;
- this.words[j] |= w << off & 0x3ffffff;
- this.words[j + 1] = w >>> 26 - off & 0x3ffffff;
- off += 24;
- if (off >= 26) {
- off -= 26;
- j++;
- }
- }
- }
- return this._strip();
- };
- function parseHex(str, start, end) {
- var r = 0;
- var len = Math.min(str.length, end);
- var z = 0;
- for (var i = start; i < len; i++) {
- var c = str.charCodeAt(i) - 48;
- r <<= 4;
- var b; // 'a' - 'f'
- if (c >= 49 && c <= 54) {
- b = c - 49 + 0xa; // 'A' - 'F'
- } else if (c >= 17 && c <= 22) {
- b = c - 17 + 0xa; // '0' - '9'
- } else {
- b = c;
- }
- r |= b;
- z |= b;
- }
- assert(!(z & 0xf0), 'Invalid character in ' + str);
- return r;
- }
- BN.prototype._parseHex = function _parseHex(number, start) {
- // Create possibly bigger array to ensure that it fits the number
- this.length = Math.ceil((number.length - start) / 6);
- this.words = new Array(this.length);
- for (var i = 0; i < this.length; i++) {
- this.words[i] = 0;
- }
- var j, w; // Scan 24-bit chunks and add them to the number
- var off = 0;
- for (i = number.length - 6, j = 0; i >= start; i -= 6) {
- w = parseHex(number, i, i + 6);
- this.words[j] |= w << off & 0x3ffffff; // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
- this.words[j + 1] |= w >>> 26 - off & 0x3fffff;
- off += 24;
- if (off >= 26) {
- off -= 26;
- j++;
- }
- }
- if (i + 6 !== start) {
- w = parseHex(number, start, i + 6);
- this.words[j] |= w << off & 0x3ffffff;
- this.words[j + 1] |= w >>> 26 - off & 0x3fffff;
- }
- this._strip();
- };
- function parseBase(str, start, end, mul) {
- var r = 0;
- var b = 0;
- var len = Math.min(str.length, end);
- for (var i = start; i < len; i++) {
- var c = str.charCodeAt(i) - 48;
- r *= mul; // 'a'
- if (c >= 49) {
- b = c - 49 + 0xa; // 'A'
- } else if (c >= 17) {
- b = c - 17 + 0xa; // '0' - '9'
- } else {
- b = c;
- }
- assert(c >= 0 && b < mul, 'Invalid character');
- r += b;
- }
- return r;
- }
- BN.prototype._parseBase = function _parseBase(number, base, start) {
- // Initialize as zero
- this.words = [0];
- this.length = 1; // Find length of limb in base
- for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
- limbLen++;
- }
- limbLen--;
- limbPow = limbPow / base | 0;
- var total = number.length - start;
- var mod = total % limbLen;
- var end = Math.min(total, total - mod) + start;
- var word = 0;
- for (var i = start; i < end; i += limbLen) {
- word = parseBase(number, i, i + limbLen, base);
- this.imuln(limbPow);
- if (this.words[0] + word < 0x4000000) {
- this.words[0] += word;
- } else {
- this._iaddn(word);
- }
- }
- if (mod !== 0) {
- var pow = 1;
- word = parseBase(number, i, number.length, base);
- for (i = 0; i < mod; i++) {
- pow *= base;
- }
- this.imuln(pow);
- if (this.words[0] + word < 0x4000000) {
- this.words[0] += word;
- } else {
- this._iaddn(word);
- }
- }
- };
- BN.prototype.copy = function copy(dest) {
- dest.words = new Array(this.length);
- for (var i = 0; i < this.length; i++) {
- dest.words[i] = this.words[i];
- }
- dest.length = this.length;
- dest.negative = this.negative;
- dest.red = this.red;
- };
- function move(dest, src) {
- dest.words = src.words;
- dest.length = src.length;
- dest.negative = src.negative;
- dest.red = src.red;
- }
- BN.prototype._move = function _move(dest) {
- move(dest, this);
- };
- BN.prototype.clone = function clone() {
- var r = new BN(null);
- this.copy(r);
- return r;
- };
- BN.prototype._expand = function _expand(size) {
- while (this.length < size) {
- this.words[this.length++] = 0;
- }
- return this;
- }; // Remove leading `0` from `this`
- BN.prototype._strip = function strip() {
- while (this.length > 1 && this.words[this.length - 1] === 0) {
- this.length--;
- }
- return this._normSign();
- };
- BN.prototype._normSign = function _normSign() {
- // -0 = 0
- if (this.length === 1 && this.words[0] === 0) {
- this.negative = 0;
- }
- return this;
- }; // Check Symbol.for because not everywhere where Symbol defined
- // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility
- if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {
- try {
- BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;
- } catch (e) {
- BN.prototype.inspect = inspect;
- }
- } else {
- BN.prototype.inspect = inspect;
- }
- function inspect() {
- return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
- }
- /*
- var zeros = [];
- var groupSizes = [];
- var groupBases = [];
- var s = '';
- var i = -1;
- while (++i < BN.wordSize) {
- zeros[i] = s;
- s += '0';
- }
- groupSizes[0] = 0;
- groupSizes[1] = 0;
- groupBases[0] = 0;
- groupBases[1] = 0;
- var base = 2 - 1;
- while (++base < 36 + 1) {
- var groupSize = 0;
- var groupBase = 1;
- while (groupBase < (1 << BN.wordSize) / base) {
- groupBase *= base;
- groupSize += 1;
- }
- groupSizes[base] = groupSize;
- groupBases[base] = groupBase;
- }
- */
- var zeros = ['', '0', '00', '000', '0000', '00000', '000000', '0000000', '00000000', '000000000', '0000000000', '00000000000', '000000000000', '0000000000000', '00000000000000', '000000000000000', '0000000000000000', '00000000000000000', '000000000000000000', '0000000000000000000', '00000000000000000000', '000000000000000000000', '0000000000000000000000', '00000000000000000000000', '000000000000000000000000', '0000000000000000000000000'];
- var groupSizes = [0, 0, 25, 16, 12, 11, 10, 9, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5];
- var groupBases = [0, 0, 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176];
- BN.prototype.toString = function toString(base, padding) {
- base = base || 10;
- padding = padding | 0 || 1;
- var out;
- if (base === 16 || base === 'hex') {
- out = '';
- var off = 0;
- var carry = 0;
- for (var i = 0; i < this.length; i++) {
- var w = this.words[i];
- var word = ((w << off | carry) & 0xffffff).toString(16);
- carry = w >>> 24 - off & 0xffffff;
- if (carry !== 0 || i !== this.length - 1) {
- out = zeros[6 - word.length] + word + out;
- } else {
- out = word + out;
- }
- off += 2;
- if (off >= 26) {
- off -= 26;
- i--;
- }
- }
- if (carry !== 0) {
- out = carry.toString(16) + out;
- }
- while (out.length % padding !== 0) {
- out = '0' + out;
- }
- if (this.negative !== 0) {
- out = '-' + out;
- }
- return out;
- }
- if (base === (base | 0) && base >= 2 && base <= 36) {
- // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
- var groupSize = groupSizes[base]; // var groupBase = Math.pow(base, groupSize);
- var groupBase = groupBases[base];
- out = '';
- var c = this.clone();
- c.negative = 0;
- while (!c.isZero()) {
- var r = c.modrn(groupBase).toString(base);
- c = c.idivn(groupBase);
- if (!c.isZero()) {
- out = zeros[groupSize - r.length] + r + out;
- } else {
- out = r + out;
- }
- }
- if (this.isZero()) {
- out = '0' + out;
- }
- while (out.length % padding !== 0) {
- out = '0' + out;
- }
- if (this.negative !== 0) {
- out = '-' + out;
- }
- return out;
- }
- assert(false, 'Base should be between 2 and 36');
- };
- BN.prototype.toNumber = function toNumber() {
- var ret = this.words[0];
- if (this.length === 2) {
- ret += this.words[1] * 0x4000000;
- } else if (this.length === 3 && this.words[2] === 0x01) {
- // NOTE: at this stage it is known that the top bit is set
- ret += 0x10000000000000 + this.words[1] * 0x4000000;
- } else if (this.length > 2) {
- assert(false, 'Number can only safely store up to 53 bits');
- }
- return this.negative !== 0 ? -ret : ret;
- };
- BN.prototype.toJSON = function toJSON() {
- return this.toString(16, 2);
- };
- if (Buffer) {
- BN.prototype.toBuffer = function toBuffer(endian, length) {
- return this.toArrayLike(Buffer, endian, length);
- };
- }
- BN.prototype.toArray = function toArray(endian, length) {
- return this.toArrayLike(Array, endian, length);
- };
- var allocate = function allocate(ArrayType, size) {
- if (ArrayType.allocUnsafe) {
- return ArrayType.allocUnsafe(size);
- }
- return new ArrayType(size);
- };
- BN.prototype.toArrayLike = function toArrayLike(ArrayType, endian, length) {
- this._strip();
- var byteLength = this.byteLength();
- var reqLength = length || Math.max(1, byteLength);
- assert(byteLength <= reqLength, 'byte array longer than desired length');
- assert(reqLength > 0, 'Requested array length <= 0');
- var res = allocate(ArrayType, reqLength);
- var postfix = endian === 'le' ? 'LE' : 'BE';
- this['_toArrayLike' + postfix](res, byteLength);
- return res;
- };
- BN.prototype._toArrayLikeLE = function _toArrayLikeLE(res, byteLength) {
- var position = 0;
- var carry = 0;
- for (var i = 0, shift = 0; i < this.length; i++) {
- var word = this.words[i] << shift | carry;
- res[position++] = word & 0xff;
- if (position < res.length) {
- res[position++] = word >> 8 & 0xff;
- }
- if (position < res.length) {
- res[position++] = word >> 16 & 0xff;
- }
- if (shift === 6) {
- if (position < res.length) {
- res[position++] = word >> 24 & 0xff;
- }
- carry = 0;
- shift = 0;
- } else {
- carry = word >>> 24;
- shift += 2;
- }
- }
- if (position < res.length) {
- res[position++] = carry;
- while (position < res.length) {
- res[position++] = 0;
- }
- }
- };
- BN.prototype._toArrayLikeBE = function _toArrayLikeBE(res, byteLength) {
- var position = res.length - 1;
- var carry = 0;
- for (var i = 0, shift = 0; i < this.length; i++) {
- var word = this.words[i] << shift | carry;
- res[position--] = word & 0xff;
- if (position >= 0) {
- res[position--] = word >> 8 & 0xff;
- }
- if (position >= 0) {
- res[position--] = word >> 16 & 0xff;
- }
- if (shift === 6) {
- if (position >= 0) {
- res[position--] = word >> 24 & 0xff;
- }
- carry = 0;
- shift = 0;
- } else {
- carry = word >>> 24;
- shift += 2;
- }
- }
- if (position >= 0) {
- res[position--] = carry;
- while (position >= 0) {
- res[position--] = 0;
- }
- }
- };
- if (Math.clz32) {
- BN.prototype._countBits = function _countBits(w) {
- return 32 - Math.clz32(w);
- };
- } else {
- BN.prototype._countBits = function _countBits(w) {
- var t = w;
- var r = 0;
- if (t >= 0x1000) {
- r += 13;
- t >>>= 13;
- }
- if (t >= 0x40) {
- r += 7;
- t >>>= 7;
- }
- if (t >= 0x8) {
- r += 4;
- t >>>= 4;
- }
- if (t >= 0x02) {
- r += 2;
- t >>>= 2;
- }
- return r + t;
- };
- }
- BN.prototype._zeroBits = function _zeroBits(w) {
- // Short-cut
- if (w === 0) return 26;
- var t = w;
- var r = 0;
- if ((t & 0x1fff) === 0) {
- r += 13;
- t >>>= 13;
- }
- if ((t & 0x7f) === 0) {
- r += 7;
- t >>>= 7;
- }
- if ((t & 0xf) === 0) {
- r += 4;
- t >>>= 4;
- }
- if ((t & 0x3) === 0) {
- r += 2;
- t >>>= 2;
- }
- if ((t & 0x1) === 0) {
- r++;
- }
- return r;
- }; // Return number of used bits in a BN
- BN.prototype.bitLength = function bitLength() {
- var w = this.words[this.length - 1];
- var hi = this._countBits(w);
- return (this.length - 1) * 26 + hi;
- };
- function toBitArray(num) {
- var w = new Array(num.bitLength());
- for (var bit = 0; bit < w.length; bit++) {
- var off = bit / 26 | 0;
- var wbit = bit % 26;
- w[bit] = num.words[off] >>> wbit & 0x01;
- }
- return w;
- } // Number of trailing zero bits
- BN.prototype.zeroBits = function zeroBits() {
- if (this.isZero()) return 0;
- var r = 0;
- for (var i = 0; i < this.length; i++) {
- var b = this._zeroBits(this.words[i]);
- r += b;
- if (b !== 26) break;
- }
- return r;
- };
- BN.prototype.byteLength = function byteLength() {
- return Math.ceil(this.bitLength() / 8);
- };
- BN.prototype.toTwos = function toTwos(width) {
- if (this.negative !== 0) {
- return this.abs().inotn(width).iaddn(1);
- }
- return this.clone();
- };
- BN.prototype.fromTwos = function fromTwos(width) {
- if (this.testn(width - 1)) {
- return this.notn(width).iaddn(1).ineg();
- }
- return this.clone();
- };
- BN.prototype.isNeg = function isNeg() {
- return this.negative !== 0;
- }; // Return negative clone of `this`
- BN.prototype.neg = function neg() {
- return this.clone().ineg();
- };
- BN.prototype.ineg = function ineg() {
- if (!this.isZero()) {
- this.negative ^= 1;
- }
- return this;
- }; // Or `num` with `this` in-place
- BN.prototype.iuor = function iuor(num) {
- while (this.length < num.length) {
- this.words[this.length++] = 0;
- }
- for (var i = 0; i < num.length; i++) {
- this.words[i] = this.words[i] | num.words[i];
- }
- return this._strip();
- };
- BN.prototype.ior = function ior(num) {
- assert((this.negative | num.negative) === 0);
- return this.iuor(num);
- }; // Or `num` with `this`
- BN.prototype.or = function or(num) {
- if (this.length > num.length) return this.clone().ior(num);
- return num.clone().ior(this);
- };
- BN.prototype.uor = function uor(num) {
- if (this.length > num.length) return this.clone().iuor(num);
- return num.clone().iuor(this);
- }; // And `num` with `this` in-place
- BN.prototype.iuand = function iuand(num) {
- // b = min-length(num, this)
- var b;
- if (this.length > num.length) {
- b = num;
- } else {
- b = this;
- }
- for (var i = 0; i < b.length; i++) {
- this.words[i] = this.words[i] & num.words[i];
- }
- this.length = b.length;
- return this._strip();
- };
- BN.prototype.iand = function iand(num) {
- assert((this.negative | num.negative) === 0);
- return this.iuand(num);
- }; // And `num` with `this`
- BN.prototype.and = function and(num) {
- if (this.length > num.length) return this.clone().iand(num);
- return num.clone().iand(this);
- };
- BN.prototype.uand = function uand(num) {
- if (this.length > num.length) return this.clone().iuand(num);
- return num.clone().iuand(this);
- }; // Xor `num` with `this` in-place
- BN.prototype.iuxor = function iuxor(num) {
- // a.length > b.length
- var a;
- var b;
- if (this.length > num.length) {
- a = this;
- b = num;
- } else {
- a = num;
- b = this;
- }
- for (var i = 0; i < b.length; i++) {
- this.words[i] = a.words[i] ^ b.words[i];
- }
- if (this !== a) {
- for (; i < a.length; i++) {
- this.words[i] = a.words[i];
- }
- }
- this.length = a.length;
- return this._strip();
- };
- BN.prototype.ixor = function ixor(num) {
- assert((this.negative | num.negative) === 0);
- return this.iuxor(num);
- }; // Xor `num` with `this`
- BN.prototype.xor = function xor(num) {
- if (this.length > num.length) return this.clone().ixor(num);
- return num.clone().ixor(this);
- };
- BN.prototype.uxor = function uxor(num) {
- if (this.length > num.length) return this.clone().iuxor(num);
- return num.clone().iuxor(this);
- }; // Not ``this`` with ``width`` bitwidth
- BN.prototype.inotn = function inotn(width) {
- assert(typeof width === 'number' && width >= 0);
- var bytesNeeded = Math.ceil(width / 26) | 0;
- var bitsLeft = width % 26; // Extend the buffer with leading zeroes
- this._expand(bytesNeeded);
- if (bitsLeft > 0) {
- bytesNeeded--;
- } // Handle complete words
- for (var i = 0; i < bytesNeeded; i++) {
- this.words[i] = ~this.words[i] & 0x3ffffff;
- } // Handle the residue
- if (bitsLeft > 0) {
- this.words[i] = ~this.words[i] & 0x3ffffff >> 26 - bitsLeft;
- } // And remove leading zeroes
- return this._strip();
- };
- BN.prototype.notn = function notn(width) {
- return this.clone().inotn(width);
- }; // Set `bit` of `this`
- BN.prototype.setn = function setn(bit, val) {
- assert(typeof bit === 'number' && bit >= 0);
- var off = bit / 26 | 0;
- var wbit = bit % 26;
- this._expand(off + 1);
- if (val) {
- this.words[off] = this.words[off] | 1 << wbit;
- } else {
- this.words[off] = this.words[off] & ~(1 << wbit);
- }
- return this._strip();
- }; // Add `num` to `this` in-place
- BN.prototype.iadd = function iadd(num) {
- var r; // negative + positive
- if (this.negative !== 0 && num.negative === 0) {
- this.negative = 0;
- r = this.isub(num);
- this.negative ^= 1;
- return this._normSign(); // positive + negative
- } else if (this.negative === 0 && num.negative !== 0) {
- num.negative = 0;
- r = this.isub(num);
- num.negative = 1;
- return r._normSign();
- } // a.length > b.length
- var a, b;
- if (this.length > num.length) {
- a = this;
- b = num;
- } else {
- a = num;
- b = this;
- }
- var carry = 0;
- for (var i = 0; i < b.length; i++) {
- r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
- this.words[i] = r & 0x3ffffff;
- carry = r >>> 26;
- }
- for (; carry !== 0 && i < a.length; i++) {
- r = (a.words[i] | 0) + carry;
- this.words[i] = r & 0x3ffffff;
- carry = r >>> 26;
- }
- this.length = a.length;
- if (carry !== 0) {
- this.words[this.length] = carry;
- this.length++; // Copy the rest of the words
- } else if (a !== this) {
- for (; i < a.length; i++) {
- this.words[i] = a.words[i];
- }
- }
- return this;
- }; // Add `num` to `this`
- BN.prototype.add = function add(num) {
- var res;
- if (num.negative !== 0 && this.negative === 0) {
- num.negative = 0;
- res = this.sub(num);
- num.negative ^= 1;
- return res;
- } else if (num.negative === 0 && this.negative !== 0) {
- this.negative = 0;
- res = num.sub(this);
- this.negative = 1;
- return res;
- }
- if (this.length > num.length) return this.clone().iadd(num);
- return num.clone().iadd(this);
- }; // Subtract `num` from `this` in-place
- BN.prototype.isub = function isub(num) {
- // this - (-num) = this + num
- if (num.negative !== 0) {
- num.negative = 0;
- var r = this.iadd(num);
- num.negative = 1;
- return r._normSign(); // -this - num = -(this + num)
- } else if (this.negative !== 0) {
- this.negative = 0;
- this.iadd(num);
- this.negative = 1;
- return this._normSign();
- } // At this point both numbers are positive
- var cmp = this.cmp(num); // Optimization - zeroify
- if (cmp === 0) {
- this.negative = 0;
- this.length = 1;
- this.words[0] = 0;
- return this;
- } // a > b
- var a, b;
- if (cmp > 0) {
- a = this;
- b = num;
- } else {
- a = num;
- b = this;
- }
- var carry = 0;
- for (var i = 0; i < b.length; i++) {
- r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
- carry = r >> 26;
- this.words[i] = r & 0x3ffffff;
- }
- for (; carry !== 0 && i < a.length; i++) {
- r = (a.words[i] | 0) + carry;
- carry = r >> 26;
- this.words[i] = r & 0x3ffffff;
- } // Copy rest of the words
- if (carry === 0 && i < a.length && a !== this) {
- for (; i < a.length; i++) {
- this.words[i] = a.words[i];
- }
- }
- this.length = Math.max(this.length, i);
- if (a !== this) {
- this.negative = 1;
- }
- return this._strip();
- }; // Subtract `num` from `this`
- BN.prototype.sub = function sub(num) {
- return this.clone().isub(num);
- };
- function smallMulTo(self, num, out) {
- out.negative = num.negative ^ self.negative;
- var len = self.length + num.length | 0;
- out.length = len;
- len = len - 1 | 0; // Peel one iteration (compiler can't do it, because of code complexity)
- var a = self.words[0] | 0;
- var b = num.words[0] | 0;
- var r = a * b;
- var lo = r & 0x3ffffff;
- var carry = r / 0x4000000 | 0;
- out.words[0] = lo;
- for (var k = 1; k < len; k++) {
- // Sum all words with the same `i + j = k` and accumulate `ncarry`,
- // note that ncarry could be >= 0x3ffffff
- var ncarry = carry >>> 26;
- var rword = carry & 0x3ffffff;
- var maxJ = Math.min(k, num.length - 1);
- for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
- var i = k - j | 0;
- a = self.words[i] | 0;
- b = num.words[j] | 0;
- r = a * b + rword;
- ncarry += r / 0x4000000 | 0;
- rword = r & 0x3ffffff;
- }
- out.words[k] = rword | 0;
- carry = ncarry | 0;
- }
- if (carry !== 0) {
- out.words[k] = carry | 0;
- } else {
- out.length--;
- }
- return out._strip();
- } // TODO(indutny): it may be reasonable to omit it for users who don't need
- // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
- // multiplication (like elliptic secp256k1).
- var comb10MulTo = function comb10MulTo(self, num, out) {
- var a = self.words;
- var b = num.words;
- var o = out.words;
- var c = 0;
- var lo;
- var mid;
- var hi;
- var a0 = a[0] | 0;
- var al0 = a0 & 0x1fff;
- var ah0 = a0 >>> 13;
- var a1 = a[1] | 0;
- var al1 = a1 & 0x1fff;
- var ah1 = a1 >>> 13;
- var a2 = a[2] | 0;
- var al2 = a2 & 0x1fff;
- var ah2 = a2 >>> 13;
- var a3 = a[3] | 0;
- var al3 = a3 & 0x1fff;
- var ah3 = a3 >>> 13;
- var a4 = a[4] | 0;
- var al4 = a4 & 0x1fff;
- var ah4 = a4 >>> 13;
- var a5 = a[5] | 0;
- var al5 = a5 & 0x1fff;
- var ah5 = a5 >>> 13;
- var a6 = a[6] | 0;
- var al6 = a6 & 0x1fff;
- var ah6 = a6 >>> 13;
- var a7 = a[7] | 0;
- var al7 = a7 & 0x1fff;
- var ah7 = a7 >>> 13;
- var a8 = a[8] | 0;
- var al8 = a8 & 0x1fff;
- var ah8 = a8 >>> 13;
- var a9 = a[9] | 0;
- var al9 = a9 & 0x1fff;
- var ah9 = a9 >>> 13;
- var b0 = b[0] | 0;
- var bl0 = b0 & 0x1fff;
- var bh0 = b0 >>> 13;
- var b1 = b[1] | 0;
- var bl1 = b1 & 0x1fff;
- var bh1 = b1 >>> 13;
- var b2 = b[2] | 0;
- var bl2 = b2 & 0x1fff;
- var bh2 = b2 >>> 13;
- var b3 = b[3] | 0;
- var bl3 = b3 & 0x1fff;
- var bh3 = b3 >>> 13;
- var b4 = b[4] | 0;
- var bl4 = b4 & 0x1fff;
- var bh4 = b4 >>> 13;
- var b5 = b[5] | 0;
- var bl5 = b5 & 0x1fff;
- var bh5 = b5 >>> 13;
- var b6 = b[6] | 0;
- var bl6 = b6 & 0x1fff;
- var bh6 = b6 >>> 13;
- var b7 = b[7] | 0;
- var bl7 = b7 & 0x1fff;
- var bh7 = b7 >>> 13;
- var b8 = b[8] | 0;
- var bl8 = b8 & 0x1fff;
- var bh8 = b8 >>> 13;
- var b9 = b[9] | 0;
- var bl9 = b9 & 0x1fff;
- var bh9 = b9 >>> 13;
- out.negative = self.negative ^ num.negative;
- out.length = 19;
- /* k = 0 */
- lo = Math.imul(al0, bl0);
- mid = Math.imul(al0, bh0);
- mid = mid + Math.imul(ah0, bl0) | 0;
- hi = Math.imul(ah0, bh0);
- var w0 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w0 >>> 26) | 0;
- w0 &= 0x3ffffff;
- /* k = 1 */
- lo = Math.imul(al1, bl0);
- mid = Math.imul(al1, bh0);
- mid = mid + Math.imul(ah1, bl0) | 0;
- hi = Math.imul(ah1, bh0);
- lo = lo + Math.imul(al0, bl1) | 0;
- mid = mid + Math.imul(al0, bh1) | 0;
- mid = mid + Math.imul(ah0, bl1) | 0;
- hi = hi + Math.imul(ah0, bh1) | 0;
- var w1 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w1 >>> 26) | 0;
- w1 &= 0x3ffffff;
- /* k = 2 */
- lo = Math.imul(al2, bl0);
- mid = Math.imul(al2, bh0);
- mid = mid + Math.imul(ah2, bl0) | 0;
- hi = Math.imul(ah2, bh0);
- lo = lo + Math.imul(al1, bl1) | 0;
- mid = mid + Math.imul(al1, bh1) | 0;
- mid = mid + Math.imul(ah1, bl1) | 0;
- hi = hi + Math.imul(ah1, bh1) | 0;
- lo = lo + Math.imul(al0, bl2) | 0;
- mid = mid + Math.imul(al0, bh2) | 0;
- mid = mid + Math.imul(ah0, bl2) | 0;
- hi = hi + Math.imul(ah0, bh2) | 0;
- var w2 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w2 >>> 26) | 0;
- w2 &= 0x3ffffff;
- /* k = 3 */
- lo = Math.imul(al3, bl0);
- mid = Math.imul(al3, bh0);
- mid = mid + Math.imul(ah3, bl0) | 0;
- hi = Math.imul(ah3, bh0);
- lo = lo + Math.imul(al2, bl1) | 0;
- mid = mid + Math.imul(al2, bh1) | 0;
- mid = mid + Math.imul(ah2, bl1) | 0;
- hi = hi + Math.imul(ah2, bh1) | 0;
- lo = lo + Math.imul(al1, bl2) | 0;
- mid = mid + Math.imul(al1, bh2) | 0;
- mid = mid + Math.imul(ah1, bl2) | 0;
- hi = hi + Math.imul(ah1, bh2) | 0;
- lo = lo + Math.imul(al0, bl3) | 0;
- mid = mid + Math.imul(al0, bh3) | 0;
- mid = mid + Math.imul(ah0, bl3) | 0;
- hi = hi + Math.imul(ah0, bh3) | 0;
- var w3 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w3 >>> 26) | 0;
- w3 &= 0x3ffffff;
- /* k = 4 */
- lo = Math.imul(al4, bl0);
- mid = Math.imul(al4, bh0);
- mid = mid + Math.imul(ah4, bl0) | 0;
- hi = Math.imul(ah4, bh0);
- lo = lo + Math.imul(al3, bl1) | 0;
- mid = mid + Math.imul(al3, bh1) | 0;
- mid = mid + Math.imul(ah3, bl1) | 0;
- hi = hi + Math.imul(ah3, bh1) | 0;
- lo = lo + Math.imul(al2, bl2) | 0;
- mid = mid + Math.imul(al2, bh2) | 0;
- mid = mid + Math.imul(ah2, bl2) | 0;
- hi = hi + Math.imul(ah2, bh2) | 0;
- lo = lo + Math.imul(al1, bl3) | 0;
- mid = mid + Math.imul(al1, bh3) | 0;
- mid = mid + Math.imul(ah1, bl3) | 0;
- hi = hi + Math.imul(ah1, bh3) | 0;
- lo = lo + Math.imul(al0, bl4) | 0;
- mid = mid + Math.imul(al0, bh4) | 0;
- mid = mid + Math.imul(ah0, bl4) | 0;
- hi = hi + Math.imul(ah0, bh4) | 0;
- var w4 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w4 >>> 26) | 0;
- w4 &= 0x3ffffff;
- /* k = 5 */
- lo = Math.imul(al5, bl0);
- mid = Math.imul(al5, bh0);
- mid = mid + Math.imul(ah5, bl0) | 0;
- hi = Math.imul(ah5, bh0);
- lo = lo + Math.imul(al4, bl1) | 0;
- mid = mid + Math.imul(al4, bh1) | 0;
- mid = mid + Math.imul(ah4, bl1) | 0;
- hi = hi + Math.imul(ah4, bh1) | 0;
- lo = lo + Math.imul(al3, bl2) | 0;
- mid = mid + Math.imul(al3, bh2) | 0;
- mid = mid + Math.imul(ah3, bl2) | 0;
- hi = hi + Math.imul(ah3, bh2) | 0;
- lo = lo + Math.imul(al2, bl3) | 0;
- mid = mid + Math.imul(al2, bh3) | 0;
- mid = mid + Math.imul(ah2, bl3) | 0;
- hi = hi + Math.imul(ah2, bh3) | 0;
- lo = lo + Math.imul(al1, bl4) | 0;
- mid = mid + Math.imul(al1, bh4) | 0;
- mid = mid + Math.imul(ah1, bl4) | 0;
- hi = hi + Math.imul(ah1, bh4) | 0;
- lo = lo + Math.imul(al0, bl5) | 0;
- mid = mid + Math.imul(al0, bh5) | 0;
- mid = mid + Math.imul(ah0, bl5) | 0;
- hi = hi + Math.imul(ah0, bh5) | 0;
- var w5 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w5 >>> 26) | 0;
- w5 &= 0x3ffffff;
- /* k = 6 */
- lo = Math.imul(al6, bl0);
- mid = Math.imul(al6, bh0);
- mid = mid + Math.imul(ah6, bl0) | 0;
- hi = Math.imul(ah6, bh0);
- lo = lo + Math.imul(al5, bl1) | 0;
- mid = mid + Math.imul(al5, bh1) | 0;
- mid = mid + Math.imul(ah5, bl1) | 0;
- hi = hi + Math.imul(ah5, bh1) | 0;
- lo = lo + Math.imul(al4, bl2) | 0;
- mid = mid + Math.imul(al4, bh2) | 0;
- mid = mid + Math.imul(ah4, bl2) | 0;
- hi = hi + Math.imul(ah4, bh2) | 0;
- lo = lo + Math.imul(al3, bl3) | 0;
- mid = mid + Math.imul(al3, bh3) | 0;
- mid = mid + Math.imul(ah3, bl3) | 0;
- hi = hi + Math.imul(ah3, bh3) | 0;
- lo = lo + Math.imul(al2, bl4) | 0;
- mid = mid + Math.imul(al2, bh4) | 0;
- mid = mid + Math.imul(ah2, bl4) | 0;
- hi = hi + Math.imul(ah2, bh4) | 0;
- lo = lo + Math.imul(al1, bl5) | 0;
- mid = mid + Math.imul(al1, bh5) | 0;
- mid = mid + Math.imul(ah1, bl5) | 0;
- hi = hi + Math.imul(ah1, bh5) | 0;
- lo = lo + Math.imul(al0, bl6) | 0;
- mid = mid + Math.imul(al0, bh6) | 0;
- mid = mid + Math.imul(ah0, bl6) | 0;
- hi = hi + Math.imul(ah0, bh6) | 0;
- var w6 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w6 >>> 26) | 0;
- w6 &= 0x3ffffff;
- /* k = 7 */
- lo = Math.imul(al7, bl0);
- mid = Math.imul(al7, bh0);
- mid = mid + Math.imul(ah7, bl0) | 0;
- hi = Math.imul(ah7, bh0);
- lo = lo + Math.imul(al6, bl1) | 0;
- mid = mid + Math.imul(al6, bh1) | 0;
- mid = mid + Math.imul(ah6, bl1) | 0;
- hi = hi + Math.imul(ah6, bh1) | 0;
- lo = lo + Math.imul(al5, bl2) | 0;
- mid = mid + Math.imul(al5, bh2) | 0;
- mid = mid + Math.imul(ah5, bl2) | 0;
- hi = hi + Math.imul(ah5, bh2) | 0;
- lo = lo + Math.imul(al4, bl3) | 0;
- mid = mid + Math.imul(al4, bh3) | 0;
- mid = mid + Math.imul(ah4, bl3) | 0;
- hi = hi + Math.imul(ah4, bh3) | 0;
- lo = lo + Math.imul(al3, bl4) | 0;
- mid = mid + Math.imul(al3, bh4) | 0;
- mid = mid + Math.imul(ah3, bl4) | 0;
- hi = hi + Math.imul(ah3, bh4) | 0;
- lo = lo + Math.imul(al2, bl5) | 0;
- mid = mid + Math.imul(al2, bh5) | 0;
- mid = mid + Math.imul(ah2, bl5) | 0;
- hi = hi + Math.imul(ah2, bh5) | 0;
- lo = lo + Math.imul(al1, bl6) | 0;
- mid = mid + Math.imul(al1, bh6) | 0;
- mid = mid + Math.imul(ah1, bl6) | 0;
- hi = hi + Math.imul(ah1, bh6) | 0;
- lo = lo + Math.imul(al0, bl7) | 0;
- mid = mid + Math.imul(al0, bh7) | 0;
- mid = mid + Math.imul(ah0, bl7) | 0;
- hi = hi + Math.imul(ah0, bh7) | 0;
- var w7 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w7 >>> 26) | 0;
- w7 &= 0x3ffffff;
- /* k = 8 */
- lo = Math.imul(al8, bl0);
- mid = Math.imul(al8, bh0);
- mid = mid + Math.imul(ah8, bl0) | 0;
- hi = Math.imul(ah8, bh0);
- lo = lo + Math.imul(al7, bl1) | 0;
- mid = mid + Math.imul(al7, bh1) | 0;
- mid = mid + Math.imul(ah7, bl1) | 0;
- hi = hi + Math.imul(ah7, bh1) | 0;
- lo = lo + Math.imul(al6, bl2) | 0;
- mid = mid + Math.imul(al6, bh2) | 0;
- mid = mid + Math.imul(ah6, bl2) | 0;
- hi = hi + Math.imul(ah6, bh2) | 0;
- lo = lo + Math.imul(al5, bl3) | 0;
- mid = mid + Math.imul(al5, bh3) | 0;
- mid = mid + Math.imul(ah5, bl3) | 0;
- hi = hi + Math.imul(ah5, bh3) | 0;
- lo = lo + Math.imul(al4, bl4) | 0;
- mid = mid + Math.imul(al4, bh4) | 0;
- mid = mid + Math.imul(ah4, bl4) | 0;
- hi = hi + Math.imul(ah4, bh4) | 0;
- lo = lo + Math.imul(al3, bl5) | 0;
- mid = mid + Math.imul(al3, bh5) | 0;
- mid = mid + Math.imul(ah3, bl5) | 0;
- hi = hi + Math.imul(ah3, bh5) | 0;
- lo = lo + Math.imul(al2, bl6) | 0;
- mid = mid + Math.imul(al2, bh6) | 0;
- mid = mid + Math.imul(ah2, bl6) | 0;
- hi = hi + Math.imul(ah2, bh6) | 0;
- lo = lo + Math.imul(al1, bl7) | 0;
- mid = mid + Math.imul(al1, bh7) | 0;
- mid = mid + Math.imul(ah1, bl7) | 0;
- hi = hi + Math.imul(ah1, bh7) | 0;
- lo = lo + Math.imul(al0, bl8) | 0;
- mid = mid + Math.imul(al0, bh8) | 0;
- mid = mid + Math.imul(ah0, bl8) | 0;
- hi = hi + Math.imul(ah0, bh8) | 0;
- var w8 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w8 >>> 26) | 0;
- w8 &= 0x3ffffff;
- /* k = 9 */
- lo = Math.imul(al9, bl0);
- mid = Math.imul(al9, bh0);
- mid = mid + Math.imul(ah9, bl0) | 0;
- hi = Math.imul(ah9, bh0);
- lo = lo + Math.imul(al8, bl1) | 0;
- mid = mid + Math.imul(al8, bh1) | 0;
- mid = mid + Math.imul(ah8, bl1) | 0;
- hi = hi + Math.imul(ah8, bh1) | 0;
- lo = lo + Math.imul(al7, bl2) | 0;
- mid = mid + Math.imul(al7, bh2) | 0;
- mid = mid + Math.imul(ah7, bl2) | 0;
- hi = hi + Math.imul(ah7, bh2) | 0;
- lo = lo + Math.imul(al6, bl3) | 0;
- mid = mid + Math.imul(al6, bh3) | 0;
- mid = mid + Math.imul(ah6, bl3) | 0;
- hi = hi + Math.imul(ah6, bh3) | 0;
- lo = lo + Math.imul(al5, bl4) | 0;
- mid = mid + Math.imul(al5, bh4) | 0;
- mid = mid + Math.imul(ah5, bl4) | 0;
- hi = hi + Math.imul(ah5, bh4) | 0;
- lo = lo + Math.imul(al4, bl5) | 0;
- mid = mid + Math.imul(al4, bh5) | 0;
- mid = mid + Math.imul(ah4, bl5) | 0;
- hi = hi + Math.imul(ah4, bh5) | 0;
- lo = lo + Math.imul(al3, bl6) | 0;
- mid = mid + Math.imul(al3, bh6) | 0;
- mid = mid + Math.imul(ah3, bl6) | 0;
- hi = hi + Math.imul(ah3, bh6) | 0;
- lo = lo + Math.imul(al2, bl7) | 0;
- mid = mid + Math.imul(al2, bh7) | 0;
- mid = mid + Math.imul(ah2, bl7) | 0;
- hi = hi + Math.imul(ah2, bh7) | 0;
- lo = lo + Math.imul(al1, bl8) | 0;
- mid = mid + Math.imul(al1, bh8) | 0;
- mid = mid + Math.imul(ah1, bl8) | 0;
- hi = hi + Math.imul(ah1, bh8) | 0;
- lo = lo + Math.imul(al0, bl9) | 0;
- mid = mid + Math.imul(al0, bh9) | 0;
- mid = mid + Math.imul(ah0, bl9) | 0;
- hi = hi + Math.imul(ah0, bh9) | 0;
- var w9 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w9 >>> 26) | 0;
- w9 &= 0x3ffffff;
- /* k = 10 */
- lo = Math.imul(al9, bl1);
- mid = Math.imul(al9, bh1);
- mid = mid + Math.imul(ah9, bl1) | 0;
- hi = Math.imul(ah9, bh1);
- lo = lo + Math.imul(al8, bl2) | 0;
- mid = mid + Math.imul(al8, bh2) | 0;
- mid = mid + Math.imul(ah8, bl2) | 0;
- hi = hi + Math.imul(ah8, bh2) | 0;
- lo = lo + Math.imul(al7, bl3) | 0;
- mid = mid + Math.imul(al7, bh3) | 0;
- mid = mid + Math.imul(ah7, bl3) | 0;
- hi = hi + Math.imul(ah7, bh3) | 0;
- lo = lo + Math.imul(al6, bl4) | 0;
- mid = mid + Math.imul(al6, bh4) | 0;
- mid = mid + Math.imul(ah6, bl4) | 0;
- hi = hi + Math.imul(ah6, bh4) | 0;
- lo = lo + Math.imul(al5, bl5) | 0;
- mid = mid + Math.imul(al5, bh5) | 0;
- mid = mid + Math.imul(ah5, bl5) | 0;
- hi = hi + Math.imul(ah5, bh5) | 0;
- lo = lo + Math.imul(al4, bl6) | 0;
- mid = mid + Math.imul(al4, bh6) | 0;
- mid = mid + Math.imul(ah4, bl6) | 0;
- hi = hi + Math.imul(ah4, bh6) | 0;
- lo = lo + Math.imul(al3, bl7) | 0;
- mid = mid + Math.imul(al3, bh7) | 0;
- mid = mid + Math.imul(ah3, bl7) | 0;
- hi = hi + Math.imul(ah3, bh7) | 0;
- lo = lo + Math.imul(al2, bl8) | 0;
- mid = mid + Math.imul(al2, bh8) | 0;
- mid = mid + Math.imul(ah2, bl8) | 0;
- hi = hi + Math.imul(ah2, bh8) | 0;
- lo = lo + Math.imul(al1, bl9) | 0;
- mid = mid + Math.imul(al1, bh9) | 0;
- mid = mid + Math.imul(ah1, bl9) | 0;
- hi = hi + Math.imul(ah1, bh9) | 0;
- var w10 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w10 >>> 26) | 0;
- w10 &= 0x3ffffff;
- /* k = 11 */
- lo = Math.imul(al9, bl2);
- mid = Math.imul(al9, bh2);
- mid = mid + Math.imul(ah9, bl2) | 0;
- hi = Math.imul(ah9, bh2);
- lo = lo + Math.imul(al8, bl3) | 0;
- mid = mid + Math.imul(al8, bh3) | 0;
- mid = mid + Math.imul(ah8, bl3) | 0;
- hi = hi + Math.imul(ah8, bh3) | 0;
- lo = lo + Math.imul(al7, bl4) | 0;
- mid = mid + Math.imul(al7, bh4) | 0;
- mid = mid + Math.imul(ah7, bl4) | 0;
- hi = hi + Math.imul(ah7, bh4) | 0;
- lo = lo + Math.imul(al6, bl5) | 0;
- mid = mid + Math.imul(al6, bh5) | 0;
- mid = mid + Math.imul(ah6, bl5) | 0;
- hi = hi + Math.imul(ah6, bh5) | 0;
- lo = lo + Math.imul(al5, bl6) | 0;
- mid = mid + Math.imul(al5, bh6) | 0;
- mid = mid + Math.imul(ah5, bl6) | 0;
- hi = hi + Math.imul(ah5, bh6) | 0;
- lo = lo + Math.imul(al4, bl7) | 0;
- mid = mid + Math.imul(al4, bh7) | 0;
- mid = mid + Math.imul(ah4, bl7) | 0;
- hi = hi + Math.imul(ah4, bh7) | 0;
- lo = lo + Math.imul(al3, bl8) | 0;
- mid = mid + Math.imul(al3, bh8) | 0;
- mid = mid + Math.imul(ah3, bl8) | 0;
- hi = hi + Math.imul(ah3, bh8) | 0;
- lo = lo + Math.imul(al2, bl9) | 0;
- mid = mid + Math.imul(al2, bh9) | 0;
- mid = mid + Math.imul(ah2, bl9) | 0;
- hi = hi + Math.imul(ah2, bh9) | 0;
- var w11 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w11 >>> 26) | 0;
- w11 &= 0x3ffffff;
- /* k = 12 */
- lo = Math.imul(al9, bl3);
- mid = Math.imul(al9, bh3);
- mid = mid + Math.imul(ah9, bl3) | 0;
- hi = Math.imul(ah9, bh3);
- lo = lo + Math.imul(al8, bl4) | 0;
- mid = mid + Math.imul(al8, bh4) | 0;
- mid = mid + Math.imul(ah8, bl4) | 0;
- hi = hi + Math.imul(ah8, bh4) | 0;
- lo = lo + Math.imul(al7, bl5) | 0;
- mid = mid + Math.imul(al7, bh5) | 0;
- mid = mid + Math.imul(ah7, bl5) | 0;
- hi = hi + Math.imul(ah7, bh5) | 0;
- lo = lo + Math.imul(al6, bl6) | 0;
- mid = mid + Math.imul(al6, bh6) | 0;
- mid = mid + Math.imul(ah6, bl6) | 0;
- hi = hi + Math.imul(ah6, bh6) | 0;
- lo = lo + Math.imul(al5, bl7) | 0;
- mid = mid + Math.imul(al5, bh7) | 0;
- mid = mid + Math.imul(ah5, bl7) | 0;
- hi = hi + Math.imul(ah5, bh7) | 0;
- lo = lo + Math.imul(al4, bl8) | 0;
- mid = mid + Math.imul(al4, bh8) | 0;
- mid = mid + Math.imul(ah4, bl8) | 0;
- hi = hi + Math.imul(ah4, bh8) | 0;
- lo = lo + Math.imul(al3, bl9) | 0;
- mid = mid + Math.imul(al3, bh9) | 0;
- mid = mid + Math.imul(ah3, bl9) | 0;
- hi = hi + Math.imul(ah3, bh9) | 0;
- var w12 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w12 >>> 26) | 0;
- w12 &= 0x3ffffff;
- /* k = 13 */
- lo = Math.imul(al9, bl4);
- mid = Math.imul(al9, bh4);
- mid = mid + Math.imul(ah9, bl4) | 0;
- hi = Math.imul(ah9, bh4);
- lo = lo + Math.imul(al8, bl5) | 0;
- mid = mid + Math.imul(al8, bh5) | 0;
- mid = mid + Math.imul(ah8, bl5) | 0;
- hi = hi + Math.imul(ah8, bh5) | 0;
- lo = lo + Math.imul(al7, bl6) | 0;
- mid = mid + Math.imul(al7, bh6) | 0;
- mid = mid + Math.imul(ah7, bl6) | 0;
- hi = hi + Math.imul(ah7, bh6) | 0;
- lo = lo + Math.imul(al6, bl7) | 0;
- mid = mid + Math.imul(al6, bh7) | 0;
- mid = mid + Math.imul(ah6, bl7) | 0;
- hi = hi + Math.imul(ah6, bh7) | 0;
- lo = lo + Math.imul(al5, bl8) | 0;
- mid = mid + Math.imul(al5, bh8) | 0;
- mid = mid + Math.imul(ah5, bl8) | 0;
- hi = hi + Math.imul(ah5, bh8) | 0;
- lo = lo + Math.imul(al4, bl9) | 0;
- mid = mid + Math.imul(al4, bh9) | 0;
- mid = mid + Math.imul(ah4, bl9) | 0;
- hi = hi + Math.imul(ah4, bh9) | 0;
- var w13 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w13 >>> 26) | 0;
- w13 &= 0x3ffffff;
- /* k = 14 */
- lo = Math.imul(al9, bl5);
- mid = Math.imul(al9, bh5);
- mid = mid + Math.imul(ah9, bl5) | 0;
- hi = Math.imul(ah9, bh5);
- lo = lo + Math.imul(al8, bl6) | 0;
- mid = mid + Math.imul(al8, bh6) | 0;
- mid = mid + Math.imul(ah8, bl6) | 0;
- hi = hi + Math.imul(ah8, bh6) | 0;
- lo = lo + Math.imul(al7, bl7) | 0;
- mid = mid + Math.imul(al7, bh7) | 0;
- mid = mid + Math.imul(ah7, bl7) | 0;
- hi = hi + Math.imul(ah7, bh7) | 0;
- lo = lo + Math.imul(al6, bl8) | 0;
- mid = mid + Math.imul(al6, bh8) | 0;
- mid = mid + Math.imul(ah6, bl8) | 0;
- hi = hi + Math.imul(ah6, bh8) | 0;
- lo = lo + Math.imul(al5, bl9) | 0;
- mid = mid + Math.imul(al5, bh9) | 0;
- mid = mid + Math.imul(ah5, bl9) | 0;
- hi = hi + Math.imul(ah5, bh9) | 0;
- var w14 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w14 >>> 26) | 0;
- w14 &= 0x3ffffff;
- /* k = 15 */
- lo = Math.imul(al9, bl6);
- mid = Math.imul(al9, bh6);
- mid = mid + Math.imul(ah9, bl6) | 0;
- hi = Math.imul(ah9, bh6);
- lo = lo + Math.imul(al8, bl7) | 0;
- mid = mid + Math.imul(al8, bh7) | 0;
- mid = mid + Math.imul(ah8, bl7) | 0;
- hi = hi + Math.imul(ah8, bh7) | 0;
- lo = lo + Math.imul(al7, bl8) | 0;
- mid = mid + Math.imul(al7, bh8) | 0;
- mid = mid + Math.imul(ah7, bl8) | 0;
- hi = hi + Math.imul(ah7, bh8) | 0;
- lo = lo + Math.imul(al6, bl9) | 0;
- mid = mid + Math.imul(al6, bh9) | 0;
- mid = mid + Math.imul(ah6, bl9) | 0;
- hi = hi + Math.imul(ah6, bh9) | 0;
- var w15 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w15 >>> 26) | 0;
- w15 &= 0x3ffffff;
- /* k = 16 */
- lo = Math.imul(al9, bl7);
- mid = Math.imul(al9, bh7);
- mid = mid + Math.imul(ah9, bl7) | 0;
- hi = Math.imul(ah9, bh7);
- lo = lo + Math.imul(al8, bl8) | 0;
- mid = mid + Math.imul(al8, bh8) | 0;
- mid = mid + Math.imul(ah8, bl8) | 0;
- hi = hi + Math.imul(ah8, bh8) | 0;
- lo = lo + Math.imul(al7, bl9) | 0;
- mid = mid + Math.imul(al7, bh9) | 0;
- mid = mid + Math.imul(ah7, bl9) | 0;
- hi = hi + Math.imul(ah7, bh9) | 0;
- var w16 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w16 >>> 26) | 0;
- w16 &= 0x3ffffff;
- /* k = 17 */
- lo = Math.imul(al9, bl8);
- mid = Math.imul(al9, bh8);
- mid = mid + Math.imul(ah9, bl8) | 0;
- hi = Math.imul(ah9, bh8);
- lo = lo + Math.imul(al8, bl9) | 0;
- mid = mid + Math.imul(al8, bh9) | 0;
- mid = mid + Math.imul(ah8, bl9) | 0;
- hi = hi + Math.imul(ah8, bh9) | 0;
- var w17 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w17 >>> 26) | 0;
- w17 &= 0x3ffffff;
- /* k = 18 */
- lo = Math.imul(al9, bl9);
- mid = Math.imul(al9, bh9);
- mid = mid + Math.imul(ah9, bl9) | 0;
- hi = Math.imul(ah9, bh9);
- var w18 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;
- c = (hi + (mid >>> 13) | 0) + (w18 >>> 26) | 0;
- w18 &= 0x3ffffff;
- o[0] = w0;
- o[1] = w1;
- o[2] = w2;
- o[3] = w3;
- o[4] = w4;
- o[5] = w5;
- o[6] = w6;
- o[7] = w7;
- o[8] = w8;
- o[9] = w9;
- o[10] = w10;
- o[11] = w11;
- o[12] = w12;
- o[13] = w13;
- o[14] = w14;
- o[15] = w15;
- o[16] = w16;
- o[17] = w17;
- o[18] = w18;
- if (c !== 0) {
- o[19] = c;
- out.length++;
- }
- return out;
- }; // Polyfill comb
- if (!Math.imul) {
- comb10MulTo = smallMulTo;
- }
- function bigMulTo(self, num, out) {
- out.negative = num.negative ^ self.negative;
- out.length = self.length + num.length;
- var carry = 0;
- var hncarry = 0;
- for (var k = 0; k < out.length - 1; k++) {
- // Sum all words with the same `i + j = k` and accumulate `ncarry`,
- // note that ncarry could be >= 0x3ffffff
- var ncarry = hncarry;
- hncarry = 0;
- var rword = carry & 0x3ffffff;
- var maxJ = Math.min(k, num.length - 1);
- for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
- var i = k - j;
- var a = self.words[i] | 0;
- var b = num.words[j] | 0;
- var r = a * b;
- var lo = r & 0x3ffffff;
- ncarry = ncarry + (r / 0x4000000 | 0) | 0;
- lo = lo + rword | 0;
- rword = lo & 0x3ffffff;
- ncarry = ncarry + (lo >>> 26) | 0;
- hncarry += ncarry >>> 26;
- ncarry &= 0x3ffffff;
- }
- out.words[k] = rword;
- carry = ncarry;
- ncarry = hncarry;
- }
- if (carry !== 0) {
- out.words[k] = carry;
- } else {
- out.length--;
- }
- return out._strip();
- }
- function jumboMulTo(self, num, out) {
- // Temporary disable, see https://github.com/indutny/bn.js/issues/211
- // var fftm = new FFTM();
- // return fftm.mulp(self, num, out);
- return bigMulTo(self, num, out);
- }
- BN.prototype.mulTo = function mulTo(num, out) {
- var res;
- var len = this.length + num.length;
- if (this.length === 10 && num.length === 10) {
- res = comb10MulTo(this, num, out);
- } else if (len < 63) {
- res = smallMulTo(this, num, out);
- } else if (len < 1024) {
- res = bigMulTo(this, num, out);
- } else {
- res = jumboMulTo(this, num, out);
- }
- return res;
- }; // Cooley-Tukey algorithm for FFT
- // slightly revisited to rely on looping instead of recursion
- function FFTM(x, y) {
- this.x = x;
- this.y = y;
- }
- FFTM.prototype.makeRBT = function makeRBT(N) {
- var t = new Array(N);
- var l = BN.prototype._countBits(N) - 1;
- for (var i = 0; i < N; i++) {
- t[i] = this.revBin(i, l, N);
- }
- return t;
- }; // Returns binary-reversed representation of `x`
- FFTM.prototype.revBin = function revBin(x, l, N) {
- if (x === 0 || x === N - 1) return x;
- var rb = 0;
- for (var i = 0; i < l; i++) {
- rb |= (x & 1) << l - i - 1;
- x >>= 1;
- }
- return rb;
- }; // Performs "tweedling" phase, therefore 'emulating'
- // behaviour of the recursive algorithm
- FFTM.prototype.permute = function permute(rbt, rws, iws, rtws, itws, N) {
- for (var i = 0; i < N; i++) {
- rtws[i] = rws[rbt[i]];
- itws[i] = iws[rbt[i]];
- }
- };
- FFTM.prototype.transform = function transform(rws, iws, rtws, itws, N, rbt) {
- this.permute(rbt, rws, iws, rtws, itws, N);
- for (var s = 1; s < N; s <<= 1) {
- var l = s << 1;
- var rtwdf = Math.cos(2 * Math.PI / l);
- var itwdf = Math.sin(2 * Math.PI / l);
- for (var p = 0; p < N; p += l) {
- var rtwdf_ = rtwdf;
- var itwdf_ = itwdf;
- for (var j = 0; j < s; j++) {
- var re = rtws[p + j];
- var ie = itws[p + j];
- var ro = rtws[p + j + s];
- var io = itws[p + j + s];
- var rx = rtwdf_ * ro - itwdf_ * io;
- io = rtwdf_ * io + itwdf_ * ro;
- ro = rx;
- rtws[p + j] = re + ro;
- itws[p + j] = ie + io;
- rtws[p + j + s] = re - ro;
- itws[p + j + s] = ie - io;
- /* jshint maxdepth : false */
- if (j !== l) {
- rx = rtwdf * rtwdf_ - itwdf * itwdf_;
- itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
- rtwdf_ = rx;
- }
- }
- }
- }
- };
- FFTM.prototype.guessLen13b = function guessLen13b(n, m) {
- var N = Math.max(m, n) | 1;
- var odd = N & 1;
- var i = 0;
- for (N = N / 2 | 0; N; N = N >>> 1) {
- i++;
- }
- return 1 << i + 1 + odd;
- };
- FFTM.prototype.conjugate = function conjugate(rws, iws, N) {
- if (N <= 1) return;
- for (var i = 0; i < N / 2; i++) {
- var t = rws[i];
- rws[i] = rws[N - i - 1];
- rws[N - i - 1] = t;
- t = iws[i];
- iws[i] = -iws[N - i - 1];
- iws[N - i - 1] = -t;
- }
- };
- FFTM.prototype.normalize13b = function normalize13b(ws, N) {
- var carry = 0;
- for (var i = 0; i < N / 2; i++) {
- var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + Math.round(ws[2 * i] / N) + carry;
- ws[i] = w & 0x3ffffff;
- if (w < 0x4000000) {
- carry = 0;
- } else {
- carry = w / 0x4000000 | 0;
- }
- }
- return ws;
- };
- FFTM.prototype.convert13b = function convert13b(ws, len, rws, N) {
- var carry = 0;
- for (var i = 0; i < len; i++) {
- carry = carry + (ws[i] | 0);
- rws[2 * i] = carry & 0x1fff;
- carry = carry >>> 13;
- rws[2 * i + 1] = carry & 0x1fff;
- carry = carry >>> 13;
- } // Pad with zeroes
- for (i = 2 * len; i < N; ++i) {
- rws[i] = 0;
- }
- assert(carry === 0);
- assert((carry & ~0x1fff) === 0);
- };
- FFTM.prototype.stub = function stub(N) {
- var ph = new Array(N);
- for (var i = 0; i < N; i++) {
- ph[i] = 0;
- }
- return ph;
- };
- FFTM.prototype.mulp = function mulp(x, y, out) {
- var N = 2 * this.guessLen13b(x.length, y.length);
- var rbt = this.makeRBT(N);
- var _ = this.stub(N);
- var rws = new Array(N);
- var rwst = new Array(N);
- var iwst = new Array(N);
- var nrws = new Array(N);
- var nrwst = new Array(N);
- var niwst = new Array(N);
- var rmws = out.words;
- rmws.length = N;
- this.convert13b(x.words, x.length, rws, N);
- this.convert13b(y.words, y.length, nrws, N);
- this.transform(rws, _, rwst, iwst, N, rbt);
- this.transform(nrws, _, nrwst, niwst, N, rbt);
- for (var i = 0; i < N; i++) {
- var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
- iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
- rwst[i] = rx;
- }
- this.conjugate(rwst, iwst, N);
- this.transform(rwst, iwst, rmws, _, N, rbt);
- this.conjugate(rmws, _, N);
- this.normalize13b(rmws, N);
- out.negative = x.negative ^ y.negative;
- out.length = x.length + y.length;
- return out._strip();
- }; // Multiply `this` by `num`
- BN.prototype.mul = function mul(num) {
- var out = new BN(null);
- out.words = new Array(this.length + num.length);
- return this.mulTo(num, out);
- }; // Multiply employing FFT
- BN.prototype.mulf = function mulf(num) {
- var out = new BN(null);
- out.words = new Array(this.length + num.length);
- return jumboMulTo(this, num, out);
- }; // In-place Multiplication
- BN.prototype.imul = function imul(num) {
- return this.clone().mulTo(num, this);
- };
- BN.prototype.imuln = function imuln(num) {
- var isNegNum = num < 0;
- if (isNegNum) num = -num;
- assert(typeof num === 'number');
- assert(num < 0x4000000); // Carry
- var carry = 0;
- for (var i = 0; i < this.length; i++) {
- var w = (this.words[i] | 0) * num;
- var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
- carry >>= 26;
- carry += w / 0x4000000 | 0; // NOTE: lo is 27bit maximum
- carry += lo >>> 26;
- this.words[i] = lo & 0x3ffffff;
- }
- if (carry !== 0) {
- this.words[i] = carry;
- this.length++;
- }
- return isNegNum ? this.ineg() : this;
- };
- BN.prototype.muln = function muln(num) {
- return this.clone().imuln(num);
- }; // `this` * `this`
- BN.prototype.sqr = function sqr() {
- return this.mul(this);
- }; // `this` * `this` in-place
- BN.prototype.isqr = function isqr() {
- return this.imul(this.clone());
- }; // Math.pow(`this`, `num`)
- BN.prototype.pow = function pow(num) {
- var w = toBitArray(num);
- if (w.length === 0) return new BN(1); // Skip leading zeroes
- var res = this;
- for (var i = 0; i < w.length; i++, res = res.sqr()) {
- if (w[i] !== 0) break;
- }
- if (++i < w.length) {
- for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
- if (w[i] === 0) continue;
- res = res.mul(q);
- }
- }
- return res;
- }; // Shift-left in-place
- BN.prototype.iushln = function iushln(bits) {
- assert(typeof bits === 'number' && bits >= 0);
- var r = bits % 26;
- var s = (bits - r) / 26;
- var carryMask = 0x3ffffff >>> 26 - r << 26 - r;
- var i;
- if (r !== 0) {
- var carry = 0;
- for (i = 0; i < this.length; i++) {
- var newCarry = this.words[i] & carryMask;
- var c = (this.words[i] | 0) - newCarry << r;
- this.words[i] = c | carry;
- carry = newCarry >>> 26 - r;
- }
- if (carry) {
- this.words[i] = carry;
- this.length++;
- }
- }
- if (s !== 0) {
- for (i = this.length - 1; i >= 0; i--) {
- this.words[i + s] = this.words[i];
- }
- for (i = 0; i < s; i++) {
- this.words[i] = 0;
- }
- this.length += s;
- }
- return this._strip();
- };
- BN.prototype.ishln = function ishln(bits) {
- // TODO(indutny): implement me
- assert(this.negative === 0);
- return this.iushln(bits);
- }; // Shift-right in-place
- // NOTE: `hint` is a lowest bit before trailing zeroes
- // NOTE: if `extended` is present - it will be filled with destroyed bits
- BN.prototype.iushrn = function iushrn(bits, hint, extended) {
- assert(typeof bits === 'number' && bits >= 0);
- var h;
- if (hint) {
- h = (hint - hint % 26) / 26;
- } else {
- h = 0;
- }
- var r = bits % 26;
- var s = Math.min((bits - r) / 26, this.length);
- var mask = 0x3ffffff ^ 0x3ffffff >>> r << r;
- var maskedWords = extended;
- h -= s;
- h = Math.max(0, h); // Extended mode, copy masked part
- if (maskedWords) {
- for (var i = 0; i < s; i++) {
- maskedWords.words[i] = this.words[i];
- }
- maskedWords.length = s;
- }
- if (s === 0) {// No-op, we should not move anything at all
- } else if (this.length > s) {
- this.length -= s;
- for (i = 0; i < this.length; i++) {
- this.words[i] = this.words[i + s];
- }
- } else {
- this.words[0] = 0;
- this.length = 1;
- }
- var carry = 0;
- for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
- var word = this.words[i] | 0;
- this.words[i] = carry << 26 - r | word >>> r;
- carry = word & mask;
- } // Push carried bits as a mask
- if (maskedWords && carry !== 0) {
- maskedWords.words[maskedWords.length++] = carry;
- }
- if (this.length === 0) {
- this.words[0] = 0;
- this.length = 1;
- }
- return this._strip();
- };
- BN.prototype.ishrn = function ishrn(bits, hint, extended) {
- // TODO(indutny): implement me
- assert(this.negative === 0);
- return this.iushrn(bits, hint, extended);
- }; // Shift-left
- BN.prototype.shln = function shln(bits) {
- return this.clone().ishln(bits);
- };
- BN.prototype.ushln = function ushln(bits) {
- return this.clone().iushln(bits);
- }; // Shift-right
- BN.prototype.shrn = function shrn(bits) {
- return this.clone().ishrn(bits);
- };
- BN.prototype.ushrn = function ushrn(bits) {
- return this.clone().iushrn(bits);
- }; // Test if n bit is set
- BN.prototype.testn = function testn(bit) {
- assert(typeof bit === 'number' && bit >= 0);
- var r = bit % 26;
- var s = (bit - r) / 26;
- var q = 1 << r; // Fast case: bit is much higher than all existing words
- if (this.length <= s) return false; // Check bit and return
- var w = this.words[s];
- return !!(w & q);
- }; // Return only lowers bits of number (in-place)
- BN.prototype.imaskn = function imaskn(bits) {
- assert(typeof bits === 'number' && bits >= 0);
- var r = bits % 26;
- var s = (bits - r) / 26;
- assert(this.negative === 0, 'imaskn works only with positive numbers');
- if (this.length <= s) {
- return this;
- }
- if (r !== 0) {
- s++;
- }
- this.length = Math.min(s, this.length);
- if (r !== 0) {
- var mask = 0x3ffffff ^ 0x3ffffff >>> r << r;
- this.words[this.length - 1] &= mask;
- }
- return this._strip();
- }; // Return only lowers bits of number
- BN.prototype.maskn = function maskn(bits) {
- return this.clone().imaskn(bits);
- }; // Add plain number `num` to `this`
- BN.prototype.iaddn = function iaddn(num) {
- assert(typeof num === 'number');
- assert(num < 0x4000000);
- if (num < 0) return this.isubn(-num); // Possible sign change
- if (this.negative !== 0) {
- if (this.length === 1 && (this.words[0] | 0) <= num) {
- this.words[0] = num - (this.words[0] | 0);
- this.negative = 0;
- return this;
- }
- this.negative = 0;
- this.isubn(num);
- this.negative = 1;
- return this;
- } // Add without checks
- return this._iaddn(num);
- };
- BN.prototype._iaddn = function _iaddn(num) {
- this.words[0] += num; // Carry
- for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
- this.words[i] -= 0x4000000;
- if (i === this.length - 1) {
- this.words[i + 1] = 1;
- } else {
- this.words[i + 1]++;
- }
- }
- this.length = Math.max(this.length, i + 1);
- return this;
- }; // Subtract plain number `num` from `this`
- BN.prototype.isubn = function isubn(num) {
- assert(typeof num === 'number');
- assert(num < 0x4000000);
- if (num < 0) return this.iaddn(-num);
- if (this.negative !== 0) {
- this.negative = 0;
- this.iaddn(num);
- this.negative = 1;
- return this;
- }
- this.words[0] -= num;
- if (this.length === 1 && this.words[0] < 0) {
- this.words[0] = -this.words[0];
- this.negative = 1;
- } else {
- // Carry
- for (var i = 0; i < this.length && this.words[i] < 0; i++) {
- this.words[i] += 0x4000000;
- this.words[i + 1] -= 1;
- }
- }
- return this._strip();
- };
- BN.prototype.addn = function addn(num) {
- return this.clone().iaddn(num);
- };
- BN.prototype.subn = function subn(num) {
- return this.clone().isubn(num);
- };
- BN.prototype.iabs = function iabs() {
- this.negative = 0;
- return this;
- };
- BN.prototype.abs = function abs() {
- return this.clone().iabs();
- };
- BN.prototype._ishlnsubmul = function _ishlnsubmul(num, mul, shift) {
- var len = num.length + shift;
- var i;
- this._expand(len);
- var w;
- var carry = 0;
- for (i = 0; i < num.length; i++) {
- w = (this.words[i + shift] | 0) + carry;
- var right = (num.words[i] | 0) * mul;
- w -= right & 0x3ffffff;
- carry = (w >> 26) - (right / 0x4000000 | 0);
- this.words[i + shift] = w & 0x3ffffff;
- }
- for (; i < this.length - shift; i++) {
- w = (this.words[i + shift] | 0) + carry;
- carry = w >> 26;
- this.words[i + shift] = w & 0x3ffffff;
- }
- if (carry === 0) return this._strip(); // Subtraction overflow
- assert(carry === -1);
- carry = 0;
- for (i = 0; i < this.length; i++) {
- w = -(this.words[i] | 0) + carry;
- carry = w >> 26;
- this.words[i] = w & 0x3ffffff;
- }
- this.negative = 1;
- return this._strip();
- };
- BN.prototype._wordDiv = function _wordDiv(num, mode) {
- var shift = this.length - num.length;
- var a = this.clone();
- var b = num; // Normalize
- var bhi = b.words[b.length - 1] | 0;
- var bhiBits = this._countBits(bhi);
- shift = 26 - bhiBits;
- if (shift !== 0) {
- b = b.ushln(shift);
- a.iushln(shift);
- bhi = b.words[b.length - 1] | 0;
- } // Initialize quotient
- var m = a.length - b.length;
- var q;
- if (mode !== 'mod') {
- q = new BN(null);
- q.length = m + 1;
- q.words = new Array(q.length);
- for (var i = 0; i < q.length; i++) {
- q.words[i] = 0;
- }
- }
- var diff = a.clone()._ishlnsubmul(b, 1, m);
- if (diff.negative === 0) {
- a = diff;
- if (q) {
- q.words[m] = 1;
- }
- }
- for (var j = m - 1; j >= 0; j--) {
- var qj = (a.words[b.length + j] | 0) * 0x4000000 + (a.words[b.length + j - 1] | 0); // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
- // (0x7ffffff)
- qj = Math.min(qj / bhi | 0, 0x3ffffff);
- a._ishlnsubmul(b, qj, j);
- while (a.negative !== 0) {
- qj--;
- a.negative = 0;
- a._ishlnsubmul(b, 1, j);
- if (!a.isZero()) {
- a.negative ^= 1;
- }
- }
- if (q) {
- q.words[j] = qj;
- }
- }
- if (q) {
- q._strip();
- }
- a._strip(); // Denormalize
- if (mode !== 'div' && shift !== 0) {
- a.iushrn(shift);
- }
- return {
- div: q || null,
- mod: a
- };
- }; // NOTE: 1) `mode` can be set to `mod` to request mod only,
- // to `div` to request div only, or be absent to
- // request both div & mod
- // 2) `positive` is true if unsigned mod is requested
- BN.prototype.divmod = function divmod(num, mode, positive) {
- assert(!num.isZero());
- if (this.isZero()) {
- return {
- div: new BN(0),
- mod: new BN(0)
- };
- }
- var div, mod, res;
- if (this.negative !== 0 && num.negative === 0) {
- res = this.neg().divmod(num, mode);
- if (mode !== 'mod') {
- div = res.div.neg();
- }
- if (mode !== 'div') {
- mod = res.mod.neg();
- if (positive && mod.negative !== 0) {
- mod.iadd(num);
- }
- }
- return {
- div: div,
- mod: mod
- };
- }
- if (this.negative === 0 && num.negative !== 0) {
- res = this.divmod(num.neg(), mode);
- if (mode !== 'mod') {
- div = res.div.neg();
- }
- return {
- div: div,
- mod: res.mod
- };
- }
- if ((this.negative & num.negative) !== 0) {
- res = this.neg().divmod(num.neg(), mode);
- if (mode !== 'div') {
- mod = res.mod.neg();
- if (positive && mod.negative !== 0) {
- mod.isub(num);
- }
- }
- return {
- div: res.div,
- mod: mod
- };
- } // Both numbers are positive at this point
- // Strip both numbers to approximate shift value
- if (num.length > this.length || this.cmp(num) < 0) {
- return {
- div: new BN(0),
- mod: this
- };
- } // Very short reduction
- if (num.length === 1) {
- if (mode === 'div') {
- return {
- div: this.divn(num.words[0]),
- mod: null
- };
- }
- if (mode === 'mod') {
- return {
- div: null,
- mod: new BN(this.modrn(num.words[0]))
- };
- }
- return {
- div: this.divn(num.words[0]),
- mod: new BN(this.modrn(num.words[0]))
- };
- }
- return this._wordDiv(num, mode);
- }; // Find `this` / `num`
- BN.prototype.div = function div(num) {
- return this.divmod(num, 'div', false).div;
- }; // Find `this` % `num`
- BN.prototype.mod = function mod(num) {
- return this.divmod(num, 'mod', false).mod;
- };
- BN.prototype.umod = function umod(num) {
- return this.divmod(num, 'mod', true).mod;
- }; // Find Round(`this` / `num`)
- BN.prototype.divRound = function divRound(num) {
- var dm = this.divmod(num); // Fast case - exact division
- if (dm.mod.isZero()) return dm.div;
- var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
- var half = num.ushrn(1);
- var r2 = num.andln(1);
- var cmp = mod.cmp(half); // Round down
- if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; // Round up
- return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
- };
- BN.prototype.modrn = function modrn(num) {
- var isNegNum = num < 0;
- if (isNegNum) num = -num;
- assert(num <= 0x3ffffff);
- var p = (1 << 26) % num;
- var acc = 0;
- for (var i = this.length - 1; i >= 0; i--) {
- acc = (p * acc + (this.words[i] | 0)) % num;
- }
- return isNegNum ? -acc : acc;
- }; // WARNING: DEPRECATED
- BN.prototype.modn = function modn(num) {
- return this.modrn(num);
- }; // In-place division by number
- BN.prototype.idivn = function idivn(num) {
- var isNegNum = num < 0;
- if (isNegNum) num = -num;
- assert(num <= 0x3ffffff);
- var carry = 0;
- for (var i = this.length - 1; i >= 0; i--) {
- var w = (this.words[i] | 0) + carry * 0x4000000;
- this.words[i] = w / num | 0;
- carry = w % num;
- }
- this._strip();
- return isNegNum ? this.ineg() : this;
- };
- BN.prototype.divn = function divn(num) {
- return this.clone().idivn(num);
- };
- BN.prototype.egcd = function egcd(p) {
- assert(p.negative === 0);
- assert(!p.isZero());
- var x = this;
- var y = p.clone();
- if (x.negative !== 0) {
- x = x.umod(p);
- } else {
- x = x.clone();
- } // A * x + B * y = x
- var A = new BN(1);
- var B = new BN(0); // C * x + D * y = y
- var C = new BN(0);
- var D = new BN(1);
- var g = 0;
- while (x.isEven() && y.isEven()) {
- x.iushrn(1);
- y.iushrn(1);
- ++g;
- }
- var yp = y.clone();
- var xp = x.clone();
- while (!x.isZero()) {
- for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1) {
- ;
- }
- if (i > 0) {
- x.iushrn(i);
- while (i-- > 0) {
- if (A.isOdd() || B.isOdd()) {
- A.iadd(yp);
- B.isub(xp);
- }
- A.iushrn(1);
- B.iushrn(1);
- }
- }
- for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1) {
- ;
- }
- if (j > 0) {
- y.iushrn(j);
- while (j-- > 0) {
- if (C.isOdd() || D.isOdd()) {
- C.iadd(yp);
- D.isub(xp);
- }
- C.iushrn(1);
- D.iushrn(1);
- }
- }
- if (x.cmp(y) >= 0) {
- x.isub(y);
- A.isub(C);
- B.isub(D);
- } else {
- y.isub(x);
- C.isub(A);
- D.isub(B);
- }
- }
- return {
- a: C,
- b: D,
- gcd: y.iushln(g)
- };
- }; // This is reduced incarnation of the binary EEA
- // above, designated to invert members of the
- // _prime_ fields F(p) at a maximal speed
- BN.prototype._invmp = function _invmp(p) {
- assert(p.negative === 0);
- assert(!p.isZero());
- var a = this;
- var b = p.clone();
- if (a.negative !== 0) {
- a = a.umod(p);
- } else {
- a = a.clone();
- }
- var x1 = new BN(1);
- var x2 = new BN(0);
- var delta = b.clone();
- while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
- for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1) {
- ;
- }
- if (i > 0) {
- a.iushrn(i);
- while (i-- > 0) {
- if (x1.isOdd()) {
- x1.iadd(delta);
- }
- x1.iushrn(1);
- }
- }
- for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1) {
- ;
- }
- if (j > 0) {
- b.iushrn(j);
- while (j-- > 0) {
- if (x2.isOdd()) {
- x2.iadd(delta);
- }
- x2.iushrn(1);
- }
- }
- if (a.cmp(b) >= 0) {
- a.isub(b);
- x1.isub(x2);
- } else {
- b.isub(a);
- x2.isub(x1);
- }
- }
- var res;
- if (a.cmpn(1) === 0) {
- res = x1;
- } else {
- res = x2;
- }
- if (res.cmpn(0) < 0) {
- res.iadd(p);
- }
- return res;
- };
- BN.prototype.gcd = function gcd(num) {
- if (this.isZero()) return num.abs();
- if (num.isZero()) return this.abs();
- var a = this.clone();
- var b = num.clone();
- a.negative = 0;
- b.negative = 0; // Remove common factor of two
- for (var shift = 0; a.isEven() && b.isEven(); shift++) {
- a.iushrn(1);
- b.iushrn(1);
- }
- do {
- while (a.isEven()) {
- a.iushrn(1);
- }
- while (b.isEven()) {
- b.iushrn(1);
- }
- var r = a.cmp(b);
- if (r < 0) {
- // Swap `a` and `b` to make `a` always bigger than `b`
- var t = a;
- a = b;
- b = t;
- } else if (r === 0 || b.cmpn(1) === 0) {
- break;
- }
- a.isub(b);
- } while (true);
- return b.iushln(shift);
- }; // Invert number in the field F(num)
- BN.prototype.invm = function invm(num) {
- return this.egcd(num).a.umod(num);
- };
- BN.prototype.isEven = function isEven() {
- return (this.words[0] & 1) === 0;
- };
- BN.prototype.isOdd = function isOdd() {
- return (this.words[0] & 1) === 1;
- }; // And first word and num
- BN.prototype.andln = function andln(num) {
- return this.words[0] & num;
- }; // Increment at the bit position in-line
- BN.prototype.bincn = function bincn(bit) {
- assert(typeof bit === 'number');
- var r = bit % 26;
- var s = (bit - r) / 26;
- var q = 1 << r; // Fast case: bit is much higher than all existing words
- if (this.length <= s) {
- this._expand(s + 1);
- this.words[s] |= q;
- return this;
- } // Add bit and propagate, if needed
- var carry = q;
- for (var i = s; carry !== 0 && i < this.length; i++) {
- var w = this.words[i] | 0;
- w += carry;
- carry = w >>> 26;
- w &= 0x3ffffff;
- this.words[i] = w;
- }
- if (carry !== 0) {
- this.words[i] = carry;
- this.length++;
- }
- return this;
- };
- BN.prototype.isZero = function isZero() {
- return this.length === 1 && this.words[0] === 0;
- };
- BN.prototype.cmpn = function cmpn(num) {
- var negative = num < 0;
- if (this.negative !== 0 && !negative) return -1;
- if (this.negative === 0 && negative) return 1;
- this._strip();
- var res;
- if (this.length > 1) {
- res = 1;
- } else {
- if (negative) {
- num = -num;
- }
- assert(num <= 0x3ffffff, 'Number is too big');
- var w = this.words[0] | 0;
- res = w === num ? 0 : w < num ? -1 : 1;
- }
- if (this.negative !== 0) return -res | 0;
- return res;
- }; // Compare two numbers and return:
- // 1 - if `this` > `num`
- // 0 - if `this` == `num`
- // -1 - if `this` < `num`
- BN.prototype.cmp = function cmp(num) {
- if (this.negative !== 0 && num.negative === 0) return -1;
- if (this.negative === 0 && num.negative !== 0) return 1;
- var res = this.ucmp(num);
- if (this.negative !== 0) return -res | 0;
- return res;
- }; // Unsigned comparison
- BN.prototype.ucmp = function ucmp(num) {
- // At this point both numbers have the same sign
- if (this.length > num.length) return 1;
- if (this.length < num.length) return -1;
- var res = 0;
- for (var i = this.length - 1; i >= 0; i--) {
- var a = this.words[i] | 0;
- var b = num.words[i] | 0;
- if (a === b) continue;
- if (a < b) {
- res = -1;
- } else if (a > b) {
- res = 1;
- }
- break;
- }
- return res;
- };
- BN.prototype.gtn = function gtn(num) {
- return this.cmpn(num) === 1;
- };
- BN.prototype.gt = function gt(num) {
- return this.cmp(num) === 1;
- };
- BN.prototype.gten = function gten(num) {
- return this.cmpn(num) >= 0;
- };
- BN.prototype.gte = function gte(num) {
- return this.cmp(num) >= 0;
- };
- BN.prototype.ltn = function ltn(num) {
- return this.cmpn(num) === -1;
- };
- BN.prototype.lt = function lt(num) {
- return this.cmp(num) === -1;
- };
- BN.prototype.lten = function lten(num) {
- return this.cmpn(num) <= 0;
- };
- BN.prototype.lte = function lte(num) {
- return this.cmp(num) <= 0;
- };
- BN.prototype.eqn = function eqn(num) {
- return this.cmpn(num) === 0;
- };
- BN.prototype.eq = function eq(num) {
- return this.cmp(num) === 0;
- }; //
- // A reduce context, could be using montgomery or something better, depending
- // on the `m` itself.
- //
- BN.red = function red(num) {
- return new Red(num);
- };
- BN.prototype.toRed = function toRed(ctx) {
- assert(!this.red, 'Already a number in reduction context');
- assert(this.negative === 0, 'red works only with positives');
- return ctx.convertTo(this)._forceRed(ctx);
- };
- BN.prototype.fromRed = function fromRed() {
- assert(this.red, 'fromRed works only with numbers in reduction context');
- return this.red.convertFrom(this);
- };
- BN.prototype._forceRed = function _forceRed(ctx) {
- this.red = ctx;
- return this;
- };
- BN.prototype.forceRed = function forceRed(ctx) {
- assert(!this.red, 'Already a number in reduction context');
- return this._forceRed(ctx);
- };
- BN.prototype.redAdd = function redAdd(num) {
- assert(this.red, 'redAdd works only with red numbers');
- return this.red.add(this, num);
- };
- BN.prototype.redIAdd = function redIAdd(num) {
- assert(this.red, 'redIAdd works only with red numbers');
- return this.red.iadd(this, num);
- };
- BN.prototype.redSub = function redSub(num) {
- assert(this.red, 'redSub works only with red numbers');
- return this.red.sub(this, num);
- };
- BN.prototype.redISub = function redISub(num) {
- assert(this.red, 'redISub works only with red numbers');
- return this.red.isub(this, num);
- };
- BN.prototype.redShl = function redShl(num) {
- assert(this.red, 'redShl works only with red numbers');
- return this.red.shl(this, num);
- };
- BN.prototype.redMul = function redMul(num) {
- assert(this.red, 'redMul works only with red numbers');
- this.red._verify2(this, num);
- return this.red.mul(this, num);
- };
- BN.prototype.redIMul = function redIMul(num) {
- assert(this.red, 'redMul works only with red numbers');
- this.red._verify2(this, num);
- return this.red.imul(this, num);
- };
- BN.prototype.redSqr = function redSqr() {
- assert(this.red, 'redSqr works only with red numbers');
- this.red._verify1(this);
- return this.red.sqr(this);
- };
- BN.prototype.redISqr = function redISqr() {
- assert(this.red, 'redISqr works only with red numbers');
- this.red._verify1(this);
- return this.red.isqr(this);
- }; // Square root over p
- BN.prototype.redSqrt = function redSqrt() {
- assert(this.red, 'redSqrt works only with red numbers');
- this.red._verify1(this);
- return this.red.sqrt(this);
- };
- BN.prototype.redInvm = function redInvm() {
- assert(this.red, 'redInvm works only with red numbers');
- this.red._verify1(this);
- return this.red.invm(this);
- }; // Return negative clone of `this` % `red modulo`
- BN.prototype.redNeg = function redNeg() {
- assert(this.red, 'redNeg works only with red numbers');
- this.red._verify1(this);
- return this.red.neg(this);
- };
- BN.prototype.redPow = function redPow(num) {
- assert(this.red && !num.red, 'redPow(normalNum)');
- this.red._verify1(this);
- return this.red.pow(this, num);
- }; // Prime numbers with efficient reduction
- var primes = {
- k256: null,
- p224: null,
- p192: null,
- p25519: null
- }; // Pseudo-Mersenne prime
- function MPrime(name, p) {
- // P = 2 ^ N - K
- this.name = name;
- this.p = new BN(p, 16);
- this.n = this.p.bitLength();
- this.k = new BN(1).iushln(this.n).isub(this.p);
- this.tmp = this._tmp();
- }
- MPrime.prototype._tmp = function _tmp() {
- var tmp = new BN(null);
- tmp.words = new Array(Math.ceil(this.n / 13));
- return tmp;
- };
- MPrime.prototype.ireduce = function ireduce(num) {
- // Assumes that `num` is less than `P^2`
- // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
- var r = num;
- var rlen;
- do {
- this.split(r, this.tmp);
- r = this.imulK(r);
- r = r.iadd(this.tmp);
- rlen = r.bitLength();
- } while (rlen > this.n);
- var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
- if (cmp === 0) {
- r.words[0] = 0;
- r.length = 1;
- } else if (cmp > 0) {
- r.isub(this.p);
- } else {
- if (r.strip !== undefined) {
- // r is a BN v4 instance
- r.strip();
- } else {
- // r is a BN v5 instance
- r._strip();
- }
- }
- return r;
- };
- MPrime.prototype.split = function split(input, out) {
- input.iushrn(this.n, 0, out);
- };
- MPrime.prototype.imulK = function imulK(num) {
- return num.imul(this.k);
- };
- function K256() {
- MPrime.call(this, 'k256', 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
- }
- inherits(K256, MPrime);
- K256.prototype.split = function split(input, output) {
- // 256 = 9 * 26 + 22
- var mask = 0x3fffff;
- var outLen = Math.min(input.length, 9);
- for (var i = 0; i < outLen; i++) {
- output.words[i] = input.words[i];
- }
- output.length = outLen;
- if (input.length <= 9) {
- input.words[0] = 0;
- input.length = 1;
- return;
- } // Shift by 9 limbs
- var prev = input.words[9];
- output.words[output.length++] = prev & mask;
- for (i = 10; i < input.length; i++) {
- var next = input.words[i] | 0;
- input.words[i - 10] = (next & mask) << 4 | prev >>> 22;
- prev = next;
- }
- prev >>>= 22;
- input.words[i - 10] = prev;
- if (prev === 0 && input.length > 10) {
- input.length -= 10;
- } else {
- input.length -= 9;
- }
- };
- K256.prototype.imulK = function imulK(num) {
- // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
- num.words[num.length] = 0;
- num.words[num.length + 1] = 0;
- num.length += 2; // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
- var lo = 0;
- for (var i = 0; i < num.length; i++) {
- var w = num.words[i] | 0;
- lo += w * 0x3d1;
- num.words[i] = lo & 0x3ffffff;
- lo = w * 0x40 + (lo / 0x4000000 | 0);
- } // Fast length reduction
- if (num.words[num.length - 1] === 0) {
- num.length--;
- if (num.words[num.length - 1] === 0) {
- num.length--;
- }
- }
- return num;
- };
- function P224() {
- MPrime.call(this, 'p224', 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
- }
- inherits(P224, MPrime);
- function P192() {
- MPrime.call(this, 'p192', 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
- }
- inherits(P192, MPrime);
- function P25519() {
- // 2 ^ 255 - 19
- MPrime.call(this, '25519', '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
- }
- inherits(P25519, MPrime);
- P25519.prototype.imulK = function imulK(num) {
- // K = 0x13
- var carry = 0;
- for (var i = 0; i < num.length; i++) {
- var hi = (num.words[i] | 0) * 0x13 + carry;
- var lo = hi & 0x3ffffff;
- hi >>>= 26;
- num.words[i] = lo;
- carry = hi;
- }
- if (carry !== 0) {
- num.words[num.length++] = carry;
- }
- return num;
- }; // Exported mostly for testing purposes, use plain name instead
- BN._prime = function prime(name) {
- // Cached version of prime
- if (primes[name]) return primes[name];
- var prime;
- if (name === 'k256') {
- prime = new K256();
- } else if (name === 'p224') {
- prime = new P224();
- } else if (name === 'p192') {
- prime = new P192();
- } else if (name === 'p25519') {
- prime = new P25519();
- } else {
- throw new Error('Unknown prime ' + name);
- }
- primes[name] = prime;
- return prime;
- }; //
- // Base reduction engine
- //
- function Red(m) {
- if (typeof m === 'string') {
- var prime = BN._prime(m);
- this.m = prime.p;
- this.prime = prime;
- } else {
- assert(m.gtn(1), 'modulus must be greater than 1');
- this.m = m;
- this.prime = null;
- }
- }
- Red.prototype._verify1 = function _verify1(a) {
- assert(a.negative === 0, 'red works only with positives');
- assert(a.red, 'red works only with red numbers');
- };
- Red.prototype._verify2 = function _verify2(a, b) {
- assert((a.negative | b.negative) === 0, 'red works only with positives');
- assert(a.red && a.red === b.red, 'red works only with red numbers');
- };
- Red.prototype.imod = function imod(a) {
- if (this.prime) return this.prime.ireduce(a)._forceRed(this);
- move(a, a.umod(this.m)._forceRed(this));
- return a;
- };
- Red.prototype.neg = function neg(a) {
- if (a.isZero()) {
- return a.clone();
- }
- return this.m.sub(a)._forceRed(this);
- };
- Red.prototype.add = function add(a, b) {
- this._verify2(a, b);
- var res = a.add(b);
- if (res.cmp(this.m) >= 0) {
- res.isub(this.m);
- }
- return res._forceRed(this);
- };
- Red.prototype.iadd = function iadd(a, b) {
- this._verify2(a, b);
- var res = a.iadd(b);
- if (res.cmp(this.m) >= 0) {
- res.isub(this.m);
- }
- return res;
- };
- Red.prototype.sub = function sub(a, b) {
- this._verify2(a, b);
- var res = a.sub(b);
- if (res.cmpn(0) < 0) {
- res.iadd(this.m);
- }
- return res._forceRed(this);
- };
- Red.prototype.isub = function isub(a, b) {
- this._verify2(a, b);
- var res = a.isub(b);
- if (res.cmpn(0) < 0) {
- res.iadd(this.m);
- }
- return res;
- };
- Red.prototype.shl = function shl(a, num) {
- this._verify1(a);
- return this.imod(a.ushln(num));
- };
- Red.prototype.imul = function imul(a, b) {
- this._verify2(a, b);
- return this.imod(a.imul(b));
- };
- Red.prototype.mul = function mul(a, b) {
- this._verify2(a, b);
- return this.imod(a.mul(b));
- };
- Red.prototype.isqr = function isqr(a) {
- return this.imul(a, a.clone());
- };
- Red.prototype.sqr = function sqr(a) {
- return this.mul(a, a);
- };
- Red.prototype.sqrt = function sqrt(a) {
- if (a.isZero()) return a.clone();
- var mod3 = this.m.andln(3);
- assert(mod3 % 2 === 1); // Fast case
- if (mod3 === 3) {
- var pow = this.m.add(new BN(1)).iushrn(2);
- return this.pow(a, pow);
- } // Tonelli-Shanks algorithm (Totally unoptimized and slow)
- //
- // Find Q and S, that Q * 2 ^ S = (P - 1)
- var q = this.m.subn(1);
- var s = 0;
- while (!q.isZero() && q.andln(1) === 0) {
- s++;
- q.iushrn(1);
- }
- assert(!q.isZero());
- var one = new BN(1).toRed(this);
- var nOne = one.redNeg(); // Find quadratic non-residue
- // NOTE: Max is such because of generalized Riemann hypothesis.
- var lpow = this.m.subn(1).iushrn(1);
- var z = this.m.bitLength();
- z = new BN(2 * z * z).toRed(this);
- while (this.pow(z, lpow).cmp(nOne) !== 0) {
- z.redIAdd(nOne);
- }
- var c = this.pow(z, q);
- var r = this.pow(a, q.addn(1).iushrn(1));
- var t = this.pow(a, q);
- var m = s;
- while (t.cmp(one) !== 0) {
- var tmp = t;
- for (var i = 0; tmp.cmp(one) !== 0; i++) {
- tmp = tmp.redSqr();
- }
- assert(i < m);
- var b = this.pow(c, new BN(1).iushln(m - i - 1));
- r = r.redMul(b);
- c = b.redSqr();
- t = t.redMul(c);
- m = i;
- }
- return r;
- };
- Red.prototype.invm = function invm(a) {
- var inv = a._invmp(this.m);
- if (inv.negative !== 0) {
- inv.negative = 0;
- return this.imod(inv).redNeg();
- } else {
- return this.imod(inv);
- }
- };
- Red.prototype.pow = function pow(a, num) {
- if (num.isZero()) return new BN(1).toRed(this);
- if (num.cmpn(1) === 0) return a.clone();
- var windowSize = 4;
- var wnd = new Array(1 << windowSize);
- wnd[0] = new BN(1).toRed(this);
- wnd[1] = a;
- for (var i = 2; i < wnd.length; i++) {
- wnd[i] = this.mul(wnd[i - 1], a);
- }
- var res = wnd[0];
- var current = 0;
- var currentLen = 0;
- var start = num.bitLength() % 26;
- if (start === 0) {
- start = 26;
- }
- for (i = num.length - 1; i >= 0; i--) {
- var word = num.words[i];
- for (var j = start - 1; j >= 0; j--) {
- var bit = word >> j & 1;
- if (res !== wnd[0]) {
- res = this.sqr(res);
- }
- if (bit === 0 && current === 0) {
- currentLen = 0;
- continue;
- }
- current <<= 1;
- current |= bit;
- currentLen++;
- if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
- res = this.mul(res, wnd[current]);
- currentLen = 0;
- current = 0;
- }
- start = 26;
- }
- return res;
- };
- Red.prototype.convertTo = function convertTo(num) {
- var r = num.umod(this.m);
- return r === num ? r.clone() : r;
- };
- Red.prototype.convertFrom = function convertFrom(num) {
- var res = num.clone();
- res.red = null;
- return res;
- }; //
- // Montgomery method engine
- //
- BN.mont = function mont(num) {
- return new Mont(num);
- };
- function Mont(m) {
- Red.call(this, m);
- this.shift = this.m.bitLength();
- if (this.shift % 26 !== 0) {
- this.shift += 26 - this.shift % 26;
- }
- this.r = new BN(1).iushln(this.shift);
- this.r2 = this.imod(this.r.sqr());
- this.rinv = this.r._invmp(this.m);
- this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
- this.minv = this.minv.umod(this.r);
- this.minv = this.r.sub(this.minv);
- }
- inherits(Mont, Red);
- Mont.prototype.convertTo = function convertTo(num) {
- return this.imod(num.ushln(this.shift));
- };
- Mont.prototype.convertFrom = function convertFrom(num) {
- var r = this.imod(num.mul(this.rinv));
- r.red = null;
- return r;
- };
- Mont.prototype.imul = function imul(a, b) {
- if (a.isZero() || b.isZero()) {
- a.words[0] = 0;
- a.length = 1;
- return a;
- }
- var t = a.imul(b);
- var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
- var u = t.isub(c).iushrn(this.shift);
- var res = u;
- if (u.cmp(this.m) >= 0) {
- res = u.isub(this.m);
- } else if (u.cmpn(0) < 0) {
- res = u.iadd(this.m);
- }
- return res._forceRed(this);
- };
- Mont.prototype.mul = function mul(a, b) {
- if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
- var t = a.mul(b);
- var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
- var u = t.isub(c).iushrn(this.shift);
- var res = u;
- if (u.cmp(this.m) >= 0) {
- res = u.isub(this.m);
- } else if (u.cmpn(0) < 0) {
- res = u.iadd(this.m);
- }
- return res._forceRed(this);
- };
- Mont.prototype.invm = function invm(a) {
- // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
- var res = this.imod(a._invmp(this.m).mul(this.r2));
- return res._forceRed(this);
- };
- })(typeof module === 'undefined' || module, void 0);
- },{"buffer":185}],184:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- var r;
- module.exports = function rand(len) {
- if (!r) r = new Rand(null);
- return r.generate(len);
- };
- function Rand(rand) {
- this.rand = rand;
- }
- module.exports.Rand = Rand;
- Rand.prototype.generate = function generate(len) {
- return this._rand(len);
- }; // Emulate crypto API using randy
- Rand.prototype._rand = function _rand(n) {
- if (this.rand.getBytes) return this.rand.getBytes(n);
- var res = new Uint8Array(n);
- for (var i = 0; i < res.length; i++) {
- res[i] = this.rand.getByte();
- }
- return res;
- };
- if ((typeof self === "undefined" ? "undefined" : _typeof(self)) === 'object') {
- if (self.crypto && self.crypto.getRandomValues) {
- // Modern browsers
- Rand.prototype._rand = function _rand(n) {
- var arr = new Uint8Array(n);
- self.crypto.getRandomValues(arr);
- return arr;
- };
- } else if (self.msCrypto && self.msCrypto.getRandomValues) {
- // IE
- Rand.prototype._rand = function _rand(n) {
- var arr = new Uint8Array(n);
- self.msCrypto.getRandomValues(arr);
- return arr;
- }; // Safari's WebWorkers do not have `crypto`
- } else if ((typeof window === "undefined" ? "undefined" : _typeof(window)) === 'object') {
- // Old junk
- Rand.prototype._rand = function () {
- throw new Error('Not implemented yet');
- };
- }
- } else {
- // Node.js or Web worker with no crypto support
- try {
- var crypto = require('crypto');
- if (typeof crypto.randomBytes !== 'function') throw new Error('Not supported');
- Rand.prototype._rand = function _rand(n) {
- return crypto.randomBytes(n);
- };
- } catch (e) {}
- }
- },{"crypto":185}],185:[function(require,module,exports){
- "use strict";
- },{}],186:[function(require,module,exports){
- "use strict";
- // based on the aes implimentation in triple sec
- // https://github.com/keybase/triplesec
- // which is in turn based on the one from crypto-js
- // https://code.google.com/p/crypto-js/
- var Buffer = require('safe-buffer').Buffer;
- function asUInt32Array(buf) {
- if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf);
- var len = buf.length / 4 | 0;
- var out = new Array(len);
- for (var i = 0; i < len; i++) {
- out[i] = buf.readUInt32BE(i * 4);
- }
- return out;
- }
- function scrubVec(v) {
- for (var i = 0; i < v.length; v++) {
- v[i] = 0;
- }
- }
- function cryptBlock(M, keySchedule, SUB_MIX, SBOX, nRounds) {
- var SUB_MIX0 = SUB_MIX[0];
- var SUB_MIX1 = SUB_MIX[1];
- var SUB_MIX2 = SUB_MIX[2];
- var SUB_MIX3 = SUB_MIX[3];
- var s0 = M[0] ^ keySchedule[0];
- var s1 = M[1] ^ keySchedule[1];
- var s2 = M[2] ^ keySchedule[2];
- var s3 = M[3] ^ keySchedule[3];
- var t0, t1, t2, t3;
- var ksRow = 4;
- for (var round = 1; round < nRounds; round++) {
- t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[s1 >>> 16 & 0xff] ^ SUB_MIX2[s2 >>> 8 & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++];
- t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[s2 >>> 16 & 0xff] ^ SUB_MIX2[s3 >>> 8 & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++];
- t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[s3 >>> 16 & 0xff] ^ SUB_MIX2[s0 >>> 8 & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++];
- t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[s0 >>> 16 & 0xff] ^ SUB_MIX2[s1 >>> 8 & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++];
- s0 = t0;
- s1 = t1;
- s2 = t2;
- s3 = t3;
- }
- t0 = (SBOX[s0 >>> 24] << 24 | SBOX[s1 >>> 16 & 0xff] << 16 | SBOX[s2 >>> 8 & 0xff] << 8 | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];
- t1 = (SBOX[s1 >>> 24] << 24 | SBOX[s2 >>> 16 & 0xff] << 16 | SBOX[s3 >>> 8 & 0xff] << 8 | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];
- t2 = (SBOX[s2 >>> 24] << 24 | SBOX[s3 >>> 16 & 0xff] << 16 | SBOX[s0 >>> 8 & 0xff] << 8 | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];
- t3 = (SBOX[s3 >>> 24] << 24 | SBOX[s0 >>> 16 & 0xff] << 16 | SBOX[s1 >>> 8 & 0xff] << 8 | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];
- t0 = t0 >>> 0;
- t1 = t1 >>> 0;
- t2 = t2 >>> 0;
- t3 = t3 >>> 0;
- return [t0, t1, t2, t3];
- } // AES constants
- var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];
- var G = function () {
- // Compute double table
- var d = new Array(256);
- for (var j = 0; j < 256; j++) {
- if (j < 128) {
- d[j] = j << 1;
- } else {
- d[j] = j << 1 ^ 0x11b;
- }
- }
- var SBOX = [];
- var INV_SBOX = [];
- var SUB_MIX = [[], [], [], []];
- var INV_SUB_MIX = [[], [], [], []]; // Walk GF(2^8)
- var x = 0;
- var xi = 0;
- for (var i = 0; i < 256; ++i) {
- // Compute sbox
- var sx = xi ^ xi << 1 ^ xi << 2 ^ xi << 3 ^ xi << 4;
- sx = sx >>> 8 ^ sx & 0xff ^ 0x63;
- SBOX[x] = sx;
- INV_SBOX[sx] = x; // Compute multiplication
- var x2 = d[x];
- var x4 = d[x2];
- var x8 = d[x4]; // Compute sub bytes, mix columns tables
- var t = d[sx] * 0x101 ^ sx * 0x1010100;
- SUB_MIX[0][x] = t << 24 | t >>> 8;
- SUB_MIX[1][x] = t << 16 | t >>> 16;
- SUB_MIX[2][x] = t << 8 | t >>> 24;
- SUB_MIX[3][x] = t; // Compute inv sub bytes, inv mix columns tables
- t = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;
- INV_SUB_MIX[0][sx] = t << 24 | t >>> 8;
- INV_SUB_MIX[1][sx] = t << 16 | t >>> 16;
- INV_SUB_MIX[2][sx] = t << 8 | t >>> 24;
- INV_SUB_MIX[3][sx] = t;
- if (x === 0) {
- x = xi = 1;
- } else {
- x = x2 ^ d[d[d[x8 ^ x2]]];
- xi ^= d[d[xi]];
- }
- }
- return {
- SBOX: SBOX,
- INV_SBOX: INV_SBOX,
- SUB_MIX: SUB_MIX,
- INV_SUB_MIX: INV_SUB_MIX
- };
- }();
- function AES(key) {
- this._key = asUInt32Array(key);
- this._reset();
- }
- AES.blockSize = 4 * 4;
- AES.keySize = 256 / 8;
- AES.prototype.blockSize = AES.blockSize;
- AES.prototype.keySize = AES.keySize;
- AES.prototype._reset = function () {
- var keyWords = this._key;
- var keySize = keyWords.length;
- var nRounds = keySize + 6;
- var ksRows = (nRounds + 1) * 4;
- var keySchedule = [];
- for (var k = 0; k < keySize; k++) {
- keySchedule[k] = keyWords[k];
- }
- for (k = keySize; k < ksRows; k++) {
- var t = keySchedule[k - 1];
- if (k % keySize === 0) {
- t = t << 8 | t >>> 24;
- t = G.SBOX[t >>> 24] << 24 | G.SBOX[t >>> 16 & 0xff] << 16 | G.SBOX[t >>> 8 & 0xff] << 8 | G.SBOX[t & 0xff];
- t ^= RCON[k / keySize | 0] << 24;
- } else if (keySize > 6 && k % keySize === 4) {
- t = G.SBOX[t >>> 24] << 24 | G.SBOX[t >>> 16 & 0xff] << 16 | G.SBOX[t >>> 8 & 0xff] << 8 | G.SBOX[t & 0xff];
- }
- keySchedule[k] = keySchedule[k - keySize] ^ t;
- }
- var invKeySchedule = [];
- for (var ik = 0; ik < ksRows; ik++) {
- var ksR = ksRows - ik;
- var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)];
- if (ik < 4 || ksR <= 4) {
- invKeySchedule[ik] = tt;
- } else {
- invKeySchedule[ik] = G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^ G.INV_SUB_MIX[1][G.SBOX[tt >>> 16 & 0xff]] ^ G.INV_SUB_MIX[2][G.SBOX[tt >>> 8 & 0xff]] ^ G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]];
- }
- }
- this._nRounds = nRounds;
- this._keySchedule = keySchedule;
- this._invKeySchedule = invKeySchedule;
- };
- AES.prototype.encryptBlockRaw = function (M) {
- M = asUInt32Array(M);
- return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds);
- };
- AES.prototype.encryptBlock = function (M) {
- var out = this.encryptBlockRaw(M);
- var buf = Buffer.allocUnsafe(16);
- buf.writeUInt32BE(out[0], 0);
- buf.writeUInt32BE(out[1], 4);
- buf.writeUInt32BE(out[2], 8);
- buf.writeUInt32BE(out[3], 12);
- return buf;
- };
- AES.prototype.decryptBlock = function (M) {
- M = asUInt32Array(M); // swap
- var m1 = M[1];
- M[1] = M[3];
- M[3] = m1;
- var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds);
- var buf = Buffer.allocUnsafe(16);
- buf.writeUInt32BE(out[0], 0);
- buf.writeUInt32BE(out[3], 4);
- buf.writeUInt32BE(out[2], 8);
- buf.writeUInt32BE(out[1], 12);
- return buf;
- };
- AES.prototype.scrub = function () {
- scrubVec(this._keySchedule);
- scrubVec(this._invKeySchedule);
- scrubVec(this._key);
- };
- module.exports.AES = AES;
- },{"safe-buffer":384}],187:[function(require,module,exports){
- "use strict";
- var aes = require('./aes');
- var Buffer = require('safe-buffer').Buffer;
- var Transform = require('cipher-base');
- var inherits = require('inherits');
- var GHASH = require('./ghash');
- var xor = require('buffer-xor');
- var incr32 = require('./incr32');
- function xorTest(a, b) {
- var out = 0;
- if (a.length !== b.length) out++;
- var len = Math.min(a.length, b.length);
- for (var i = 0; i < len; ++i) {
- out += a[i] ^ b[i];
- }
- return out;
- }
- function calcIv(self, iv, ck) {
- if (iv.length === 12) {
- self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])]);
- return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])]);
- }
- var ghash = new GHASH(ck);
- var len = iv.length;
- var toPad = len % 16;
- ghash.update(iv);
- if (toPad) {
- toPad = 16 - toPad;
- ghash.update(Buffer.alloc(toPad, 0));
- }
- ghash.update(Buffer.alloc(8, 0));
- var ivBits = len * 8;
- var tail = Buffer.alloc(8);
- tail.writeUIntBE(ivBits, 0, 8);
- ghash.update(tail);
- self._finID = ghash.state;
- var out = Buffer.from(self._finID);
- incr32(out);
- return out;
- }
- function StreamCipher(mode, key, iv, decrypt) {
- Transform.call(this);
- var h = Buffer.alloc(4, 0);
- this._cipher = new aes.AES(key);
- var ck = this._cipher.encryptBlock(h);
- this._ghash = new GHASH(ck);
- iv = calcIv(this, iv, ck);
- this._prev = Buffer.from(iv);
- this._cache = Buffer.allocUnsafe(0);
- this._secCache = Buffer.allocUnsafe(0);
- this._decrypt = decrypt;
- this._alen = 0;
- this._len = 0;
- this._mode = mode;
- this._authTag = null;
- this._called = false;
- }
- inherits(StreamCipher, Transform);
- StreamCipher.prototype._update = function (chunk) {
- if (!this._called && this._alen) {
- var rump = 16 - this._alen % 16;
- if (rump < 16) {
- rump = Buffer.alloc(rump, 0);
- this._ghash.update(rump);
- }
- }
- this._called = true;
- var out = this._mode.encrypt(this, chunk);
- if (this._decrypt) {
- this._ghash.update(chunk);
- } else {
- this._ghash.update(out);
- }
- this._len += chunk.length;
- return out;
- };
- StreamCipher.prototype._final = function () {
- if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data');
- var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID));
- if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data');
- this._authTag = tag;
- this._cipher.scrub();
- };
- StreamCipher.prototype.getAuthTag = function getAuthTag() {
- if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state');
- return this._authTag;
- };
- StreamCipher.prototype.setAuthTag = function setAuthTag(tag) {
- if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state');
- this._authTag = tag;
- };
- StreamCipher.prototype.setAAD = function setAAD(buf) {
- if (this._called) throw new Error('Attempting to set AAD in unsupported state');
- this._ghash.update(buf);
- this._alen += buf.length;
- };
- module.exports = StreamCipher;
- },{"./aes":186,"./ghash":191,"./incr32":192,"buffer-xor":217,"cipher-base":218,"inherits":278,"safe-buffer":384}],188:[function(require,module,exports){
- "use strict";
- var ciphers = require('./encrypter');
- var deciphers = require('./decrypter');
- var modes = require('./modes/list.json');
- function getCiphers() {
- return Object.keys(modes);
- }
- exports.createCipher = exports.Cipher = ciphers.createCipher;
- exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv;
- exports.createDecipher = exports.Decipher = deciphers.createDecipher;
- exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv;
- exports.listCiphers = exports.getCiphers = getCiphers;
- },{"./decrypter":189,"./encrypter":190,"./modes/list.json":200}],189:[function(require,module,exports){
- "use strict";
- var AuthCipher = require('./authCipher');
- var Buffer = require('safe-buffer').Buffer;
- var MODES = require('./modes');
- var StreamCipher = require('./streamCipher');
- var Transform = require('cipher-base');
- var aes = require('./aes');
- var ebtk = require('evp_bytestokey');
- var inherits = require('inherits');
- function Decipher(mode, key, iv) {
- Transform.call(this);
- this._cache = new Splitter();
- this._last = void 0;
- this._cipher = new aes.AES(key);
- this._prev = Buffer.from(iv);
- this._mode = mode;
- this._autopadding = true;
- }
- inherits(Decipher, Transform);
- Decipher.prototype._update = function (data) {
- this._cache.add(data);
- var chunk;
- var thing;
- var out = [];
- while (chunk = this._cache.get(this._autopadding)) {
- thing = this._mode.decrypt(this, chunk);
- out.push(thing);
- }
- return Buffer.concat(out);
- };
- Decipher.prototype._final = function () {
- var chunk = this._cache.flush();
- if (this._autopadding) {
- return unpad(this._mode.decrypt(this, chunk));
- } else if (chunk) {
- throw new Error('data not multiple of block length');
- }
- };
- Decipher.prototype.setAutoPadding = function (setTo) {
- this._autopadding = !!setTo;
- return this;
- };
- function Splitter() {
- this.cache = Buffer.allocUnsafe(0);
- }
- Splitter.prototype.add = function (data) {
- this.cache = Buffer.concat([this.cache, data]);
- };
- Splitter.prototype.get = function (autoPadding) {
- var out;
- if (autoPadding) {
- if (this.cache.length > 16) {
- out = this.cache.slice(0, 16);
- this.cache = this.cache.slice(16);
- return out;
- }
- } else {
- if (this.cache.length >= 16) {
- out = this.cache.slice(0, 16);
- this.cache = this.cache.slice(16);
- return out;
- }
- }
- return null;
- };
- Splitter.prototype.flush = function () {
- if (this.cache.length) return this.cache;
- };
- function unpad(last) {
- var padded = last[15];
- if (padded < 1 || padded > 16) {
- throw new Error('unable to decrypt data');
- }
- var i = -1;
- while (++i < padded) {
- if (last[i + (16 - padded)] !== padded) {
- throw new Error('unable to decrypt data');
- }
- }
- if (padded === 16) return;
- return last.slice(0, 16 - padded);
- }
- function createDecipheriv(suite, password, iv) {
- var config = MODES[suite.toLowerCase()];
- if (!config) throw new TypeError('invalid suite type');
- if (typeof iv === 'string') iv = Buffer.from(iv);
- if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length);
- if (typeof password === 'string') password = Buffer.from(password);
- if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length);
- if (config.type === 'stream') {
- return new StreamCipher(config.module, password, iv, true);
- } else if (config.type === 'auth') {
- return new AuthCipher(config.module, password, iv, true);
- }
- return new Decipher(config.module, password, iv);
- }
- function createDecipher(suite, password) {
- var config = MODES[suite.toLowerCase()];
- if (!config) throw new TypeError('invalid suite type');
- var keys = ebtk(password, false, config.key, config.iv);
- return createDecipheriv(suite, keys.key, keys.iv);
- }
- exports.createDecipher = createDecipher;
- exports.createDecipheriv = createDecipheriv;
- },{"./aes":186,"./authCipher":187,"./modes":199,"./streamCipher":202,"cipher-base":218,"evp_bytestokey":259,"inherits":278,"safe-buffer":384}],190:[function(require,module,exports){
- "use strict";
- var MODES = require('./modes');
- var AuthCipher = require('./authCipher');
- var Buffer = require('safe-buffer').Buffer;
- var StreamCipher = require('./streamCipher');
- var Transform = require('cipher-base');
- var aes = require('./aes');
- var ebtk = require('evp_bytestokey');
- var inherits = require('inherits');
- function Cipher(mode, key, iv) {
- Transform.call(this);
- this._cache = new Splitter();
- this._cipher = new aes.AES(key);
- this._prev = Buffer.from(iv);
- this._mode = mode;
- this._autopadding = true;
- }
- inherits(Cipher, Transform);
- Cipher.prototype._update = function (data) {
- this._cache.add(data);
- var chunk;
- var thing;
- var out = [];
- while (chunk = this._cache.get()) {
- thing = this._mode.encrypt(this, chunk);
- out.push(thing);
- }
- return Buffer.concat(out);
- };
- var PADDING = Buffer.alloc(16, 0x10);
- Cipher.prototype._final = function () {
- var chunk = this._cache.flush();
- if (this._autopadding) {
- chunk = this._mode.encrypt(this, chunk);
- this._cipher.scrub();
- return chunk;
- }
- if (!chunk.equals(PADDING)) {
- this._cipher.scrub();
- throw new Error('data not multiple of block length');
- }
- };
- Cipher.prototype.setAutoPadding = function (setTo) {
- this._autopadding = !!setTo;
- return this;
- };
- function Splitter() {
- this.cache = Buffer.allocUnsafe(0);
- }
- Splitter.prototype.add = function (data) {
- this.cache = Buffer.concat([this.cache, data]);
- };
- Splitter.prototype.get = function () {
- if (this.cache.length > 15) {
- var out = this.cache.slice(0, 16);
- this.cache = this.cache.slice(16);
- return out;
- }
- return null;
- };
- Splitter.prototype.flush = function () {
- var len = 16 - this.cache.length;
- var padBuff = Buffer.allocUnsafe(len);
- var i = -1;
- while (++i < len) {
- padBuff.writeUInt8(len, i);
- }
- return Buffer.concat([this.cache, padBuff]);
- };
- function createCipheriv(suite, password, iv) {
- var config = MODES[suite.toLowerCase()];
- if (!config) throw new TypeError('invalid suite type');
- if (typeof password === 'string') password = Buffer.from(password);
- if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length);
- if (typeof iv === 'string') iv = Buffer.from(iv);
- if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length);
- if (config.type === 'stream') {
- return new StreamCipher(config.module, password, iv);
- } else if (config.type === 'auth') {
- return new AuthCipher(config.module, password, iv);
- }
- return new Cipher(config.module, password, iv);
- }
- function createCipher(suite, password) {
- var config = MODES[suite.toLowerCase()];
- if (!config) throw new TypeError('invalid suite type');
- var keys = ebtk(password, false, config.key, config.iv);
- return createCipheriv(suite, keys.key, keys.iv);
- }
- exports.createCipheriv = createCipheriv;
- exports.createCipher = createCipher;
- },{"./aes":186,"./authCipher":187,"./modes":199,"./streamCipher":202,"cipher-base":218,"evp_bytestokey":259,"inherits":278,"safe-buffer":384}],191:[function(require,module,exports){
- "use strict";
- var Buffer = require('safe-buffer').Buffer;
- var ZEROES = Buffer.alloc(16, 0);
- function toArray(buf) {
- return [buf.readUInt32BE(0), buf.readUInt32BE(4), buf.readUInt32BE(8), buf.readUInt32BE(12)];
- }
- function fromArray(out) {
- var buf = Buffer.allocUnsafe(16);
- buf.writeUInt32BE(out[0] >>> 0, 0);
- buf.writeUInt32BE(out[1] >>> 0, 4);
- buf.writeUInt32BE(out[2] >>> 0, 8);
- buf.writeUInt32BE(out[3] >>> 0, 12);
- return buf;
- }
- function GHASH(key) {
- this.h = key;
- this.state = Buffer.alloc(16, 0);
- this.cache = Buffer.allocUnsafe(0);
- } // from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html
- // by Juho Vähä-Herttua
- GHASH.prototype.ghash = function (block) {
- var i = -1;
- while (++i < block.length) {
- this.state[i] ^= block[i];
- }
- this._multiply();
- };
- GHASH.prototype._multiply = function () {
- var Vi = toArray(this.h);
- var Zi = [0, 0, 0, 0];
- var j, xi, lsbVi;
- var i = -1;
- while (++i < 128) {
- xi = (this.state[~~(i / 8)] & 1 << 7 - i % 8) !== 0;
- if (xi) {
- // Z_i+1 = Z_i ^ V_i
- Zi[0] ^= Vi[0];
- Zi[1] ^= Vi[1];
- Zi[2] ^= Vi[2];
- Zi[3] ^= Vi[3];
- } // Store the value of LSB(V_i)
- lsbVi = (Vi[3] & 1) !== 0; // V_i+1 = V_i >> 1
- for (j = 3; j > 0; j--) {
- Vi[j] = Vi[j] >>> 1 | (Vi[j - 1] & 1) << 31;
- }
- Vi[0] = Vi[0] >>> 1; // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R
- if (lsbVi) {
- Vi[0] = Vi[0] ^ 0xe1 << 24;
- }
- }
- this.state = fromArray(Zi);
- };
- GHASH.prototype.update = function (buf) {
- this.cache = Buffer.concat([this.cache, buf]);
- var chunk;
- while (this.cache.length >= 16) {
- chunk = this.cache.slice(0, 16);
- this.cache = this.cache.slice(16);
- this.ghash(chunk);
- }
- };
- GHASH.prototype.final = function (abl, bl) {
- if (this.cache.length) {
- this.ghash(Buffer.concat([this.cache, ZEROES], 16));
- }
- this.ghash(fromArray([0, abl, 0, bl]));
- return this.state;
- };
- module.exports = GHASH;
- },{"safe-buffer":384}],192:[function(require,module,exports){
- "use strict";
- function incr32(iv) {
- var len = iv.length;
- var item;
- while (len--) {
- item = iv.readUInt8(len);
- if (item === 255) {
- iv.writeUInt8(0, len);
- } else {
- item++;
- iv.writeUInt8(item, len);
- break;
- }
- }
- }
- module.exports = incr32;
- },{}],193:[function(require,module,exports){
- "use strict";
- var xor = require('buffer-xor');
- exports.encrypt = function (self, block) {
- var data = xor(block, self._prev);
- self._prev = self._cipher.encryptBlock(data);
- return self._prev;
- };
- exports.decrypt = function (self, block) {
- var pad = self._prev;
- self._prev = block;
- var out = self._cipher.decryptBlock(block);
- return xor(out, pad);
- };
- },{"buffer-xor":217}],194:[function(require,module,exports){
- "use strict";
- var Buffer = require('safe-buffer').Buffer;
- var xor = require('buffer-xor');
- function encryptStart(self, data, decrypt) {
- var len = data.length;
- var out = xor(data, self._cache);
- self._cache = self._cache.slice(len);
- self._prev = Buffer.concat([self._prev, decrypt ? data : out]);
- return out;
- }
- exports.encrypt = function (self, data, decrypt) {
- var out = Buffer.allocUnsafe(0);
- var len;
- while (data.length) {
- if (self._cache.length === 0) {
- self._cache = self._cipher.encryptBlock(self._prev);
- self._prev = Buffer.allocUnsafe(0);
- }
- if (self._cache.length <= data.length) {
- len = self._cache.length;
- out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)]);
- data = data.slice(len);
- } else {
- out = Buffer.concat([out, encryptStart(self, data, decrypt)]);
- break;
- }
- }
- return out;
- };
- },{"buffer-xor":217,"safe-buffer":384}],195:[function(require,module,exports){
- "use strict";
- var Buffer = require('safe-buffer').Buffer;
- function encryptByte(self, byteParam, decrypt) {
- var pad;
- var i = -1;
- var len = 8;
- var out = 0;
- var bit, value;
- while (++i < len) {
- pad = self._cipher.encryptBlock(self._prev);
- bit = byteParam & 1 << 7 - i ? 0x80 : 0;
- value = pad[0] ^ bit;
- out += (value & 0x80) >> i % 8;
- self._prev = shiftIn(self._prev, decrypt ? bit : value);
- }
- return out;
- }
- function shiftIn(buffer, value) {
- var len = buffer.length;
- var i = -1;
- var out = Buffer.allocUnsafe(buffer.length);
- buffer = Buffer.concat([buffer, Buffer.from([value])]);
- while (++i < len) {
- out[i] = buffer[i] << 1 | buffer[i + 1] >> 7;
- }
- return out;
- }
- exports.encrypt = function (self, chunk, decrypt) {
- var len = chunk.length;
- var out = Buffer.allocUnsafe(len);
- var i = -1;
- while (++i < len) {
- out[i] = encryptByte(self, chunk[i], decrypt);
- }
- return out;
- };
- },{"safe-buffer":384}],196:[function(require,module,exports){
- "use strict";
- var Buffer = require('safe-buffer').Buffer;
- function encryptByte(self, byteParam, decrypt) {
- var pad = self._cipher.encryptBlock(self._prev);
- var out = pad[0] ^ byteParam;
- self._prev = Buffer.concat([self._prev.slice(1), Buffer.from([decrypt ? byteParam : out])]);
- return out;
- }
- exports.encrypt = function (self, chunk, decrypt) {
- var len = chunk.length;
- var out = Buffer.allocUnsafe(len);
- var i = -1;
- while (++i < len) {
- out[i] = encryptByte(self, chunk[i], decrypt);
- }
- return out;
- };
- },{"safe-buffer":384}],197:[function(require,module,exports){
- "use strict";
- var xor = require('buffer-xor');
- var Buffer = require('safe-buffer').Buffer;
- var incr32 = require('../incr32');
- function getBlock(self) {
- var out = self._cipher.encryptBlockRaw(self._prev);
- incr32(self._prev);
- return out;
- }
- var blockSize = 16;
- exports.encrypt = function (self, chunk) {
- var chunkNum = Math.ceil(chunk.length / blockSize);
- var start = self._cache.length;
- self._cache = Buffer.concat([self._cache, Buffer.allocUnsafe(chunkNum * blockSize)]);
- for (var i = 0; i < chunkNum; i++) {
- var out = getBlock(self);
- var offset = start + i * blockSize;
- self._cache.writeUInt32BE(out[0], offset + 0);
- self._cache.writeUInt32BE(out[1], offset + 4);
- self._cache.writeUInt32BE(out[2], offset + 8);
- self._cache.writeUInt32BE(out[3], offset + 12);
- }
- var pad = self._cache.slice(0, chunk.length);
- self._cache = self._cache.slice(chunk.length);
- return xor(chunk, pad);
- };
- },{"../incr32":192,"buffer-xor":217,"safe-buffer":384}],198:[function(require,module,exports){
- "use strict";
- exports.encrypt = function (self, block) {
- return self._cipher.encryptBlock(block);
- };
- exports.decrypt = function (self, block) {
- return self._cipher.decryptBlock(block);
- };
- },{}],199:[function(require,module,exports){
- "use strict";
- var modeModules = {
- ECB: require('./ecb'),
- CBC: require('./cbc'),
- CFB: require('./cfb'),
- CFB8: require('./cfb8'),
- CFB1: require('./cfb1'),
- OFB: require('./ofb'),
- CTR: require('./ctr'),
- GCM: require('./ctr')
- };
- var modes = require('./list.json');
- for (var key in modes) {
- modes[key].module = modeModules[modes[key].mode];
- }
- module.exports = modes;
- },{"./cbc":193,"./cfb":194,"./cfb1":195,"./cfb8":196,"./ctr":197,"./ecb":198,"./list.json":200,"./ofb":201}],200:[function(require,module,exports){
- module.exports={
- "aes-128-ecb": {
- "cipher": "AES",
- "key": 128,
- "iv": 0,
- "mode": "ECB",
- "type": "block"
- },
- "aes-192-ecb": {
- "cipher": "AES",
- "key": 192,
- "iv": 0,
- "mode": "ECB",
- "type": "block"
- },
- "aes-256-ecb": {
- "cipher": "AES",
- "key": 256,
- "iv": 0,
- "mode": "ECB",
- "type": "block"
- },
- "aes-128-cbc": {
- "cipher": "AES",
- "key": 128,
- "iv": 16,
- "mode": "CBC",
- "type": "block"
- },
- "aes-192-cbc": {
- "cipher": "AES",
- "key": 192,
- "iv": 16,
- "mode": "CBC",
- "type": "block"
- },
- "aes-256-cbc": {
- "cipher": "AES",
- "key": 256,
- "iv": 16,
- "mode": "CBC",
- "type": "block"
- },
- "aes128": {
- "cipher": "AES",
- "key": 128,
- "iv": 16,
- "mode": "CBC",
- "type": "block"
- },
- "aes192": {
- "cipher": "AES",
- "key": 192,
- "iv": 16,
- "mode": "CBC",
- "type": "block"
- },
- "aes256": {
- "cipher": "AES",
- "key": 256,
- "iv": 16,
- "mode": "CBC",
- "type": "block"
- },
- "aes-128-cfb": {
- "cipher": "AES",
- "key": 128,
- "iv": 16,
- "mode": "CFB",
- "type": "stream"
- },
- "aes-192-cfb": {
- "cipher": "AES",
- "key": 192,
- "iv": 16,
- "mode": "CFB",
- "type": "stream"
- },
- "aes-256-cfb": {
- "cipher": "AES",
- "key": 256,
- "iv": 16,
- "mode": "CFB",
- "type": "stream"
- },
- "aes-128-cfb8": {
- "cipher": "AES",
- "key": 128,
- "iv": 16,
- "mode": "CFB8",
- "type": "stream"
- },
- "aes-192-cfb8": {
- "cipher": "AES",
- "key": 192,
- "iv": 16,
- "mode": "CFB8",
- "type": "stream"
- },
- "aes-256-cfb8": {
- "cipher": "AES",
- "key": 256,
- "iv": 16,
- "mode": "CFB8",
- "type": "stream"
- },
- "aes-128-cfb1": {
- "cipher": "AES",
- "key": 128,
- "iv": 16,
- "mode": "CFB1",
- "type": "stream"
- },
- "aes-192-cfb1": {
- "cipher": "AES",
- "key": 192,
- "iv": 16,
- "mode": "CFB1",
- "type": "stream"
- },
- "aes-256-cfb1": {
- "cipher": "AES",
- "key": 256,
- "iv": 16,
- "mode": "CFB1",
- "type": "stream"
- },
- "aes-128-ofb": {
- "cipher": "AES",
- "key": 128,
- "iv": 16,
- "mode": "OFB",
- "type": "stream"
- },
- "aes-192-ofb": {
- "cipher": "AES",
- "key": 192,
- "iv": 16,
- "mode": "OFB",
- "type": "stream"
- },
- "aes-256-ofb": {
- "cipher": "AES",
- "key": 256,
- "iv": 16,
- "mode": "OFB",
- "type": "stream"
- },
- "aes-128-ctr": {
- "cipher": "AES",
- "key": 128,
- "iv": 16,
- "mode": "CTR",
- "type": "stream"
- },
- "aes-192-ctr": {
- "cipher": "AES",
- "key": 192,
- "iv": 16,
- "mode": "CTR",
- "type": "stream"
- },
- "aes-256-ctr": {
- "cipher": "AES",
- "key": 256,
- "iv": 16,
- "mode": "CTR",
- "type": "stream"
- },
- "aes-128-gcm": {
- "cipher": "AES",
- "key": 128,
- "iv": 12,
- "mode": "GCM",
- "type": "auth"
- },
- "aes-192-gcm": {
- "cipher": "AES",
- "key": 192,
- "iv": 12,
- "mode": "GCM",
- "type": "auth"
- },
- "aes-256-gcm": {
- "cipher": "AES",
- "key": 256,
- "iv": 12,
- "mode": "GCM",
- "type": "auth"
- }
- }
- },{}],201:[function(require,module,exports){
- (function (Buffer){
- "use strict";
- var xor = require('buffer-xor');
- function getBlock(self) {
- self._prev = self._cipher.encryptBlock(self._prev);
- return self._prev;
- }
- exports.encrypt = function (self, chunk) {
- while (self._cache.length < chunk.length) {
- self._cache = Buffer.concat([self._cache, getBlock(self)]);
- }
- var pad = self._cache.slice(0, chunk.length);
- self._cache = self._cache.slice(chunk.length);
- return xor(chunk, pad);
- };
- }).call(this,require("buffer").Buffer)
- },{"buffer":216,"buffer-xor":217}],202:[function(require,module,exports){
- "use strict";
- var aes = require('./aes');
- var Buffer = require('safe-buffer').Buffer;
- var Transform = require('cipher-base');
- var inherits = require('inherits');
- function StreamCipher(mode, key, iv, decrypt) {
- Transform.call(this);
- this._cipher = new aes.AES(key);
- this._prev = Buffer.from(iv);
- this._cache = Buffer.allocUnsafe(0);
- this._secCache = Buffer.allocUnsafe(0);
- this._decrypt = decrypt;
- this._mode = mode;
- }
- inherits(StreamCipher, Transform);
- StreamCipher.prototype._update = function (chunk) {
- return this._mode.encrypt(this, chunk, this._decrypt);
- };
- StreamCipher.prototype._final = function () {
- this._cipher.scrub();
- };
- module.exports = StreamCipher;
- },{"./aes":186,"cipher-base":218,"inherits":278,"safe-buffer":384}],203:[function(require,module,exports){
- "use strict";
- var DES = require('browserify-des');
- var aes = require('browserify-aes/browser');
- var aesModes = require('browserify-aes/modes');
- var desModes = require('browserify-des/modes');
- var ebtk = require('evp_bytestokey');
- function createCipher(suite, password) {
- suite = suite.toLowerCase();
- var keyLen, ivLen;
- if (aesModes[suite]) {
- keyLen = aesModes[suite].key;
- ivLen = aesModes[suite].iv;
- } else if (desModes[suite]) {
- keyLen = desModes[suite].key * 8;
- ivLen = desModes[suite].iv;
- } else {
- throw new TypeError('invalid suite type');
- }
- var keys = ebtk(password, false, keyLen, ivLen);
- return createCipheriv(suite, keys.key, keys.iv);
- }
- function createDecipher(suite, password) {
- suite = suite.toLowerCase();
- var keyLen, ivLen;
- if (aesModes[suite]) {
- keyLen = aesModes[suite].key;
- ivLen = aesModes[suite].iv;
- } else if (desModes[suite]) {
- keyLen = desModes[suite].key * 8;
- ivLen = desModes[suite].iv;
- } else {
- throw new TypeError('invalid suite type');
- }
- var keys = ebtk(password, false, keyLen, ivLen);
- return createDecipheriv(suite, keys.key, keys.iv);
- }
- function createCipheriv(suite, key, iv) {
- suite = suite.toLowerCase();
- if (aesModes[suite]) return aes.createCipheriv(suite, key, iv);
- if (desModes[suite]) return new DES({
- key: key,
- iv: iv,
- mode: suite
- });
- throw new TypeError('invalid suite type');
- }
- function createDecipheriv(suite, key, iv) {
- suite = suite.toLowerCase();
- if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv);
- if (desModes[suite]) return new DES({
- key: key,
- iv: iv,
- mode: suite,
- decrypt: true
- });
- throw new TypeError('invalid suite type');
- }
- function getCiphers() {
- return Object.keys(desModes).concat(aes.getCiphers());
- }
- exports.createCipher = exports.Cipher = createCipher;
- exports.createCipheriv = exports.Cipheriv = createCipheriv;
- exports.createDecipher = exports.Decipher = createDecipher;
- exports.createDecipheriv = exports.Decipheriv = createDecipheriv;
- exports.listCiphers = exports.getCiphers = getCiphers;
- },{"browserify-aes/browser":188,"browserify-aes/modes":199,"browserify-des":204,"browserify-des/modes":205,"evp_bytestokey":259}],204:[function(require,module,exports){
- "use strict";
- var CipherBase = require('cipher-base');
- var des = require('des.js');
- var inherits = require('inherits');
- var Buffer = require('safe-buffer').Buffer;
- var modes = {
- 'des-ede3-cbc': des.CBC.instantiate(des.EDE),
- 'des-ede3': des.EDE,
- 'des-ede-cbc': des.CBC.instantiate(des.EDE),
- 'des-ede': des.EDE,
- 'des-cbc': des.CBC.instantiate(des.DES),
- 'des-ecb': des.DES
- };
- modes.des = modes['des-cbc'];
- modes.des3 = modes['des-ede3-cbc'];
- module.exports = DES;
- inherits(DES, CipherBase);
- function DES(opts) {
- CipherBase.call(this);
- var modeName = opts.mode.toLowerCase();
- var mode = modes[modeName];
- var type;
- if (opts.decrypt) {
- type = 'decrypt';
- } else {
- type = 'encrypt';
- }
- var key = opts.key;
- if (!Buffer.isBuffer(key)) {
- key = Buffer.from(key);
- }
- if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {
- key = Buffer.concat([key, key.slice(0, 8)]);
- }
- var iv = opts.iv;
- if (!Buffer.isBuffer(iv)) {
- iv = Buffer.from(iv);
- }
- this._des = mode.create({
- key: key,
- iv: iv,
- type: type
- });
- }
- DES.prototype._update = function (data) {
- return Buffer.from(this._des.update(data));
- };
- DES.prototype._final = function () {
- return Buffer.from(this._des.final());
- };
- },{"cipher-base":218,"des.js":230,"inherits":278,"safe-buffer":384}],205:[function(require,module,exports){
- "use strict";
- exports['des-ecb'] = {
- key: 8,
- iv: 0
- };
- exports['des-cbc'] = exports.des = {
- key: 8,
- iv: 8
- };
- exports['des-ede3-cbc'] = exports.des3 = {
- key: 24,
- iv: 8
- };
- exports['des-ede3'] = {
- key: 24,
- iv: 0
- };
- exports['des-ede-cbc'] = {
- key: 16,
- iv: 8
- };
- exports['des-ede'] = {
- key: 16,
- iv: 0
- };
- },{}],206:[function(require,module,exports){
- (function (Buffer){
- "use strict";
- var bn = require('bn.js');
- var randomBytes = require('randombytes');
- module.exports = crt;
- function blind(priv) {
- var r = getr(priv);
- var blinder = r.toRed(bn.mont(priv.modulus)).redPow(new bn(priv.publicExponent)).fromRed();
- return {
- blinder: blinder,
- unblinder: r.invm(priv.modulus)
- };
- }
- function crt(msg, priv) {
- var blinds = blind(priv);
- var len = priv.modulus.byteLength();
- var mod = bn.mont(priv.modulus);
- var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus);
- var c1 = blinded.toRed(bn.mont(priv.prime1));
- var c2 = blinded.toRed(bn.mont(priv.prime2));
- var qinv = priv.coefficient;
- var p = priv.prime1;
- var q = priv.prime2;
- var m1 = c1.redPow(priv.exponent1);
- var m2 = c2.redPow(priv.exponent2);
- m1 = m1.fromRed();
- m2 = m2.fromRed();
- var h = m1.isub(m2).imul(qinv).umod(p);
- h.imul(q);
- m2.iadd(h);
- return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len));
- }
- crt.getr = getr;
- function getr(priv) {
- var len = priv.modulus.byteLength();
- var r = new bn(randomBytes(len));
- while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) {
- r = new bn(randomBytes(len));
- }
- return r;
- }
- }).call(this,require("buffer").Buffer)
- },{"bn.js":207,"buffer":216,"randombytes":366}],207:[function(require,module,exports){
- arguments[4][181][0].apply(exports,arguments)
- },{"buffer":185,"dup":181}],208:[function(require,module,exports){
- "use strict";
- module.exports = require('./browser/algorithms.json');
- },{"./browser/algorithms.json":209}],209:[function(require,module,exports){
- module.exports={
- "sha224WithRSAEncryption": {
- "sign": "rsa",
- "hash": "sha224",
- "id": "302d300d06096086480165030402040500041c"
- },
- "RSA-SHA224": {
- "sign": "ecdsa/rsa",
- "hash": "sha224",
- "id": "302d300d06096086480165030402040500041c"
- },
- "sha256WithRSAEncryption": {
- "sign": "rsa",
- "hash": "sha256",
- "id": "3031300d060960864801650304020105000420"
- },
- "RSA-SHA256": {
- "sign": "ecdsa/rsa",
- "hash": "sha256",
- "id": "3031300d060960864801650304020105000420"
- },
- "sha384WithRSAEncryption": {
- "sign": "rsa",
- "hash": "sha384",
- "id": "3041300d060960864801650304020205000430"
- },
- "RSA-SHA384": {
- "sign": "ecdsa/rsa",
- "hash": "sha384",
- "id": "3041300d060960864801650304020205000430"
- },
- "sha512WithRSAEncryption": {
- "sign": "rsa",
- "hash": "sha512",
- "id": "3051300d060960864801650304020305000440"
- },
- "RSA-SHA512": {
- "sign": "ecdsa/rsa",
- "hash": "sha512",
- "id": "3051300d060960864801650304020305000440"
- },
- "RSA-SHA1": {
- "sign": "rsa",
- "hash": "sha1",
- "id": "3021300906052b0e03021a05000414"
- },
- "ecdsa-with-SHA1": {
- "sign": "ecdsa",
- "hash": "sha1",
- "id": ""
- },
- "sha256": {
- "sign": "ecdsa",
- "hash": "sha256",
- "id": ""
- },
- "sha224": {
- "sign": "ecdsa",
- "hash": "sha224",
- "id": ""
- },
- "sha384": {
- "sign": "ecdsa",
- "hash": "sha384",
- "id": ""
- },
- "sha512": {
- "sign": "ecdsa",
- "hash": "sha512",
- "id": ""
- },
- "DSA-SHA": {
- "sign": "dsa",
- "hash": "sha1",
- "id": ""
- },
- "DSA-SHA1": {
- "sign": "dsa",
- "hash": "sha1",
- "id": ""
- },
- "DSA": {
- "sign": "dsa",
- "hash": "sha1",
- "id": ""
- },
- "DSA-WITH-SHA224": {
- "sign": "dsa",
- "hash": "sha224",
- "id": ""
- },
- "DSA-SHA224": {
- "sign": "dsa",
- "hash": "sha224",
- "id": ""
- },
- "DSA-WITH-SHA256": {
- "sign": "dsa",
- "hash": "sha256",
- "id": ""
- },
- "DSA-SHA256": {
- "sign": "dsa",
- "hash": "sha256",
- "id": ""
- },
- "DSA-WITH-SHA384": {
- "sign": "dsa",
- "hash": "sha384",
- "id": ""
- },
- "DSA-SHA384": {
- "sign": "dsa",
- "hash": "sha384",
- "id": ""
- },
- "DSA-WITH-SHA512": {
- "sign": "dsa",
- "hash": "sha512",
- "id": ""
- },
- "DSA-SHA512": {
- "sign": "dsa",
- "hash": "sha512",
- "id": ""
- },
- "DSA-RIPEMD160": {
- "sign": "dsa",
- "hash": "rmd160",
- "id": ""
- },
- "ripemd160WithRSA": {
- "sign": "rsa",
- "hash": "rmd160",
- "id": "3021300906052b2403020105000414"
- },
- "RSA-RIPEMD160": {
- "sign": "rsa",
- "hash": "rmd160",
- "id": "3021300906052b2403020105000414"
- },
- "md5WithRSAEncryption": {
- "sign": "rsa",
- "hash": "md5",
- "id": "3020300c06082a864886f70d020505000410"
- },
- "RSA-MD5": {
- "sign": "rsa",
- "hash": "md5",
- "id": "3020300c06082a864886f70d020505000410"
- }
- }
- },{}],210:[function(require,module,exports){
- module.exports={
- "1.3.132.0.10": "secp256k1",
- "1.3.132.0.33": "p224",
- "1.2.840.10045.3.1.1": "p192",
- "1.2.840.10045.3.1.7": "p256",
- "1.3.132.0.34": "p384",
- "1.3.132.0.35": "p521"
- }
- },{}],211:[function(require,module,exports){
- "use strict";
- var Buffer = require('safe-buffer').Buffer;
- var createHash = require('create-hash');
- var stream = require('readable-stream');
- var inherits = require('inherits');
- var sign = require('./sign');
- var verify = require('./verify');
- var algorithms = require('./algorithms.json');
- Object.keys(algorithms).forEach(function (key) {
- algorithms[key].id = Buffer.from(algorithms[key].id, 'hex');
- algorithms[key.toLowerCase()] = algorithms[key];
- });
- function Sign(algorithm) {
- stream.Writable.call(this);
- var data = algorithms[algorithm];
- if (!data) throw new Error('Unknown message digest');
- this._hashType = data.hash;
- this._hash = createHash(data.hash);
- this._tag = data.id;
- this._signType = data.sign;
- }
- inherits(Sign, stream.Writable);
- Sign.prototype._write = function _write(data, _, done) {
- this._hash.update(data);
- done();
- };
- Sign.prototype.update = function update(data, enc) {
- if (typeof data === 'string') data = Buffer.from(data, enc);
- this._hash.update(data);
- return this;
- };
- Sign.prototype.sign = function signMethod(key, enc) {
- this.end();
- var hash = this._hash.digest();
- var sig = sign(hash, key, this._hashType, this._signType, this._tag);
- return enc ? sig.toString(enc) : sig;
- };
- function Verify(algorithm) {
- stream.Writable.call(this);
- var data = algorithms[algorithm];
- if (!data) throw new Error('Unknown message digest');
- this._hash = createHash(data.hash);
- this._tag = data.id;
- this._signType = data.sign;
- }
- inherits(Verify, stream.Writable);
- Verify.prototype._write = function _write(data, _, done) {
- this._hash.update(data);
- done();
- };
- Verify.prototype.update = function update(data, enc) {
- if (typeof data === 'string') data = Buffer.from(data, enc);
- this._hash.update(data);
- return this;
- };
- Verify.prototype.verify = function verifyMethod(key, sig, enc) {
- if (typeof sig === 'string') sig = Buffer.from(sig, enc);
- this.end();
- var hash = this._hash.digest();
- return verify(sig, hash, key, this._signType, this._tag);
- };
- function createSign(algorithm) {
- return new Sign(algorithm);
- }
- function createVerify(algorithm) {
- return new Verify(algorithm);
- }
- module.exports = {
- Sign: createSign,
- Verify: createVerify,
- createSign: createSign,
- createVerify: createVerify
- };
- },{"./algorithms.json":209,"./sign":212,"./verify":213,"create-hash":222,"inherits":278,"readable-stream":382,"safe-buffer":214}],212:[function(require,module,exports){
- "use strict";
- // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js
- var Buffer = require('safe-buffer').Buffer;
- var createHmac = require('create-hmac');
- var crt = require('browserify-rsa');
- var EC = require('elliptic').ec;
- var BN = require('bn.js');
- var parseKeys = require('parse-asn1');
- var curves = require('./curves.json');
- function sign(hash, key, hashType, signType, tag) {
- var priv = parseKeys(key);
- if (priv.curve) {
- // rsa keys can be interpreted as ecdsa ones in openssl
- if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type');
- return ecSign(hash, priv);
- } else if (priv.type === 'dsa') {
- if (signType !== 'dsa') throw new Error('wrong private key type');
- return dsaSign(hash, priv, hashType);
- } else {
- if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type');
- }
- hash = Buffer.concat([tag, hash]);
- var len = priv.modulus.byteLength();
- var pad = [0, 1];
- while (hash.length + pad.length + 1 < len) {
- pad.push(0xff);
- }
- pad.push(0x00);
- var i = -1;
- while (++i < hash.length) {
- pad.push(hash[i]);
- }
- var out = crt(pad, priv);
- return out;
- }
- function ecSign(hash, priv) {
- var curveId = curves[priv.curve.join('.')];
- if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'));
- var curve = new EC(curveId);
- var key = curve.keyFromPrivate(priv.privateKey);
- var out = key.sign(hash);
- return Buffer.from(out.toDER());
- }
- function dsaSign(hash, priv, algo) {
- var x = priv.params.priv_key;
- var p = priv.params.p;
- var q = priv.params.q;
- var g = priv.params.g;
- var r = new BN(0);
- var k;
- var H = bits2int(hash, q).mod(q);
- var s = false;
- var kv = getKey(x, q, hash, algo);
- while (s === false) {
- k = makeKey(q, kv, algo);
- r = makeR(g, k, p, q);
- s = k.invm(q).imul(H.add(x.mul(r))).mod(q);
- if (s.cmpn(0) === 0) {
- s = false;
- r = new BN(0);
- }
- }
- return toDER(r, s);
- }
- function toDER(r, s) {
- r = r.toArray();
- s = s.toArray(); // Pad values
- if (r[0] & 0x80) r = [0].concat(r);
- if (s[0] & 0x80) s = [0].concat(s);
- var total = r.length + s.length + 4;
- var res = [0x30, total, 0x02, r.length];
- res = res.concat(r, [0x02, s.length], s);
- return Buffer.from(res);
- }
- function getKey(x, q, hash, algo) {
- x = Buffer.from(x.toArray());
- if (x.length < q.byteLength()) {
- var zeros = Buffer.alloc(q.byteLength() - x.length);
- x = Buffer.concat([zeros, x]);
- }
- var hlen = hash.length;
- var hbits = bits2octets(hash, q);
- var v = Buffer.alloc(hlen);
- v.fill(1);
- var k = Buffer.alloc(hlen);
- k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest();
- v = createHmac(algo, k).update(v).digest();
- k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest();
- v = createHmac(algo, k).update(v).digest();
- return {
- k: k,
- v: v
- };
- }
- function bits2int(obits, q) {
- var bits = new BN(obits);
- var shift = (obits.length << 3) - q.bitLength();
- if (shift > 0) bits.ishrn(shift);
- return bits;
- }
- function bits2octets(bits, q) {
- bits = bits2int(bits, q);
- bits = bits.mod(q);
- var out = Buffer.from(bits.toArray());
- if (out.length < q.byteLength()) {
- var zeros = Buffer.alloc(q.byteLength() - out.length);
- out = Buffer.concat([zeros, out]);
- }
- return out;
- }
- function makeKey(q, kv, algo) {
- var t;
- var k;
- do {
- t = Buffer.alloc(0);
- while (t.length * 8 < q.bitLength()) {
- kv.v = createHmac(algo, kv.k).update(kv.v).digest();
- t = Buffer.concat([t, kv.v]);
- }
- k = bits2int(t, q);
- kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest();
- kv.v = createHmac(algo, kv.k).update(kv.v).digest();
- } while (k.cmp(q) !== -1);
- return k;
- }
- function makeR(g, k, p, q) {
- return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q);
- }
- module.exports = sign;
- module.exports.getKey = getKey;
- module.exports.makeKey = makeKey;
- },{"./curves.json":210,"bn.js":183,"browserify-rsa":206,"create-hmac":224,"elliptic":241,"parse-asn1":350,"safe-buffer":214}],213:[function(require,module,exports){
- "use strict";
- // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js
- var Buffer = require('safe-buffer').Buffer;
- var BN = require('bn.js');
- var EC = require('elliptic').ec;
- var parseKeys = require('parse-asn1');
- var curves = require('./curves.json');
- function verify(sig, hash, key, signType, tag) {
- var pub = parseKeys(key);
- if (pub.type === 'ec') {
- // rsa keys can be interpreted as ecdsa ones in openssl
- if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type');
- return ecVerify(sig, hash, pub);
- } else if (pub.type === 'dsa') {
- if (signType !== 'dsa') throw new Error('wrong public key type');
- return dsaVerify(sig, hash, pub);
- } else {
- if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type');
- }
- hash = Buffer.concat([tag, hash]);
- var len = pub.modulus.byteLength();
- var pad = [1];
- var padNum = 0;
- while (hash.length + pad.length + 2 < len) {
- pad.push(0xff);
- padNum++;
- }
- pad.push(0x00);
- var i = -1;
- while (++i < hash.length) {
- pad.push(hash[i]);
- }
- pad = Buffer.from(pad);
- var red = BN.mont(pub.modulus);
- sig = new BN(sig).toRed(red);
- sig = sig.redPow(new BN(pub.publicExponent));
- sig = Buffer.from(sig.fromRed().toArray());
- var out = padNum < 8 ? 1 : 0;
- len = Math.min(sig.length, pad.length);
- if (sig.length !== pad.length) out = 1;
- i = -1;
- while (++i < len) {
- out |= sig[i] ^ pad[i];
- }
- return out === 0;
- }
- function ecVerify(sig, hash, pub) {
- var curveId = curves[pub.data.algorithm.curve.join('.')];
- if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'));
- var curve = new EC(curveId);
- var pubkey = pub.data.subjectPrivateKey.data;
- return curve.verify(hash, sig, pubkey);
- }
- function dsaVerify(sig, hash, pub) {
- var p = pub.data.p;
- var q = pub.data.q;
- var g = pub.data.g;
- var y = pub.data.pub_key;
- var unpacked = parseKeys.signature.decode(sig, 'der');
- var s = unpacked.s;
- var r = unpacked.r;
- checkValue(s, q);
- checkValue(r, q);
- var montp = BN.mont(p);
- var w = s.invm(q);
- var v = g.toRed(montp).redPow(new BN(hash).mul(w).mod(q)).fromRed().mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed()).mod(p).mod(q);
- return v.cmp(r) === 0;
- }
- function checkValue(b, q) {
- if (b.cmpn(0) <= 0) throw new Error('invalid sig');
- if (b.cmp(q) >= q) throw new Error('invalid sig');
- }
- module.exports = verify;
- },{"./curves.json":210,"bn.js":183,"elliptic":241,"parse-asn1":350,"safe-buffer":214}],214:[function(require,module,exports){
- "use strict";
- /*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
- /* eslint-disable node/no-deprecated-api */
- var buffer = require('buffer');
- var Buffer = buffer.Buffer; // alternative to using Object.keys for old browsers
- function copyProps(src, dst) {
- for (var key in src) {
- dst[key] = src[key];
- }
- }
- if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
- module.exports = buffer;
- } else {
- // Copy properties from require('buffer')
- copyProps(buffer, exports);
- exports.Buffer = SafeBuffer;
- }
- function SafeBuffer(arg, encodingOrOffset, length) {
- return Buffer(arg, encodingOrOffset, length);
- }
- SafeBuffer.prototype = Object.create(Buffer.prototype); // Copy static methods from Buffer
- copyProps(Buffer, SafeBuffer);
- SafeBuffer.from = function (arg, encodingOrOffset, length) {
- if (typeof arg === 'number') {
- throw new TypeError('Argument must not be a number');
- }
- return Buffer(arg, encodingOrOffset, length);
- };
- SafeBuffer.alloc = function (size, fill, encoding) {
- if (typeof size !== 'number') {
- throw new TypeError('Argument must be a number');
- }
- var buf = Buffer(size);
- if (fill !== undefined) {
- if (typeof encoding === 'string') {
- buf.fill(fill, encoding);
- } else {
- buf.fill(fill);
- }
- } else {
- buf.fill(0);
- }
- return buf;
- };
- SafeBuffer.allocUnsafe = function (size) {
- if (typeof size !== 'number') {
- throw new TypeError('Argument must be a number');
- }
- return Buffer(size);
- };
- SafeBuffer.allocUnsafeSlow = function (size) {
- if (typeof size !== 'number') {
- throw new TypeError('Argument must be a number');
- }
- return buffer.SlowBuffer(size);
- };
- },{"buffer":216}],215:[function(require,module,exports){
- arguments[4][185][0].apply(exports,arguments)
- },{"dup":185}],216:[function(require,module,exports){
- (function (Buffer){
- /*!
- * The buffer module from node.js, for the browser.
- *
- * @author Feross Aboukhadijeh <https://feross.org>
- * @license MIT
- */
- /* eslint-disable no-proto */
- 'use strict';
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- var base64 = require('base64-js');
- var ieee754 = require('ieee754');
- exports.Buffer = Buffer;
- exports.SlowBuffer = SlowBuffer;
- exports.INSPECT_MAX_BYTES = 50;
- var K_MAX_LENGTH = 0x7fffffff;
- exports.kMaxLength = K_MAX_LENGTH;
- /**
- * If `Buffer.TYPED_ARRAY_SUPPORT`:
- * === true Use Uint8Array implementation (fastest)
- * === false Print warning and recommend using `buffer` v4.x which has an Object
- * implementation (most compatible, even IE6)
- *
- * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
- * Opera 11.6+, iOS 4.2+.
- *
- * We report that the browser does not support typed arrays if the are not subclassable
- * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
- * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
- * for __proto__ and has a buggy typed array implementation.
- */
- Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport();
- if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && typeof console.error === 'function') {
- console.error('This browser lacks typed array (Uint8Array) support which is required by ' + '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.');
- }
- function typedArraySupport() {
- // Can typed array instances can be augmented?
- try {
- var arr = new Uint8Array(1);
- arr.__proto__ = {
- __proto__: Uint8Array.prototype,
- foo: function foo() {
- return 42;
- }
- };
- return arr.foo() === 42;
- } catch (e) {
- return false;
- }
- }
- Object.defineProperty(Buffer.prototype, 'parent', {
- enumerable: true,
- get: function get() {
- if (!Buffer.isBuffer(this)) return undefined;
- return this.buffer;
- }
- });
- Object.defineProperty(Buffer.prototype, 'offset', {
- enumerable: true,
- get: function get() {
- if (!Buffer.isBuffer(this)) return undefined;
- return this.byteOffset;
- }
- });
- function createBuffer(length) {
- if (length > K_MAX_LENGTH) {
- throw new RangeError('The value "' + length + '" is invalid for option "size"');
- } // Return an augmented `Uint8Array` instance
- var buf = new Uint8Array(length);
- buf.__proto__ = Buffer.prototype;
- return buf;
- }
- /**
- * The Buffer constructor returns instances of `Uint8Array` that have their
- * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
- * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
- * and the `Uint8Array` methods. Square bracket notation works as expected -- it
- * returns a single octet.
- *
- * The `Uint8Array` prototype remains unmodified.
- */
- function Buffer(arg, encodingOrOffset, length) {
- // Common case.
- if (typeof arg === 'number') {
- if (typeof encodingOrOffset === 'string') {
- throw new TypeError('The "string" argument must be of type string. Received type number');
- }
- return allocUnsafe(arg);
- }
- return from(arg, encodingOrOffset, length);
- } // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
- if (typeof Symbol !== 'undefined' && Symbol.species != null && Buffer[Symbol.species] === Buffer) {
- Object.defineProperty(Buffer, Symbol.species, {
- value: null,
- configurable: true,
- enumerable: false,
- writable: false
- });
- }
- Buffer.poolSize = 8192; // not used by this implementation
- function from(value, encodingOrOffset, length) {
- if (typeof value === 'string') {
- return fromString(value, encodingOrOffset);
- }
- if (ArrayBuffer.isView(value)) {
- return fromArrayLike(value);
- }
- if (value == null) {
- throw TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + 'or Array-like Object. Received type ' + _typeof(value));
- }
- if (isInstance(value, ArrayBuffer) || value && isInstance(value.buffer, ArrayBuffer)) {
- return fromArrayBuffer(value, encodingOrOffset, length);
- }
- if (typeof value === 'number') {
- throw new TypeError('The "value" argument must not be of type number. Received type number');
- }
- var valueOf = value.valueOf && value.valueOf();
- if (valueOf != null && valueOf !== value) {
- return Buffer.from(valueOf, encodingOrOffset, length);
- }
- var b = fromObject(value);
- if (b) return b;
- if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && typeof value[Symbol.toPrimitive] === 'function') {
- return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length);
- }
- throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + 'or Array-like Object. Received type ' + _typeof(value));
- }
- /**
- * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
- * if value is a number.
- * Buffer.from(str[, encoding])
- * Buffer.from(array)
- * Buffer.from(buffer)
- * Buffer.from(arrayBuffer[, byteOffset[, length]])
- **/
- Buffer.from = function (value, encodingOrOffset, length) {
- return from(value, encodingOrOffset, length);
- }; // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
- // https://github.com/feross/buffer/pull/148
- Buffer.prototype.__proto__ = Uint8Array.prototype;
- Buffer.__proto__ = Uint8Array;
- function assertSize(size) {
- if (typeof size !== 'number') {
- throw new TypeError('"size" argument must be of type number');
- } else if (size < 0) {
- throw new RangeError('The value "' + size + '" is invalid for option "size"');
- }
- }
- function alloc(size, fill, encoding) {
- assertSize(size);
- if (size <= 0) {
- return createBuffer(size);
- }
- if (fill !== undefined) {
- // Only pay attention to encoding if it's a string. This
- // prevents accidentally sending in a number that would
- // be interpretted as a start offset.
- return typeof encoding === 'string' ? createBuffer(size).fill(fill, encoding) : createBuffer(size).fill(fill);
- }
- return createBuffer(size);
- }
- /**
- * Creates a new filled Buffer instance.
- * alloc(size[, fill[, encoding]])
- **/
- Buffer.alloc = function (size, fill, encoding) {
- return alloc(size, fill, encoding);
- };
- function allocUnsafe(size) {
- assertSize(size);
- return createBuffer(size < 0 ? 0 : checked(size) | 0);
- }
- /**
- * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
- * */
- Buffer.allocUnsafe = function (size) {
- return allocUnsafe(size);
- };
- /**
- * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
- */
- Buffer.allocUnsafeSlow = function (size) {
- return allocUnsafe(size);
- };
- function fromString(string, encoding) {
- if (typeof encoding !== 'string' || encoding === '') {
- encoding = 'utf8';
- }
- if (!Buffer.isEncoding(encoding)) {
- throw new TypeError('Unknown encoding: ' + encoding);
- }
- var length = byteLength(string, encoding) | 0;
- var buf = createBuffer(length);
- var actual = buf.write(string, encoding);
- if (actual !== length) {
- // Writing a hex string, for example, that contains invalid characters will
- // cause everything after the first invalid character to be ignored. (e.g.
- // 'abxxcd' will be treated as 'ab')
- buf = buf.slice(0, actual);
- }
- return buf;
- }
- function fromArrayLike(array) {
- var length = array.length < 0 ? 0 : checked(array.length) | 0;
- var buf = createBuffer(length);
- for (var i = 0; i < length; i += 1) {
- buf[i] = array[i] & 255;
- }
- return buf;
- }
- function fromArrayBuffer(array, byteOffset, length) {
- if (byteOffset < 0 || array.byteLength < byteOffset) {
- throw new RangeError('"offset" is outside of buffer bounds');
- }
- if (array.byteLength < byteOffset + (length || 0)) {
- throw new RangeError('"length" is outside of buffer bounds');
- }
- var buf;
- if (byteOffset === undefined && length === undefined) {
- buf = new Uint8Array(array);
- } else if (length === undefined) {
- buf = new Uint8Array(array, byteOffset);
- } else {
- buf = new Uint8Array(array, byteOffset, length);
- } // Return an augmented `Uint8Array` instance
- buf.__proto__ = Buffer.prototype;
- return buf;
- }
- function fromObject(obj) {
- if (Buffer.isBuffer(obj)) {
- var len = checked(obj.length) | 0;
- var buf = createBuffer(len);
- if (buf.length === 0) {
- return buf;
- }
- obj.copy(buf, 0, 0, len);
- return buf;
- }
- if (obj.length !== undefined) {
- if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
- return createBuffer(0);
- }
- return fromArrayLike(obj);
- }
- if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
- return fromArrayLike(obj.data);
- }
- }
- function checked(length) {
- // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
- // length is NaN (which is otherwise coerced to zero.)
- if (length >= K_MAX_LENGTH) {
- throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes');
- }
- return length | 0;
- }
- function SlowBuffer(length) {
- if (+length != length) {
- // eslint-disable-line eqeqeq
- length = 0;
- }
- return Buffer.alloc(+length);
- }
- Buffer.isBuffer = function isBuffer(b) {
- return b != null && b._isBuffer === true && b !== Buffer.prototype; // so Buffer.isBuffer(Buffer.prototype) will be false
- };
- Buffer.compare = function compare(a, b) {
- if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength);
- if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength);
- if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
- throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');
- }
- if (a === b) return 0;
- var x = a.length;
- var y = b.length;
- for (var i = 0, len = Math.min(x, y); i < len; ++i) {
- if (a[i] !== b[i]) {
- x = a[i];
- y = b[i];
- break;
- }
- }
- if (x < y) return -1;
- if (y < x) return 1;
- return 0;
- };
- Buffer.isEncoding = function isEncoding(encoding) {
- switch (String(encoding).toLowerCase()) {
- case 'hex':
- case 'utf8':
- case 'utf-8':
- case 'ascii':
- case 'latin1':
- case 'binary':
- case 'base64':
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return true;
- default:
- return false;
- }
- };
- Buffer.concat = function concat(list, length) {
- if (!Array.isArray(list)) {
- throw new TypeError('"list" argument must be an Array of Buffers');
- }
- if (list.length === 0) {
- return Buffer.alloc(0);
- }
- var i;
- if (length === undefined) {
- length = 0;
- for (i = 0; i < list.length; ++i) {
- length += list[i].length;
- }
- }
- var buffer = Buffer.allocUnsafe(length);
- var pos = 0;
- for (i = 0; i < list.length; ++i) {
- var buf = list[i];
- if (isInstance(buf, Uint8Array)) {
- buf = Buffer.from(buf);
- }
- if (!Buffer.isBuffer(buf)) {
- throw new TypeError('"list" argument must be an Array of Buffers');
- }
- buf.copy(buffer, pos);
- pos += buf.length;
- }
- return buffer;
- };
- function byteLength(string, encoding) {
- if (Buffer.isBuffer(string)) {
- return string.length;
- }
- if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {
- return string.byteLength;
- }
- if (typeof string !== 'string') {
- throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' + 'Received type ' + _typeof(string));
- }
- var len = string.length;
- var mustMatch = arguments.length > 2 && arguments[2] === true;
- if (!mustMatch && len === 0) return 0; // Use a for loop to avoid recursion
- var loweredCase = false;
- for (;;) {
- switch (encoding) {
- case 'ascii':
- case 'latin1':
- case 'binary':
- return len;
- case 'utf8':
- case 'utf-8':
- return utf8ToBytes(string).length;
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return len * 2;
- case 'hex':
- return len >>> 1;
- case 'base64':
- return base64ToBytes(string).length;
- default:
- if (loweredCase) {
- return mustMatch ? -1 : utf8ToBytes(string).length; // assume utf8
- }
- encoding = ('' + encoding).toLowerCase();
- loweredCase = true;
- }
- }
- }
- Buffer.byteLength = byteLength;
- function slowToString(encoding, start, end) {
- var loweredCase = false; // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
- // property of a typed array.
- // This behaves neither like String nor Uint8Array in that we set start/end
- // to their upper/lower bounds if the value passed is out of range.
- // undefined is handled specially as per ECMA-262 6th Edition,
- // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
- if (start === undefined || start < 0) {
- start = 0;
- } // Return early if start > this.length. Done here to prevent potential uint32
- // coercion fail below.
- if (start > this.length) {
- return '';
- }
- if (end === undefined || end > this.length) {
- end = this.length;
- }
- if (end <= 0) {
- return '';
- } // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
- end >>>= 0;
- start >>>= 0;
- if (end <= start) {
- return '';
- }
- if (!encoding) encoding = 'utf8';
- while (true) {
- switch (encoding) {
- case 'hex':
- return hexSlice(this, start, end);
- case 'utf8':
- case 'utf-8':
- return utf8Slice(this, start, end);
- case 'ascii':
- return asciiSlice(this, start, end);
- case 'latin1':
- case 'binary':
- return latin1Slice(this, start, end);
- case 'base64':
- return base64Slice(this, start, end);
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return utf16leSlice(this, start, end);
- default:
- if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);
- encoding = (encoding + '').toLowerCase();
- loweredCase = true;
- }
- }
- } // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
- // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
- // reliably in a browserify context because there could be multiple different
- // copies of the 'buffer' package in use. This method works even for Buffer
- // instances that were created from another copy of the `buffer` package.
- // See: https://github.com/feross/buffer/issues/154
- Buffer.prototype._isBuffer = true;
- function swap(b, n, m) {
- var i = b[n];
- b[n] = b[m];
- b[m] = i;
- }
- Buffer.prototype.swap16 = function swap16() {
- var len = this.length;
- if (len % 2 !== 0) {
- throw new RangeError('Buffer size must be a multiple of 16-bits');
- }
- for (var i = 0; i < len; i += 2) {
- swap(this, i, i + 1);
- }
- return this;
- };
- Buffer.prototype.swap32 = function swap32() {
- var len = this.length;
- if (len % 4 !== 0) {
- throw new RangeError('Buffer size must be a multiple of 32-bits');
- }
- for (var i = 0; i < len; i += 4) {
- swap(this, i, i + 3);
- swap(this, i + 1, i + 2);
- }
- return this;
- };
- Buffer.prototype.swap64 = function swap64() {
- var len = this.length;
- if (len % 8 !== 0) {
- throw new RangeError('Buffer size must be a multiple of 64-bits');
- }
- for (var i = 0; i < len; i += 8) {
- swap(this, i, i + 7);
- swap(this, i + 1, i + 6);
- swap(this, i + 2, i + 5);
- swap(this, i + 3, i + 4);
- }
- return this;
- };
- Buffer.prototype.toString = function toString() {
- var length = this.length;
- if (length === 0) return '';
- if (arguments.length === 0) return utf8Slice(this, 0, length);
- return slowToString.apply(this, arguments);
- };
- Buffer.prototype.toLocaleString = Buffer.prototype.toString;
- Buffer.prototype.equals = function equals(b) {
- if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer');
- if (this === b) return true;
- return Buffer.compare(this, b) === 0;
- };
- Buffer.prototype.inspect = function inspect() {
- var str = '';
- var max = exports.INSPECT_MAX_BYTES;
- str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim();
- if (this.length > max) str += ' ... ';
- return '<Buffer ' + str + '>';
- };
- Buffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) {
- if (isInstance(target, Uint8Array)) {
- target = Buffer.from(target, target.offset, target.byteLength);
- }
- if (!Buffer.isBuffer(target)) {
- throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. ' + 'Received type ' + _typeof(target));
- }
- if (start === undefined) {
- start = 0;
- }
- if (end === undefined) {
- end = target ? target.length : 0;
- }
- if (thisStart === undefined) {
- thisStart = 0;
- }
- if (thisEnd === undefined) {
- thisEnd = this.length;
- }
- if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
- throw new RangeError('out of range index');
- }
- if (thisStart >= thisEnd && start >= end) {
- return 0;
- }
- if (thisStart >= thisEnd) {
- return -1;
- }
- if (start >= end) {
- return 1;
- }
- start >>>= 0;
- end >>>= 0;
- thisStart >>>= 0;
- thisEnd >>>= 0;
- if (this === target) return 0;
- var x = thisEnd - thisStart;
- var y = end - start;
- var len = Math.min(x, y);
- var thisCopy = this.slice(thisStart, thisEnd);
- var targetCopy = target.slice(start, end);
- for (var i = 0; i < len; ++i) {
- if (thisCopy[i] !== targetCopy[i]) {
- x = thisCopy[i];
- y = targetCopy[i];
- break;
- }
- }
- if (x < y) return -1;
- if (y < x) return 1;
- return 0;
- }; // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
- // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
- //
- // Arguments:
- // - buffer - a Buffer to search
- // - val - a string, Buffer, or number
- // - byteOffset - an index into `buffer`; will be clamped to an int32
- // - encoding - an optional encoding, relevant is val is a string
- // - dir - true for indexOf, false for lastIndexOf
- function bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {
- // Empty buffer means no match
- if (buffer.length === 0) return -1; // Normalize byteOffset
- if (typeof byteOffset === 'string') {
- encoding = byteOffset;
- byteOffset = 0;
- } else if (byteOffset > 0x7fffffff) {
- byteOffset = 0x7fffffff;
- } else if (byteOffset < -0x80000000) {
- byteOffset = -0x80000000;
- }
- byteOffset = +byteOffset; // Coerce to Number.
- if (numberIsNaN(byteOffset)) {
- // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
- byteOffset = dir ? 0 : buffer.length - 1;
- } // Normalize byteOffset: negative offsets start from the end of the buffer
- if (byteOffset < 0) byteOffset = buffer.length + byteOffset;
- if (byteOffset >= buffer.length) {
- if (dir) return -1;else byteOffset = buffer.length - 1;
- } else if (byteOffset < 0) {
- if (dir) byteOffset = 0;else return -1;
- } // Normalize val
- if (typeof val === 'string') {
- val = Buffer.from(val, encoding);
- } // Finally, search either indexOf (if dir is true) or lastIndexOf
- if (Buffer.isBuffer(val)) {
- // Special case: looking for empty string/buffer always fails
- if (val.length === 0) {
- return -1;
- }
- return arrayIndexOf(buffer, val, byteOffset, encoding, dir);
- } else if (typeof val === 'number') {
- val = val & 0xFF; // Search for a byte value [0-255]
- if (typeof Uint8Array.prototype.indexOf === 'function') {
- if (dir) {
- return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset);
- } else {
- return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset);
- }
- }
- return arrayIndexOf(buffer, [val], byteOffset, encoding, dir);
- }
- throw new TypeError('val must be string, number or Buffer');
- }
- function arrayIndexOf(arr, val, byteOffset, encoding, dir) {
- var indexSize = 1;
- var arrLength = arr.length;
- var valLength = val.length;
- if (encoding !== undefined) {
- encoding = String(encoding).toLowerCase();
- if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') {
- if (arr.length < 2 || val.length < 2) {
- return -1;
- }
- indexSize = 2;
- arrLength /= 2;
- valLength /= 2;
- byteOffset /= 2;
- }
- }
- function read(buf, i) {
- if (indexSize === 1) {
- return buf[i];
- } else {
- return buf.readUInt16BE(i * indexSize);
- }
- }
- var i;
- if (dir) {
- var foundIndex = -1;
- for (i = byteOffset; i < arrLength; i++) {
- if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
- if (foundIndex === -1) foundIndex = i;
- if (i - foundIndex + 1 === valLength) return foundIndex * indexSize;
- } else {
- if (foundIndex !== -1) i -= i - foundIndex;
- foundIndex = -1;
- }
- }
- } else {
- if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;
- for (i = byteOffset; i >= 0; i--) {
- var found = true;
- for (var j = 0; j < valLength; j++) {
- if (read(arr, i + j) !== read(val, j)) {
- found = false;
- break;
- }
- }
- if (found) return i;
- }
- }
- return -1;
- }
- Buffer.prototype.includes = function includes(val, byteOffset, encoding) {
- return this.indexOf(val, byteOffset, encoding) !== -1;
- };
- Buffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) {
- return bidirectionalIndexOf(this, val, byteOffset, encoding, true);
- };
- Buffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) {
- return bidirectionalIndexOf(this, val, byteOffset, encoding, false);
- };
- function hexWrite(buf, string, offset, length) {
- offset = Number(offset) || 0;
- var remaining = buf.length - offset;
- if (!length) {
- length = remaining;
- } else {
- length = Number(length);
- if (length > remaining) {
- length = remaining;
- }
- }
- var strLen = string.length;
- if (length > strLen / 2) {
- length = strLen / 2;
- }
- for (var i = 0; i < length; ++i) {
- var parsed = parseInt(string.substr(i * 2, 2), 16);
- if (numberIsNaN(parsed)) return i;
- buf[offset + i] = parsed;
- }
- return i;
- }
- function utf8Write(buf, string, offset, length) {
- return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length);
- }
- function asciiWrite(buf, string, offset, length) {
- return blitBuffer(asciiToBytes(string), buf, offset, length);
- }
- function latin1Write(buf, string, offset, length) {
- return asciiWrite(buf, string, offset, length);
- }
- function base64Write(buf, string, offset, length) {
- return blitBuffer(base64ToBytes(string), buf, offset, length);
- }
- function ucs2Write(buf, string, offset, length) {
- return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length);
- }
- Buffer.prototype.write = function write(string, offset, length, encoding) {
- // Buffer#write(string)
- if (offset === undefined) {
- encoding = 'utf8';
- length = this.length;
- offset = 0; // Buffer#write(string, encoding)
- } else if (length === undefined && typeof offset === 'string') {
- encoding = offset;
- length = this.length;
- offset = 0; // Buffer#write(string, offset[, length][, encoding])
- } else if (isFinite(offset)) {
- offset = offset >>> 0;
- if (isFinite(length)) {
- length = length >>> 0;
- if (encoding === undefined) encoding = 'utf8';
- } else {
- encoding = length;
- length = undefined;
- }
- } else {
- throw new Error('Buffer.write(string, encoding, offset[, length]) is no longer supported');
- }
- var remaining = this.length - offset;
- if (length === undefined || length > remaining) length = remaining;
- if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) {
- throw new RangeError('Attempt to write outside buffer bounds');
- }
- if (!encoding) encoding = 'utf8';
- var loweredCase = false;
- for (;;) {
- switch (encoding) {
- case 'hex':
- return hexWrite(this, string, offset, length);
- case 'utf8':
- case 'utf-8':
- return utf8Write(this, string, offset, length);
- case 'ascii':
- return asciiWrite(this, string, offset, length);
- case 'latin1':
- case 'binary':
- return latin1Write(this, string, offset, length);
- case 'base64':
- // Warning: maxLength not taken into account in base64Write
- return base64Write(this, string, offset, length);
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return ucs2Write(this, string, offset, length);
- default:
- if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);
- encoding = ('' + encoding).toLowerCase();
- loweredCase = true;
- }
- }
- };
- Buffer.prototype.toJSON = function toJSON() {
- return {
- type: 'Buffer',
- data: Array.prototype.slice.call(this._arr || this, 0)
- };
- };
- function base64Slice(buf, start, end) {
- if (start === 0 && end === buf.length) {
- return base64.fromByteArray(buf);
- } else {
- return base64.fromByteArray(buf.slice(start, end));
- }
- }
- function utf8Slice(buf, start, end) {
- end = Math.min(buf.length, end);
- var res = [];
- var i = start;
- while (i < end) {
- var firstByte = buf[i];
- var codePoint = null;
- var bytesPerSequence = firstByte > 0xEF ? 4 : firstByte > 0xDF ? 3 : firstByte > 0xBF ? 2 : 1;
- if (i + bytesPerSequence <= end) {
- var secondByte, thirdByte, fourthByte, tempCodePoint;
- switch (bytesPerSequence) {
- case 1:
- if (firstByte < 0x80) {
- codePoint = firstByte;
- }
- break;
- case 2:
- secondByte = buf[i + 1];
- if ((secondByte & 0xC0) === 0x80) {
- tempCodePoint = (firstByte & 0x1F) << 0x6 | secondByte & 0x3F;
- if (tempCodePoint > 0x7F) {
- codePoint = tempCodePoint;
- }
- }
- break;
- case 3:
- secondByte = buf[i + 1];
- thirdByte = buf[i + 2];
- if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
- tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | thirdByte & 0x3F;
- if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
- codePoint = tempCodePoint;
- }
- }
- break;
- case 4:
- secondByte = buf[i + 1];
- thirdByte = buf[i + 2];
- fourthByte = buf[i + 3];
- if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
- tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | fourthByte & 0x3F;
- if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
- codePoint = tempCodePoint;
- }
- }
- }
- }
- if (codePoint === null) {
- // we did not generate a valid codePoint so insert a
- // replacement char (U+FFFD) and advance only 1 byte
- codePoint = 0xFFFD;
- bytesPerSequence = 1;
- } else if (codePoint > 0xFFFF) {
- // encode to utf16 (surrogate pair dance)
- codePoint -= 0x10000;
- res.push(codePoint >>> 10 & 0x3FF | 0xD800);
- codePoint = 0xDC00 | codePoint & 0x3FF;
- }
- res.push(codePoint);
- i += bytesPerSequence;
- }
- return decodeCodePointsArray(res);
- } // Based on http://stackoverflow.com/a/22747272/680742, the browser with
- // the lowest limit is Chrome, with 0x10000 args.
- // We go 1 magnitude less, for safety
- var MAX_ARGUMENTS_LENGTH = 0x1000;
- function decodeCodePointsArray(codePoints) {
- var len = codePoints.length;
- if (len <= MAX_ARGUMENTS_LENGTH) {
- return String.fromCharCode.apply(String, codePoints); // avoid extra slice()
- } // Decode in chunks to avoid "call stack size exceeded".
- var res = '';
- var i = 0;
- while (i < len) {
- res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));
- }
- return res;
- }
- function asciiSlice(buf, start, end) {
- var ret = '';
- end = Math.min(buf.length, end);
- for (var i = start; i < end; ++i) {
- ret += String.fromCharCode(buf[i] & 0x7F);
- }
- return ret;
- }
- function latin1Slice(buf, start, end) {
- var ret = '';
- end = Math.min(buf.length, end);
- for (var i = start; i < end; ++i) {
- ret += String.fromCharCode(buf[i]);
- }
- return ret;
- }
- function hexSlice(buf, start, end) {
- var len = buf.length;
- if (!start || start < 0) start = 0;
- if (!end || end < 0 || end > len) end = len;
- var out = '';
- for (var i = start; i < end; ++i) {
- out += toHex(buf[i]);
- }
- return out;
- }
- function utf16leSlice(buf, start, end) {
- var bytes = buf.slice(start, end);
- var res = '';
- for (var i = 0; i < bytes.length; i += 2) {
- res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);
- }
- return res;
- }
- Buffer.prototype.slice = function slice(start, end) {
- var len = this.length;
- start = ~~start;
- end = end === undefined ? len : ~~end;
- if (start < 0) {
- start += len;
- if (start < 0) start = 0;
- } else if (start > len) {
- start = len;
- }
- if (end < 0) {
- end += len;
- if (end < 0) end = 0;
- } else if (end > len) {
- end = len;
- }
- if (end < start) end = start;
- var newBuf = this.subarray(start, end); // Return an augmented `Uint8Array` instance
- newBuf.__proto__ = Buffer.prototype;
- return newBuf;
- };
- /*
- * Need to make sure that buffer isn't trying to write out of bounds.
- */
- function checkOffset(offset, ext, length) {
- if (offset % 1 !== 0 || offset < 0) throw new RangeError('offset is not uint');
- if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length');
- }
- Buffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) {
- offset = offset >>> 0;
- byteLength = byteLength >>> 0;
- if (!noAssert) checkOffset(offset, byteLength, this.length);
- var val = this[offset];
- var mul = 1;
- var i = 0;
- while (++i < byteLength && (mul *= 0x100)) {
- val += this[offset + i] * mul;
- }
- return val;
- };
- Buffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) {
- offset = offset >>> 0;
- byteLength = byteLength >>> 0;
- if (!noAssert) {
- checkOffset(offset, byteLength, this.length);
- }
- var val = this[offset + --byteLength];
- var mul = 1;
- while (byteLength > 0 && (mul *= 0x100)) {
- val += this[offset + --byteLength] * mul;
- }
- return val;
- };
- Buffer.prototype.readUInt8 = function readUInt8(offset, noAssert) {
- offset = offset >>> 0;
- if (!noAssert) checkOffset(offset, 1, this.length);
- return this[offset];
- };
- Buffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) {
- offset = offset >>> 0;
- if (!noAssert) checkOffset(offset, 2, this.length);
- return this[offset] | this[offset + 1] << 8;
- };
- Buffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) {
- offset = offset >>> 0;
- if (!noAssert) checkOffset(offset, 2, this.length);
- return this[offset] << 8 | this[offset + 1];
- };
- Buffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) {
- offset = offset >>> 0;
- if (!noAssert) checkOffset(offset, 4, this.length);
- return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 0x1000000;
- };
- Buffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {
- offset = offset >>> 0;
- if (!noAssert) checkOffset(offset, 4, this.length);
- return this[offset] * 0x1000000 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]);
- };
- Buffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) {
- offset = offset >>> 0;
- byteLength = byteLength >>> 0;
- if (!noAssert) checkOffset(offset, byteLength, this.length);
- var val = this[offset];
- var mul = 1;
- var i = 0;
- while (++i < byteLength && (mul *= 0x100)) {
- val += this[offset + i] * mul;
- }
- mul *= 0x80;
- if (val >= mul) val -= Math.pow(2, 8 * byteLength);
- return val;
- };
- Buffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) {
- offset = offset >>> 0;
- byteLength = byteLength >>> 0;
- if (!noAssert) checkOffset(offset, byteLength, this.length);
- var i = byteLength;
- var mul = 1;
- var val = this[offset + --i];
- while (i > 0 && (mul *= 0x100)) {
- val += this[offset + --i] * mul;
- }
- mul *= 0x80;
- if (val >= mul) val -= Math.pow(2, 8 * byteLength);
- return val;
- };
- Buffer.prototype.readInt8 = function readInt8(offset, noAssert) {
- offset = offset >>> 0;
- if (!noAssert) checkOffset(offset, 1, this.length);
- if (!(this[offset] & 0x80)) return this[offset];
- return (0xff - this[offset] + 1) * -1;
- };
- Buffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) {
- offset = offset >>> 0;
- if (!noAssert) checkOffset(offset, 2, this.length);
- var val = this[offset] | this[offset + 1] << 8;
- return val & 0x8000 ? val | 0xFFFF0000 : val;
- };
- Buffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) {
- offset = offset >>> 0;
- if (!noAssert) checkOffset(offset, 2, this.length);
- var val = this[offset + 1] | this[offset] << 8;
- return val & 0x8000 ? val | 0xFFFF0000 : val;
- };
- Buffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) {
- offset = offset >>> 0;
- if (!noAssert) checkOffset(offset, 4, this.length);
- return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24;
- };
- Buffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) {
- offset = offset >>> 0;
- if (!noAssert) checkOffset(offset, 4, this.length);
- return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3];
- };
- Buffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) {
- offset = offset >>> 0;
- if (!noAssert) checkOffset(offset, 4, this.length);
- return ieee754.read(this, offset, true, 23, 4);
- };
- Buffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) {
- offset = offset >>> 0;
- if (!noAssert) checkOffset(offset, 4, this.length);
- return ieee754.read(this, offset, false, 23, 4);
- };
- Buffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) {
- offset = offset >>> 0;
- if (!noAssert) checkOffset(offset, 8, this.length);
- return ieee754.read(this, offset, true, 52, 8);
- };
- Buffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) {
- offset = offset >>> 0;
- if (!noAssert) checkOffset(offset, 8, this.length);
- return ieee754.read(this, offset, false, 52, 8);
- };
- function checkInt(buf, value, offset, ext, max, min) {
- if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance');
- if (value > max || value < min) throw new RangeError('"value" argument is out of bounds');
- if (offset + ext > buf.length) throw new RangeError('Index out of range');
- }
- Buffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) {
- value = +value;
- offset = offset >>> 0;
- byteLength = byteLength >>> 0;
- if (!noAssert) {
- var maxBytes = Math.pow(2, 8 * byteLength) - 1;
- checkInt(this, value, offset, byteLength, maxBytes, 0);
- }
- var mul = 1;
- var i = 0;
- this[offset] = value & 0xFF;
- while (++i < byteLength && (mul *= 0x100)) {
- this[offset + i] = value / mul & 0xFF;
- }
- return offset + byteLength;
- };
- Buffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) {
- value = +value;
- offset = offset >>> 0;
- byteLength = byteLength >>> 0;
- if (!noAssert) {
- var maxBytes = Math.pow(2, 8 * byteLength) - 1;
- checkInt(this, value, offset, byteLength, maxBytes, 0);
- }
- var i = byteLength - 1;
- var mul = 1;
- this[offset + i] = value & 0xFF;
- while (--i >= 0 && (mul *= 0x100)) {
- this[offset + i] = value / mul & 0xFF;
- }
- return offset + byteLength;
- };
- Buffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) {
- value = +value;
- offset = offset >>> 0;
- if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);
- this[offset] = value & 0xff;
- return offset + 1;
- };
- Buffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) {
- value = +value;
- offset = offset >>> 0;
- if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);
- this[offset] = value & 0xff;
- this[offset + 1] = value >>> 8;
- return offset + 2;
- };
- Buffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) {
- value = +value;
- offset = offset >>> 0;
- if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);
- this[offset] = value >>> 8;
- this[offset + 1] = value & 0xff;
- return offset + 2;
- };
- Buffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) {
- value = +value;
- offset = offset >>> 0;
- if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);
- this[offset + 3] = value >>> 24;
- this[offset + 2] = value >>> 16;
- this[offset + 1] = value >>> 8;
- this[offset] = value & 0xff;
- return offset + 4;
- };
- Buffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) {
- value = +value;
- offset = offset >>> 0;
- if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);
- this[offset] = value >>> 24;
- this[offset + 1] = value >>> 16;
- this[offset + 2] = value >>> 8;
- this[offset + 3] = value & 0xff;
- return offset + 4;
- };
- Buffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) {
- value = +value;
- offset = offset >>> 0;
- if (!noAssert) {
- var limit = Math.pow(2, 8 * byteLength - 1);
- checkInt(this, value, offset, byteLength, limit - 1, -limit);
- }
- var i = 0;
- var mul = 1;
- var sub = 0;
- this[offset] = value & 0xFF;
- while (++i < byteLength && (mul *= 0x100)) {
- if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
- sub = 1;
- }
- this[offset + i] = (value / mul >> 0) - sub & 0xFF;
- }
- return offset + byteLength;
- };
- Buffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) {
- value = +value;
- offset = offset >>> 0;
- if (!noAssert) {
- var limit = Math.pow(2, 8 * byteLength - 1);
- checkInt(this, value, offset, byteLength, limit - 1, -limit);
- }
- var i = byteLength - 1;
- var mul = 1;
- var sub = 0;
- this[offset + i] = value & 0xFF;
- while (--i >= 0 && (mul *= 0x100)) {
- if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
- sub = 1;
- }
- this[offset + i] = (value / mul >> 0) - sub & 0xFF;
- }
- return offset + byteLength;
- };
- Buffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) {
- value = +value;
- offset = offset >>> 0;
- if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80);
- if (value < 0) value = 0xff + value + 1;
- this[offset] = value & 0xff;
- return offset + 1;
- };
- Buffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) {
- value = +value;
- offset = offset >>> 0;
- if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);
- this[offset] = value & 0xff;
- this[offset + 1] = value >>> 8;
- return offset + 2;
- };
- Buffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) {
- value = +value;
- offset = offset >>> 0;
- if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);
- this[offset] = value >>> 8;
- this[offset + 1] = value & 0xff;
- return offset + 2;
- };
- Buffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) {
- value = +value;
- offset = offset >>> 0;
- if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);
- this[offset] = value & 0xff;
- this[offset + 1] = value >>> 8;
- this[offset + 2] = value >>> 16;
- this[offset + 3] = value >>> 24;
- return offset + 4;
- };
- Buffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) {
- value = +value;
- offset = offset >>> 0;
- if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);
- if (value < 0) value = 0xffffffff + value + 1;
- this[offset] = value >>> 24;
- this[offset + 1] = value >>> 16;
- this[offset + 2] = value >>> 8;
- this[offset + 3] = value & 0xff;
- return offset + 4;
- };
- function checkIEEE754(buf, value, offset, ext, max, min) {
- if (offset + ext > buf.length) throw new RangeError('Index out of range');
- if (offset < 0) throw new RangeError('Index out of range');
- }
- function writeFloat(buf, value, offset, littleEndian, noAssert) {
- value = +value;
- offset = offset >>> 0;
- if (!noAssert) {
- checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38);
- }
- ieee754.write(buf, value, offset, littleEndian, 23, 4);
- return offset + 4;
- }
- Buffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) {
- return writeFloat(this, value, offset, true, noAssert);
- };
- Buffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) {
- return writeFloat(this, value, offset, false, noAssert);
- };
- function writeDouble(buf, value, offset, littleEndian, noAssert) {
- value = +value;
- offset = offset >>> 0;
- if (!noAssert) {
- checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308);
- }
- ieee754.write(buf, value, offset, littleEndian, 52, 8);
- return offset + 8;
- }
- Buffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) {
- return writeDouble(this, value, offset, true, noAssert);
- };
- Buffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) {
- return writeDouble(this, value, offset, false, noAssert);
- }; // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
- Buffer.prototype.copy = function copy(target, targetStart, start, end) {
- if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer');
- if (!start) start = 0;
- if (!end && end !== 0) end = this.length;
- if (targetStart >= target.length) targetStart = target.length;
- if (!targetStart) targetStart = 0;
- if (end > 0 && end < start) end = start; // Copy 0 bytes; we're done
- if (end === start) return 0;
- if (target.length === 0 || this.length === 0) return 0; // Fatal error conditions
- if (targetStart < 0) {
- throw new RangeError('targetStart out of bounds');
- }
- if (start < 0 || start >= this.length) throw new RangeError('Index out of range');
- if (end < 0) throw new RangeError('sourceEnd out of bounds'); // Are we oob?
- if (end > this.length) end = this.length;
- if (target.length - targetStart < end - start) {
- end = target.length - targetStart + start;
- }
- var len = end - start;
- if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {
- // Use built-in when available, missing from IE11
- this.copyWithin(targetStart, start, end);
- } else if (this === target && start < targetStart && targetStart < end) {
- // descending copy from end
- for (var i = len - 1; i >= 0; --i) {
- target[i + targetStart] = this[i + start];
- }
- } else {
- Uint8Array.prototype.set.call(target, this.subarray(start, end), targetStart);
- }
- return len;
- }; // Usage:
- // buffer.fill(number[, offset[, end]])
- // buffer.fill(buffer[, offset[, end]])
- // buffer.fill(string[, offset[, end]][, encoding])
- Buffer.prototype.fill = function fill(val, start, end, encoding) {
- // Handle string cases:
- if (typeof val === 'string') {
- if (typeof start === 'string') {
- encoding = start;
- start = 0;
- end = this.length;
- } else if (typeof end === 'string') {
- encoding = end;
- end = this.length;
- }
- if (encoding !== undefined && typeof encoding !== 'string') {
- throw new TypeError('encoding must be a string');
- }
- if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
- throw new TypeError('Unknown encoding: ' + encoding);
- }
- if (val.length === 1) {
- var code = val.charCodeAt(0);
- if (encoding === 'utf8' && code < 128 || encoding === 'latin1') {
- // Fast path: If `val` fits into a single byte, use that numeric value.
- val = code;
- }
- }
- } else if (typeof val === 'number') {
- val = val & 255;
- } // Invalid ranges are not set to a default, so can range check early.
- if (start < 0 || this.length < start || this.length < end) {
- throw new RangeError('Out of range index');
- }
- if (end <= start) {
- return this;
- }
- start = start >>> 0;
- end = end === undefined ? this.length : end >>> 0;
- if (!val) val = 0;
- var i;
- if (typeof val === 'number') {
- for (i = start; i < end; ++i) {
- this[i] = val;
- }
- } else {
- var bytes = Buffer.isBuffer(val) ? val : Buffer.from(val, encoding);
- var len = bytes.length;
- if (len === 0) {
- throw new TypeError('The value "' + val + '" is invalid for argument "value"');
- }
- for (i = 0; i < end - start; ++i) {
- this[i + start] = bytes[i % len];
- }
- }
- return this;
- }; // HELPER FUNCTIONS
- // ================
- var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g;
- function base64clean(str) {
- // Node takes equal signs as end of the Base64 encoding
- str = str.split('=')[0]; // Node strips out invalid characters like \n and \t from the string, base64-js does not
- str = str.trim().replace(INVALID_BASE64_RE, ''); // Node converts strings with length < 2 to ''
- if (str.length < 2) return ''; // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
- while (str.length % 4 !== 0) {
- str = str + '=';
- }
- return str;
- }
- function toHex(n) {
- if (n < 16) return '0' + n.toString(16);
- return n.toString(16);
- }
- function utf8ToBytes(string, units) {
- units = units || Infinity;
- var codePoint;
- var length = string.length;
- var leadSurrogate = null;
- var bytes = [];
- for (var i = 0; i < length; ++i) {
- codePoint = string.charCodeAt(i); // is surrogate component
- if (codePoint > 0xD7FF && codePoint < 0xE000) {
- // last char was a lead
- if (!leadSurrogate) {
- // no lead yet
- if (codePoint > 0xDBFF) {
- // unexpected trail
- if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
- continue;
- } else if (i + 1 === length) {
- // unpaired lead
- if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
- continue;
- } // valid lead
- leadSurrogate = codePoint;
- continue;
- } // 2 leads in a row
- if (codePoint < 0xDC00) {
- if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
- leadSurrogate = codePoint;
- continue;
- } // valid surrogate pair
- codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;
- } else if (leadSurrogate) {
- // valid bmp char, but last char was a lead
- if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
- }
- leadSurrogate = null; // encode utf8
- if (codePoint < 0x80) {
- if ((units -= 1) < 0) break;
- bytes.push(codePoint);
- } else if (codePoint < 0x800) {
- if ((units -= 2) < 0) break;
- bytes.push(codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80);
- } else if (codePoint < 0x10000) {
- if ((units -= 3) < 0) break;
- bytes.push(codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);
- } else if (codePoint < 0x110000) {
- if ((units -= 4) < 0) break;
- bytes.push(codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);
- } else {
- throw new Error('Invalid code point');
- }
- }
- return bytes;
- }
- function asciiToBytes(str) {
- var byteArray = [];
- for (var i = 0; i < str.length; ++i) {
- // Node's code seems to be doing this and not & 0x7F..
- byteArray.push(str.charCodeAt(i) & 0xFF);
- }
- return byteArray;
- }
- function utf16leToBytes(str, units) {
- var c, hi, lo;
- var byteArray = [];
- for (var i = 0; i < str.length; ++i) {
- if ((units -= 2) < 0) break;
- c = str.charCodeAt(i);
- hi = c >> 8;
- lo = c % 256;
- byteArray.push(lo);
- byteArray.push(hi);
- }
- return byteArray;
- }
- function base64ToBytes(str) {
- return base64.toByteArray(base64clean(str));
- }
- function blitBuffer(src, dst, offset, length) {
- for (var i = 0; i < length; ++i) {
- if (i + offset >= dst.length || i >= src.length) break;
- dst[i + offset] = src[i];
- }
- return i;
- } // ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass
- // the `instanceof` check but they should be treated as of that type.
- // See: https://github.com/feross/buffer/issues/166
- function isInstance(obj, type) {
- return obj instanceof type || obj != null && obj.constructor != null && obj.constructor.name != null && obj.constructor.name === type.name;
- }
- function numberIsNaN(obj) {
- // For IE11 support
- return obj !== obj; // eslint-disable-line no-self-compare
- }
- }).call(this,require("buffer").Buffer)
- },{"base64-js":182,"buffer":216,"ieee754":276}],217:[function(require,module,exports){
- (function (Buffer){
- "use strict";
- module.exports = function xor(a, b) {
- var length = Math.min(a.length, b.length);
- var buffer = new Buffer(length);
- for (var i = 0; i < length; ++i) {
- buffer[i] = a[i] ^ b[i];
- }
- return buffer;
- };
- }).call(this,require("buffer").Buffer)
- },{"buffer":216}],218:[function(require,module,exports){
- "use strict";
- var Buffer = require('safe-buffer').Buffer;
- var Transform = require('stream').Transform;
- var StringDecoder = require('string_decoder').StringDecoder;
- var inherits = require('inherits');
- function CipherBase(hashMode) {
- Transform.call(this);
- this.hashMode = typeof hashMode === 'string';
- if (this.hashMode) {
- this[hashMode] = this._finalOrDigest;
- } else {
- this.final = this._finalOrDigest;
- }
- if (this._final) {
- this.__final = this._final;
- this._final = null;
- }
- this._decoder = null;
- this._encoding = null;
- }
- inherits(CipherBase, Transform);
- CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
- if (typeof data === 'string') {
- data = Buffer.from(data, inputEnc);
- }
- var outData = this._update(data);
- if (this.hashMode) return this;
- if (outputEnc) {
- outData = this._toString(outData, outputEnc);
- }
- return outData;
- };
- CipherBase.prototype.setAutoPadding = function () {};
- CipherBase.prototype.getAuthTag = function () {
- throw new Error('trying to get auth tag in unsupported state');
- };
- CipherBase.prototype.setAuthTag = function () {
- throw new Error('trying to set auth tag in unsupported state');
- };
- CipherBase.prototype.setAAD = function () {
- throw new Error('trying to set aad in unsupported state');
- };
- CipherBase.prototype._transform = function (data, _, next) {
- var err;
- try {
- if (this.hashMode) {
- this._update(data);
- } else {
- this.push(this._update(data));
- }
- } catch (e) {
- err = e;
- } finally {
- next(err);
- }
- };
- CipherBase.prototype._flush = function (done) {
- var err;
- try {
- this.push(this.__final());
- } catch (e) {
- err = e;
- }
- done(err);
- };
- CipherBase.prototype._finalOrDigest = function (outputEnc) {
- var outData = this.__final() || Buffer.alloc(0);
- if (outputEnc) {
- outData = this._toString(outData, outputEnc, true);
- }
- return outData;
- };
- CipherBase.prototype._toString = function (value, enc, fin) {
- if (!this._decoder) {
- this._decoder = new StringDecoder(enc);
- this._encoding = enc;
- }
- if (this._encoding !== enc) throw new Error('can\'t switch encodings');
- var out = this._decoder.write(value);
- if (fin) {
- out += this._decoder.end();
- }
- return out;
- };
- module.exports = CipherBase;
- },{"inherits":278,"safe-buffer":384,"stream":396,"string_decoder":410}],219:[function(require,module,exports){
- (function (Buffer){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- // NOTE: These type checking functions intentionally don't use `instanceof`
- // because it is fragile and can be easily faked with `Object.create()`.
- function isArray(arg) {
- if (Array.isArray) {
- return Array.isArray(arg);
- }
- return objectToString(arg) === '[object Array]';
- }
- exports.isArray = isArray;
- function isBoolean(arg) {
- return typeof arg === 'boolean';
- }
- exports.isBoolean = isBoolean;
- function isNull(arg) {
- return arg === null;
- }
- exports.isNull = isNull;
- function isNullOrUndefined(arg) {
- return arg == null;
- }
- exports.isNullOrUndefined = isNullOrUndefined;
- function isNumber(arg) {
- return typeof arg === 'number';
- }
- exports.isNumber = isNumber;
- function isString(arg) {
- return typeof arg === 'string';
- }
- exports.isString = isString;
- function isSymbol(arg) {
- return _typeof(arg) === 'symbol';
- }
- exports.isSymbol = isSymbol;
- function isUndefined(arg) {
- return arg === void 0;
- }
- exports.isUndefined = isUndefined;
- function isRegExp(re) {
- return objectToString(re) === '[object RegExp]';
- }
- exports.isRegExp = isRegExp;
- function isObject(arg) {
- return _typeof(arg) === 'object' && arg !== null;
- }
- exports.isObject = isObject;
- function isDate(d) {
- return objectToString(d) === '[object Date]';
- }
- exports.isDate = isDate;
- function isError(e) {
- return objectToString(e) === '[object Error]' || e instanceof Error;
- }
- exports.isError = isError;
- function isFunction(arg) {
- return typeof arg === 'function';
- }
- exports.isFunction = isFunction;
- function isPrimitive(arg) {
- return arg === null || typeof arg === 'boolean' || typeof arg === 'number' || typeof arg === 'string' || _typeof(arg) === 'symbol' || // ES6 symbol
- typeof arg === 'undefined';
- }
- exports.isPrimitive = isPrimitive;
- exports.isBuffer = Buffer.isBuffer;
- function objectToString(o) {
- return Object.prototype.toString.call(o);
- }
- }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
- },{"../../is-buffer/index.js":279}],220:[function(require,module,exports){
- (function (Buffer){
- "use strict";
- var elliptic = require('elliptic');
- var BN = require('bn.js');
- module.exports = function createECDH(curve) {
- return new ECDH(curve);
- };
- var aliases = {
- secp256k1: {
- name: 'secp256k1',
- byteLength: 32
- },
- secp224r1: {
- name: 'p224',
- byteLength: 28
- },
- prime256v1: {
- name: 'p256',
- byteLength: 32
- },
- prime192v1: {
- name: 'p192',
- byteLength: 24
- },
- ed25519: {
- name: 'ed25519',
- byteLength: 32
- },
- secp384r1: {
- name: 'p384',
- byteLength: 48
- },
- secp521r1: {
- name: 'p521',
- byteLength: 66
- }
- };
- aliases.p224 = aliases.secp224r1;
- aliases.p256 = aliases.secp256r1 = aliases.prime256v1;
- aliases.p192 = aliases.secp192r1 = aliases.prime192v1;
- aliases.p384 = aliases.secp384r1;
- aliases.p521 = aliases.secp521r1;
- function ECDH(curve) {
- this.curveType = aliases[curve];
- if (!this.curveType) {
- this.curveType = {
- name: curve
- };
- }
- this.curve = new elliptic.ec(this.curveType.name); // eslint-disable-line new-cap
- this.keys = void 0;
- }
- ECDH.prototype.generateKeys = function (enc, format) {
- this.keys = this.curve.genKeyPair();
- return this.getPublicKey(enc, format);
- };
- ECDH.prototype.computeSecret = function (other, inenc, enc) {
- inenc = inenc || 'utf8';
- if (!Buffer.isBuffer(other)) {
- other = new Buffer(other, inenc);
- }
- var otherPub = this.curve.keyFromPublic(other).getPublic();
- var out = otherPub.mul(this.keys.getPrivate()).getX();
- return formatReturnValue(out, enc, this.curveType.byteLength);
- };
- ECDH.prototype.getPublicKey = function (enc, format) {
- var key = this.keys.getPublic(format === 'compressed', true);
- if (format === 'hybrid') {
- if (key[key.length - 1] % 2) {
- key[0] = 7;
- } else {
- key[0] = 6;
- }
- }
- return formatReturnValue(key, enc);
- };
- ECDH.prototype.getPrivateKey = function (enc) {
- return formatReturnValue(this.keys.getPrivate(), enc);
- };
- ECDH.prototype.setPublicKey = function (pub, enc) {
- enc = enc || 'utf8';
- if (!Buffer.isBuffer(pub)) {
- pub = new Buffer(pub, enc);
- }
- this.keys._importPublic(pub);
- return this;
- };
- ECDH.prototype.setPrivateKey = function (priv, enc) {
- enc = enc || 'utf8';
- if (!Buffer.isBuffer(priv)) {
- priv = new Buffer(priv, enc);
- }
- var _priv = new BN(priv);
- _priv = _priv.toString(16);
- this.keys = this.curve.genKeyPair();
- this.keys._importPrivate(_priv);
- return this;
- };
- function formatReturnValue(bn, enc, len) {
- if (!Array.isArray(bn)) {
- bn = bn.toArray();
- }
- var buf = new Buffer(bn);
- if (len && buf.length < len) {
- var zeros = new Buffer(len - buf.length);
- zeros.fill(0);
- buf = Buffer.concat([zeros, buf]);
- }
- if (!enc) {
- return buf;
- } else {
- return buf.toString(enc);
- }
- }
- }).call(this,require("buffer").Buffer)
- },{"bn.js":221,"buffer":216,"elliptic":241}],221:[function(require,module,exports){
- arguments[4][181][0].apply(exports,arguments)
- },{"buffer":185,"dup":181}],222:[function(require,module,exports){
- 'use strict';
- var inherits = require('inherits');
- var MD5 = require('md5.js');
- var RIPEMD160 = require('ripemd160');
- var sha = require('sha.js');
- var Base = require('cipher-base');
- function Hash(hash) {
- Base.call(this, 'digest');
- this._hash = hash;
- }
- inherits(Hash, Base);
- Hash.prototype._update = function (data) {
- this._hash.update(data);
- };
- Hash.prototype._final = function () {
- return this._hash.digest();
- };
- module.exports = function createHash(alg) {
- alg = alg.toLowerCase();
- if (alg === 'md5') return new MD5();
- if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160();
- return new Hash(sha(alg));
- };
- },{"cipher-base":218,"inherits":278,"md5.js":325,"ripemd160":383,"sha.js":389}],223:[function(require,module,exports){
- "use strict";
- var MD5 = require('md5.js');
- module.exports = function (buffer) {
- return new MD5().update(buffer).digest();
- };
- },{"md5.js":325}],224:[function(require,module,exports){
- 'use strict';
- var inherits = require('inherits');
- var Legacy = require('./legacy');
- var Base = require('cipher-base');
- var Buffer = require('safe-buffer').Buffer;
- var md5 = require('create-hash/md5');
- var RIPEMD160 = require('ripemd160');
- var sha = require('sha.js');
- var ZEROS = Buffer.alloc(128);
- function Hmac(alg, key) {
- Base.call(this, 'digest');
- if (typeof key === 'string') {
- key = Buffer.from(key);
- }
- var blocksize = alg === 'sha512' || alg === 'sha384' ? 128 : 64;
- this._alg = alg;
- this._key = key;
- if (key.length > blocksize) {
- var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg);
- key = hash.update(key).digest();
- } else if (key.length < blocksize) {
- key = Buffer.concat([key, ZEROS], blocksize);
- }
- var ipad = this._ipad = Buffer.allocUnsafe(blocksize);
- var opad = this._opad = Buffer.allocUnsafe(blocksize);
- for (var i = 0; i < blocksize; i++) {
- ipad[i] = key[i] ^ 0x36;
- opad[i] = key[i] ^ 0x5C;
- }
- this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg);
- this._hash.update(ipad);
- }
- inherits(Hmac, Base);
- Hmac.prototype._update = function (data) {
- this._hash.update(data);
- };
- Hmac.prototype._final = function () {
- var h = this._hash.digest();
- var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg);
- return hash.update(this._opad).update(h).digest();
- };
- module.exports = function createHmac(alg, key) {
- alg = alg.toLowerCase();
- if (alg === 'rmd160' || alg === 'ripemd160') {
- return new Hmac('rmd160', key);
- }
- if (alg === 'md5') {
- return new Legacy(md5, key);
- }
- return new Hmac(alg, key);
- };
- },{"./legacy":225,"cipher-base":218,"create-hash/md5":223,"inherits":278,"ripemd160":383,"safe-buffer":384,"sha.js":389}],225:[function(require,module,exports){
- 'use strict';
- var inherits = require('inherits');
- var Buffer = require('safe-buffer').Buffer;
- var Base = require('cipher-base');
- var ZEROS = Buffer.alloc(128);
- var blocksize = 64;
- function Hmac(alg, key) {
- Base.call(this, 'digest');
- if (typeof key === 'string') {
- key = Buffer.from(key);
- }
- this._alg = alg;
- this._key = key;
- if (key.length > blocksize) {
- key = alg(key);
- } else if (key.length < blocksize) {
- key = Buffer.concat([key, ZEROS], blocksize);
- }
- var ipad = this._ipad = Buffer.allocUnsafe(blocksize);
- var opad = this._opad = Buffer.allocUnsafe(blocksize);
- for (var i = 0; i < blocksize; i++) {
- ipad[i] = key[i] ^ 0x36;
- opad[i] = key[i] ^ 0x5C;
- }
- this._hash = [ipad];
- }
- inherits(Hmac, Base);
- Hmac.prototype._update = function (data) {
- this._hash.push(data);
- };
- Hmac.prototype._final = function () {
- var h = this._alg(Buffer.concat(this._hash));
- return this._alg(Buffer.concat([this._opad, h]));
- };
- module.exports = Hmac;
- },{"cipher-base":218,"inherits":278,"safe-buffer":384}],226:[function(require,module,exports){
- 'use strict';
- exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes');
- exports.createHash = exports.Hash = require('create-hash');
- exports.createHmac = exports.Hmac = require('create-hmac');
- var algos = require('browserify-sign/algos');
- var algoKeys = Object.keys(algos);
- var hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys);
- exports.getHashes = function () {
- return hashes;
- };
- var p = require('pbkdf2');
- exports.pbkdf2 = p.pbkdf2;
- exports.pbkdf2Sync = p.pbkdf2Sync;
- var aes = require('browserify-cipher');
- exports.Cipher = aes.Cipher;
- exports.createCipher = aes.createCipher;
- exports.Cipheriv = aes.Cipheriv;
- exports.createCipheriv = aes.createCipheriv;
- exports.Decipher = aes.Decipher;
- exports.createDecipher = aes.createDecipher;
- exports.Decipheriv = aes.Decipheriv;
- exports.createDecipheriv = aes.createDecipheriv;
- exports.getCiphers = aes.getCiphers;
- exports.listCiphers = aes.listCiphers;
- var dh = require('diffie-hellman');
- exports.DiffieHellmanGroup = dh.DiffieHellmanGroup;
- exports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup;
- exports.getDiffieHellman = dh.getDiffieHellman;
- exports.createDiffieHellman = dh.createDiffieHellman;
- exports.DiffieHellman = dh.DiffieHellman;
- var sign = require('browserify-sign');
- exports.createSign = sign.createSign;
- exports.Sign = sign.Sign;
- exports.createVerify = sign.createVerify;
- exports.Verify = sign.Verify;
- exports.createECDH = require('create-ecdh');
- var publicEncrypt = require('public-encrypt');
- exports.publicEncrypt = publicEncrypt.publicEncrypt;
- exports.privateEncrypt = publicEncrypt.privateEncrypt;
- exports.publicDecrypt = publicEncrypt.publicDecrypt;
- exports.privateDecrypt = publicEncrypt.privateDecrypt; // the least I can do is make error messages for the rest of the node.js/crypto api.
- // ;[
- // 'createCredentials'
- // ].forEach(function (name) {
- // exports[name] = function () {
- // throw new Error([
- // 'sorry, ' + name + ' is not implemented yet',
- // 'we accept pull requests',
- // 'https://github.com/crypto-browserify/crypto-browserify'
- // ].join('\n'))
- // }
- // })
- var rf = require('randomfill');
- exports.randomFill = rf.randomFill;
- exports.randomFillSync = rf.randomFillSync;
- exports.createCredentials = function () {
- throw new Error(['sorry, createCredentials is not implemented yet', 'we accept pull requests', 'https://github.com/crypto-browserify/crypto-browserify'].join('\n'));
- };
- exports.constants = {
- 'DH_CHECK_P_NOT_SAFE_PRIME': 2,
- 'DH_CHECK_P_NOT_PRIME': 1,
- 'DH_UNABLE_TO_CHECK_GENERATOR': 4,
- 'DH_NOT_SUITABLE_GENERATOR': 8,
- 'NPN_ENABLED': 1,
- 'ALPN_ENABLED': 1,
- 'RSA_PKCS1_PADDING': 1,
- 'RSA_SSLV23_PADDING': 2,
- 'RSA_NO_PADDING': 3,
- 'RSA_PKCS1_OAEP_PADDING': 4,
- 'RSA_X931_PADDING': 5,
- 'RSA_PKCS1_PSS_PADDING': 6,
- 'POINT_CONVERSION_COMPRESSED': 2,
- 'POINT_CONVERSION_UNCOMPRESSED': 4,
- 'POINT_CONVERSION_HYBRID': 6
- };
- },{"browserify-cipher":203,"browserify-sign":211,"browserify-sign/algos":208,"create-ecdh":220,"create-hash":222,"create-hmac":224,"diffie-hellman":236,"pbkdf2":351,"public-encrypt":359,"randombytes":366,"randomfill":367}],227:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- !function (t, e) {
- "object" == (typeof exports === "undefined" ? "undefined" : _typeof(exports)) && "undefined" != typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : t.dayjs = e();
- }(void 0, function () {
- "use strict";
- var t = "millisecond",
- e = "second",
- n = "minute",
- r = "hour",
- i = "day",
- s = "week",
- u = "month",
- a = "quarter",
- o = "year",
- f = "date",
- h = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[^0-9]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?.?(\d+)?$/,
- c = /\[([^\]]+)]|Y{2,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,
- d = function d(t, e, n) {
- var r = String(t);
- return !r || r.length >= e ? t : "" + Array(e + 1 - r.length).join(n) + t;
- },
- $ = {
- s: d,
- z: function z(t) {
- var e = -t.utcOffset(),
- n = Math.abs(e),
- r = Math.floor(n / 60),
- i = n % 60;
- return (e <= 0 ? "+" : "-") + d(r, 2, "0") + ":" + d(i, 2, "0");
- },
- m: function t(e, n) {
- if (e.date() < n.date()) return -t(n, e);
- var r = 12 * (n.year() - e.year()) + (n.month() - e.month()),
- i = e.add(r, u),
- s = n - i < 0,
- a = e.add(r + (s ? -1 : 1), u);
- return +(-(r + (n - i) / (s ? i - a : a - i)) || 0);
- },
- a: function a(t) {
- return t < 0 ? Math.ceil(t) || 0 : Math.floor(t);
- },
- p: function p(h) {
- return {
- M: u,
- y: o,
- w: s,
- d: i,
- D: f,
- h: r,
- m: n,
- s: e,
- ms: t,
- Q: a
- }[h] || String(h || "").toLowerCase().replace(/s$/, "");
- },
- u: function u(t) {
- return void 0 === t;
- }
- },
- l = {
- name: "en",
- weekdays: "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),
- months: "January_February_March_April_May_June_July_August_September_October_November_December".split("_")
- },
- y = "en",
- M = {};
- M[y] = l;
- var m = function m(t) {
- return t instanceof S;
- },
- D = function D(t, e, n) {
- var r;
- if (!t) return y;
- if ("string" == typeof t) M[t] && (r = t), e && (M[t] = e, r = t);else {
- var i = t.name;
- M[i] = t, r = i;
- }
- return !n && r && (y = r), r || !n && y;
- },
- v = function v(t, e) {
- if (m(t)) return t.clone();
- var n = "object" == _typeof(e) ? e : {};
- return n.date = t, n.args = arguments, new S(n);
- },
- g = $;
- g.l = D, g.i = m, g.w = function (t, e) {
- return v(t, {
- locale: e.$L,
- utc: e.$u,
- $offset: e.$offset
- });
- };
- var S = function () {
- function d(t) {
- this.$L = this.$L || D(t.locale, null, !0), this.parse(t);
- }
- var $ = d.prototype;
- return $.parse = function (t) {
- this.$d = function (t) {
- var e = t.date,
- n = t.utc;
- if (null === e) return new Date(NaN);
- if (g.u(e)) return new Date();
- if (e instanceof Date) return new Date(e);
- if ("string" == typeof e && !/Z$/i.test(e)) {
- var r = e.match(h);
- if (r) {
- var i = r[2] - 1 || 0,
- s = (r[7] || "0").substring(0, 3);
- return n ? new Date(Date.UTC(r[1], i, r[3] || 1, r[4] || 0, r[5] || 0, r[6] || 0, s)) : new Date(r[1], i, r[3] || 1, r[4] || 0, r[5] || 0, r[6] || 0, s);
- }
- }
- return new Date(e);
- }(t), this.init();
- }, $.init = function () {
- var t = this.$d;
- this.$y = t.getFullYear(), this.$M = t.getMonth(), this.$D = t.getDate(), this.$W = t.getDay(), this.$H = t.getHours(), this.$m = t.getMinutes(), this.$s = t.getSeconds(), this.$ms = t.getMilliseconds();
- }, $.$utils = function () {
- return g;
- }, $.isValid = function () {
- return !("Invalid Date" === this.$d.toString());
- }, $.isSame = function (t, e) {
- var n = v(t);
- return this.startOf(e) <= n && n <= this.endOf(e);
- }, $.isAfter = function (t, e) {
- return v(t) < this.startOf(e);
- }, $.isBefore = function (t, e) {
- return this.endOf(e) < v(t);
- }, $.$g = function (t, e, n) {
- return g.u(t) ? this[e] : this.set(n, t);
- }, $.unix = function () {
- return Math.floor(this.valueOf() / 1e3);
- }, $.valueOf = function () {
- return this.$d.getTime();
- }, $.startOf = function (t, a) {
- var h = this,
- c = !!g.u(a) || a,
- d = g.p(t),
- $ = function $(t, e) {
- var n = g.w(h.$u ? Date.UTC(h.$y, e, t) : new Date(h.$y, e, t), h);
- return c ? n : n.endOf(i);
- },
- l = function l(t, e) {
- return g.w(h.toDate()[t].apply(h.toDate("s"), (c ? [0, 0, 0, 0] : [23, 59, 59, 999]).slice(e)), h);
- },
- y = this.$W,
- M = this.$M,
- m = this.$D,
- D = "set" + (this.$u ? "UTC" : "");
- switch (d) {
- case o:
- return c ? $(1, 0) : $(31, 11);
- case u:
- return c ? $(1, M) : $(0, M + 1);
- case s:
- var v = this.$locale().weekStart || 0,
- S = (y < v ? y + 7 : y) - v;
- return $(c ? m - S : m + (6 - S), M);
- case i:
- case f:
- return l(D + "Hours", 0);
- case r:
- return l(D + "Minutes", 1);
- case n:
- return l(D + "Seconds", 2);
- case e:
- return l(D + "Milliseconds", 3);
- default:
- return this.clone();
- }
- }, $.endOf = function (t) {
- return this.startOf(t, !1);
- }, $.$set = function (s, a) {
- var h,
- c = g.p(s),
- d = "set" + (this.$u ? "UTC" : ""),
- $ = (h = {}, h[i] = d + "Date", h[f] = d + "Date", h[u] = d + "Month", h[o] = d + "FullYear", h[r] = d + "Hours", h[n] = d + "Minutes", h[e] = d + "Seconds", h[t] = d + "Milliseconds", h)[c],
- l = c === i ? this.$D + (a - this.$W) : a;
- if (c === u || c === o) {
- var y = this.clone().set(f, 1);
- y.$d[$](l), y.init(), this.$d = y.set(f, Math.min(this.$D, y.daysInMonth())).$d;
- } else $ && this.$d[$](l);
- return this.init(), this;
- }, $.set = function (t, e) {
- return this.clone().$set(t, e);
- }, $.get = function (t) {
- return this[g.p(t)]();
- }, $.add = function (t, a) {
- var f,
- h = this;
- t = Number(t);
- var c = g.p(a),
- d = function d(e) {
- var n = v(h);
- return g.w(n.date(n.date() + Math.round(e * t)), h);
- };
- if (c === u) return this.set(u, this.$M + t);
- if (c === o) return this.set(o, this.$y + t);
- if (c === i) return d(1);
- if (c === s) return d(7);
- var $ = (f = {}, f[n] = 6e4, f[r] = 36e5, f[e] = 1e3, f)[c] || 1,
- l = this.$d.getTime() + t * $;
- return g.w(l, this);
- }, $.subtract = function (t, e) {
- return this.add(-1 * t, e);
- }, $.format = function (t) {
- var e = this;
- if (!this.isValid()) return "Invalid Date";
- var n = t || "YYYY-MM-DDTHH:mm:ssZ",
- r = g.z(this),
- i = this.$locale(),
- s = this.$H,
- u = this.$m,
- a = this.$M,
- o = i.weekdays,
- f = i.months,
- h = function h(t, r, i, s) {
- return t && (t[r] || t(e, n)) || i[r].substr(0, s);
- },
- d = function d(t) {
- return g.s(s % 12 || 12, t, "0");
- },
- $ = i.meridiem || function (t, e, n) {
- var r = t < 12 ? "AM" : "PM";
- return n ? r.toLowerCase() : r;
- },
- l = {
- YY: String(this.$y).slice(-2),
- YYYY: this.$y,
- M: a + 1,
- MM: g.s(a + 1, 2, "0"),
- MMM: h(i.monthsShort, a, f, 3),
- MMMM: h(f, a),
- D: this.$D,
- DD: g.s(this.$D, 2, "0"),
- d: String(this.$W),
- dd: h(i.weekdaysMin, this.$W, o, 2),
- ddd: h(i.weekdaysShort, this.$W, o, 3),
- dddd: o[this.$W],
- H: String(s),
- HH: g.s(s, 2, "0"),
- h: d(1),
- hh: d(2),
- a: $(s, u, !0),
- A: $(s, u, !1),
- m: String(u),
- mm: g.s(u, 2, "0"),
- s: String(this.$s),
- ss: g.s(this.$s, 2, "0"),
- SSS: g.s(this.$ms, 3, "0"),
- Z: r
- };
- return n.replace(c, function (t, e) {
- return e || l[t] || r.replace(":", "");
- });
- }, $.utcOffset = function () {
- return 15 * -Math.round(this.$d.getTimezoneOffset() / 15);
- }, $.diff = function (t, f, h) {
- var c,
- d = g.p(f),
- $ = v(t),
- l = 6e4 * ($.utcOffset() - this.utcOffset()),
- y = this - $,
- M = g.m(this, $);
- return M = (c = {}, c[o] = M / 12, c[u] = M, c[a] = M / 3, c[s] = (y - l) / 6048e5, c[i] = (y - l) / 864e5, c[r] = y / 36e5, c[n] = y / 6e4, c[e] = y / 1e3, c)[d] || y, h ? M : g.a(M);
- }, $.daysInMonth = function () {
- return this.endOf(u).$D;
- }, $.$locale = function () {
- return M[this.$L];
- }, $.locale = function (t, e) {
- if (!t) return this.$L;
- var n = this.clone(),
- r = D(t, e, !0);
- return r && (n.$L = r), n;
- }, $.clone = function () {
- return g.w(this.$d, this);
- }, $.toDate = function () {
- return new Date(this.valueOf());
- }, $.toJSON = function () {
- return this.isValid() ? this.toISOString() : null;
- }, $.toISOString = function () {
- return this.$d.toISOString();
- }, $.toString = function () {
- return this.$d.toUTCString();
- }, d;
- }(),
- p = S.prototype;
- return v.prototype = p, [["$ms", t], ["$s", e], ["$m", n], ["$H", r], ["$W", i], ["$M", u], ["$y", o], ["$D", f]].forEach(function (t) {
- p[t[1]] = function (e) {
- return this.$g(e, t[0], t[1]);
- };
- }), v.extend = function (t, e) {
- return t(e, S, v), v;
- }, v.locale = D, v.isDayjs = m, v.unix = function (t) {
- return v(1e3 * t);
- }, v.en = M[y], v.Ls = M, v;
- });
- },{}],228:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- !function (t, e) {
- "object" == (typeof exports === "undefined" ? "undefined" : _typeof(exports)) && "undefined" != typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : t.dayjs_plugin_customParseFormat = e();
- }(void 0, function () {
- "use strict";
- var t,
- e = /(\[[^[]*\])|([-:/.()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,
- n = /\d\d/,
- r = /\d\d?/,
- o = /\d*[^\s\d-:/()]+/;
- var i = function i(t) {
- return function (e) {
- this[t] = +e;
- };
- },
- s = [/[+-]\d\d:?\d\d/, function (t) {
- var e, n;
- (this.zone || (this.zone = {})).offset = (e = t.match(/([+-]|\d\d)/g), 0 === (n = 60 * e[1] + +e[2]) ? 0 : "+" === e[0] ? -n : n);
- }],
- a = function a(e) {
- var n = t[e];
- return n && (n.indexOf ? n : n.s.concat(n.f));
- },
- h = {
- A: [/[AP]M/, function (t) {
- this.afternoon = "PM" === t;
- }],
- a: [/[ap]m/, function (t) {
- this.afternoon = "pm" === t;
- }],
- S: [/\d/, function (t) {
- this.milliseconds = 100 * +t;
- }],
- SS: [n, function (t) {
- this.milliseconds = 10 * +t;
- }],
- SSS: [/\d{3}/, function (t) {
- this.milliseconds = +t;
- }],
- s: [r, i("seconds")],
- ss: [r, i("seconds")],
- m: [r, i("minutes")],
- mm: [r, i("minutes")],
- H: [r, i("hours")],
- h: [r, i("hours")],
- HH: [r, i("hours")],
- hh: [r, i("hours")],
- D: [r, i("day")],
- DD: [n, i("day")],
- Do: [o, function (e) {
- var n = t.ordinal,
- r = e.match(/\d+/);
- if (this.day = r[0], n) for (var o = 1; o <= 31; o += 1) {
- n(o).replace(/\[|\]/g, "") === e && (this.day = o);
- }
- }],
- M: [r, i("month")],
- MM: [n, i("month")],
- MMM: [o, function (t) {
- var e = a("months"),
- n = (a("monthsShort") || e.map(function (t) {
- return t.substr(0, 3);
- })).indexOf(t) + 1;
- if (n < 1) throw new Error();
- this.month = n % 12 || n;
- }],
- MMMM: [o, function (t) {
- var e = a("months").indexOf(t) + 1;
- if (e < 1) throw new Error();
- this.month = e % 12 || e;
- }],
- Y: [/[+-]?\d+/, i("year")],
- YY: [n, function (t) {
- t = +t, this.year = t + (t > 68 ? 1900 : 2e3);
- }],
- YYYY: [/\d{4}/, i("year")],
- Z: s,
- ZZ: s
- };
- var f = function f(t, n, r) {
- try {
- var o = function (t) {
- for (var n = t.match(e), r = n.length, o = 0; o < r; o += 1) {
- var i = n[o],
- s = h[i],
- a = s && s[0],
- f = s && s[1];
- n[o] = f ? {
- regex: a,
- parser: f
- } : i.replace(/^\[|\]$/g, "");
- }
- return function (t) {
- for (var e = {}, o = 0, i = 0; o < r; o += 1) {
- var s = n[o];
- if ("string" == typeof s) i += s.length;else {
- var a = s.regex,
- h = s.parser,
- f = t.substr(i),
- u = a.exec(f)[0];
- h.call(e, u), t = t.replace(u, "");
- }
- }
- return function (t) {
- var e = t.afternoon;
- if (void 0 !== e) {
- var n = t.hours;
- e ? n < 12 && (t.hours += 12) : 12 === n && (t.hours = 0), delete t.afternoon;
- }
- }(e), e;
- };
- }(n)(t),
- i = o.year,
- s = o.month,
- a = o.day,
- f = o.hours,
- u = o.minutes,
- d = o.seconds,
- c = o.milliseconds,
- l = o.zone,
- m = new Date(),
- v = a || (i || s ? 1 : m.getDate()),
- p = i || m.getFullYear(),
- y = 0;
- i && !s || (y = s > 0 ? s - 1 : m.getMonth());
- var D = f || 0,
- M = u || 0,
- g = d || 0,
- Y = c || 0;
- return l ? new Date(Date.UTC(p, y, v, D, M, g, Y + 60 * l.offset * 1e3)) : r ? new Date(Date.UTC(p, y, v, D, M, g, Y)) : new Date(p, y, v, D, M, g, Y);
- } catch (t) {
- return new Date("");
- }
- };
- return function (e, n, r) {
- var o = n.prototype,
- i = o.parse;
- o.parse = function (e) {
- var n = e.date,
- o = e.utc,
- s = e.args;
- this.$u = o;
- var a = s[1];
- if ("string" == typeof a) {
- var h = !0 === s[2],
- u = !0 === s[3],
- d = h || u,
- c = s[2];
- u && (c = s[2]), h || (t = c ? r.Ls[c] : this.$locale()), this.$d = f(n, a, o), this.init(), c && !0 !== c && (this.$L = this.locale(c).$L), d && n !== this.format(a) && (this.$d = new Date(""));
- } else if (a instanceof Array) for (var l = a.length, m = 1; m <= l; m += 1) {
- s[1] = a[m - 1];
- var v = r.apply(this, s);
- if (v.isValid()) {
- this.$d = v.$d, this.$L = v.$L, this.init();
- break;
- }
- m === l && (this.$d = new Date(""));
- } else i.call(this, e);
- };
- };
- });
- },{}],229:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- !function (t, i) {
- "object" == (typeof exports === "undefined" ? "undefined" : _typeof(exports)) && "undefined" != typeof module ? module.exports = i() : "function" == typeof define && define.amd ? define(i) : t.dayjs_plugin_utc = i();
- }(void 0, function () {
- "use strict";
- return function (t, i, e) {
- var s = new Date().getTimezoneOffset(),
- n = i.prototype;
- e.utc = function (t) {
- return new i({
- date: t,
- utc: !0,
- args: arguments
- });
- }, n.utc = function () {
- return e(this.toDate(), {
- locale: this.$L,
- utc: !0
- });
- }, n.local = function () {
- return e(this.toDate(), {
- locale: this.$L,
- utc: !1
- });
- };
- var u = n.parse;
- n.parse = function (t) {
- t.utc && (this.$u = !0), this.$utils().u(t.$offset) || (this.$offset = t.$offset), u.call(this, t);
- };
- var o = n.init;
- n.init = function () {
- if (this.$u) {
- var t = this.$d;
- this.$y = t.getUTCFullYear(), this.$M = t.getUTCMonth(), this.$D = t.getUTCDate(), this.$W = t.getUTCDay(), this.$H = t.getUTCHours(), this.$m = t.getUTCMinutes(), this.$s = t.getUTCSeconds(), this.$ms = t.getUTCMilliseconds();
- } else o.call(this);
- };
- var f = n.utcOffset;
- n.utcOffset = function (t, i) {
- var e = this.$utils().u;
- if (e(t)) return this.$u ? 0 : e(this.$offset) ? f.call(this) : this.$offset;
- var n = Math.abs(t) <= 16 ? 60 * t : t,
- u = this;
- return i ? (u.$offset = n, u.$u = 0 === t, u) : (0 !== t ? (u = this.local().add(n + s, "minute")).$offset = n : u = this.utc(), u);
- };
- var r = n.format;
- n.format = function (t) {
- var i = t || (this.$u ? "YYYY-MM-DDTHH:mm:ss[Z]" : "");
- return r.call(this, i);
- }, n.valueOf = function () {
- var t = this.$utils().u(this.$offset) ? 0 : this.$offset + s;
- return this.$d.valueOf() - 6e4 * t;
- }, n.isUTC = function () {
- return !!this.$u;
- }, n.toISOString = function () {
- return this.toDate().toISOString();
- }, n.toString = function () {
- return this.toDate().toUTCString();
- };
- var a = n.toDate;
- n.toDate = function (t) {
- return "s" === t && this.$offset ? e(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate() : a.call(this);
- };
- var c = n.diff;
- n.diff = function (t, i, s) {
- var n = this.local(),
- u = e(t).local();
- return c.call(n, u, i, s);
- };
- };
- });
- },{}],230:[function(require,module,exports){
- 'use strict';
- exports.utils = require('./des/utils');
- exports.Cipher = require('./des/cipher');
- exports.DES = require('./des/des');
- exports.CBC = require('./des/cbc');
- exports.EDE = require('./des/ede');
- },{"./des/cbc":231,"./des/cipher":232,"./des/des":233,"./des/ede":234,"./des/utils":235}],231:[function(require,module,exports){
- 'use strict';
- var assert = require('minimalistic-assert');
- var inherits = require('inherits');
- var proto = {};
- function CBCState(iv) {
- assert.equal(iv.length, 8, 'Invalid IV length');
- this.iv = new Array(8);
- for (var i = 0; i < this.iv.length; i++) {
- this.iv[i] = iv[i];
- }
- }
- function instantiate(Base) {
- function CBC(options) {
- Base.call(this, options);
- this._cbcInit();
- }
- inherits(CBC, Base);
- var keys = Object.keys(proto);
- for (var i = 0; i < keys.length; i++) {
- var key = keys[i];
- CBC.prototype[key] = proto[key];
- }
- CBC.create = function create(options) {
- return new CBC(options);
- };
- return CBC;
- }
- exports.instantiate = instantiate;
- proto._cbcInit = function _cbcInit() {
- var state = new CBCState(this.options.iv);
- this._cbcState = state;
- };
- proto._update = function _update(inp, inOff, out, outOff) {
- var state = this._cbcState;
- var superProto = this.constructor.super_.prototype;
- var iv = state.iv;
- if (this.type === 'encrypt') {
- for (var i = 0; i < this.blockSize; i++) {
- iv[i] ^= inp[inOff + i];
- }
- superProto._update.call(this, iv, 0, out, outOff);
- for (var i = 0; i < this.blockSize; i++) {
- iv[i] = out[outOff + i];
- }
- } else {
- superProto._update.call(this, inp, inOff, out, outOff);
- for (var i = 0; i < this.blockSize; i++) {
- out[outOff + i] ^= iv[i];
- }
- for (var i = 0; i < this.blockSize; i++) {
- iv[i] = inp[inOff + i];
- }
- }
- };
- },{"inherits":278,"minimalistic-assert":328}],232:[function(require,module,exports){
- 'use strict';
- var assert = require('minimalistic-assert');
- function Cipher(options) {
- this.options = options;
- this.type = this.options.type;
- this.blockSize = 8;
- this._init();
- this.buffer = new Array(this.blockSize);
- this.bufferOff = 0;
- }
- module.exports = Cipher;
- Cipher.prototype._init = function _init() {// Might be overrided
- };
- Cipher.prototype.update = function update(data) {
- if (data.length === 0) return [];
- if (this.type === 'decrypt') return this._updateDecrypt(data);else return this._updateEncrypt(data);
- };
- Cipher.prototype._buffer = function _buffer(data, off) {
- // Append data to buffer
- var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);
- for (var i = 0; i < min; i++) {
- this.buffer[this.bufferOff + i] = data[off + i];
- }
- this.bufferOff += min; // Shift next
- return min;
- };
- Cipher.prototype._flushBuffer = function _flushBuffer(out, off) {
- this._update(this.buffer, 0, out, off);
- this.bufferOff = 0;
- return this.blockSize;
- };
- Cipher.prototype._updateEncrypt = function _updateEncrypt(data) {
- var inputOff = 0;
- var outputOff = 0;
- var count = (this.bufferOff + data.length) / this.blockSize | 0;
- var out = new Array(count * this.blockSize);
- if (this.bufferOff !== 0) {
- inputOff += this._buffer(data, inputOff);
- if (this.bufferOff === this.buffer.length) outputOff += this._flushBuffer(out, outputOff);
- } // Write blocks
- var max = data.length - (data.length - inputOff) % this.blockSize;
- for (; inputOff < max; inputOff += this.blockSize) {
- this._update(data, inputOff, out, outputOff);
- outputOff += this.blockSize;
- } // Queue rest
- for (; inputOff < data.length; inputOff++, this.bufferOff++) {
- this.buffer[this.bufferOff] = data[inputOff];
- }
- return out;
- };
- Cipher.prototype._updateDecrypt = function _updateDecrypt(data) {
- var inputOff = 0;
- var outputOff = 0;
- var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;
- var out = new Array(count * this.blockSize); // TODO(indutny): optimize it, this is far from optimal
- for (; count > 0; count--) {
- inputOff += this._buffer(data, inputOff);
- outputOff += this._flushBuffer(out, outputOff);
- } // Buffer rest of the input
- inputOff += this._buffer(data, inputOff);
- return out;
- };
- Cipher.prototype.final = function final(buffer) {
- var first;
- if (buffer) first = this.update(buffer);
- var last;
- if (this.type === 'encrypt') last = this._finalEncrypt();else last = this._finalDecrypt();
- if (first) return first.concat(last);else return last;
- };
- Cipher.prototype._pad = function _pad(buffer, off) {
- if (off === 0) return false;
- while (off < buffer.length) {
- buffer[off++] = 0;
- }
- return true;
- };
- Cipher.prototype._finalEncrypt = function _finalEncrypt() {
- if (!this._pad(this.buffer, this.bufferOff)) return [];
- var out = new Array(this.blockSize);
- this._update(this.buffer, 0, out, 0);
- return out;
- };
- Cipher.prototype._unpad = function _unpad(buffer) {
- return buffer;
- };
- Cipher.prototype._finalDecrypt = function _finalDecrypt() {
- assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');
- var out = new Array(this.blockSize);
- this._flushBuffer(out, 0);
- return this._unpad(out);
- };
- },{"minimalistic-assert":328}],233:[function(require,module,exports){
- 'use strict';
- var assert = require('minimalistic-assert');
- var inherits = require('inherits');
- var utils = require('./utils');
- var Cipher = require('./cipher');
- function DESState() {
- this.tmp = new Array(2);
- this.keys = null;
- }
- function DES(options) {
- Cipher.call(this, options);
- var state = new DESState();
- this._desState = state;
- this.deriveKeys(state, options.key);
- }
- inherits(DES, Cipher);
- module.exports = DES;
- DES.create = function create(options) {
- return new DES(options);
- };
- var shiftTable = [1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1];
- DES.prototype.deriveKeys = function deriveKeys(state, key) {
- state.keys = new Array(16 * 2);
- assert.equal(key.length, this.blockSize, 'Invalid key length');
- var kL = utils.readUInt32BE(key, 0);
- var kR = utils.readUInt32BE(key, 4);
- utils.pc1(kL, kR, state.tmp, 0);
- kL = state.tmp[0];
- kR = state.tmp[1];
- for (var i = 0; i < state.keys.length; i += 2) {
- var shift = shiftTable[i >>> 1];
- kL = utils.r28shl(kL, shift);
- kR = utils.r28shl(kR, shift);
- utils.pc2(kL, kR, state.keys, i);
- }
- };
- DES.prototype._update = function _update(inp, inOff, out, outOff) {
- var state = this._desState;
- var l = utils.readUInt32BE(inp, inOff);
- var r = utils.readUInt32BE(inp, inOff + 4); // Initial Permutation
- utils.ip(l, r, state.tmp, 0);
- l = state.tmp[0];
- r = state.tmp[1];
- if (this.type === 'encrypt') this._encrypt(state, l, r, state.tmp, 0);else this._decrypt(state, l, r, state.tmp, 0);
- l = state.tmp[0];
- r = state.tmp[1];
- utils.writeUInt32BE(out, l, outOff);
- utils.writeUInt32BE(out, r, outOff + 4);
- };
- DES.prototype._pad = function _pad(buffer, off) {
- var value = buffer.length - off;
- for (var i = off; i < buffer.length; i++) {
- buffer[i] = value;
- }
- return true;
- };
- DES.prototype._unpad = function _unpad(buffer) {
- var pad = buffer[buffer.length - 1];
- for (var i = buffer.length - pad; i < buffer.length; i++) {
- assert.equal(buffer[i], pad);
- }
- return buffer.slice(0, buffer.length - pad);
- };
- DES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {
- var l = lStart;
- var r = rStart; // Apply f() x16 times
- for (var i = 0; i < state.keys.length; i += 2) {
- var keyL = state.keys[i];
- var keyR = state.keys[i + 1]; // f(r, k)
- utils.expand(r, state.tmp, 0);
- keyL ^= state.tmp[0];
- keyR ^= state.tmp[1];
- var s = utils.substitute(keyL, keyR);
- var f = utils.permute(s);
- var t = r;
- r = (l ^ f) >>> 0;
- l = t;
- } // Reverse Initial Permutation
- utils.rip(r, l, out, off);
- };
- DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {
- var l = rStart;
- var r = lStart; // Apply f() x16 times
- for (var i = state.keys.length - 2; i >= 0; i -= 2) {
- var keyL = state.keys[i];
- var keyR = state.keys[i + 1]; // f(r, k)
- utils.expand(l, state.tmp, 0);
- keyL ^= state.tmp[0];
- keyR ^= state.tmp[1];
- var s = utils.substitute(keyL, keyR);
- var f = utils.permute(s);
- var t = l;
- l = (r ^ f) >>> 0;
- r = t;
- } // Reverse Initial Permutation
- utils.rip(l, r, out, off);
- };
- },{"./cipher":232,"./utils":235,"inherits":278,"minimalistic-assert":328}],234:[function(require,module,exports){
- 'use strict';
- var assert = require('minimalistic-assert');
- var inherits = require('inherits');
- var Cipher = require('./cipher');
- var DES = require('./des');
- function EDEState(type, key) {
- assert.equal(key.length, 24, 'Invalid key length');
- var k1 = key.slice(0, 8);
- var k2 = key.slice(8, 16);
- var k3 = key.slice(16, 24);
- if (type === 'encrypt') {
- this.ciphers = [DES.create({
- type: 'encrypt',
- key: k1
- }), DES.create({
- type: 'decrypt',
- key: k2
- }), DES.create({
- type: 'encrypt',
- key: k3
- })];
- } else {
- this.ciphers = [DES.create({
- type: 'decrypt',
- key: k3
- }), DES.create({
- type: 'encrypt',
- key: k2
- }), DES.create({
- type: 'decrypt',
- key: k1
- })];
- }
- }
- function EDE(options) {
- Cipher.call(this, options);
- var state = new EDEState(this.type, this.options.key);
- this._edeState = state;
- }
- inherits(EDE, Cipher);
- module.exports = EDE;
- EDE.create = function create(options) {
- return new EDE(options);
- };
- EDE.prototype._update = function _update(inp, inOff, out, outOff) {
- var state = this._edeState;
- state.ciphers[0]._update(inp, inOff, out, outOff);
- state.ciphers[1]._update(out, outOff, out, outOff);
- state.ciphers[2]._update(out, outOff, out, outOff);
- };
- EDE.prototype._pad = DES.prototype._pad;
- EDE.prototype._unpad = DES.prototype._unpad;
- },{"./cipher":232,"./des":233,"inherits":278,"minimalistic-assert":328}],235:[function(require,module,exports){
- 'use strict';
- exports.readUInt32BE = function readUInt32BE(bytes, off) {
- var res = bytes[0 + off] << 24 | bytes[1 + off] << 16 | bytes[2 + off] << 8 | bytes[3 + off];
- return res >>> 0;
- };
- exports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {
- bytes[0 + off] = value >>> 24;
- bytes[1 + off] = value >>> 16 & 0xff;
- bytes[2 + off] = value >>> 8 & 0xff;
- bytes[3 + off] = value & 0xff;
- };
- exports.ip = function ip(inL, inR, out, off) {
- var outL = 0;
- var outR = 0;
- for (var i = 6; i >= 0; i -= 2) {
- for (var j = 0; j <= 24; j += 8) {
- outL <<= 1;
- outL |= inR >>> j + i & 1;
- }
- for (var j = 0; j <= 24; j += 8) {
- outL <<= 1;
- outL |= inL >>> j + i & 1;
- }
- }
- for (var i = 6; i >= 0; i -= 2) {
- for (var j = 1; j <= 25; j += 8) {
- outR <<= 1;
- outR |= inR >>> j + i & 1;
- }
- for (var j = 1; j <= 25; j += 8) {
- outR <<= 1;
- outR |= inL >>> j + i & 1;
- }
- }
- out[off + 0] = outL >>> 0;
- out[off + 1] = outR >>> 0;
- };
- exports.rip = function rip(inL, inR, out, off) {
- var outL = 0;
- var outR = 0;
- for (var i = 0; i < 4; i++) {
- for (var j = 24; j >= 0; j -= 8) {
- outL <<= 1;
- outL |= inR >>> j + i & 1;
- outL <<= 1;
- outL |= inL >>> j + i & 1;
- }
- }
- for (var i = 4; i < 8; i++) {
- for (var j = 24; j >= 0; j -= 8) {
- outR <<= 1;
- outR |= inR >>> j + i & 1;
- outR <<= 1;
- outR |= inL >>> j + i & 1;
- }
- }
- out[off + 0] = outL >>> 0;
- out[off + 1] = outR >>> 0;
- };
- exports.pc1 = function pc1(inL, inR, out, off) {
- var outL = 0;
- var outR = 0; // 7, 15, 23, 31, 39, 47, 55, 63
- // 6, 14, 22, 30, 39, 47, 55, 63
- // 5, 13, 21, 29, 39, 47, 55, 63
- // 4, 12, 20, 28
- for (var i = 7; i >= 5; i--) {
- for (var j = 0; j <= 24; j += 8) {
- outL <<= 1;
- outL |= inR >> j + i & 1;
- }
- for (var j = 0; j <= 24; j += 8) {
- outL <<= 1;
- outL |= inL >> j + i & 1;
- }
- }
- for (var j = 0; j <= 24; j += 8) {
- outL <<= 1;
- outL |= inR >> j + i & 1;
- } // 1, 9, 17, 25, 33, 41, 49, 57
- // 2, 10, 18, 26, 34, 42, 50, 58
- // 3, 11, 19, 27, 35, 43, 51, 59
- // 36, 44, 52, 60
- for (var i = 1; i <= 3; i++) {
- for (var j = 0; j <= 24; j += 8) {
- outR <<= 1;
- outR |= inR >> j + i & 1;
- }
- for (var j = 0; j <= 24; j += 8) {
- outR <<= 1;
- outR |= inL >> j + i & 1;
- }
- }
- for (var j = 0; j <= 24; j += 8) {
- outR <<= 1;
- outR |= inL >> j + i & 1;
- }
- out[off + 0] = outL >>> 0;
- out[off + 1] = outR >>> 0;
- };
- exports.r28shl = function r28shl(num, shift) {
- return num << shift & 0xfffffff | num >>> 28 - shift;
- };
- var pc2table = [// inL => outL
- 14, 11, 17, 4, 27, 23, 25, 0, 13, 22, 7, 18, 5, 9, 16, 24, 2, 20, 12, 21, 1, 8, 15, 26, // inR => outR
- 15, 4, 25, 19, 9, 1, 26, 16, 5, 11, 23, 8, 12, 7, 17, 0, 22, 3, 10, 14, 6, 20, 27, 24];
- exports.pc2 = function pc2(inL, inR, out, off) {
- var outL = 0;
- var outR = 0;
- var len = pc2table.length >>> 1;
- for (var i = 0; i < len; i++) {
- outL <<= 1;
- outL |= inL >>> pc2table[i] & 0x1;
- }
- for (var i = len; i < pc2table.length; i++) {
- outR <<= 1;
- outR |= inR >>> pc2table[i] & 0x1;
- }
- out[off + 0] = outL >>> 0;
- out[off + 1] = outR >>> 0;
- };
- exports.expand = function expand(r, out, off) {
- var outL = 0;
- var outR = 0;
- outL = (r & 1) << 5 | r >>> 27;
- for (var i = 23; i >= 15; i -= 4) {
- outL <<= 6;
- outL |= r >>> i & 0x3f;
- }
- for (var i = 11; i >= 3; i -= 4) {
- outR |= r >>> i & 0x3f;
- outR <<= 6;
- }
- outR |= (r & 0x1f) << 1 | r >>> 31;
- out[off + 0] = outL >>> 0;
- out[off + 1] = outR >>> 0;
- };
- var sTable = [14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1, 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8, 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7, 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13, 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14, 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5, 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2, 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9, 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10, 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1, 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7, 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12, 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3, 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9, 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8, 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14, 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1, 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6, 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13, 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3, 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5, 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8, 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10, 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13, 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10, 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6, 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7, 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12, 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4, 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2, 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13, 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11];
- exports.substitute = function substitute(inL, inR) {
- var out = 0;
- for (var i = 0; i < 4; i++) {
- var b = inL >>> 18 - i * 6 & 0x3f;
- var sb = sTable[i * 0x40 + b];
- out <<= 4;
- out |= sb;
- }
- for (var i = 0; i < 4; i++) {
- var b = inR >>> 18 - i * 6 & 0x3f;
- var sb = sTable[4 * 0x40 + i * 0x40 + b];
- out <<= 4;
- out |= sb;
- }
- return out >>> 0;
- };
- var permuteTable = [16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22, 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7];
- exports.permute = function permute(num) {
- var out = 0;
- for (var i = 0; i < permuteTable.length; i++) {
- out <<= 1;
- out |= num >>> permuteTable[i] & 0x1;
- }
- return out >>> 0;
- };
- exports.padSplit = function padSplit(num, size, group) {
- var str = num.toString(2);
- while (str.length < size) {
- str = '0' + str;
- }
- var out = [];
- for (var i = 0; i < size; i += group) {
- out.push(str.slice(i, i + group));
- }
- return out.join(' ');
- };
- },{}],236:[function(require,module,exports){
- (function (Buffer){
- "use strict";
- var generatePrime = require('./lib/generatePrime');
- var primes = require('./lib/primes.json');
- var DH = require('./lib/dh');
- function getDiffieHellman(mod) {
- var prime = new Buffer(primes[mod].prime, 'hex');
- var gen = new Buffer(primes[mod].gen, 'hex');
- return new DH(prime, gen);
- }
- var ENCODINGS = {
- 'binary': true,
- 'hex': true,
- 'base64': true
- };
- function createDiffieHellman(prime, enc, generator, genc) {
- if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {
- return createDiffieHellman(prime, 'binary', enc, generator);
- }
- enc = enc || 'binary';
- genc = genc || 'binary';
- generator = generator || new Buffer([2]);
- if (!Buffer.isBuffer(generator)) {
- generator = new Buffer(generator, genc);
- }
- if (typeof prime === 'number') {
- return new DH(generatePrime(prime, generator), generator, true);
- }
- if (!Buffer.isBuffer(prime)) {
- prime = new Buffer(prime, enc);
- }
- return new DH(prime, generator, true);
- }
- exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman;
- exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman;
- }).call(this,require("buffer").Buffer)
- },{"./lib/dh":237,"./lib/generatePrime":238,"./lib/primes.json":239,"buffer":216}],237:[function(require,module,exports){
- (function (Buffer){
- "use strict";
- var BN = require('bn.js');
- var MillerRabin = require('miller-rabin');
- var millerRabin = new MillerRabin();
- var TWENTYFOUR = new BN(24);
- var ELEVEN = new BN(11);
- var TEN = new BN(10);
- var THREE = new BN(3);
- var SEVEN = new BN(7);
- var primes = require('./generatePrime');
- var randomBytes = require('randombytes');
- module.exports = DH;
- function setPublicKey(pub, enc) {
- enc = enc || 'utf8';
- if (!Buffer.isBuffer(pub)) {
- pub = new Buffer(pub, enc);
- }
- this._pub = new BN(pub);
- return this;
- }
- function setPrivateKey(priv, enc) {
- enc = enc || 'utf8';
- if (!Buffer.isBuffer(priv)) {
- priv = new Buffer(priv, enc);
- }
- this._priv = new BN(priv);
- return this;
- }
- var primeCache = {};
- function checkPrime(prime, generator) {
- var gen = generator.toString('hex');
- var hex = [gen, prime.toString(16)].join('_');
- if (hex in primeCache) {
- return primeCache[hex];
- }
- var error = 0;
- if (prime.isEven() || !primes.simpleSieve || !primes.fermatTest(prime) || !millerRabin.test(prime)) {
- //not a prime so +1
- error += 1;
- if (gen === '02' || gen === '05') {
- // we'd be able to check the generator
- // it would fail so +8
- error += 8;
- } else {
- //we wouldn't be able to test the generator
- // so +4
- error += 4;
- }
- primeCache[hex] = error;
- return error;
- }
- if (!millerRabin.test(prime.shrn(1))) {
- //not a safe prime
- error += 2;
- }
- var rem;
- switch (gen) {
- case '02':
- if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {
- // unsuidable generator
- error += 8;
- }
- break;
- case '05':
- rem = prime.mod(TEN);
- if (rem.cmp(THREE) && rem.cmp(SEVEN)) {
- // prime mod 10 needs to equal 3 or 7
- error += 8;
- }
- break;
- default:
- error += 4;
- }
- primeCache[hex] = error;
- return error;
- }
- function DH(prime, generator, malleable) {
- this.setGenerator(generator);
- this.__prime = new BN(prime);
- this._prime = BN.mont(this.__prime);
- this._primeLen = prime.length;
- this._pub = undefined;
- this._priv = undefined;
- this._primeCode = undefined;
- if (malleable) {
- this.setPublicKey = setPublicKey;
- this.setPrivateKey = setPrivateKey;
- } else {
- this._primeCode = 8;
- }
- }
- Object.defineProperty(DH.prototype, 'verifyError', {
- enumerable: true,
- get: function get() {
- if (typeof this._primeCode !== 'number') {
- this._primeCode = checkPrime(this.__prime, this.__gen);
- }
- return this._primeCode;
- }
- });
- DH.prototype.generateKeys = function () {
- if (!this._priv) {
- this._priv = new BN(randomBytes(this._primeLen));
- }
- this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();
- return this.getPublicKey();
- };
- DH.prototype.computeSecret = function (other) {
- other = new BN(other);
- other = other.toRed(this._prime);
- var secret = other.redPow(this._priv).fromRed();
- var out = new Buffer(secret.toArray());
- var prime = this.getPrime();
- if (out.length < prime.length) {
- var front = new Buffer(prime.length - out.length);
- front.fill(0);
- out = Buffer.concat([front, out]);
- }
- return out;
- };
- DH.prototype.getPublicKey = function getPublicKey(enc) {
- return formatReturnValue(this._pub, enc);
- };
- DH.prototype.getPrivateKey = function getPrivateKey(enc) {
- return formatReturnValue(this._priv, enc);
- };
- DH.prototype.getPrime = function (enc) {
- return formatReturnValue(this.__prime, enc);
- };
- DH.prototype.getGenerator = function (enc) {
- return formatReturnValue(this._gen, enc);
- };
- DH.prototype.setGenerator = function (gen, enc) {
- enc = enc || 'utf8';
- if (!Buffer.isBuffer(gen)) {
- gen = new Buffer(gen, enc);
- }
- this.__gen = gen;
- this._gen = new BN(gen);
- return this;
- };
- function formatReturnValue(bn, enc) {
- var buf = new Buffer(bn.toArray());
- if (!enc) {
- return buf;
- } else {
- return buf.toString(enc);
- }
- }
- }).call(this,require("buffer").Buffer)
- },{"./generatePrime":238,"bn.js":240,"buffer":216,"miller-rabin":326,"randombytes":366}],238:[function(require,module,exports){
- "use strict";
- var randomBytes = require('randombytes');
- module.exports = findPrime;
- findPrime.simpleSieve = simpleSieve;
- findPrime.fermatTest = fermatTest;
- var BN = require('bn.js');
- var TWENTYFOUR = new BN(24);
- var MillerRabin = require('miller-rabin');
- var millerRabin = new MillerRabin();
- var ONE = new BN(1);
- var TWO = new BN(2);
- var FIVE = new BN(5);
- var SIXTEEN = new BN(16);
- var EIGHT = new BN(8);
- var TEN = new BN(10);
- var THREE = new BN(3);
- var SEVEN = new BN(7);
- var ELEVEN = new BN(11);
- var FOUR = new BN(4);
- var TWELVE = new BN(12);
- var primes = null;
- function _getPrimes() {
- if (primes !== null) return primes;
- var limit = 0x100000;
- var res = [];
- res[0] = 2;
- for (var i = 1, k = 3; k < limit; k += 2) {
- var sqrt = Math.ceil(Math.sqrt(k));
- for (var j = 0; j < i && res[j] <= sqrt; j++) {
- if (k % res[j] === 0) break;
- }
- if (i !== j && res[j] <= sqrt) continue;
- res[i++] = k;
- }
- primes = res;
- return res;
- }
- function simpleSieve(p) {
- var primes = _getPrimes();
- for (var i = 0; i < primes.length; i++) {
- if (p.modn(primes[i]) === 0) {
- if (p.cmpn(primes[i]) === 0) {
- return true;
- } else {
- return false;
- }
- }
- }
- return true;
- }
- function fermatTest(p) {
- var red = BN.mont(p);
- return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;
- }
- function findPrime(bits, gen) {
- if (bits < 16) {
- // this is what openssl does
- if (gen === 2 || gen === 5) {
- return new BN([0x8c, 0x7b]);
- } else {
- return new BN([0x8c, 0x27]);
- }
- }
- gen = new BN(gen);
- var num, n2;
- while (true) {
- num = new BN(randomBytes(Math.ceil(bits / 8)));
- while (num.bitLength() > bits) {
- num.ishrn(1);
- }
- if (num.isEven()) {
- num.iadd(ONE);
- }
- if (!num.testn(1)) {
- num.iadd(TWO);
- }
- if (!gen.cmp(TWO)) {
- while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {
- num.iadd(FOUR);
- }
- } else if (!gen.cmp(FIVE)) {
- while (num.mod(TEN).cmp(THREE)) {
- num.iadd(FOUR);
- }
- }
- n2 = num.shrn(1);
- if (simpleSieve(n2) && simpleSieve(num) && fermatTest(n2) && fermatTest(num) && millerRabin.test(n2) && millerRabin.test(num)) {
- return num;
- }
- }
- }
- },{"bn.js":240,"miller-rabin":326,"randombytes":366}],239:[function(require,module,exports){
- module.exports={
- "modp1": {
- "gen": "02",
- "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"
- },
- "modp2": {
- "gen": "02",
- "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"
- },
- "modp5": {
- "gen": "02",
- "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"
- },
- "modp14": {
- "gen": "02",
- "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"
- },
- "modp15": {
- "gen": "02",
- "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"
- },
- "modp16": {
- "gen": "02",
- "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"
- },
- "modp17": {
- "gen": "02",
- "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"
- },
- "modp18": {
- "gen": "02",
- "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"
- }
- }
- },{}],240:[function(require,module,exports){
- arguments[4][181][0].apply(exports,arguments)
- },{"buffer":185,"dup":181}],241:[function(require,module,exports){
- 'use strict';
- var elliptic = exports;
- elliptic.version = require('../package.json').version;
- elliptic.utils = require('./elliptic/utils');
- elliptic.rand = require('brorand');
- elliptic.curve = require('./elliptic/curve');
- elliptic.curves = require('./elliptic/curves'); // Protocols
- elliptic.ec = require('./elliptic/ec');
- elliptic.eddsa = require('./elliptic/eddsa');
- },{"../package.json":257,"./elliptic/curve":244,"./elliptic/curves":247,"./elliptic/ec":248,"./elliptic/eddsa":251,"./elliptic/utils":255,"brorand":184}],242:[function(require,module,exports){
- 'use strict';
- var BN = require('bn.js');
- var utils = require('../utils');
- var getNAF = utils.getNAF;
- var getJSF = utils.getJSF;
- var assert = utils.assert;
- function BaseCurve(type, conf) {
- this.type = type;
- this.p = new BN(conf.p, 16); // Use Montgomery, when there is no fast reduction for the prime
- this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p); // Useful for many curves
- this.zero = new BN(0).toRed(this.red);
- this.one = new BN(1).toRed(this.red);
- this.two = new BN(2).toRed(this.red); // Curve configuration, optional
- this.n = conf.n && new BN(conf.n, 16);
- this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed); // Temporary arrays
- this._wnafT1 = new Array(4);
- this._wnafT2 = new Array(4);
- this._wnafT3 = new Array(4);
- this._wnafT4 = new Array(4);
- this._bitLength = this.n ? this.n.bitLength() : 0; // Generalized Greg Maxwell's trick
- var adjustCount = this.n && this.p.div(this.n);
- if (!adjustCount || adjustCount.cmpn(100) > 0) {
- this.redN = null;
- } else {
- this._maxwellTrick = true;
- this.redN = this.n.toRed(this.red);
- }
- }
- module.exports = BaseCurve;
- BaseCurve.prototype.point = function point() {
- throw new Error('Not implemented');
- };
- BaseCurve.prototype.validate = function validate() {
- throw new Error('Not implemented');
- };
- BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
- assert(p.precomputed);
- var doubles = p._getDoubles();
- var naf = getNAF(k, 1, this._bitLength);
- var I = (1 << doubles.step + 1) - (doubles.step % 2 === 0 ? 2 : 1);
- I /= 3; // Translate into more windowed form
- var repr = [];
- for (var j = 0; j < naf.length; j += doubles.step) {
- var nafW = 0;
- for (var k = j + doubles.step - 1; k >= j; k--) {
- nafW = (nafW << 1) + naf[k];
- }
- repr.push(nafW);
- }
- var a = this.jpoint(null, null, null);
- var b = this.jpoint(null, null, null);
- for (var i = I; i > 0; i--) {
- for (var j = 0; j < repr.length; j++) {
- var nafW = repr[j];
- if (nafW === i) b = b.mixedAdd(doubles.points[j]);else if (nafW === -i) b = b.mixedAdd(doubles.points[j].neg());
- }
- a = a.add(b);
- }
- return a.toP();
- };
- BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
- var w = 4; // Precompute window
- var nafPoints = p._getNAFPoints(w);
- w = nafPoints.wnd;
- var wnd = nafPoints.points; // Get NAF form
- var naf = getNAF(k, w, this._bitLength); // Add `this`*(N+1) for every w-NAF index
- var acc = this.jpoint(null, null, null);
- for (var i = naf.length - 1; i >= 0; i--) {
- // Count zeroes
- for (var k = 0; i >= 0 && naf[i] === 0; i--) {
- k++;
- }
- if (i >= 0) k++;
- acc = acc.dblp(k);
- if (i < 0) break;
- var z = naf[i];
- assert(z !== 0);
- if (p.type === 'affine') {
- // J +- P
- if (z > 0) acc = acc.mixedAdd(wnd[z - 1 >> 1]);else acc = acc.mixedAdd(wnd[-z - 1 >> 1].neg());
- } else {
- // J +- J
- if (z > 0) acc = acc.add(wnd[z - 1 >> 1]);else acc = acc.add(wnd[-z - 1 >> 1].neg());
- }
- }
- return p.type === 'affine' ? acc.toP() : acc;
- };
- BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW, points, coeffs, len, jacobianResult) {
- var wndWidth = this._wnafT1;
- var wnd = this._wnafT2;
- var naf = this._wnafT3; // Fill all arrays
- var max = 0;
- for (var i = 0; i < len; i++) {
- var p = points[i];
- var nafPoints = p._getNAFPoints(defW);
- wndWidth[i] = nafPoints.wnd;
- wnd[i] = nafPoints.points;
- } // Comb small window NAFs
- for (var i = len - 1; i >= 1; i -= 2) {
- var a = i - 1;
- var b = i;
- if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
- naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);
- naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);
- max = Math.max(naf[a].length, max);
- max = Math.max(naf[b].length, max);
- continue;
- }
- var comb = [points[a],
- /* 1 */
- null,
- /* 3 */
- null,
- /* 5 */
- points[b]
- /* 7 */
- ]; // Try to avoid Projective points, if possible
- if (points[a].y.cmp(points[b].y) === 0) {
- comb[1] = points[a].add(points[b]);
- comb[2] = points[a].toJ().mixedAdd(points[b].neg());
- } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
- comb[1] = points[a].toJ().mixedAdd(points[b]);
- comb[2] = points[a].add(points[b].neg());
- } else {
- comb[1] = points[a].toJ().mixedAdd(points[b]);
- comb[2] = points[a].toJ().mixedAdd(points[b].neg());
- }
- var index = [-3,
- /* -1 -1 */
- -1,
- /* -1 0 */
- -5,
- /* -1 1 */
- -7,
- /* 0 -1 */
- 0,
- /* 0 0 */
- 7,
- /* 0 1 */
- 5,
- /* 1 -1 */
- 1,
- /* 1 0 */
- 3
- /* 1 1 */
- ];
- var jsf = getJSF(coeffs[a], coeffs[b]);
- max = Math.max(jsf[0].length, max);
- naf[a] = new Array(max);
- naf[b] = new Array(max);
- for (var j = 0; j < max; j++) {
- var ja = jsf[0][j] | 0;
- var jb = jsf[1][j] | 0;
- naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
- naf[b][j] = 0;
- wnd[a] = comb;
- }
- }
- var acc = this.jpoint(null, null, null);
- var tmp = this._wnafT4;
- for (var i = max; i >= 0; i--) {
- var k = 0;
- while (i >= 0) {
- var zero = true;
- for (var j = 0; j < len; j++) {
- tmp[j] = naf[j][i] | 0;
- if (tmp[j] !== 0) zero = false;
- }
- if (!zero) break;
- k++;
- i--;
- }
- if (i >= 0) k++;
- acc = acc.dblp(k);
- if (i < 0) break;
- for (var j = 0; j < len; j++) {
- var z = tmp[j];
- var p;
- if (z === 0) continue;else if (z > 0) p = wnd[j][z - 1 >> 1];else if (z < 0) p = wnd[j][-z - 1 >> 1].neg();
- if (p.type === 'affine') acc = acc.mixedAdd(p);else acc = acc.add(p);
- }
- } // Zeroify references
- for (var i = 0; i < len; i++) {
- wnd[i] = null;
- }
- if (jacobianResult) return acc;else return acc.toP();
- };
- function BasePoint(curve, type) {
- this.curve = curve;
- this.type = type;
- this.precomputed = null;
- }
- BaseCurve.BasePoint = BasePoint;
- BasePoint.prototype.eq = function eq()
- /*other*/
- {
- throw new Error('Not implemented');
- };
- BasePoint.prototype.validate = function validate() {
- return this.curve.validate(this);
- };
- BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
- bytes = utils.toArray(bytes, enc);
- var len = this.p.byteLength(); // uncompressed, hybrid-odd, hybrid-even
- if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) && bytes.length - 1 === 2 * len) {
- if (bytes[0] === 0x06) assert(bytes[bytes.length - 1] % 2 === 0);else if (bytes[0] === 0x07) assert(bytes[bytes.length - 1] % 2 === 1);
- var res = this.point(bytes.slice(1, 1 + len), bytes.slice(1 + len, 1 + 2 * len));
- return res;
- } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) && bytes.length - 1 === len) {
- return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
- }
- throw new Error('Unknown point format');
- };
- BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
- return this.encode(enc, true);
- };
- BasePoint.prototype._encode = function _encode(compact) {
- var len = this.curve.p.byteLength();
- var x = this.getX().toArray('be', len);
- if (compact) return [this.getY().isEven() ? 0x02 : 0x03].concat(x);
- return [0x04].concat(x, this.getY().toArray('be', len));
- };
- BasePoint.prototype.encode = function encode(enc, compact) {
- return utils.encode(this._encode(compact), enc);
- };
- BasePoint.prototype.precompute = function precompute(power) {
- if (this.precomputed) return this;
- var precomputed = {
- doubles: null,
- naf: null,
- beta: null
- };
- precomputed.naf = this._getNAFPoints(8);
- precomputed.doubles = this._getDoubles(4, power);
- precomputed.beta = this._getBeta();
- this.precomputed = precomputed;
- return this;
- };
- BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
- if (!this.precomputed) return false;
- var doubles = this.precomputed.doubles;
- if (!doubles) return false;
- return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
- };
- BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
- if (this.precomputed && this.precomputed.doubles) return this.precomputed.doubles;
- var doubles = [this];
- var acc = this;
- for (var i = 0; i < power; i += step) {
- for (var j = 0; j < step; j++) {
- acc = acc.dbl();
- }
- doubles.push(acc);
- }
- return {
- step: step,
- points: doubles
- };
- };
- BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
- if (this.precomputed && this.precomputed.naf) return this.precomputed.naf;
- var res = [this];
- var max = (1 << wnd) - 1;
- var dbl = max === 1 ? null : this.dbl();
- for (var i = 1; i < max; i++) {
- res[i] = res[i - 1].add(dbl);
- }
- return {
- wnd: wnd,
- points: res
- };
- };
- BasePoint.prototype._getBeta = function _getBeta() {
- return null;
- };
- BasePoint.prototype.dblp = function dblp(k) {
- var r = this;
- for (var i = 0; i < k; i++) {
- r = r.dbl();
- }
- return r;
- };
- },{"../utils":255,"bn.js":256}],243:[function(require,module,exports){
- 'use strict';
- var utils = require('../utils');
- var BN = require('bn.js');
- var inherits = require('inherits');
- var Base = require('./base');
- var assert = utils.assert;
- function EdwardsCurve(conf) {
- // NOTE: Important as we are creating point in Base.call()
- this.twisted = (conf.a | 0) !== 1;
- this.mOneA = this.twisted && (conf.a | 0) === -1;
- this.extended = this.mOneA;
- Base.call(this, 'edwards', conf);
- this.a = new BN(conf.a, 16).umod(this.red.m);
- this.a = this.a.toRed(this.red);
- this.c = new BN(conf.c, 16).toRed(this.red);
- this.c2 = this.c.redSqr();
- this.d = new BN(conf.d, 16).toRed(this.red);
- this.dd = this.d.redAdd(this.d);
- assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
- this.oneC = (conf.c | 0) === 1;
- }
- inherits(EdwardsCurve, Base);
- module.exports = EdwardsCurve;
- EdwardsCurve.prototype._mulA = function _mulA(num) {
- if (this.mOneA) return num.redNeg();else return this.a.redMul(num);
- };
- EdwardsCurve.prototype._mulC = function _mulC(num) {
- if (this.oneC) return num;else return this.c.redMul(num);
- }; // Just for compatibility with Short curve
- EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
- return this.point(x, y, z, t);
- };
- EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
- x = new BN(x, 16);
- if (!x.red) x = x.toRed(this.red);
- var x2 = x.redSqr();
- var rhs = this.c2.redSub(this.a.redMul(x2));
- var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
- var y2 = rhs.redMul(lhs.redInvm());
- var y = y2.redSqrt();
- if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) throw new Error('invalid point');
- var isOdd = y.fromRed().isOdd();
- if (odd && !isOdd || !odd && isOdd) y = y.redNeg();
- return this.point(x, y);
- };
- EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
- y = new BN(y, 16);
- if (!y.red) y = y.toRed(this.red); // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)
- var y2 = y.redSqr();
- var lhs = y2.redSub(this.c2);
- var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);
- var x2 = lhs.redMul(rhs.redInvm());
- if (x2.cmp(this.zero) === 0) {
- if (odd) throw new Error('invalid point');else return this.point(this.zero, y);
- }
- var x = x2.redSqrt();
- if (x.redSqr().redSub(x2).cmp(this.zero) !== 0) throw new Error('invalid point');
- if (x.fromRed().isOdd() !== odd) x = x.redNeg();
- return this.point(x, y);
- };
- EdwardsCurve.prototype.validate = function validate(point) {
- if (point.isInfinity()) return true; // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
- point.normalize();
- var x2 = point.x.redSqr();
- var y2 = point.y.redSqr();
- var lhs = x2.redMul(this.a).redAdd(y2);
- var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
- return lhs.cmp(rhs) === 0;
- };
- function Point(curve, x, y, z, t) {
- Base.BasePoint.call(this, curve, 'projective');
- if (x === null && y === null && z === null) {
- this.x = this.curve.zero;
- this.y = this.curve.one;
- this.z = this.curve.one;
- this.t = this.curve.zero;
- this.zOne = true;
- } else {
- this.x = new BN(x, 16);
- this.y = new BN(y, 16);
- this.z = z ? new BN(z, 16) : this.curve.one;
- this.t = t && new BN(t, 16);
- if (!this.x.red) this.x = this.x.toRed(this.curve.red);
- if (!this.y.red) this.y = this.y.toRed(this.curve.red);
- if (!this.z.red) this.z = this.z.toRed(this.curve.red);
- if (this.t && !this.t.red) this.t = this.t.toRed(this.curve.red);
- this.zOne = this.z === this.curve.one; // Use extended coordinates
- if (this.curve.extended && !this.t) {
- this.t = this.x.redMul(this.y);
- if (!this.zOne) this.t = this.t.redMul(this.z.redInvm());
- }
- }
- }
- inherits(Point, Base.BasePoint);
- EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
- return Point.fromJSON(this, obj);
- };
- EdwardsCurve.prototype.point = function point(x, y, z, t) {
- return new Point(this, x, y, z, t);
- };
- Point.fromJSON = function fromJSON(curve, obj) {
- return new Point(curve, obj[0], obj[1], obj[2]);
- };
- Point.prototype.inspect = function inspect() {
- if (this.isInfinity()) return '<EC Point Infinity>';
- return '<EC Point x: ' + this.x.fromRed().toString(16, 2) + ' y: ' + this.y.fromRed().toString(16, 2) + ' z: ' + this.z.fromRed().toString(16, 2) + '>';
- };
- Point.prototype.isInfinity = function isInfinity() {
- // XXX This code assumes that zero is always zero in red
- return this.x.cmpn(0) === 0 && (this.y.cmp(this.z) === 0 || this.zOne && this.y.cmp(this.curve.c) === 0);
- };
- Point.prototype._extDbl = function _extDbl() {
- // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
- // #doubling-dbl-2008-hwcd
- // 4M + 4S
- // A = X1^2
- var a = this.x.redSqr(); // B = Y1^2
- var b = this.y.redSqr(); // C = 2 * Z1^2
- var c = this.z.redSqr();
- c = c.redIAdd(c); // D = a * A
- var d = this.curve._mulA(a); // E = (X1 + Y1)^2 - A - B
- var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b); // G = D + B
- var g = d.redAdd(b); // F = G - C
- var f = g.redSub(c); // H = D - B
- var h = d.redSub(b); // X3 = E * F
- var nx = e.redMul(f); // Y3 = G * H
- var ny = g.redMul(h); // T3 = E * H
- var nt = e.redMul(h); // Z3 = F * G
- var nz = f.redMul(g);
- return this.curve.point(nx, ny, nz, nt);
- };
- Point.prototype._projDbl = function _projDbl() {
- // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
- // #doubling-dbl-2008-bbjlp
- // #doubling-dbl-2007-bl
- // and others
- // Generally 3M + 4S or 2M + 4S
- // B = (X1 + Y1)^2
- var b = this.x.redAdd(this.y).redSqr(); // C = X1^2
- var c = this.x.redSqr(); // D = Y1^2
- var d = this.y.redSqr();
- var nx;
- var ny;
- var nz;
- if (this.curve.twisted) {
- // E = a * C
- var e = this.curve._mulA(c); // F = E + D
- var f = e.redAdd(d);
- if (this.zOne) {
- // X3 = (B - C - D) * (F - 2)
- nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two)); // Y3 = F * (E - D)
- ny = f.redMul(e.redSub(d)); // Z3 = F^2 - 2 * F
- nz = f.redSqr().redSub(f).redSub(f);
- } else {
- // H = Z1^2
- var h = this.z.redSqr(); // J = F - 2 * H
- var j = f.redSub(h).redISub(h); // X3 = (B-C-D)*J
- nx = b.redSub(c).redISub(d).redMul(j); // Y3 = F * (E - D)
- ny = f.redMul(e.redSub(d)); // Z3 = F * J
- nz = f.redMul(j);
- }
- } else {
- // E = C + D
- var e = c.redAdd(d); // H = (c * Z1)^2
- var h = this.curve._mulC(this.z).redSqr(); // J = E - 2 * H
- var j = e.redSub(h).redSub(h); // X3 = c * (B - E) * J
- nx = this.curve._mulC(b.redISub(e)).redMul(j); // Y3 = c * E * (C - D)
- ny = this.curve._mulC(e).redMul(c.redISub(d)); // Z3 = E * J
- nz = e.redMul(j);
- }
- return this.curve.point(nx, ny, nz);
- };
- Point.prototype.dbl = function dbl() {
- if (this.isInfinity()) return this; // Double in extended coordinates
- if (this.curve.extended) return this._extDbl();else return this._projDbl();
- };
- Point.prototype._extAdd = function _extAdd(p) {
- // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
- // #addition-add-2008-hwcd-3
- // 8M
- // A = (Y1 - X1) * (Y2 - X2)
- var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x)); // B = (Y1 + X1) * (Y2 + X2)
- var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x)); // C = T1 * k * T2
- var c = this.t.redMul(this.curve.dd).redMul(p.t); // D = Z1 * 2 * Z2
- var d = this.z.redMul(p.z.redAdd(p.z)); // E = B - A
- var e = b.redSub(a); // F = D - C
- var f = d.redSub(c); // G = D + C
- var g = d.redAdd(c); // H = B + A
- var h = b.redAdd(a); // X3 = E * F
- var nx = e.redMul(f); // Y3 = G * H
- var ny = g.redMul(h); // T3 = E * H
- var nt = e.redMul(h); // Z3 = F * G
- var nz = f.redMul(g);
- return this.curve.point(nx, ny, nz, nt);
- };
- Point.prototype._projAdd = function _projAdd(p) {
- // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
- // #addition-add-2008-bbjlp
- // #addition-add-2007-bl
- // 10M + 1S
- // A = Z1 * Z2
- var a = this.z.redMul(p.z); // B = A^2
- var b = a.redSqr(); // C = X1 * X2
- var c = this.x.redMul(p.x); // D = Y1 * Y2
- var d = this.y.redMul(p.y); // E = d * C * D
- var e = this.curve.d.redMul(c).redMul(d); // F = B - E
- var f = b.redSub(e); // G = B + E
- var g = b.redAdd(e); // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
- var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
- var nx = a.redMul(f).redMul(tmp);
- var ny;
- var nz;
- if (this.curve.twisted) {
- // Y3 = A * G * (D - a * C)
- ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c))); // Z3 = F * G
- nz = f.redMul(g);
- } else {
- // Y3 = A * G * (D - C)
- ny = a.redMul(g).redMul(d.redSub(c)); // Z3 = c * F * G
- nz = this.curve._mulC(f).redMul(g);
- }
- return this.curve.point(nx, ny, nz);
- };
- Point.prototype.add = function add(p) {
- if (this.isInfinity()) return p;
- if (p.isInfinity()) return this;
- if (this.curve.extended) return this._extAdd(p);else return this._projAdd(p);
- };
- Point.prototype.mul = function mul(k) {
- if (this._hasDoubles(k)) return this.curve._fixedNafMul(this, k);else return this.curve._wnafMul(this, k);
- };
- Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
- return this.curve._wnafMulAdd(1, [this, p], [k1, k2], 2, false);
- };
- Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
- return this.curve._wnafMulAdd(1, [this, p], [k1, k2], 2, true);
- };
- Point.prototype.normalize = function normalize() {
- if (this.zOne) return this; // Normalize coordinates
- var zi = this.z.redInvm();
- this.x = this.x.redMul(zi);
- this.y = this.y.redMul(zi);
- if (this.t) this.t = this.t.redMul(zi);
- this.z = this.curve.one;
- this.zOne = true;
- return this;
- };
- Point.prototype.neg = function neg() {
- return this.curve.point(this.x.redNeg(), this.y, this.z, this.t && this.t.redNeg());
- };
- Point.prototype.getX = function getX() {
- this.normalize();
- return this.x.fromRed();
- };
- Point.prototype.getY = function getY() {
- this.normalize();
- return this.y.fromRed();
- };
- Point.prototype.eq = function eq(other) {
- return this === other || this.getX().cmp(other.getX()) === 0 && this.getY().cmp(other.getY()) === 0;
- };
- Point.prototype.eqXToP = function eqXToP(x) {
- var rx = x.toRed(this.curve.red).redMul(this.z);
- if (this.x.cmp(rx) === 0) return true;
- var xc = x.clone();
- var t = this.curve.redN.redMul(this.z);
- for (;;) {
- xc.iadd(this.curve.n);
- if (xc.cmp(this.curve.p) >= 0) return false;
- rx.redIAdd(t);
- if (this.x.cmp(rx) === 0) return true;
- }
- }; // Compatibility with BaseCurve
- Point.prototype.toP = Point.prototype.normalize;
- Point.prototype.mixedAdd = Point.prototype.add;
- },{"../utils":255,"./base":242,"bn.js":256,"inherits":278}],244:[function(require,module,exports){
- 'use strict';
- var curve = exports;
- curve.base = require('./base');
- curve.short = require('./short');
- curve.mont = require('./mont');
- curve.edwards = require('./edwards');
- },{"./base":242,"./edwards":243,"./mont":245,"./short":246}],245:[function(require,module,exports){
- 'use strict';
- var BN = require('bn.js');
- var inherits = require('inherits');
- var Base = require('./base');
- var utils = require('../utils');
- function MontCurve(conf) {
- Base.call(this, 'mont', conf);
- this.a = new BN(conf.a, 16).toRed(this.red);
- this.b = new BN(conf.b, 16).toRed(this.red);
- this.i4 = new BN(4).toRed(this.red).redInvm();
- this.two = new BN(2).toRed(this.red);
- this.a24 = this.i4.redMul(this.a.redAdd(this.two));
- }
- inherits(MontCurve, Base);
- module.exports = MontCurve;
- MontCurve.prototype.validate = function validate(point) {
- var x = point.normalize().x;
- var x2 = x.redSqr();
- var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
- var y = rhs.redSqrt();
- return y.redSqr().cmp(rhs) === 0;
- };
- function Point(curve, x, z) {
- Base.BasePoint.call(this, curve, 'projective');
- if (x === null && z === null) {
- this.x = this.curve.one;
- this.z = this.curve.zero;
- } else {
- this.x = new BN(x, 16);
- this.z = new BN(z, 16);
- if (!this.x.red) this.x = this.x.toRed(this.curve.red);
- if (!this.z.red) this.z = this.z.toRed(this.curve.red);
- }
- }
- inherits(Point, Base.BasePoint);
- MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
- return this.point(utils.toArray(bytes, enc), 1);
- };
- MontCurve.prototype.point = function point(x, z) {
- return new Point(this, x, z);
- };
- MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
- return Point.fromJSON(this, obj);
- };
- Point.prototype.precompute = function precompute() {// No-op
- };
- Point.prototype._encode = function _encode() {
- return this.getX().toArray('be', this.curve.p.byteLength());
- };
- Point.fromJSON = function fromJSON(curve, obj) {
- return new Point(curve, obj[0], obj[1] || curve.one);
- };
- Point.prototype.inspect = function inspect() {
- if (this.isInfinity()) return '<EC Point Infinity>';
- return '<EC Point x: ' + this.x.fromRed().toString(16, 2) + ' z: ' + this.z.fromRed().toString(16, 2) + '>';
- };
- Point.prototype.isInfinity = function isInfinity() {
- // XXX This code assumes that zero is always zero in red
- return this.z.cmpn(0) === 0;
- };
- Point.prototype.dbl = function dbl() {
- // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
- // 2M + 2S + 4A
- // A = X1 + Z1
- var a = this.x.redAdd(this.z); // AA = A^2
- var aa = a.redSqr(); // B = X1 - Z1
- var b = this.x.redSub(this.z); // BB = B^2
- var bb = b.redSqr(); // C = AA - BB
- var c = aa.redSub(bb); // X3 = AA * BB
- var nx = aa.redMul(bb); // Z3 = C * (BB + A24 * C)
- var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
- return this.curve.point(nx, nz);
- };
- Point.prototype.add = function add() {
- throw new Error('Not supported on Montgomery curve');
- };
- Point.prototype.diffAdd = function diffAdd(p, diff) {
- // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
- // 4M + 2S + 6A
- // A = X2 + Z2
- var a = this.x.redAdd(this.z); // B = X2 - Z2
- var b = this.x.redSub(this.z); // C = X3 + Z3
- var c = p.x.redAdd(p.z); // D = X3 - Z3
- var d = p.x.redSub(p.z); // DA = D * A
- var da = d.redMul(a); // CB = C * B
- var cb = c.redMul(b); // X5 = Z1 * (DA + CB)^2
- var nx = diff.z.redMul(da.redAdd(cb).redSqr()); // Z5 = X1 * (DA - CB)^2
- var nz = diff.x.redMul(da.redISub(cb).redSqr());
- return this.curve.point(nx, nz);
- };
- Point.prototype.mul = function mul(k) {
- var t = k.clone();
- var a = this; // (N / 2) * Q + Q
- var b = this.curve.point(null, null); // (N / 2) * Q
- var c = this; // Q
- for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1)) {
- bits.push(t.andln(1));
- }
- for (var i = bits.length - 1; i >= 0; i--) {
- if (bits[i] === 0) {
- // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
- a = a.diffAdd(b, c); // N * Q = 2 * ((N / 2) * Q + Q))
- b = b.dbl();
- } else {
- // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
- b = a.diffAdd(b, c); // N * Q + Q = 2 * ((N / 2) * Q + Q)
- a = a.dbl();
- }
- }
- return b;
- };
- Point.prototype.mulAdd = function mulAdd() {
- throw new Error('Not supported on Montgomery curve');
- };
- Point.prototype.jumlAdd = function jumlAdd() {
- throw new Error('Not supported on Montgomery curve');
- };
- Point.prototype.eq = function eq(other) {
- return this.getX().cmp(other.getX()) === 0;
- };
- Point.prototype.normalize = function normalize() {
- this.x = this.x.redMul(this.z.redInvm());
- this.z = this.curve.one;
- return this;
- };
- Point.prototype.getX = function getX() {
- // Normalize coordinates
- this.normalize();
- return this.x.fromRed();
- };
- },{"../utils":255,"./base":242,"bn.js":256,"inherits":278}],246:[function(require,module,exports){
- 'use strict';
- var utils = require('../utils');
- var BN = require('bn.js');
- var inherits = require('inherits');
- var Base = require('./base');
- var assert = utils.assert;
- function ShortCurve(conf) {
- Base.call(this, 'short', conf);
- this.a = new BN(conf.a, 16).toRed(this.red);
- this.b = new BN(conf.b, 16).toRed(this.red);
- this.tinv = this.two.redInvm();
- this.zeroA = this.a.fromRed().cmpn(0) === 0;
- this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0; // If the curve is endomorphic, precalculate beta and lambda
- this.endo = this._getEndomorphism(conf);
- this._endoWnafT1 = new Array(4);
- this._endoWnafT2 = new Array(4);
- }
- inherits(ShortCurve, Base);
- module.exports = ShortCurve;
- ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
- // No efficient endomorphism
- if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1) return; // Compute beta and lambda, that lambda * P = (beta * Px; Py)
- var beta;
- var lambda;
- if (conf.beta) {
- beta = new BN(conf.beta, 16).toRed(this.red);
- } else {
- var betas = this._getEndoRoots(this.p); // Choose the smallest beta
- beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
- beta = beta.toRed(this.red);
- }
- if (conf.lambda) {
- lambda = new BN(conf.lambda, 16);
- } else {
- // Choose the lambda that is matching selected beta
- var lambdas = this._getEndoRoots(this.n);
- if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
- lambda = lambdas[0];
- } else {
- lambda = lambdas[1];
- assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
- }
- } // Get basis vectors, used for balanced length-two representation
- var basis;
- if (conf.basis) {
- basis = conf.basis.map(function (vec) {
- return {
- a: new BN(vec.a, 16),
- b: new BN(vec.b, 16)
- };
- });
- } else {
- basis = this._getEndoBasis(lambda);
- }
- return {
- beta: beta,
- lambda: lambda,
- basis: basis
- };
- };
- ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
- // Find roots of for x^2 + x + 1 in F
- // Root = (-1 +- Sqrt(-3)) / 2
- //
- var red = num === this.p ? this.red : BN.mont(num);
- var tinv = new BN(2).toRed(red).redInvm();
- var ntinv = tinv.redNeg();
- var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
- var l1 = ntinv.redAdd(s).fromRed();
- var l2 = ntinv.redSub(s).fromRed();
- return [l1, l2];
- };
- ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
- // aprxSqrt >= sqrt(this.n)
- var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2)); // 3.74
- // Run EGCD, until r(L + 1) < aprxSqrt
- var u = lambda;
- var v = this.n.clone();
- var x1 = new BN(1);
- var y1 = new BN(0);
- var x2 = new BN(0);
- var y2 = new BN(1); // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
- var a0;
- var b0; // First vector
- var a1;
- var b1; // Second vector
- var a2;
- var b2;
- var prevR;
- var i = 0;
- var r;
- var x;
- while (u.cmpn(0) !== 0) {
- var q = v.div(u);
- r = v.sub(q.mul(u));
- x = x2.sub(q.mul(x1));
- var y = y2.sub(q.mul(y1));
- if (!a1 && r.cmp(aprxSqrt) < 0) {
- a0 = prevR.neg();
- b0 = x1;
- a1 = r.neg();
- b1 = x;
- } else if (a1 && ++i === 2) {
- break;
- }
- prevR = r;
- v = u;
- u = r;
- x2 = x1;
- x1 = x;
- y2 = y1;
- y1 = y;
- }
- a2 = r.neg();
- b2 = x;
- var len1 = a1.sqr().add(b1.sqr());
- var len2 = a2.sqr().add(b2.sqr());
- if (len2.cmp(len1) >= 0) {
- a2 = a0;
- b2 = b0;
- } // Normalize signs
- if (a1.negative) {
- a1 = a1.neg();
- b1 = b1.neg();
- }
- if (a2.negative) {
- a2 = a2.neg();
- b2 = b2.neg();
- }
- return [{
- a: a1,
- b: b1
- }, {
- a: a2,
- b: b2
- }];
- };
- ShortCurve.prototype._endoSplit = function _endoSplit(k) {
- var basis = this.endo.basis;
- var v1 = basis[0];
- var v2 = basis[1];
- var c1 = v2.b.mul(k).divRound(this.n);
- var c2 = v1.b.neg().mul(k).divRound(this.n);
- var p1 = c1.mul(v1.a);
- var p2 = c2.mul(v2.a);
- var q1 = c1.mul(v1.b);
- var q2 = c2.mul(v2.b); // Calculate answer
- var k1 = k.sub(p1).sub(p2);
- var k2 = q1.add(q2).neg();
- return {
- k1: k1,
- k2: k2
- };
- };
- ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
- x = new BN(x, 16);
- if (!x.red) x = x.toRed(this.red);
- var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
- var y = y2.redSqrt();
- if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) throw new Error('invalid point'); // XXX Is there any way to tell if the number is odd without converting it
- // to non-red form?
- var isOdd = y.fromRed().isOdd();
- if (odd && !isOdd || !odd && isOdd) y = y.redNeg();
- return this.point(x, y);
- };
- ShortCurve.prototype.validate = function validate(point) {
- if (point.inf) return true;
- var x = point.x;
- var y = point.y;
- var ax = this.a.redMul(x);
- var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
- return y.redSqr().redISub(rhs).cmpn(0) === 0;
- };
- ShortCurve.prototype._endoWnafMulAdd = function _endoWnafMulAdd(points, coeffs, jacobianResult) {
- var npoints = this._endoWnafT1;
- var ncoeffs = this._endoWnafT2;
- for (var i = 0; i < points.length; i++) {
- var split = this._endoSplit(coeffs[i]);
- var p = points[i];
- var beta = p._getBeta();
- if (split.k1.negative) {
- split.k1.ineg();
- p = p.neg(true);
- }
- if (split.k2.negative) {
- split.k2.ineg();
- beta = beta.neg(true);
- }
- npoints[i * 2] = p;
- npoints[i * 2 + 1] = beta;
- ncoeffs[i * 2] = split.k1;
- ncoeffs[i * 2 + 1] = split.k2;
- }
- var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult); // Clean-up references to points and coefficients
- for (var j = 0; j < i * 2; j++) {
- npoints[j] = null;
- ncoeffs[j] = null;
- }
- return res;
- };
- function Point(curve, x, y, isRed) {
- Base.BasePoint.call(this, curve, 'affine');
- if (x === null && y === null) {
- this.x = null;
- this.y = null;
- this.inf = true;
- } else {
- this.x = new BN(x, 16);
- this.y = new BN(y, 16); // Force redgomery representation when loading from JSON
- if (isRed) {
- this.x.forceRed(this.curve.red);
- this.y.forceRed(this.curve.red);
- }
- if (!this.x.red) this.x = this.x.toRed(this.curve.red);
- if (!this.y.red) this.y = this.y.toRed(this.curve.red);
- this.inf = false;
- }
- }
- inherits(Point, Base.BasePoint);
- ShortCurve.prototype.point = function point(x, y, isRed) {
- return new Point(this, x, y, isRed);
- };
- ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
- return Point.fromJSON(this, obj, red);
- };
- Point.prototype._getBeta = function _getBeta() {
- if (!this.curve.endo) return;
- var pre = this.precomputed;
- if (pre && pre.beta) return pre.beta;
- var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
- if (pre) {
- var curve = this.curve;
- var endoMul = function endoMul(p) {
- return curve.point(p.x.redMul(curve.endo.beta), p.y);
- };
- pre.beta = beta;
- beta.precomputed = {
- beta: null,
- naf: pre.naf && {
- wnd: pre.naf.wnd,
- points: pre.naf.points.map(endoMul)
- },
- doubles: pre.doubles && {
- step: pre.doubles.step,
- points: pre.doubles.points.map(endoMul)
- }
- };
- }
- return beta;
- };
- Point.prototype.toJSON = function toJSON() {
- if (!this.precomputed) return [this.x, this.y];
- return [this.x, this.y, this.precomputed && {
- doubles: this.precomputed.doubles && {
- step: this.precomputed.doubles.step,
- points: this.precomputed.doubles.points.slice(1)
- },
- naf: this.precomputed.naf && {
- wnd: this.precomputed.naf.wnd,
- points: this.precomputed.naf.points.slice(1)
- }
- }];
- };
- Point.fromJSON = function fromJSON(curve, obj, red) {
- if (typeof obj === 'string') obj = JSON.parse(obj);
- var res = curve.point(obj[0], obj[1], red);
- if (!obj[2]) return res;
- function obj2point(obj) {
- return curve.point(obj[0], obj[1], red);
- }
- var pre = obj[2];
- res.precomputed = {
- beta: null,
- doubles: pre.doubles && {
- step: pre.doubles.step,
- points: [res].concat(pre.doubles.points.map(obj2point))
- },
- naf: pre.naf && {
- wnd: pre.naf.wnd,
- points: [res].concat(pre.naf.points.map(obj2point))
- }
- };
- return res;
- };
- Point.prototype.inspect = function inspect() {
- if (this.isInfinity()) return '<EC Point Infinity>';
- return '<EC Point x: ' + this.x.fromRed().toString(16, 2) + ' y: ' + this.y.fromRed().toString(16, 2) + '>';
- };
- Point.prototype.isInfinity = function isInfinity() {
- return this.inf;
- };
- Point.prototype.add = function add(p) {
- // O + P = P
- if (this.inf) return p; // P + O = P
- if (p.inf) return this; // P + P = 2P
- if (this.eq(p)) return this.dbl(); // P + (-P) = O
- if (this.neg().eq(p)) return this.curve.point(null, null); // P + Q = O
- if (this.x.cmp(p.x) === 0) return this.curve.point(null, null);
- var c = this.y.redSub(p.y);
- if (c.cmpn(0) !== 0) c = c.redMul(this.x.redSub(p.x).redInvm());
- var nx = c.redSqr().redISub(this.x).redISub(p.x);
- var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
- return this.curve.point(nx, ny);
- };
- Point.prototype.dbl = function dbl() {
- if (this.inf) return this; // 2P = O
- var ys1 = this.y.redAdd(this.y);
- if (ys1.cmpn(0) === 0) return this.curve.point(null, null);
- var a = this.curve.a;
- var x2 = this.x.redSqr();
- var dyinv = ys1.redInvm();
- var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
- var nx = c.redSqr().redISub(this.x.redAdd(this.x));
- var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
- return this.curve.point(nx, ny);
- };
- Point.prototype.getX = function getX() {
- return this.x.fromRed();
- };
- Point.prototype.getY = function getY() {
- return this.y.fromRed();
- };
- Point.prototype.mul = function mul(k) {
- k = new BN(k, 16);
- if (this.isInfinity()) return this;else if (this._hasDoubles(k)) return this.curve._fixedNafMul(this, k);else if (this.curve.endo) return this.curve._endoWnafMulAdd([this], [k]);else return this.curve._wnafMul(this, k);
- };
- Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
- var points = [this, p2];
- var coeffs = [k1, k2];
- if (this.curve.endo) return this.curve._endoWnafMulAdd(points, coeffs);else return this.curve._wnafMulAdd(1, points, coeffs, 2);
- };
- Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
- var points = [this, p2];
- var coeffs = [k1, k2];
- if (this.curve.endo) return this.curve._endoWnafMulAdd(points, coeffs, true);else return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
- };
- Point.prototype.eq = function eq(p) {
- return this === p || this.inf === p.inf && (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
- };
- Point.prototype.neg = function neg(_precompute) {
- if (this.inf) return this;
- var res = this.curve.point(this.x, this.y.redNeg());
- if (_precompute && this.precomputed) {
- var pre = this.precomputed;
- var negate = function negate(p) {
- return p.neg();
- };
- res.precomputed = {
- naf: pre.naf && {
- wnd: pre.naf.wnd,
- points: pre.naf.points.map(negate)
- },
- doubles: pre.doubles && {
- step: pre.doubles.step,
- points: pre.doubles.points.map(negate)
- }
- };
- }
- return res;
- };
- Point.prototype.toJ = function toJ() {
- if (this.inf) return this.curve.jpoint(null, null, null);
- var res = this.curve.jpoint(this.x, this.y, this.curve.one);
- return res;
- };
- function JPoint(curve, x, y, z) {
- Base.BasePoint.call(this, curve, 'jacobian');
- if (x === null && y === null && z === null) {
- this.x = this.curve.one;
- this.y = this.curve.one;
- this.z = new BN(0);
- } else {
- this.x = new BN(x, 16);
- this.y = new BN(y, 16);
- this.z = new BN(z, 16);
- }
- if (!this.x.red) this.x = this.x.toRed(this.curve.red);
- if (!this.y.red) this.y = this.y.toRed(this.curve.red);
- if (!this.z.red) this.z = this.z.toRed(this.curve.red);
- this.zOne = this.z === this.curve.one;
- }
- inherits(JPoint, Base.BasePoint);
- ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
- return new JPoint(this, x, y, z);
- };
- JPoint.prototype.toP = function toP() {
- if (this.isInfinity()) return this.curve.point(null, null);
- var zinv = this.z.redInvm();
- var zinv2 = zinv.redSqr();
- var ax = this.x.redMul(zinv2);
- var ay = this.y.redMul(zinv2).redMul(zinv);
- return this.curve.point(ax, ay);
- };
- JPoint.prototype.neg = function neg() {
- return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
- };
- JPoint.prototype.add = function add(p) {
- // O + P = P
- if (this.isInfinity()) return p; // P + O = P
- if (p.isInfinity()) return this; // 12M + 4S + 7A
- var pz2 = p.z.redSqr();
- var z2 = this.z.redSqr();
- var u1 = this.x.redMul(pz2);
- var u2 = p.x.redMul(z2);
- var s1 = this.y.redMul(pz2.redMul(p.z));
- var s2 = p.y.redMul(z2.redMul(this.z));
- var h = u1.redSub(u2);
- var r = s1.redSub(s2);
- if (h.cmpn(0) === 0) {
- if (r.cmpn(0) !== 0) return this.curve.jpoint(null, null, null);else return this.dbl();
- }
- var h2 = h.redSqr();
- var h3 = h2.redMul(h);
- var v = u1.redMul(h2);
- var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
- var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
- var nz = this.z.redMul(p.z).redMul(h);
- return this.curve.jpoint(nx, ny, nz);
- };
- JPoint.prototype.mixedAdd = function mixedAdd(p) {
- // O + P = P
- if (this.isInfinity()) return p.toJ(); // P + O = P
- if (p.isInfinity()) return this; // 8M + 3S + 7A
- var z2 = this.z.redSqr();
- var u1 = this.x;
- var u2 = p.x.redMul(z2);
- var s1 = this.y;
- var s2 = p.y.redMul(z2).redMul(this.z);
- var h = u1.redSub(u2);
- var r = s1.redSub(s2);
- if (h.cmpn(0) === 0) {
- if (r.cmpn(0) !== 0) return this.curve.jpoint(null, null, null);else return this.dbl();
- }
- var h2 = h.redSqr();
- var h3 = h2.redMul(h);
- var v = u1.redMul(h2);
- var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
- var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
- var nz = this.z.redMul(h);
- return this.curve.jpoint(nx, ny, nz);
- };
- JPoint.prototype.dblp = function dblp(pow) {
- if (pow === 0) return this;
- if (this.isInfinity()) return this;
- if (!pow) return this.dbl();
- if (this.curve.zeroA || this.curve.threeA) {
- var r = this;
- for (var i = 0; i < pow; i++) {
- r = r.dbl();
- }
- return r;
- } // 1M + 2S + 1A + N * (4S + 5M + 8A)
- // N = 1 => 6M + 6S + 9A
- var a = this.curve.a;
- var tinv = this.curve.tinv;
- var jx = this.x;
- var jy = this.y;
- var jz = this.z;
- var jz4 = jz.redSqr().redSqr(); // Reuse results
- var jyd = jy.redAdd(jy);
- for (var i = 0; i < pow; i++) {
- var jx2 = jx.redSqr();
- var jyd2 = jyd.redSqr();
- var jyd4 = jyd2.redSqr();
- var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
- var t1 = jx.redMul(jyd2);
- var nx = c.redSqr().redISub(t1.redAdd(t1));
- var t2 = t1.redISub(nx);
- var dny = c.redMul(t2);
- dny = dny.redIAdd(dny).redISub(jyd4);
- var nz = jyd.redMul(jz);
- if (i + 1 < pow) jz4 = jz4.redMul(jyd4);
- jx = nx;
- jz = nz;
- jyd = dny;
- }
- return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
- };
- JPoint.prototype.dbl = function dbl() {
- if (this.isInfinity()) return this;
- if (this.curve.zeroA) return this._zeroDbl();else if (this.curve.threeA) return this._threeDbl();else return this._dbl();
- };
- JPoint.prototype._zeroDbl = function _zeroDbl() {
- var nx;
- var ny;
- var nz; // Z = 1
- if (this.zOne) {
- // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
- // #doubling-mdbl-2007-bl
- // 1M + 5S + 14A
- // XX = X1^2
- var xx = this.x.redSqr(); // YY = Y1^2
- var yy = this.y.redSqr(); // YYYY = YY^2
- var yyyy = yy.redSqr(); // S = 2 * ((X1 + YY)^2 - XX - YYYY)
- var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
- s = s.redIAdd(s); // M = 3 * XX + a; a = 0
- var m = xx.redAdd(xx).redIAdd(xx); // T = M ^ 2 - 2*S
- var t = m.redSqr().redISub(s).redISub(s); // 8 * YYYY
- var yyyy8 = yyyy.redIAdd(yyyy);
- yyyy8 = yyyy8.redIAdd(yyyy8);
- yyyy8 = yyyy8.redIAdd(yyyy8); // X3 = T
- nx = t; // Y3 = M * (S - T) - 8 * YYYY
- ny = m.redMul(s.redISub(t)).redISub(yyyy8); // Z3 = 2*Y1
- nz = this.y.redAdd(this.y);
- } else {
- // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
- // #doubling-dbl-2009-l
- // 2M + 5S + 13A
- // A = X1^2
- var a = this.x.redSqr(); // B = Y1^2
- var b = this.y.redSqr(); // C = B^2
- var c = b.redSqr(); // D = 2 * ((X1 + B)^2 - A - C)
- var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
- d = d.redIAdd(d); // E = 3 * A
- var e = a.redAdd(a).redIAdd(a); // F = E^2
- var f = e.redSqr(); // 8 * C
- var c8 = c.redIAdd(c);
- c8 = c8.redIAdd(c8);
- c8 = c8.redIAdd(c8); // X3 = F - 2 * D
- nx = f.redISub(d).redISub(d); // Y3 = E * (D - X3) - 8 * C
- ny = e.redMul(d.redISub(nx)).redISub(c8); // Z3 = 2 * Y1 * Z1
- nz = this.y.redMul(this.z);
- nz = nz.redIAdd(nz);
- }
- return this.curve.jpoint(nx, ny, nz);
- };
- JPoint.prototype._threeDbl = function _threeDbl() {
- var nx;
- var ny;
- var nz; // Z = 1
- if (this.zOne) {
- // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
- // #doubling-mdbl-2007-bl
- // 1M + 5S + 15A
- // XX = X1^2
- var xx = this.x.redSqr(); // YY = Y1^2
- var yy = this.y.redSqr(); // YYYY = YY^2
- var yyyy = yy.redSqr(); // S = 2 * ((X1 + YY)^2 - XX - YYYY)
- var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
- s = s.redIAdd(s); // M = 3 * XX + a
- var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a); // T = M^2 - 2 * S
- var t = m.redSqr().redISub(s).redISub(s); // X3 = T
- nx = t; // Y3 = M * (S - T) - 8 * YYYY
- var yyyy8 = yyyy.redIAdd(yyyy);
- yyyy8 = yyyy8.redIAdd(yyyy8);
- yyyy8 = yyyy8.redIAdd(yyyy8);
- ny = m.redMul(s.redISub(t)).redISub(yyyy8); // Z3 = 2 * Y1
- nz = this.y.redAdd(this.y);
- } else {
- // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
- // 3M + 5S
- // delta = Z1^2
- var delta = this.z.redSqr(); // gamma = Y1^2
- var gamma = this.y.redSqr(); // beta = X1 * gamma
- var beta = this.x.redMul(gamma); // alpha = 3 * (X1 - delta) * (X1 + delta)
- var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
- alpha = alpha.redAdd(alpha).redIAdd(alpha); // X3 = alpha^2 - 8 * beta
- var beta4 = beta.redIAdd(beta);
- beta4 = beta4.redIAdd(beta4);
- var beta8 = beta4.redAdd(beta4);
- nx = alpha.redSqr().redISub(beta8); // Z3 = (Y1 + Z1)^2 - gamma - delta
- nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta); // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
- var ggamma8 = gamma.redSqr();
- ggamma8 = ggamma8.redIAdd(ggamma8);
- ggamma8 = ggamma8.redIAdd(ggamma8);
- ggamma8 = ggamma8.redIAdd(ggamma8);
- ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
- }
- return this.curve.jpoint(nx, ny, nz);
- };
- JPoint.prototype._dbl = function _dbl() {
- var a = this.curve.a; // 4M + 6S + 10A
- var jx = this.x;
- var jy = this.y;
- var jz = this.z;
- var jz4 = jz.redSqr().redSqr();
- var jx2 = jx.redSqr();
- var jy2 = jy.redSqr();
- var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
- var jxd4 = jx.redAdd(jx);
- jxd4 = jxd4.redIAdd(jxd4);
- var t1 = jxd4.redMul(jy2);
- var nx = c.redSqr().redISub(t1.redAdd(t1));
- var t2 = t1.redISub(nx);
- var jyd8 = jy2.redSqr();
- jyd8 = jyd8.redIAdd(jyd8);
- jyd8 = jyd8.redIAdd(jyd8);
- jyd8 = jyd8.redIAdd(jyd8);
- var ny = c.redMul(t2).redISub(jyd8);
- var nz = jy.redAdd(jy).redMul(jz);
- return this.curve.jpoint(nx, ny, nz);
- };
- JPoint.prototype.trpl = function trpl() {
- if (!this.curve.zeroA) return this.dbl().add(this); // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
- // 5M + 10S + ...
- // XX = X1^2
- var xx = this.x.redSqr(); // YY = Y1^2
- var yy = this.y.redSqr(); // ZZ = Z1^2
- var zz = this.z.redSqr(); // YYYY = YY^2
- var yyyy = yy.redSqr(); // M = 3 * XX + a * ZZ2; a = 0
- var m = xx.redAdd(xx).redIAdd(xx); // MM = M^2
- var mm = m.redSqr(); // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
- var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
- e = e.redIAdd(e);
- e = e.redAdd(e).redIAdd(e);
- e = e.redISub(mm); // EE = E^2
- var ee = e.redSqr(); // T = 16*YYYY
- var t = yyyy.redIAdd(yyyy);
- t = t.redIAdd(t);
- t = t.redIAdd(t);
- t = t.redIAdd(t); // U = (M + E)^2 - MM - EE - T
- var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t); // X3 = 4 * (X1 * EE - 4 * YY * U)
- var yyu4 = yy.redMul(u);
- yyu4 = yyu4.redIAdd(yyu4);
- yyu4 = yyu4.redIAdd(yyu4);
- var nx = this.x.redMul(ee).redISub(yyu4);
- nx = nx.redIAdd(nx);
- nx = nx.redIAdd(nx); // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
- var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
- ny = ny.redIAdd(ny);
- ny = ny.redIAdd(ny);
- ny = ny.redIAdd(ny); // Z3 = (Z1 + E)^2 - ZZ - EE
- var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
- return this.curve.jpoint(nx, ny, nz);
- };
- JPoint.prototype.mul = function mul(k, kbase) {
- k = new BN(k, kbase);
- return this.curve._wnafMul(this, k);
- };
- JPoint.prototype.eq = function eq(p) {
- if (p.type === 'affine') return this.eq(p.toJ());
- if (this === p) return true; // x1 * z2^2 == x2 * z1^2
- var z2 = this.z.redSqr();
- var pz2 = p.z.redSqr();
- if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0) return false; // y1 * z2^3 == y2 * z1^3
- var z3 = z2.redMul(this.z);
- var pz3 = pz2.redMul(p.z);
- return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
- };
- JPoint.prototype.eqXToP = function eqXToP(x) {
- var zs = this.z.redSqr();
- var rx = x.toRed(this.curve.red).redMul(zs);
- if (this.x.cmp(rx) === 0) return true;
- var xc = x.clone();
- var t = this.curve.redN.redMul(zs);
- for (;;) {
- xc.iadd(this.curve.n);
- if (xc.cmp(this.curve.p) >= 0) return false;
- rx.redIAdd(t);
- if (this.x.cmp(rx) === 0) return true;
- }
- };
- JPoint.prototype.inspect = function inspect() {
- if (this.isInfinity()) return '<EC JPoint Infinity>';
- return '<EC JPoint x: ' + this.x.toString(16, 2) + ' y: ' + this.y.toString(16, 2) + ' z: ' + this.z.toString(16, 2) + '>';
- };
- JPoint.prototype.isInfinity = function isInfinity() {
- // XXX This code assumes that zero is always zero in red
- return this.z.cmpn(0) === 0;
- };
- },{"../utils":255,"./base":242,"bn.js":256,"inherits":278}],247:[function(require,module,exports){
- 'use strict';
- var curves = exports;
- var hash = require('hash.js');
- var curve = require('./curve');
- var utils = require('./utils');
- var assert = utils.assert;
- function PresetCurve(options) {
- if (options.type === 'short') this.curve = new curve.short(options);else if (options.type === 'edwards') this.curve = new curve.edwards(options);else this.curve = new curve.mont(options);
- this.g = this.curve.g;
- this.n = this.curve.n;
- this.hash = options.hash;
- assert(this.g.validate(), 'Invalid curve');
- assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
- }
- curves.PresetCurve = PresetCurve;
- function defineCurve(name, options) {
- Object.defineProperty(curves, name, {
- configurable: true,
- enumerable: true,
- get: function get() {
- var curve = new PresetCurve(options);
- Object.defineProperty(curves, name, {
- configurable: true,
- enumerable: true,
- value: curve
- });
- return curve;
- }
- });
- }
- defineCurve('p192', {
- type: 'short',
- prime: 'p192',
- p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
- a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
- b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
- n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
- hash: hash.sha256,
- gRed: false,
- g: ['188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012', '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811']
- });
- defineCurve('p224', {
- type: 'short',
- prime: 'p224',
- p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
- a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
- b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
- n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
- hash: hash.sha256,
- gRed: false,
- g: ['b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21', 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34']
- });
- defineCurve('p256', {
- type: 'short',
- prime: null,
- p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
- a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
- b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
- n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
- hash: hash.sha256,
- gRed: false,
- g: ['6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296', '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5']
- });
- defineCurve('p384', {
- type: 'short',
- prime: null,
- p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'fffffffe ffffffff 00000000 00000000 ffffffff',
- a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'fffffffe ffffffff 00000000 00000000 fffffffc',
- b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' + '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
- n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' + 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
- hash: hash.sha384,
- gRed: false,
- g: ['aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' + '5502f25d bf55296c 3a545e38 72760ab7', '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' + '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f']
- });
- defineCurve('p521', {
- type: 'short',
- prime: null,
- p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff ffffffff',
- a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff fffffffc',
- b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' + '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' + '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
- n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' + 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
- hash: hash.sha512,
- gRed: false,
- g: ['000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' + '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' + 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66', '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' + '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' + '3fad0761 353c7086 a272c240 88be9476 9fd16650']
- });
- defineCurve('curve25519', {
- type: 'mont',
- prime: 'p25519',
- p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
- a: '76d06',
- b: '1',
- n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
- hash: hash.sha256,
- gRed: false,
- g: ['9']
- });
- defineCurve('ed25519', {
- type: 'edwards',
- prime: 'p25519',
- p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
- a: '-1',
- c: '1',
- // -121665 * (121666^(-1)) (mod P)
- d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
- n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
- hash: hash.sha256,
- gRed: false,
- g: ['216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a', // 4/5
- '6666666666666666666666666666666666666666666666666666666666666658']
- });
- var pre;
- try {
- pre = require('./precomputed/secp256k1');
- } catch (e) {
- pre = undefined;
- }
- defineCurve('secp256k1', {
- type: 'short',
- prime: 'k256',
- p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
- a: '0',
- b: '7',
- n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
- h: '1',
- hash: hash.sha256,
- // Precomputed endomorphism
- beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
- lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
- basis: [{
- a: '3086d221a7d46bcde86c90e49284eb15',
- b: '-e4437ed6010e88286f547fa90abfe4c3'
- }, {
- a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
- b: '3086d221a7d46bcde86c90e49284eb15'
- }],
- gRed: false,
- g: ['79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8', pre]
- });
- },{"./curve":244,"./precomputed/secp256k1":254,"./utils":255,"hash.js":263}],248:[function(require,module,exports){
- 'use strict';
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- var BN = require('bn.js');
- var HmacDRBG = require('hmac-drbg');
- var utils = require('../utils');
- var curves = require('../curves');
- var rand = require('brorand');
- var assert = utils.assert;
- var KeyPair = require('./key');
- var Signature = require('./signature');
- function EC(options) {
- if (!(this instanceof EC)) return new EC(options); // Shortcut `elliptic.ec(curve-name)`
- if (typeof options === 'string') {
- assert(curves.hasOwnProperty(options), 'Unknown curve ' + options);
- options = curves[options];
- } // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
- if (options instanceof curves.PresetCurve) options = {
- curve: options
- };
- this.curve = options.curve.curve;
- this.n = this.curve.n;
- this.nh = this.n.ushrn(1);
- this.g = this.curve.g; // Point on curve
- this.g = options.curve.g;
- this.g.precompute(options.curve.n.bitLength() + 1); // Hash for function for DRBG
- this.hash = options.hash || options.curve.hash;
- }
- module.exports = EC;
- EC.prototype.keyPair = function keyPair(options) {
- return new KeyPair(this, options);
- };
- EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
- return KeyPair.fromPrivate(this, priv, enc);
- };
- EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
- return KeyPair.fromPublic(this, pub, enc);
- };
- EC.prototype.genKeyPair = function genKeyPair(options) {
- if (!options) options = {}; // Instantiate Hmac_DRBG
- var drbg = new HmacDRBG({
- hash: this.hash,
- pers: options.pers,
- persEnc: options.persEnc || 'utf8',
- entropy: options.entropy || rand(this.hash.hmacStrength),
- entropyEnc: options.entropy && options.entropyEnc || 'utf8',
- nonce: this.n.toArray()
- });
- var bytes = this.n.byteLength();
- var ns2 = this.n.sub(new BN(2));
- do {
- var priv = new BN(drbg.generate(bytes));
- if (priv.cmp(ns2) > 0) continue;
- priv.iaddn(1);
- return this.keyFromPrivate(priv);
- } while (true);
- };
- EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
- var delta = msg.byteLength() * 8 - this.n.bitLength();
- if (delta > 0) msg = msg.ushrn(delta);
- if (!truncOnly && msg.cmp(this.n) >= 0) return msg.sub(this.n);else return msg;
- };
- EC.prototype.sign = function sign(msg, key, enc, options) {
- if (_typeof(enc) === 'object') {
- options = enc;
- enc = null;
- }
- if (!options) options = {};
- key = this.keyFromPrivate(key, enc);
- msg = this._truncateToN(new BN(msg, 16)); // Zero-extend key to provide enough entropy
- var bytes = this.n.byteLength();
- var bkey = key.getPrivate().toArray('be', bytes); // Zero-extend nonce to have the same byte size as N
- var nonce = msg.toArray('be', bytes); // Instantiate Hmac_DRBG
- var drbg = new HmacDRBG({
- hash: this.hash,
- entropy: bkey,
- nonce: nonce,
- pers: options.pers,
- persEnc: options.persEnc || 'utf8'
- }); // Number of bytes to generate
- var ns1 = this.n.sub(new BN(1));
- for (var iter = 0; true; iter++) {
- var k = options.k ? options.k(iter) : new BN(drbg.generate(this.n.byteLength()));
- k = this._truncateToN(k, true);
- if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0) continue;
- var kp = this.g.mul(k);
- if (kp.isInfinity()) continue;
- var kpX = kp.getX();
- var r = kpX.umod(this.n);
- if (r.cmpn(0) === 0) continue;
- var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
- s = s.umod(this.n);
- if (s.cmpn(0) === 0) continue;
- var recoveryParam = (kp.getY().isOdd() ? 1 : 0) | (kpX.cmp(r) !== 0 ? 2 : 0); // Use complement of `s`, if it is > `n / 2`
- if (options.canonical && s.cmp(this.nh) > 0) {
- s = this.n.sub(s);
- recoveryParam ^= 1;
- }
- return new Signature({
- r: r,
- s: s,
- recoveryParam: recoveryParam
- });
- }
- };
- EC.prototype.verify = function verify(msg, signature, key, enc) {
- msg = this._truncateToN(new BN(msg, 16));
- key = this.keyFromPublic(key, enc);
- signature = new Signature(signature, 'hex'); // Perform primitive values validation
- var r = signature.r;
- var s = signature.s;
- if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0) return false;
- if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0) return false; // Validate signature
- var sinv = s.invm(this.n);
- var u1 = sinv.mul(msg).umod(this.n);
- var u2 = sinv.mul(r).umod(this.n);
- if (!this.curve._maxwellTrick) {
- var p = this.g.mulAdd(u1, key.getPublic(), u2);
- if (p.isInfinity()) return false;
- return p.getX().umod(this.n).cmp(r) === 0;
- } // NOTE: Greg Maxwell's trick, inspired by:
- // https://git.io/vad3K
- var p = this.g.jmulAdd(u1, key.getPublic(), u2);
- if (p.isInfinity()) return false; // Compare `p.x` of Jacobian point with `r`,
- // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
- // inverse of `p.z^2`
- return p.eqXToP(r);
- };
- EC.prototype.recoverPubKey = function (msg, signature, j, enc) {
- assert((3 & j) === j, 'The recovery param is more than two bits');
- signature = new Signature(signature, enc);
- var n = this.n;
- var e = new BN(msg);
- var r = signature.r;
- var s = signature.s; // A set LSB signifies that the y-coordinate is odd
- var isYOdd = j & 1;
- var isSecondKey = j >> 1;
- if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey) throw new Error('Unable to find sencond key candinate'); // 1.1. Let x = r + jn.
- if (isSecondKey) r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);else r = this.curve.pointFromX(r, isYOdd);
- var rInv = signature.r.invm(n);
- var s1 = n.sub(e).mul(rInv).umod(n);
- var s2 = s.mul(rInv).umod(n); // 1.6.1 Compute Q = r^-1 (sR - eG)
- // Q = r^-1 (sR + -eG)
- return this.g.mulAdd(s1, r, s2);
- };
- EC.prototype.getKeyRecoveryParam = function (e, signature, Q, enc) {
- signature = new Signature(signature, enc);
- if (signature.recoveryParam !== null) return signature.recoveryParam;
- for (var i = 0; i < 4; i++) {
- var Qprime;
- try {
- Qprime = this.recoverPubKey(e, signature, i);
- } catch (e) {
- continue;
- }
- if (Qprime.eq(Q)) return i;
- }
- throw new Error('Unable to find valid recovery factor');
- };
- },{"../curves":247,"../utils":255,"./key":249,"./signature":250,"bn.js":256,"brorand":184,"hmac-drbg":275}],249:[function(require,module,exports){
- 'use strict';
- var BN = require('bn.js');
- var utils = require('../utils');
- var assert = utils.assert;
- function KeyPair(ec, options) {
- this.ec = ec;
- this.priv = null;
- this.pub = null; // KeyPair(ec, { priv: ..., pub: ... })
- if (options.priv) this._importPrivate(options.priv, options.privEnc);
- if (options.pub) this._importPublic(options.pub, options.pubEnc);
- }
- module.exports = KeyPair;
- KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
- if (pub instanceof KeyPair) return pub;
- return new KeyPair(ec, {
- pub: pub,
- pubEnc: enc
- });
- };
- KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
- if (priv instanceof KeyPair) return priv;
- return new KeyPair(ec, {
- priv: priv,
- privEnc: enc
- });
- };
- KeyPair.prototype.validate = function validate() {
- var pub = this.getPublic();
- if (pub.isInfinity()) return {
- result: false,
- reason: 'Invalid public key'
- };
- if (!pub.validate()) return {
- result: false,
- reason: 'Public key is not a point'
- };
- if (!pub.mul(this.ec.curve.n).isInfinity()) return {
- result: false,
- reason: 'Public key * N != O'
- };
- return {
- result: true,
- reason: null
- };
- };
- KeyPair.prototype.getPublic = function getPublic(compact, enc) {
- // compact is optional argument
- if (typeof compact === 'string') {
- enc = compact;
- compact = null;
- }
- if (!this.pub) this.pub = this.ec.g.mul(this.priv);
- if (!enc) return this.pub;
- return this.pub.encode(enc, compact);
- };
- KeyPair.prototype.getPrivate = function getPrivate(enc) {
- if (enc === 'hex') return this.priv.toString(16, 2);else return this.priv;
- };
- KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
- this.priv = new BN(key, enc || 16); // Ensure that the priv won't be bigger than n, otherwise we may fail
- // in fixed multiplication method
- this.priv = this.priv.umod(this.ec.curve.n);
- };
- KeyPair.prototype._importPublic = function _importPublic(key, enc) {
- if (key.x || key.y) {
- // Montgomery points only have an `x` coordinate.
- // Weierstrass/Edwards points on the other hand have both `x` and
- // `y` coordinates.
- if (this.ec.curve.type === 'mont') {
- assert(key.x, 'Need x coordinate');
- } else if (this.ec.curve.type === 'short' || this.ec.curve.type === 'edwards') {
- assert(key.x && key.y, 'Need both x and y coordinate');
- }
- this.pub = this.ec.curve.point(key.x, key.y);
- return;
- }
- this.pub = this.ec.curve.decodePoint(key, enc);
- }; // ECDH
- KeyPair.prototype.derive = function derive(pub) {
- return pub.mul(this.priv).getX();
- }; // ECDSA
- KeyPair.prototype.sign = function sign(msg, enc, options) {
- return this.ec.sign(msg, this, enc, options);
- };
- KeyPair.prototype.verify = function verify(msg, signature) {
- return this.ec.verify(msg, signature, this);
- };
- KeyPair.prototype.inspect = function inspect() {
- return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) + ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
- };
- },{"../utils":255,"bn.js":256}],250:[function(require,module,exports){
- 'use strict';
- var BN = require('bn.js');
- var utils = require('../utils');
- var assert = utils.assert;
- function Signature(options, enc) {
- if (options instanceof Signature) return options;
- if (this._importDER(options, enc)) return;
- assert(options.r && options.s, 'Signature without r or s');
- this.r = new BN(options.r, 16);
- this.s = new BN(options.s, 16);
- if (options.recoveryParam === undefined) this.recoveryParam = null;else this.recoveryParam = options.recoveryParam;
- }
- module.exports = Signature;
- function Position() {
- this.place = 0;
- }
- function getLength(buf, p) {
- var initial = buf[p.place++];
- if (!(initial & 0x80)) {
- return initial;
- }
- var octetLen = initial & 0xf; // Indefinite length or overflow
- if (octetLen === 0 || octetLen > 4) {
- return false;
- }
- var val = 0;
- for (var i = 0, off = p.place; i < octetLen; i++, off++) {
- val <<= 8;
- val |= buf[off];
- val >>>= 0;
- } // Leading zeroes
- if (val <= 0x7f) {
- return false;
- }
- p.place = off;
- return val;
- }
- function rmPadding(buf) {
- var i = 0;
- var len = buf.length - 1;
- while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
- i++;
- }
- if (i === 0) {
- return buf;
- }
- return buf.slice(i);
- }
- Signature.prototype._importDER = function _importDER(data, enc) {
- data = utils.toArray(data, enc);
- var p = new Position();
- if (data[p.place++] !== 0x30) {
- return false;
- }
- var len = getLength(data, p);
- if (len === false) {
- return false;
- }
- if (len + p.place !== data.length) {
- return false;
- }
- if (data[p.place++] !== 0x02) {
- return false;
- }
- var rlen = getLength(data, p);
- if (rlen === false) {
- return false;
- }
- var r = data.slice(p.place, rlen + p.place);
- p.place += rlen;
- if (data[p.place++] !== 0x02) {
- return false;
- }
- var slen = getLength(data, p);
- if (slen === false) {
- return false;
- }
- if (data.length !== slen + p.place) {
- return false;
- }
- var s = data.slice(p.place, slen + p.place);
- if (r[0] === 0) {
- if (r[1] & 0x80) {
- r = r.slice(1);
- } else {
- // Leading zeroes
- return false;
- }
- }
- if (s[0] === 0) {
- if (s[1] & 0x80) {
- s = s.slice(1);
- } else {
- // Leading zeroes
- return false;
- }
- }
- this.r = new BN(r);
- this.s = new BN(s);
- this.recoveryParam = null;
- return true;
- };
- function constructLength(arr, len) {
- if (len < 0x80) {
- arr.push(len);
- return;
- }
- var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
- arr.push(octets | 0x80);
- while (--octets) {
- arr.push(len >>> (octets << 3) & 0xff);
- }
- arr.push(len);
- }
- Signature.prototype.toDER = function toDER(enc) {
- var r = this.r.toArray();
- var s = this.s.toArray(); // Pad values
- if (r[0] & 0x80) r = [0].concat(r); // Pad values
- if (s[0] & 0x80) s = [0].concat(s);
- r = rmPadding(r);
- s = rmPadding(s);
- while (!s[0] && !(s[1] & 0x80)) {
- s = s.slice(1);
- }
- var arr = [0x02];
- constructLength(arr, r.length);
- arr = arr.concat(r);
- arr.push(0x02);
- constructLength(arr, s.length);
- var backHalf = arr.concat(s);
- var res = [0x30];
- constructLength(res, backHalf.length);
- res = res.concat(backHalf);
- return utils.encode(res, enc);
- };
- },{"../utils":255,"bn.js":256}],251:[function(require,module,exports){
- 'use strict';
- var hash = require('hash.js');
- var curves = require('../curves');
- var utils = require('../utils');
- var assert = utils.assert;
- var parseBytes = utils.parseBytes;
- var KeyPair = require('./key');
- var Signature = require('./signature');
- function EDDSA(curve) {
- assert(curve === 'ed25519', 'only tested with ed25519 so far');
- if (!(this instanceof EDDSA)) return new EDDSA(curve);
- var curve = curves[curve].curve;
- this.curve = curve;
- this.g = curve.g;
- this.g.precompute(curve.n.bitLength() + 1);
- this.pointClass = curve.point().constructor;
- this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
- this.hash = hash.sha512;
- }
- module.exports = EDDSA;
- /**
- * @param {Array|String} message - message bytes
- * @param {Array|String|KeyPair} secret - secret bytes or a keypair
- * @returns {Signature} - signature
- */
- EDDSA.prototype.sign = function sign(message, secret) {
- message = parseBytes(message);
- var key = this.keyFromSecret(secret);
- var r = this.hashInt(key.messagePrefix(), message);
- var R = this.g.mul(r);
- var Rencoded = this.encodePoint(R);
- var s_ = this.hashInt(Rencoded, key.pubBytes(), message).mul(key.priv());
- var S = r.add(s_).umod(this.curve.n);
- return this.makeSignature({
- R: R,
- S: S,
- Rencoded: Rencoded
- });
- };
- /**
- * @param {Array} message - message bytes
- * @param {Array|String|Signature} sig - sig bytes
- * @param {Array|String|Point|KeyPair} pub - public key
- * @returns {Boolean} - true if public key matches sig of message
- */
- EDDSA.prototype.verify = function verify(message, sig, pub) {
- message = parseBytes(message);
- sig = this.makeSignature(sig);
- var key = this.keyFromPublic(pub);
- var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
- var SG = this.g.mul(sig.S());
- var RplusAh = sig.R().add(key.pub().mul(h));
- return RplusAh.eq(SG);
- };
- EDDSA.prototype.hashInt = function hashInt() {
- var hash = this.hash();
- for (var i = 0; i < arguments.length; i++) {
- hash.update(arguments[i]);
- }
- return utils.intFromLE(hash.digest()).umod(this.curve.n);
- };
- EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
- return KeyPair.fromPublic(this, pub);
- };
- EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
- return KeyPair.fromSecret(this, secret);
- };
- EDDSA.prototype.makeSignature = function makeSignature(sig) {
- if (sig instanceof Signature) return sig;
- return new Signature(this, sig);
- };
- /**
- * * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
- *
- * EDDSA defines methods for encoding and decoding points and integers. These are
- * helper convenience methods, that pass along to utility functions implied
- * parameters.
- *
- */
- EDDSA.prototype.encodePoint = function encodePoint(point) {
- var enc = point.getY().toArray('le', this.encodingLength);
- enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
- return enc;
- };
- EDDSA.prototype.decodePoint = function decodePoint(bytes) {
- bytes = utils.parseBytes(bytes);
- var lastIx = bytes.length - 1;
- var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
- var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
- var y = utils.intFromLE(normed);
- return this.curve.pointFromY(y, xIsOdd);
- };
- EDDSA.prototype.encodeInt = function encodeInt(num) {
- return num.toArray('le', this.encodingLength);
- };
- EDDSA.prototype.decodeInt = function decodeInt(bytes) {
- return utils.intFromLE(bytes);
- };
- EDDSA.prototype.isPoint = function isPoint(val) {
- return val instanceof this.pointClass;
- };
- },{"../curves":247,"../utils":255,"./key":252,"./signature":253,"hash.js":263}],252:[function(require,module,exports){
- 'use strict';
- var utils = require('../utils');
- var assert = utils.assert;
- var parseBytes = utils.parseBytes;
- var cachedProperty = utils.cachedProperty;
- /**
- * @param {EDDSA} eddsa - instance
- * @param {Object} params - public/private key parameters
- *
- * @param {Array<Byte>} [params.secret] - secret seed bytes
- * @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
- * @param {Array<Byte>} [params.pub] - public key point encoded as bytes
- *
- */
- function KeyPair(eddsa, params) {
- this.eddsa = eddsa;
- this._secret = parseBytes(params.secret);
- if (eddsa.isPoint(params.pub)) this._pub = params.pub;else this._pubBytes = parseBytes(params.pub);
- }
- KeyPair.fromPublic = function fromPublic(eddsa, pub) {
- if (pub instanceof KeyPair) return pub;
- return new KeyPair(eddsa, {
- pub: pub
- });
- };
- KeyPair.fromSecret = function fromSecret(eddsa, secret) {
- if (secret instanceof KeyPair) return secret;
- return new KeyPair(eddsa, {
- secret: secret
- });
- };
- KeyPair.prototype.secret = function secret() {
- return this._secret;
- };
- cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
- return this.eddsa.encodePoint(this.pub());
- });
- cachedProperty(KeyPair, 'pub', function pub() {
- if (this._pubBytes) return this.eddsa.decodePoint(this._pubBytes);
- return this.eddsa.g.mul(this.priv());
- });
- cachedProperty(KeyPair, 'privBytes', function privBytes() {
- var eddsa = this.eddsa;
- var hash = this.hash();
- var lastIx = eddsa.encodingLength - 1;
- var a = hash.slice(0, eddsa.encodingLength);
- a[0] &= 248;
- a[lastIx] &= 127;
- a[lastIx] |= 64;
- return a;
- });
- cachedProperty(KeyPair, 'priv', function priv() {
- return this.eddsa.decodeInt(this.privBytes());
- });
- cachedProperty(KeyPair, 'hash', function hash() {
- return this.eddsa.hash().update(this.secret()).digest();
- });
- cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
- return this.hash().slice(this.eddsa.encodingLength);
- });
- KeyPair.prototype.sign = function sign(message) {
- assert(this._secret, 'KeyPair can only verify');
- return this.eddsa.sign(message, this);
- };
- KeyPair.prototype.verify = function verify(message, sig) {
- return this.eddsa.verify(message, sig, this);
- };
- KeyPair.prototype.getSecret = function getSecret(enc) {
- assert(this._secret, 'KeyPair is public only');
- return utils.encode(this.secret(), enc);
- };
- KeyPair.prototype.getPublic = function getPublic(enc) {
- return utils.encode(this.pubBytes(), enc);
- };
- module.exports = KeyPair;
- },{"../utils":255}],253:[function(require,module,exports){
- 'use strict';
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- var BN = require('bn.js');
- var utils = require('../utils');
- var assert = utils.assert;
- var cachedProperty = utils.cachedProperty;
- var parseBytes = utils.parseBytes;
- /**
- * @param {EDDSA} eddsa - eddsa instance
- * @param {Array<Bytes>|Object} sig -
- * @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
- * @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
- * @param {Array<Bytes>} [sig.Rencoded] - R point encoded
- * @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
- */
- function Signature(eddsa, sig) {
- this.eddsa = eddsa;
- if (_typeof(sig) !== 'object') sig = parseBytes(sig);
- if (Array.isArray(sig)) {
- sig = {
- R: sig.slice(0, eddsa.encodingLength),
- S: sig.slice(eddsa.encodingLength)
- };
- }
- assert(sig.R && sig.S, 'Signature without R or S');
- if (eddsa.isPoint(sig.R)) this._R = sig.R;
- if (sig.S instanceof BN) this._S = sig.S;
- this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
- this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
- }
- cachedProperty(Signature, 'S', function S() {
- return this.eddsa.decodeInt(this.Sencoded());
- });
- cachedProperty(Signature, 'R', function R() {
- return this.eddsa.decodePoint(this.Rencoded());
- });
- cachedProperty(Signature, 'Rencoded', function Rencoded() {
- return this.eddsa.encodePoint(this.R());
- });
- cachedProperty(Signature, 'Sencoded', function Sencoded() {
- return this.eddsa.encodeInt(this.S());
- });
- Signature.prototype.toBytes = function toBytes() {
- return this.Rencoded().concat(this.Sencoded());
- };
- Signature.prototype.toHex = function toHex() {
- return utils.encode(this.toBytes(), 'hex').toUpperCase();
- };
- module.exports = Signature;
- },{"../utils":255,"bn.js":256}],254:[function(require,module,exports){
- "use strict";
- module.exports = {
- doubles: {
- step: 4,
- points: [['e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a', 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'], ['8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508', '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'], ['175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739', 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'], ['363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640', '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'], ['8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c', '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'], ['723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda', '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'], ['eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa', '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'], ['100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0', 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'], ['e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d', '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'], ['feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d', 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'], ['da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1', '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'], ['53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0', '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'], ['8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047', '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'], ['385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862', '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'], ['6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7', '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'], ['3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd', '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'], ['85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83', '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'], ['948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a', '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'], ['6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8', 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'], ['e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d', '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'], ['e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725', '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'], ['213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754', '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'], ['4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c', '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'], ['fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6', '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'], ['76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39', 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'], ['c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891', '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'], ['d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b', 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'], ['b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03', '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'], ['e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d', 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'], ['a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070', '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'], ['90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4', 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'], ['8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da', '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'], ['e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11', '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'], ['8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e', 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'], ['e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41', '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'], ['b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef', '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'], ['d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8', 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'], ['324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d', '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'], ['4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96', '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'], ['9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd', 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'], ['6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5', '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'], ['a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266', '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'], ['7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71', '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'], ['928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac', 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'], ['85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751', '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'], ['ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e', '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'], ['827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241', 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'], ['eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3', 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'], ['e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f', '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'], ['1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19', 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'], ['146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be', 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'], ['fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9', '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'], ['da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2', '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'], ['a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13', '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'], ['174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c', 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'], ['959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba', '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'], ['d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151', 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'], ['64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073', 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'], ['8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458', '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'], ['13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b', '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'], ['bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366', 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'], ['8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa', '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'], ['8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0', '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'], ['dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787', '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'], ['f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e', 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82']]
- },
- naf: {
- wnd: 7,
- points: [['f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9', '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'], ['2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4', 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'], ['5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc', '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'], ['acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe', 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'], ['774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb', 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'], ['f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8', 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'], ['d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e', '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'], ['defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34', '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'], ['2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c', '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'], ['352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5', '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'], ['2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f', '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'], ['9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714', '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'], ['daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729', 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'], ['c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db', '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'], ['6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4', 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'], ['1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5', 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'], ['605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479', '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'], ['62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d', '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'], ['80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f', '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'], ['7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb', 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'], ['d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9', 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'], ['49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963', '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'], ['77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74', '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'], ['f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530', 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'], ['463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b', '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'], ['f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247', 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'], ['caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1', 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'], ['2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120', '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'], ['7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435', '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'], ['754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18', '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'], ['e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8', '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'], ['186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb', '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'], ['df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f', '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'], ['5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143', 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'], ['290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba', 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'], ['af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45', 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'], ['766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a', '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'], ['59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e', 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'], ['f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8', 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'], ['7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c', '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'], ['948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519', 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'], ['7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab', '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'], ['3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca', 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'], ['d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf', '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'], ['1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610', '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'], ['733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4', 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'], ['15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c', 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'], ['a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940', 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'], ['e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980', 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'], ['311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3', '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'], ['34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf', '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'], ['f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63', '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'], ['d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448', 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'], ['32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf', '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'], ['7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5', '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'], ['ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6', '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'], ['16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5', '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'], ['eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99', 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'], ['78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51', 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'], ['494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5', '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'], ['a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5', '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'], ['c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997', '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'], ['841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881', '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'], ['5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5', '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'], ['36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66', 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'], ['336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726', 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'], ['8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede', '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'], ['1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94', '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'], ['85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31', '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'], ['29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51', 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'], ['a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252', 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'], ['4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5', 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'], ['d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b', '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'], ['ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4', '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'], ['af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f', '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'], ['e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889', '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'], ['591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246', 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'], ['11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984', '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'], ['3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a', 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'], ['cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030', 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'], ['c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197', '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'], ['c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593', 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'], ['a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef', '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'], ['347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38', '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'], ['da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a', '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'], ['c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111', '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'], ['4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502', '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'], ['3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea', 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'], ['cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26', '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'], ['b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986', '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'], ['d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e', '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'], ['48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4', '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'], ['dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda', 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'], ['6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859', 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'], ['e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f', 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'], ['eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c', '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'], ['13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942', 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'], ['ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a', '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'], ['b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80', '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'], ['ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d', '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'], ['8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1', 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'], ['52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63', 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'], ['e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352', '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'], ['7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193', 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'], ['5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00', '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'], ['32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58', 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'], ['e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7', 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'], ['8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8', 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'], ['4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e', '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'], ['3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d', 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'], ['674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b', '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'], ['d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f', 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'], ['30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6', '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'], ['be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297', '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'], ['93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a', '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'], ['b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c', 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'], ['d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52', '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'], ['d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb', 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'], ['463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065', 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'], ['7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917', '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'], ['74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9', 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'], ['30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3', '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'], ['9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57', '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'], ['176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66', 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'], ['75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8', '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'], ['809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721', '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'], ['1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180', '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9']]
- }
- };
- },{}],255:[function(require,module,exports){
- 'use strict';
- var utils = exports;
- var BN = require('bn.js');
- var minAssert = require('minimalistic-assert');
- var minUtils = require('minimalistic-crypto-utils');
- utils.assert = minAssert;
- utils.toArray = minUtils.toArray;
- utils.zero2 = minUtils.zero2;
- utils.toHex = minUtils.toHex;
- utils.encode = minUtils.encode; // Represent num in a w-NAF form
- function getNAF(num, w, bits) {
- var naf = new Array(Math.max(num.bitLength(), bits) + 1);
- naf.fill(0);
- var ws = 1 << w + 1;
- var k = num.clone();
- for (var i = 0; i < naf.length; i++) {
- var z;
- var mod = k.andln(ws - 1);
- if (k.isOdd()) {
- if (mod > (ws >> 1) - 1) z = (ws >> 1) - mod;else z = mod;
- k.isubn(z);
- } else {
- z = 0;
- }
- naf[i] = z;
- k.iushrn(1);
- }
- return naf;
- }
- utils.getNAF = getNAF; // Represent k1, k2 in a Joint Sparse Form
- function getJSF(k1, k2) {
- var jsf = [[], []];
- k1 = k1.clone();
- k2 = k2.clone();
- var d1 = 0;
- var d2 = 0;
- while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
- // First phase
- var m14 = k1.andln(3) + d1 & 3;
- var m24 = k2.andln(3) + d2 & 3;
- if (m14 === 3) m14 = -1;
- if (m24 === 3) m24 = -1;
- var u1;
- if ((m14 & 1) === 0) {
- u1 = 0;
- } else {
- var m8 = k1.andln(7) + d1 & 7;
- if ((m8 === 3 || m8 === 5) && m24 === 2) u1 = -m14;else u1 = m14;
- }
- jsf[0].push(u1);
- var u2;
- if ((m24 & 1) === 0) {
- u2 = 0;
- } else {
- var m8 = k2.andln(7) + d2 & 7;
- if ((m8 === 3 || m8 === 5) && m14 === 2) u2 = -m24;else u2 = m24;
- }
- jsf[1].push(u2); // Second phase
- if (2 * d1 === u1 + 1) d1 = 1 - d1;
- if (2 * d2 === u2 + 1) d2 = 1 - d2;
- k1.iushrn(1);
- k2.iushrn(1);
- }
- return jsf;
- }
- utils.getJSF = getJSF;
- function cachedProperty(obj, name, computer) {
- var key = '_' + name;
- obj.prototype[name] = function cachedProperty() {
- return this[key] !== undefined ? this[key] : this[key] = computer.call(this);
- };
- }
- utils.cachedProperty = cachedProperty;
- function parseBytes(bytes) {
- return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') : bytes;
- }
- utils.parseBytes = parseBytes;
- function intFromLE(bytes) {
- return new BN(bytes, 'hex', 'le');
- }
- utils.intFromLE = intFromLE;
- },{"bn.js":256,"minimalistic-assert":328,"minimalistic-crypto-utils":329}],256:[function(require,module,exports){
- arguments[4][181][0].apply(exports,arguments)
- },{"buffer":185,"dup":181}],257:[function(require,module,exports){
- module.exports={
- "_from": "elliptic@^6.5.3",
- "_id": "elliptic@6.5.3",
- "_inBundle": false,
- "_integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==",
- "_location": "/elliptic",
- "_phantomChildren": {},
- "_requested": {
- "type": "range",
- "registry": true,
- "raw": "elliptic@^6.5.3",
- "name": "elliptic",
- "escapedName": "elliptic",
- "rawSpec": "^6.5.3",
- "saveSpec": null,
- "fetchSpec": "^6.5.3"
- },
- "_requiredBy": [
- "/browserify-sign",
- "/create-ecdh"
- ],
- "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz",
- "_shasum": "cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6",
- "_spec": "elliptic@^6.5.3",
- "_where": "/mnt/d/dev/git/exceljs/node_modules/browserify-sign",
- "author": {
- "name": "Fedor Indutny",
- "email": "fedor@indutny.com"
- },
- "bugs": {
- "url": "https://github.com/indutny/elliptic/issues"
- },
- "bundleDependencies": false,
- "dependencies": {
- "bn.js": "^4.4.0",
- "brorand": "^1.0.1",
- "hash.js": "^1.0.0",
- "hmac-drbg": "^1.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.0"
- },
- "deprecated": false,
- "description": "EC cryptography",
- "devDependencies": {
- "brfs": "^1.4.3",
- "coveralls": "^3.0.8",
- "grunt": "^1.0.4",
- "grunt-browserify": "^5.0.0",
- "grunt-cli": "^1.2.0",
- "grunt-contrib-connect": "^1.0.0",
- "grunt-contrib-copy": "^1.0.0",
- "grunt-contrib-uglify": "^1.0.1",
- "grunt-mocha-istanbul": "^3.0.1",
- "grunt-saucelabs": "^9.0.1",
- "istanbul": "^0.4.2",
- "jscs": "^3.0.7",
- "jshint": "^2.10.3",
- "mocha": "^6.2.2"
- },
- "files": [
- "lib"
- ],
- "homepage": "https://github.com/indutny/elliptic",
- "keywords": [
- "EC",
- "Elliptic",
- "curve",
- "Cryptography"
- ],
- "license": "MIT",
- "main": "lib/elliptic.js",
- "name": "elliptic",
- "repository": {
- "type": "git",
- "url": "git+ssh://git@github.com/indutny/elliptic.git"
- },
- "scripts": {
- "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
- "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
- "lint": "npm run jscs && npm run jshint",
- "test": "npm run lint && npm run unit",
- "unit": "istanbul test _mocha --reporter=spec test/index.js",
- "version": "grunt dist && git add dist/"
- },
- "version": "6.5.3"
- }
- },{}],258:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- var objectCreate = Object.create || objectCreatePolyfill;
- var objectKeys = Object.keys || objectKeysPolyfill;
- var bind = Function.prototype.bind || functionBindPolyfill;
- function EventEmitter() {
- if (!this._events || !Object.prototype.hasOwnProperty.call(this, '_events')) {
- this._events = objectCreate(null);
- this._eventsCount = 0;
- }
- this._maxListeners = this._maxListeners || undefined;
- }
- module.exports = EventEmitter; // Backwards-compat with node 0.10.x
- EventEmitter.EventEmitter = EventEmitter;
- EventEmitter.prototype._events = undefined;
- EventEmitter.prototype._maxListeners = undefined; // By default EventEmitters will print a warning if more than 10 listeners are
- // added to it. This is a useful default which helps finding memory leaks.
- var defaultMaxListeners = 10;
- var hasDefineProperty;
- try {
- var o = {};
- if (Object.defineProperty) Object.defineProperty(o, 'x', {
- value: 0
- });
- hasDefineProperty = o.x === 0;
- } catch (err) {
- hasDefineProperty = false;
- }
- if (hasDefineProperty) {
- Object.defineProperty(EventEmitter, 'defaultMaxListeners', {
- enumerable: true,
- get: function get() {
- return defaultMaxListeners;
- },
- set: function set(arg) {
- // check whether the input is a positive number (whose value is zero or
- // greater and not a NaN).
- if (typeof arg !== 'number' || arg < 0 || arg !== arg) throw new TypeError('"defaultMaxListeners" must be a positive number');
- defaultMaxListeners = arg;
- }
- });
- } else {
- EventEmitter.defaultMaxListeners = defaultMaxListeners;
- } // Obviously not all Emitters should be limited to 10. This function allows
- // that to be increased. Set to zero for unlimited.
- EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {
- if (typeof n !== 'number' || n < 0 || isNaN(n)) throw new TypeError('"n" argument must be a positive number');
- this._maxListeners = n;
- return this;
- };
- function $getMaxListeners(that) {
- if (that._maxListeners === undefined) return EventEmitter.defaultMaxListeners;
- return that._maxListeners;
- }
- EventEmitter.prototype.getMaxListeners = function getMaxListeners() {
- return $getMaxListeners(this);
- }; // These standalone emit* functions are used to optimize calling of event
- // handlers for fast cases because emit() itself often has a variable number of
- // arguments and can be deoptimized because of that. These functions always have
- // the same number of arguments and thus do not get deoptimized, so the code
- // inside them can execute faster.
- function emitNone(handler, isFn, self) {
- if (isFn) handler.call(self);else {
- var len = handler.length;
- var listeners = arrayClone(handler, len);
- for (var i = 0; i < len; ++i) {
- listeners[i].call(self);
- }
- }
- }
- function emitOne(handler, isFn, self, arg1) {
- if (isFn) handler.call(self, arg1);else {
- var len = handler.length;
- var listeners = arrayClone(handler, len);
- for (var i = 0; i < len; ++i) {
- listeners[i].call(self, arg1);
- }
- }
- }
- function emitTwo(handler, isFn, self, arg1, arg2) {
- if (isFn) handler.call(self, arg1, arg2);else {
- var len = handler.length;
- var listeners = arrayClone(handler, len);
- for (var i = 0; i < len; ++i) {
- listeners[i].call(self, arg1, arg2);
- }
- }
- }
- function emitThree(handler, isFn, self, arg1, arg2, arg3) {
- if (isFn) handler.call(self, arg1, arg2, arg3);else {
- var len = handler.length;
- var listeners = arrayClone(handler, len);
- for (var i = 0; i < len; ++i) {
- listeners[i].call(self, arg1, arg2, arg3);
- }
- }
- }
- function emitMany(handler, isFn, self, args) {
- if (isFn) handler.apply(self, args);else {
- var len = handler.length;
- var listeners = arrayClone(handler, len);
- for (var i = 0; i < len; ++i) {
- listeners[i].apply(self, args);
- }
- }
- }
- EventEmitter.prototype.emit = function emit(type) {
- var er, handler, len, args, i, events;
- var doError = type === 'error';
- events = this._events;
- if (events) doError = doError && events.error == null;else if (!doError) return false; // If there is no 'error' event listener then throw.
- if (doError) {
- if (arguments.length > 1) er = arguments[1];
- if (er instanceof Error) {
- throw er; // Unhandled 'error' event
- } else {
- // At least give some kind of context to the user
- var err = new Error('Unhandled "error" event. (' + er + ')');
- err.context = er;
- throw err;
- }
- return false;
- }
- handler = events[type];
- if (!handler) return false;
- var isFn = typeof handler === 'function';
- len = arguments.length;
- switch (len) {
- // fast cases
- case 1:
- emitNone(handler, isFn, this);
- break;
- case 2:
- emitOne(handler, isFn, this, arguments[1]);
- break;
- case 3:
- emitTwo(handler, isFn, this, arguments[1], arguments[2]);
- break;
- case 4:
- emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);
- break;
- // slower
- default:
- args = new Array(len - 1);
- for (i = 1; i < len; i++) {
- args[i - 1] = arguments[i];
- }
- emitMany(handler, isFn, this, args);
- }
- return true;
- };
- function _addListener(target, type, listener, prepend) {
- var m;
- var events;
- var existing;
- if (typeof listener !== 'function') throw new TypeError('"listener" argument must be a function');
- events = target._events;
- if (!events) {
- events = target._events = objectCreate(null);
- target._eventsCount = 0;
- } else {
- // To avoid recursion in the case that type === "newListener"! Before
- // adding it to the listeners, first emit "newListener".
- if (events.newListener) {
- target.emit('newListener', type, listener.listener ? listener.listener : listener); // Re-assign `events` because a newListener handler could have caused the
- // this._events to be assigned to a new object
- events = target._events;
- }
- existing = events[type];
- }
- if (!existing) {
- // Optimize the case of one listener. Don't need the extra array object.
- existing = events[type] = listener;
- ++target._eventsCount;
- } else {
- if (typeof existing === 'function') {
- // Adding the second element, need to change to array.
- existing = events[type] = prepend ? [listener, existing] : [existing, listener];
- } else {
- // If we've already got an array, just append.
- if (prepend) {
- existing.unshift(listener);
- } else {
- existing.push(listener);
- }
- } // Check for listener leak
- if (!existing.warned) {
- m = $getMaxListeners(target);
- if (m && m > 0 && existing.length > m) {
- existing.warned = true;
- var w = new Error('Possible EventEmitter memory leak detected. ' + existing.length + ' "' + String(type) + '" listeners ' + 'added. Use emitter.setMaxListeners() to ' + 'increase limit.');
- w.name = 'MaxListenersExceededWarning';
- w.emitter = target;
- w.type = type;
- w.count = existing.length;
- if ((typeof console === "undefined" ? "undefined" : _typeof(console)) === 'object' && console.warn) {
- console.warn('%s: %s', w.name, w.message);
- }
- }
- }
- }
- return target;
- }
- EventEmitter.prototype.addListener = function addListener(type, listener) {
- return _addListener(this, type, listener, false);
- };
- EventEmitter.prototype.on = EventEmitter.prototype.addListener;
- EventEmitter.prototype.prependListener = function prependListener(type, listener) {
- return _addListener(this, type, listener, true);
- };
- function onceWrapper() {
- if (!this.fired) {
- this.target.removeListener(this.type, this.wrapFn);
- this.fired = true;
- switch (arguments.length) {
- case 0:
- return this.listener.call(this.target);
- case 1:
- return this.listener.call(this.target, arguments[0]);
- case 2:
- return this.listener.call(this.target, arguments[0], arguments[1]);
- case 3:
- return this.listener.call(this.target, arguments[0], arguments[1], arguments[2]);
- default:
- var args = new Array(arguments.length);
- for (var i = 0; i < args.length; ++i) {
- args[i] = arguments[i];
- }
- this.listener.apply(this.target, args);
- }
- }
- }
- function _onceWrap(target, type, listener) {
- var state = {
- fired: false,
- wrapFn: undefined,
- target: target,
- type: type,
- listener: listener
- };
- var wrapped = bind.call(onceWrapper, state);
- wrapped.listener = listener;
- state.wrapFn = wrapped;
- return wrapped;
- }
- EventEmitter.prototype.once = function once(type, listener) {
- if (typeof listener !== 'function') throw new TypeError('"listener" argument must be a function');
- this.on(type, _onceWrap(this, type, listener));
- return this;
- };
- EventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) {
- if (typeof listener !== 'function') throw new TypeError('"listener" argument must be a function');
- this.prependListener(type, _onceWrap(this, type, listener));
- return this;
- }; // Emits a 'removeListener' event if and only if the listener was removed.
- EventEmitter.prototype.removeListener = function removeListener(type, listener) {
- var list, events, position, i, originalListener;
- if (typeof listener !== 'function') throw new TypeError('"listener" argument must be a function');
- events = this._events;
- if (!events) return this;
- list = events[type];
- if (!list) return this;
- if (list === listener || list.listener === listener) {
- if (--this._eventsCount === 0) this._events = objectCreate(null);else {
- delete events[type];
- if (events.removeListener) this.emit('removeListener', type, list.listener || listener);
- }
- } else if (typeof list !== 'function') {
- position = -1;
- for (i = list.length - 1; i >= 0; i--) {
- if (list[i] === listener || list[i].listener === listener) {
- originalListener = list[i].listener;
- position = i;
- break;
- }
- }
- if (position < 0) return this;
- if (position === 0) list.shift();else spliceOne(list, position);
- if (list.length === 1) events[type] = list[0];
- if (events.removeListener) this.emit('removeListener', type, originalListener || listener);
- }
- return this;
- };
- EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) {
- var listeners, events, i;
- events = this._events;
- if (!events) return this; // not listening for removeListener, no need to emit
- if (!events.removeListener) {
- if (arguments.length === 0) {
- this._events = objectCreate(null);
- this._eventsCount = 0;
- } else if (events[type]) {
- if (--this._eventsCount === 0) this._events = objectCreate(null);else delete events[type];
- }
- return this;
- } // emit removeListener for all listeners on all events
- if (arguments.length === 0) {
- var keys = objectKeys(events);
- var key;
- for (i = 0; i < keys.length; ++i) {
- key = keys[i];
- if (key === 'removeListener') continue;
- this.removeAllListeners(key);
- }
- this.removeAllListeners('removeListener');
- this._events = objectCreate(null);
- this._eventsCount = 0;
- return this;
- }
- listeners = events[type];
- if (typeof listeners === 'function') {
- this.removeListener(type, listeners);
- } else if (listeners) {
- // LIFO order
- for (i = listeners.length - 1; i >= 0; i--) {
- this.removeListener(type, listeners[i]);
- }
- }
- return this;
- };
- function _listeners(target, type, unwrap) {
- var events = target._events;
- if (!events) return [];
- var evlistener = events[type];
- if (!evlistener) return [];
- if (typeof evlistener === 'function') return unwrap ? [evlistener.listener || evlistener] : [evlistener];
- return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);
- }
- EventEmitter.prototype.listeners = function listeners(type) {
- return _listeners(this, type, true);
- };
- EventEmitter.prototype.rawListeners = function rawListeners(type) {
- return _listeners(this, type, false);
- };
- EventEmitter.listenerCount = function (emitter, type) {
- if (typeof emitter.listenerCount === 'function') {
- return emitter.listenerCount(type);
- } else {
- return listenerCount.call(emitter, type);
- }
- };
- EventEmitter.prototype.listenerCount = listenerCount;
- function listenerCount(type) {
- var events = this._events;
- if (events) {
- var evlistener = events[type];
- if (typeof evlistener === 'function') {
- return 1;
- } else if (evlistener) {
- return evlistener.length;
- }
- }
- return 0;
- }
- EventEmitter.prototype.eventNames = function eventNames() {
- return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];
- }; // About 1.5x faster than the two-arg version of Array#splice().
- function spliceOne(list, index) {
- for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {
- list[i] = list[k];
- }
- list.pop();
- }
- function arrayClone(arr, n) {
- var copy = new Array(n);
- for (var i = 0; i < n; ++i) {
- copy[i] = arr[i];
- }
- return copy;
- }
- function unwrapListeners(arr) {
- var ret = new Array(arr.length);
- for (var i = 0; i < ret.length; ++i) {
- ret[i] = arr[i].listener || arr[i];
- }
- return ret;
- }
- function objectCreatePolyfill(proto) {
- var F = function F() {};
- F.prototype = proto;
- return new F();
- }
- function objectKeysPolyfill(obj) {
- var keys = [];
- for (var k in obj) {
- if (Object.prototype.hasOwnProperty.call(obj, k)) {
- keys.push(k);
- }
- }
- return k;
- }
- function functionBindPolyfill(context) {
- var fn = this;
- return function () {
- return fn.apply(context, arguments);
- };
- }
- },{}],259:[function(require,module,exports){
- "use strict";
- var Buffer = require('safe-buffer').Buffer;
- var MD5 = require('md5.js');
- /* eslint-disable camelcase */
- function EVP_BytesToKey(password, salt, keyBits, ivLen) {
- if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary');
- if (salt) {
- if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary');
- if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length');
- }
- var keyLen = keyBits / 8;
- var key = Buffer.alloc(keyLen);
- var iv = Buffer.alloc(ivLen || 0);
- var tmp = Buffer.alloc(0);
- while (keyLen > 0 || ivLen > 0) {
- var hash = new MD5();
- hash.update(tmp);
- hash.update(password);
- if (salt) hash.update(salt);
- tmp = hash.digest();
- var used = 0;
- if (keyLen > 0) {
- var keyStart = key.length - keyLen;
- used = Math.min(keyLen, tmp.length);
- tmp.copy(key, keyStart, 0, used);
- keyLen -= used;
- }
- if (used < tmp.length && ivLen > 0) {
- var ivStart = iv.length - ivLen;
- var length = Math.min(ivLen, tmp.length - used);
- tmp.copy(iv, ivStart, used, used + length);
- ivLen -= length;
- }
- }
- tmp.fill(0);
- return {
- key: key,
- iv: iv
- };
- }
- module.exports = EVP_BytesToKey;
- },{"md5.js":325,"safe-buffer":384}],260:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var format_1 = require("@fast-csv/format");
- Object.defineProperty(exports, "format", {
- enumerable: true,
- get: function get() {
- return format_1.format;
- }
- });
- Object.defineProperty(exports, "write", {
- enumerable: true,
- get: function get() {
- return format_1.write;
- }
- });
- Object.defineProperty(exports, "writeToStream", {
- enumerable: true,
- get: function get() {
- return format_1.writeToStream;
- }
- });
- Object.defineProperty(exports, "writeToBuffer", {
- enumerable: true,
- get: function get() {
- return format_1.writeToBuffer;
- }
- });
- Object.defineProperty(exports, "writeToString", {
- enumerable: true,
- get: function get() {
- return format_1.writeToString;
- }
- });
- Object.defineProperty(exports, "writeToPath", {
- enumerable: true,
- get: function get() {
- return format_1.writeToPath;
- }
- });
- Object.defineProperty(exports, "CsvFormatterStream", {
- enumerable: true,
- get: function get() {
- return format_1.CsvFormatterStream;
- }
- });
- Object.defineProperty(exports, "FormatterOptions", {
- enumerable: true,
- get: function get() {
- return format_1.FormatterOptions;
- }
- });
- var parse_1 = require("@fast-csv/parse");
- Object.defineProperty(exports, "parse", {
- enumerable: true,
- get: function get() {
- return parse_1.parse;
- }
- });
- Object.defineProperty(exports, "parseString", {
- enumerable: true,
- get: function get() {
- return parse_1.parseString;
- }
- });
- Object.defineProperty(exports, "parseStream", {
- enumerable: true,
- get: function get() {
- return parse_1.parseStream;
- }
- });
- Object.defineProperty(exports, "parseFile", {
- enumerable: true,
- get: function get() {
- return parse_1.parseFile;
- }
- });
- Object.defineProperty(exports, "ParserOptions", {
- enumerable: true,
- get: function get() {
- return parse_1.ParserOptions;
- }
- });
- Object.defineProperty(exports, "CsvParserStream", {
- enumerable: true,
- get: function get() {
- return parse_1.CsvParserStream;
- }
- });
- },{"@fast-csv/format":148,"@fast-csv/parse":152}],261:[function(require,module,exports){
- 'use strict';
- var Buffer = require('safe-buffer').Buffer;
- var Transform = require('readable-stream').Transform;
- var inherits = require('inherits');
- function throwIfNotStringOrBuffer(val, prefix) {
- if (!Buffer.isBuffer(val) && typeof val !== 'string') {
- throw new TypeError(prefix + ' must be a string or a buffer');
- }
- }
- function HashBase(blockSize) {
- Transform.call(this);
- this._block = Buffer.allocUnsafe(blockSize);
- this._blockSize = blockSize;
- this._blockOffset = 0;
- this._length = [0, 0, 0, 0];
- this._finalized = false;
- }
- inherits(HashBase, Transform);
- HashBase.prototype._transform = function (chunk, encoding, callback) {
- var error = null;
- try {
- this.update(chunk, encoding);
- } catch (err) {
- error = err;
- }
- callback(error);
- };
- HashBase.prototype._flush = function (callback) {
- var error = null;
- try {
- this.push(this.digest());
- } catch (err) {
- error = err;
- }
- callback(error);
- };
- HashBase.prototype.update = function (data, encoding) {
- throwIfNotStringOrBuffer(data, 'Data');
- if (this._finalized) throw new Error('Digest already called');
- if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding); // consume data
- var block = this._block;
- var offset = 0;
- while (this._blockOffset + data.length - offset >= this._blockSize) {
- for (var i = this._blockOffset; i < this._blockSize;) {
- block[i++] = data[offset++];
- }
- this._update();
- this._blockOffset = 0;
- }
- while (offset < data.length) {
- block[this._blockOffset++] = data[offset++];
- } // update length
- for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
- this._length[j] += carry;
- carry = this._length[j] / 0x0100000000 | 0;
- if (carry > 0) this._length[j] -= 0x0100000000 * carry;
- }
- return this;
- };
- HashBase.prototype._update = function () {
- throw new Error('_update is not implemented');
- };
- HashBase.prototype.digest = function (encoding) {
- if (this._finalized) throw new Error('Digest already called');
- this._finalized = true;
- var digest = this._digest();
- if (encoding !== undefined) digest = digest.toString(encoding); // reset state
- this._block.fill(0);
- this._blockOffset = 0;
- for (var i = 0; i < 4; ++i) {
- this._length[i] = 0;
- }
- return digest;
- };
- HashBase.prototype._digest = function () {
- throw new Error('_digest is not implemented');
- };
- module.exports = HashBase;
- },{"inherits":278,"readable-stream":382,"safe-buffer":262}],262:[function(require,module,exports){
- arguments[4][214][0].apply(exports,arguments)
- },{"buffer":216,"dup":214}],263:[function(require,module,exports){
- "use strict";
- var hash = exports;
- hash.utils = require('./hash/utils');
- hash.common = require('./hash/common');
- hash.sha = require('./hash/sha');
- hash.ripemd = require('./hash/ripemd');
- hash.hmac = require('./hash/hmac'); // Proxy hash functions to the main object
- hash.sha1 = hash.sha.sha1;
- hash.sha256 = hash.sha.sha256;
- hash.sha224 = hash.sha.sha224;
- hash.sha384 = hash.sha.sha384;
- hash.sha512 = hash.sha.sha512;
- hash.ripemd160 = hash.ripemd.ripemd160;
- },{"./hash/common":264,"./hash/hmac":265,"./hash/ripemd":266,"./hash/sha":267,"./hash/utils":274}],264:[function(require,module,exports){
- 'use strict';
- var utils = require('./utils');
- var assert = require('minimalistic-assert');
- function BlockHash() {
- this.pending = null;
- this.pendingTotal = 0;
- this.blockSize = this.constructor.blockSize;
- this.outSize = this.constructor.outSize;
- this.hmacStrength = this.constructor.hmacStrength;
- this.padLength = this.constructor.padLength / 8;
- this.endian = 'big';
- this._delta8 = this.blockSize / 8;
- this._delta32 = this.blockSize / 32;
- }
- exports.BlockHash = BlockHash;
- BlockHash.prototype.update = function update(msg, enc) {
- // Convert message to array, pad it, and join into 32bit blocks
- msg = utils.toArray(msg, enc);
- if (!this.pending) this.pending = msg;else this.pending = this.pending.concat(msg);
- this.pendingTotal += msg.length; // Enough data, try updating
- if (this.pending.length >= this._delta8) {
- msg = this.pending; // Process pending data in blocks
- var r = msg.length % this._delta8;
- this.pending = msg.slice(msg.length - r, msg.length);
- if (this.pending.length === 0) this.pending = null;
- msg = utils.join32(msg, 0, msg.length - r, this.endian);
- for (var i = 0; i < msg.length; i += this._delta32) {
- this._update(msg, i, i + this._delta32);
- }
- }
- return this;
- };
- BlockHash.prototype.digest = function digest(enc) {
- this.update(this._pad());
- assert(this.pending === null);
- return this._digest(enc);
- };
- BlockHash.prototype._pad = function pad() {
- var len = this.pendingTotal;
- var bytes = this._delta8;
- var k = bytes - (len + this.padLength) % bytes;
- var res = new Array(k + this.padLength);
- res[0] = 0x80;
- for (var i = 1; i < k; i++) {
- res[i] = 0;
- } // Append length
- len <<= 3;
- if (this.endian === 'big') {
- for (var t = 8; t < this.padLength; t++) {
- res[i++] = 0;
- }
- res[i++] = 0;
- res[i++] = 0;
- res[i++] = 0;
- res[i++] = 0;
- res[i++] = len >>> 24 & 0xff;
- res[i++] = len >>> 16 & 0xff;
- res[i++] = len >>> 8 & 0xff;
- res[i++] = len & 0xff;
- } else {
- res[i++] = len & 0xff;
- res[i++] = len >>> 8 & 0xff;
- res[i++] = len >>> 16 & 0xff;
- res[i++] = len >>> 24 & 0xff;
- res[i++] = 0;
- res[i++] = 0;
- res[i++] = 0;
- res[i++] = 0;
- for (t = 8; t < this.padLength; t++) {
- res[i++] = 0;
- }
- }
- return res;
- };
- },{"./utils":274,"minimalistic-assert":328}],265:[function(require,module,exports){
- 'use strict';
- var utils = require('./utils');
- var assert = require('minimalistic-assert');
- function Hmac(hash, key, enc) {
- if (!(this instanceof Hmac)) return new Hmac(hash, key, enc);
- this.Hash = hash;
- this.blockSize = hash.blockSize / 8;
- this.outSize = hash.outSize / 8;
- this.inner = null;
- this.outer = null;
- this._init(utils.toArray(key, enc));
- }
- module.exports = Hmac;
- Hmac.prototype._init = function init(key) {
- // Shorten key, if needed
- if (key.length > this.blockSize) key = new this.Hash().update(key).digest();
- assert(key.length <= this.blockSize); // Add padding to key
- for (var i = key.length; i < this.blockSize; i++) {
- key.push(0);
- }
- for (i = 0; i < key.length; i++) {
- key[i] ^= 0x36;
- }
- this.inner = new this.Hash().update(key); // 0x36 ^ 0x5c = 0x6a
- for (i = 0; i < key.length; i++) {
- key[i] ^= 0x6a;
- }
- this.outer = new this.Hash().update(key);
- };
- Hmac.prototype.update = function update(msg, enc) {
- this.inner.update(msg, enc);
- return this;
- };
- Hmac.prototype.digest = function digest(enc) {
- this.outer.update(this.inner.digest());
- return this.outer.digest(enc);
- };
- },{"./utils":274,"minimalistic-assert":328}],266:[function(require,module,exports){
- 'use strict';
- var utils = require('./utils');
- var common = require('./common');
- var rotl32 = utils.rotl32;
- var sum32 = utils.sum32;
- var sum32_3 = utils.sum32_3;
- var sum32_4 = utils.sum32_4;
- var BlockHash = common.BlockHash;
- function RIPEMD160() {
- if (!(this instanceof RIPEMD160)) return new RIPEMD160();
- BlockHash.call(this);
- this.h = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];
- this.endian = 'little';
- }
- utils.inherits(RIPEMD160, BlockHash);
- exports.ripemd160 = RIPEMD160;
- RIPEMD160.blockSize = 512;
- RIPEMD160.outSize = 160;
- RIPEMD160.hmacStrength = 192;
- RIPEMD160.padLength = 64;
- RIPEMD160.prototype._update = function update(msg, start) {
- var A = this.h[0];
- var B = this.h[1];
- var C = this.h[2];
- var D = this.h[3];
- var E = this.h[4];
- var Ah = A;
- var Bh = B;
- var Ch = C;
- var Dh = D;
- var Eh = E;
- for (var j = 0; j < 80; j++) {
- var T = sum32(rotl32(sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)), s[j]), E);
- A = E;
- E = D;
- D = rotl32(C, 10);
- C = B;
- B = T;
- T = sum32(rotl32(sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)), sh[j]), Eh);
- Ah = Eh;
- Eh = Dh;
- Dh = rotl32(Ch, 10);
- Ch = Bh;
- Bh = T;
- }
- T = sum32_3(this.h[1], C, Dh);
- this.h[1] = sum32_3(this.h[2], D, Eh);
- this.h[2] = sum32_3(this.h[3], E, Ah);
- this.h[3] = sum32_3(this.h[4], A, Bh);
- this.h[4] = sum32_3(this.h[0], B, Ch);
- this.h[0] = T;
- };
- RIPEMD160.prototype._digest = function digest(enc) {
- if (enc === 'hex') return utils.toHex32(this.h, 'little');else return utils.split32(this.h, 'little');
- };
- function f(j, x, y, z) {
- if (j <= 15) return x ^ y ^ z;else if (j <= 31) return x & y | ~x & z;else if (j <= 47) return (x | ~y) ^ z;else if (j <= 63) return x & z | y & ~z;else return x ^ (y | ~z);
- }
- function K(j) {
- if (j <= 15) return 0x00000000;else if (j <= 31) return 0x5a827999;else if (j <= 47) return 0x6ed9eba1;else if (j <= 63) return 0x8f1bbcdc;else return 0xa953fd4e;
- }
- function Kh(j) {
- if (j <= 15) return 0x50a28be6;else if (j <= 31) return 0x5c4dd124;else if (j <= 47) return 0x6d703ef3;else if (j <= 63) return 0x7a6d76e9;else return 0x00000000;
- }
- var r = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13];
- var rh = [5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11];
- var s = [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6];
- var sh = [8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11];
- },{"./common":264,"./utils":274}],267:[function(require,module,exports){
- 'use strict';
- exports.sha1 = require('./sha/1');
- exports.sha224 = require('./sha/224');
- exports.sha256 = require('./sha/256');
- exports.sha384 = require('./sha/384');
- exports.sha512 = require('./sha/512');
- },{"./sha/1":268,"./sha/224":269,"./sha/256":270,"./sha/384":271,"./sha/512":272}],268:[function(require,module,exports){
- 'use strict';
- var utils = require('../utils');
- var common = require('../common');
- var shaCommon = require('./common');
- var rotl32 = utils.rotl32;
- var sum32 = utils.sum32;
- var sum32_5 = utils.sum32_5;
- var ft_1 = shaCommon.ft_1;
- var BlockHash = common.BlockHash;
- var sha1_K = [0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xCA62C1D6];
- function SHA1() {
- if (!(this instanceof SHA1)) return new SHA1();
- BlockHash.call(this);
- this.h = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];
- this.W = new Array(80);
- }
- utils.inherits(SHA1, BlockHash);
- module.exports = SHA1;
- SHA1.blockSize = 512;
- SHA1.outSize = 160;
- SHA1.hmacStrength = 80;
- SHA1.padLength = 64;
- SHA1.prototype._update = function _update(msg, start) {
- var W = this.W;
- for (var i = 0; i < 16; i++) {
- W[i] = msg[start + i];
- }
- for (; i < W.length; i++) {
- W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
- }
- var a = this.h[0];
- var b = this.h[1];
- var c = this.h[2];
- var d = this.h[3];
- var e = this.h[4];
- for (i = 0; i < W.length; i++) {
- var s = ~~(i / 20);
- var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
- e = d;
- d = c;
- c = rotl32(b, 30);
- b = a;
- a = t;
- }
- this.h[0] = sum32(this.h[0], a);
- this.h[1] = sum32(this.h[1], b);
- this.h[2] = sum32(this.h[2], c);
- this.h[3] = sum32(this.h[3], d);
- this.h[4] = sum32(this.h[4], e);
- };
- SHA1.prototype._digest = function digest(enc) {
- if (enc === 'hex') return utils.toHex32(this.h, 'big');else return utils.split32(this.h, 'big');
- };
- },{"../common":264,"../utils":274,"./common":273}],269:[function(require,module,exports){
- 'use strict';
- var utils = require('../utils');
- var SHA256 = require('./256');
- function SHA224() {
- if (!(this instanceof SHA224)) return new SHA224();
- SHA256.call(this);
- this.h = [0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4];
- }
- utils.inherits(SHA224, SHA256);
- module.exports = SHA224;
- SHA224.blockSize = 512;
- SHA224.outSize = 224;
- SHA224.hmacStrength = 192;
- SHA224.padLength = 64;
- SHA224.prototype._digest = function digest(enc) {
- // Just truncate output
- if (enc === 'hex') return utils.toHex32(this.h.slice(0, 7), 'big');else return utils.split32(this.h.slice(0, 7), 'big');
- };
- },{"../utils":274,"./256":270}],270:[function(require,module,exports){
- 'use strict';
- var utils = require('../utils');
- var common = require('../common');
- var shaCommon = require('./common');
- var assert = require('minimalistic-assert');
- var sum32 = utils.sum32;
- var sum32_4 = utils.sum32_4;
- var sum32_5 = utils.sum32_5;
- var ch32 = shaCommon.ch32;
- var maj32 = shaCommon.maj32;
- var s0_256 = shaCommon.s0_256;
- var s1_256 = shaCommon.s1_256;
- var g0_256 = shaCommon.g0_256;
- var g1_256 = shaCommon.g1_256;
- var BlockHash = common.BlockHash;
- var sha256_K = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2];
- function SHA256() {
- if (!(this instanceof SHA256)) return new SHA256();
- BlockHash.call(this);
- this.h = [0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19];
- this.k = sha256_K;
- this.W = new Array(64);
- }
- utils.inherits(SHA256, BlockHash);
- module.exports = SHA256;
- SHA256.blockSize = 512;
- SHA256.outSize = 256;
- SHA256.hmacStrength = 192;
- SHA256.padLength = 64;
- SHA256.prototype._update = function _update(msg, start) {
- var W = this.W;
- for (var i = 0; i < 16; i++) {
- W[i] = msg[start + i];
- }
- for (; i < W.length; i++) {
- W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
- }
- var a = this.h[0];
- var b = this.h[1];
- var c = this.h[2];
- var d = this.h[3];
- var e = this.h[4];
- var f = this.h[5];
- var g = this.h[6];
- var h = this.h[7];
- assert(this.k.length === W.length);
- for (i = 0; i < W.length; i++) {
- var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
- var T2 = sum32(s0_256(a), maj32(a, b, c));
- h = g;
- g = f;
- f = e;
- e = sum32(d, T1);
- d = c;
- c = b;
- b = a;
- a = sum32(T1, T2);
- }
- this.h[0] = sum32(this.h[0], a);
- this.h[1] = sum32(this.h[1], b);
- this.h[2] = sum32(this.h[2], c);
- this.h[3] = sum32(this.h[3], d);
- this.h[4] = sum32(this.h[4], e);
- this.h[5] = sum32(this.h[5], f);
- this.h[6] = sum32(this.h[6], g);
- this.h[7] = sum32(this.h[7], h);
- };
- SHA256.prototype._digest = function digest(enc) {
- if (enc === 'hex') return utils.toHex32(this.h, 'big');else return utils.split32(this.h, 'big');
- };
- },{"../common":264,"../utils":274,"./common":273,"minimalistic-assert":328}],271:[function(require,module,exports){
- 'use strict';
- var utils = require('../utils');
- var SHA512 = require('./512');
- function SHA384() {
- if (!(this instanceof SHA384)) return new SHA384();
- SHA512.call(this);
- this.h = [0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939, 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4];
- }
- utils.inherits(SHA384, SHA512);
- module.exports = SHA384;
- SHA384.blockSize = 1024;
- SHA384.outSize = 384;
- SHA384.hmacStrength = 192;
- SHA384.padLength = 128;
- SHA384.prototype._digest = function digest(enc) {
- if (enc === 'hex') return utils.toHex32(this.h.slice(0, 12), 'big');else return utils.split32(this.h.slice(0, 12), 'big');
- };
- },{"../utils":274,"./512":272}],272:[function(require,module,exports){
- 'use strict';
- var utils = require('../utils');
- var common = require('../common');
- var assert = require('minimalistic-assert');
- var rotr64_hi = utils.rotr64_hi;
- var rotr64_lo = utils.rotr64_lo;
- var shr64_hi = utils.shr64_hi;
- var shr64_lo = utils.shr64_lo;
- var sum64 = utils.sum64;
- var sum64_hi = utils.sum64_hi;
- var sum64_lo = utils.sum64_lo;
- var sum64_4_hi = utils.sum64_4_hi;
- var sum64_4_lo = utils.sum64_4_lo;
- var sum64_5_hi = utils.sum64_5_hi;
- var sum64_5_lo = utils.sum64_5_lo;
- var BlockHash = common.BlockHash;
- var sha512_K = [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817];
- function SHA512() {
- if (!(this instanceof SHA512)) return new SHA512();
- BlockHash.call(this);
- this.h = [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1, 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179];
- this.k = sha512_K;
- this.W = new Array(160);
- }
- utils.inherits(SHA512, BlockHash);
- module.exports = SHA512;
- SHA512.blockSize = 1024;
- SHA512.outSize = 512;
- SHA512.hmacStrength = 192;
- SHA512.padLength = 128;
- SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
- var W = this.W; // 32 x 32bit words
- for (var i = 0; i < 32; i++) {
- W[i] = msg[start + i];
- }
- for (; i < W.length; i += 2) {
- var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
- var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
- var c1_hi = W[i - 14]; // i - 7
- var c1_lo = W[i - 13];
- var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
- var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
- var c3_hi = W[i - 32]; // i - 16
- var c3_lo = W[i - 31];
- W[i] = sum64_4_hi(c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo);
- W[i + 1] = sum64_4_lo(c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo);
- }
- };
- SHA512.prototype._update = function _update(msg, start) {
- this._prepareBlock(msg, start);
- var W = this.W;
- var ah = this.h[0];
- var al = this.h[1];
- var bh = this.h[2];
- var bl = this.h[3];
- var ch = this.h[4];
- var cl = this.h[5];
- var dh = this.h[6];
- var dl = this.h[7];
- var eh = this.h[8];
- var el = this.h[9];
- var fh = this.h[10];
- var fl = this.h[11];
- var gh = this.h[12];
- var gl = this.h[13];
- var hh = this.h[14];
- var hl = this.h[15];
- assert(this.k.length === W.length);
- for (var i = 0; i < W.length; i += 2) {
- var c0_hi = hh;
- var c0_lo = hl;
- var c1_hi = s1_512_hi(eh, el);
- var c1_lo = s1_512_lo(eh, el);
- var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
- var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
- var c3_hi = this.k[i];
- var c3_lo = this.k[i + 1];
- var c4_hi = W[i];
- var c4_lo = W[i + 1];
- var T1_hi = sum64_5_hi(c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo, c4_hi, c4_lo);
- var T1_lo = sum64_5_lo(c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo, c4_hi, c4_lo);
- c0_hi = s0_512_hi(ah, al);
- c0_lo = s0_512_lo(ah, al);
- c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
- c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
- var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
- var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
- hh = gh;
- hl = gl;
- gh = fh;
- gl = fl;
- fh = eh;
- fl = el;
- eh = sum64_hi(dh, dl, T1_hi, T1_lo);
- el = sum64_lo(dl, dl, T1_hi, T1_lo);
- dh = ch;
- dl = cl;
- ch = bh;
- cl = bl;
- bh = ah;
- bl = al;
- ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
- al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
- }
- sum64(this.h, 0, ah, al);
- sum64(this.h, 2, bh, bl);
- sum64(this.h, 4, ch, cl);
- sum64(this.h, 6, dh, dl);
- sum64(this.h, 8, eh, el);
- sum64(this.h, 10, fh, fl);
- sum64(this.h, 12, gh, gl);
- sum64(this.h, 14, hh, hl);
- };
- SHA512.prototype._digest = function digest(enc) {
- if (enc === 'hex') return utils.toHex32(this.h, 'big');else return utils.split32(this.h, 'big');
- };
- function ch64_hi(xh, xl, yh, yl, zh) {
- var r = xh & yh ^ ~xh & zh;
- if (r < 0) r += 0x100000000;
- return r;
- }
- function ch64_lo(xh, xl, yh, yl, zh, zl) {
- var r = xl & yl ^ ~xl & zl;
- if (r < 0) r += 0x100000000;
- return r;
- }
- function maj64_hi(xh, xl, yh, yl, zh) {
- var r = xh & yh ^ xh & zh ^ yh & zh;
- if (r < 0) r += 0x100000000;
- return r;
- }
- function maj64_lo(xh, xl, yh, yl, zh, zl) {
- var r = xl & yl ^ xl & zl ^ yl & zl;
- if (r < 0) r += 0x100000000;
- return r;
- }
- function s0_512_hi(xh, xl) {
- var c0_hi = rotr64_hi(xh, xl, 28);
- var c1_hi = rotr64_hi(xl, xh, 2); // 34
- var c2_hi = rotr64_hi(xl, xh, 7); // 39
- var r = c0_hi ^ c1_hi ^ c2_hi;
- if (r < 0) r += 0x100000000;
- return r;
- }
- function s0_512_lo(xh, xl) {
- var c0_lo = rotr64_lo(xh, xl, 28);
- var c1_lo = rotr64_lo(xl, xh, 2); // 34
- var c2_lo = rotr64_lo(xl, xh, 7); // 39
- var r = c0_lo ^ c1_lo ^ c2_lo;
- if (r < 0) r += 0x100000000;
- return r;
- }
- function s1_512_hi(xh, xl) {
- var c0_hi = rotr64_hi(xh, xl, 14);
- var c1_hi = rotr64_hi(xh, xl, 18);
- var c2_hi = rotr64_hi(xl, xh, 9); // 41
- var r = c0_hi ^ c1_hi ^ c2_hi;
- if (r < 0) r += 0x100000000;
- return r;
- }
- function s1_512_lo(xh, xl) {
- var c0_lo = rotr64_lo(xh, xl, 14);
- var c1_lo = rotr64_lo(xh, xl, 18);
- var c2_lo = rotr64_lo(xl, xh, 9); // 41
- var r = c0_lo ^ c1_lo ^ c2_lo;
- if (r < 0) r += 0x100000000;
- return r;
- }
- function g0_512_hi(xh, xl) {
- var c0_hi = rotr64_hi(xh, xl, 1);
- var c1_hi = rotr64_hi(xh, xl, 8);
- var c2_hi = shr64_hi(xh, xl, 7);
- var r = c0_hi ^ c1_hi ^ c2_hi;
- if (r < 0) r += 0x100000000;
- return r;
- }
- function g0_512_lo(xh, xl) {
- var c0_lo = rotr64_lo(xh, xl, 1);
- var c1_lo = rotr64_lo(xh, xl, 8);
- var c2_lo = shr64_lo(xh, xl, 7);
- var r = c0_lo ^ c1_lo ^ c2_lo;
- if (r < 0) r += 0x100000000;
- return r;
- }
- function g1_512_hi(xh, xl) {
- var c0_hi = rotr64_hi(xh, xl, 19);
- var c1_hi = rotr64_hi(xl, xh, 29); // 61
- var c2_hi = shr64_hi(xh, xl, 6);
- var r = c0_hi ^ c1_hi ^ c2_hi;
- if (r < 0) r += 0x100000000;
- return r;
- }
- function g1_512_lo(xh, xl) {
- var c0_lo = rotr64_lo(xh, xl, 19);
- var c1_lo = rotr64_lo(xl, xh, 29); // 61
- var c2_lo = shr64_lo(xh, xl, 6);
- var r = c0_lo ^ c1_lo ^ c2_lo;
- if (r < 0) r += 0x100000000;
- return r;
- }
- },{"../common":264,"../utils":274,"minimalistic-assert":328}],273:[function(require,module,exports){
- 'use strict';
- var utils = require('../utils');
- var rotr32 = utils.rotr32;
- function ft_1(s, x, y, z) {
- if (s === 0) return ch32(x, y, z);
- if (s === 1 || s === 3) return p32(x, y, z);
- if (s === 2) return maj32(x, y, z);
- }
- exports.ft_1 = ft_1;
- function ch32(x, y, z) {
- return x & y ^ ~x & z;
- }
- exports.ch32 = ch32;
- function maj32(x, y, z) {
- return x & y ^ x & z ^ y & z;
- }
- exports.maj32 = maj32;
- function p32(x, y, z) {
- return x ^ y ^ z;
- }
- exports.p32 = p32;
- function s0_256(x) {
- return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
- }
- exports.s0_256 = s0_256;
- function s1_256(x) {
- return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
- }
- exports.s1_256 = s1_256;
- function g0_256(x) {
- return rotr32(x, 7) ^ rotr32(x, 18) ^ x >>> 3;
- }
- exports.g0_256 = g0_256;
- function g1_256(x) {
- return rotr32(x, 17) ^ rotr32(x, 19) ^ x >>> 10;
- }
- exports.g1_256 = g1_256;
- },{"../utils":274}],274:[function(require,module,exports){
- 'use strict';
- var assert = require('minimalistic-assert');
- var inherits = require('inherits');
- exports.inherits = inherits;
- function isSurrogatePair(msg, i) {
- if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {
- return false;
- }
- if (i < 0 || i + 1 >= msg.length) {
- return false;
- }
- return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;
- }
- function toArray(msg, enc) {
- if (Array.isArray(msg)) return msg.slice();
- if (!msg) return [];
- var res = [];
- if (typeof msg === 'string') {
- if (!enc) {
- // Inspired by stringToUtf8ByteArray() in closure-library by Google
- // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143
- // Apache License 2.0
- // https://github.com/google/closure-library/blob/master/LICENSE
- var p = 0;
- for (var i = 0; i < msg.length; i++) {
- var c = msg.charCodeAt(i);
- if (c < 128) {
- res[p++] = c;
- } else if (c < 2048) {
- res[p++] = c >> 6 | 192;
- res[p++] = c & 63 | 128;
- } else if (isSurrogatePair(msg, i)) {
- c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);
- res[p++] = c >> 18 | 240;
- res[p++] = c >> 12 & 63 | 128;
- res[p++] = c >> 6 & 63 | 128;
- res[p++] = c & 63 | 128;
- } else {
- res[p++] = c >> 12 | 224;
- res[p++] = c >> 6 & 63 | 128;
- res[p++] = c & 63 | 128;
- }
- }
- } else if (enc === 'hex') {
- msg = msg.replace(/[^a-z0-9]+/ig, '');
- if (msg.length % 2 !== 0) msg = '0' + msg;
- for (i = 0; i < msg.length; i += 2) {
- res.push(parseInt(msg[i] + msg[i + 1], 16));
- }
- }
- } else {
- for (i = 0; i < msg.length; i++) {
- res[i] = msg[i] | 0;
- }
- }
- return res;
- }
- exports.toArray = toArray;
- function toHex(msg) {
- var res = '';
- for (var i = 0; i < msg.length; i++) {
- res += zero2(msg[i].toString(16));
- }
- return res;
- }
- exports.toHex = toHex;
- function htonl(w) {
- var res = w >>> 24 | w >>> 8 & 0xff00 | w << 8 & 0xff0000 | (w & 0xff) << 24;
- return res >>> 0;
- }
- exports.htonl = htonl;
- function toHex32(msg, endian) {
- var res = '';
- for (var i = 0; i < msg.length; i++) {
- var w = msg[i];
- if (endian === 'little') w = htonl(w);
- res += zero8(w.toString(16));
- }
- return res;
- }
- exports.toHex32 = toHex32;
- function zero2(word) {
- if (word.length === 1) return '0' + word;else return word;
- }
- exports.zero2 = zero2;
- function zero8(word) {
- if (word.length === 7) return '0' + word;else if (word.length === 6) return '00' + word;else if (word.length === 5) return '000' + word;else if (word.length === 4) return '0000' + word;else if (word.length === 3) return '00000' + word;else if (word.length === 2) return '000000' + word;else if (word.length === 1) return '0000000' + word;else return word;
- }
- exports.zero8 = zero8;
- function join32(msg, start, end, endian) {
- var len = end - start;
- assert(len % 4 === 0);
- var res = new Array(len / 4);
- for (var i = 0, k = start; i < res.length; i++, k += 4) {
- var w;
- if (endian === 'big') w = msg[k] << 24 | msg[k + 1] << 16 | msg[k + 2] << 8 | msg[k + 3];else w = msg[k + 3] << 24 | msg[k + 2] << 16 | msg[k + 1] << 8 | msg[k];
- res[i] = w >>> 0;
- }
- return res;
- }
- exports.join32 = join32;
- function split32(msg, endian) {
- var res = new Array(msg.length * 4);
- for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
- var m = msg[i];
- if (endian === 'big') {
- res[k] = m >>> 24;
- res[k + 1] = m >>> 16 & 0xff;
- res[k + 2] = m >>> 8 & 0xff;
- res[k + 3] = m & 0xff;
- } else {
- res[k + 3] = m >>> 24;
- res[k + 2] = m >>> 16 & 0xff;
- res[k + 1] = m >>> 8 & 0xff;
- res[k] = m & 0xff;
- }
- }
- return res;
- }
- exports.split32 = split32;
- function rotr32(w, b) {
- return w >>> b | w << 32 - b;
- }
- exports.rotr32 = rotr32;
- function rotl32(w, b) {
- return w << b | w >>> 32 - b;
- }
- exports.rotl32 = rotl32;
- function sum32(a, b) {
- return a + b >>> 0;
- }
- exports.sum32 = sum32;
- function sum32_3(a, b, c) {
- return a + b + c >>> 0;
- }
- exports.sum32_3 = sum32_3;
- function sum32_4(a, b, c, d) {
- return a + b + c + d >>> 0;
- }
- exports.sum32_4 = sum32_4;
- function sum32_5(a, b, c, d, e) {
- return a + b + c + d + e >>> 0;
- }
- exports.sum32_5 = sum32_5;
- function sum64(buf, pos, ah, al) {
- var bh = buf[pos];
- var bl = buf[pos + 1];
- var lo = al + bl >>> 0;
- var hi = (lo < al ? 1 : 0) + ah + bh;
- buf[pos] = hi >>> 0;
- buf[pos + 1] = lo;
- }
- exports.sum64 = sum64;
- function sum64_hi(ah, al, bh, bl) {
- var lo = al + bl >>> 0;
- var hi = (lo < al ? 1 : 0) + ah + bh;
- return hi >>> 0;
- }
- exports.sum64_hi = sum64_hi;
- function sum64_lo(ah, al, bh, bl) {
- var lo = al + bl;
- return lo >>> 0;
- }
- exports.sum64_lo = sum64_lo;
- function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
- var carry = 0;
- var lo = al;
- lo = lo + bl >>> 0;
- carry += lo < al ? 1 : 0;
- lo = lo + cl >>> 0;
- carry += lo < cl ? 1 : 0;
- lo = lo + dl >>> 0;
- carry += lo < dl ? 1 : 0;
- var hi = ah + bh + ch + dh + carry;
- return hi >>> 0;
- }
- exports.sum64_4_hi = sum64_4_hi;
- function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
- var lo = al + bl + cl + dl;
- return lo >>> 0;
- }
- exports.sum64_4_lo = sum64_4_lo;
- function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
- var carry = 0;
- var lo = al;
- lo = lo + bl >>> 0;
- carry += lo < al ? 1 : 0;
- lo = lo + cl >>> 0;
- carry += lo < cl ? 1 : 0;
- lo = lo + dl >>> 0;
- carry += lo < dl ? 1 : 0;
- lo = lo + el >>> 0;
- carry += lo < el ? 1 : 0;
- var hi = ah + bh + ch + dh + eh + carry;
- return hi >>> 0;
- }
- exports.sum64_5_hi = sum64_5_hi;
- function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
- var lo = al + bl + cl + dl + el;
- return lo >>> 0;
- }
- exports.sum64_5_lo = sum64_5_lo;
- function rotr64_hi(ah, al, num) {
- var r = al << 32 - num | ah >>> num;
- return r >>> 0;
- }
- exports.rotr64_hi = rotr64_hi;
- function rotr64_lo(ah, al, num) {
- var r = ah << 32 - num | al >>> num;
- return r >>> 0;
- }
- exports.rotr64_lo = rotr64_lo;
- function shr64_hi(ah, al, num) {
- return ah >>> num;
- }
- exports.shr64_hi = shr64_hi;
- function shr64_lo(ah, al, num) {
- var r = ah << 32 - num | al >>> num;
- return r >>> 0;
- }
- exports.shr64_lo = shr64_lo;
- },{"inherits":278,"minimalistic-assert":328}],275:[function(require,module,exports){
- 'use strict';
- var hash = require('hash.js');
- var utils = require('minimalistic-crypto-utils');
- var assert = require('minimalistic-assert');
- function HmacDRBG(options) {
- if (!(this instanceof HmacDRBG)) return new HmacDRBG(options);
- this.hash = options.hash;
- this.predResist = !!options.predResist;
- this.outLen = this.hash.outSize;
- this.minEntropy = options.minEntropy || this.hash.hmacStrength;
- this._reseed = null;
- this.reseedInterval = null;
- this.K = null;
- this.V = null;
- var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');
- var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');
- var pers = utils.toArray(options.pers, options.persEnc || 'hex');
- assert(entropy.length >= this.minEntropy / 8, 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
- this._init(entropy, nonce, pers);
- }
- module.exports = HmacDRBG;
- HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
- var seed = entropy.concat(nonce).concat(pers);
- this.K = new Array(this.outLen / 8);
- this.V = new Array(this.outLen / 8);
- for (var i = 0; i < this.V.length; i++) {
- this.K[i] = 0x00;
- this.V[i] = 0x01;
- }
- this._update(seed);
- this._reseed = 1;
- this.reseedInterval = 0x1000000000000; // 2^48
- };
- HmacDRBG.prototype._hmac = function hmac() {
- return new hash.hmac(this.hash, this.K);
- };
- HmacDRBG.prototype._update = function update(seed) {
- var kmac = this._hmac().update(this.V).update([0x00]);
- if (seed) kmac = kmac.update(seed);
- this.K = kmac.digest();
- this.V = this._hmac().update(this.V).digest();
- if (!seed) return;
- this.K = this._hmac().update(this.V).update([0x01]).update(seed).digest();
- this.V = this._hmac().update(this.V).digest();
- };
- HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
- // Optional entropy enc
- if (typeof entropyEnc !== 'string') {
- addEnc = add;
- add = entropyEnc;
- entropyEnc = null;
- }
- entropy = utils.toArray(entropy, entropyEnc);
- add = utils.toArray(add, addEnc);
- assert(entropy.length >= this.minEntropy / 8, 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
- this._update(entropy.concat(add || []));
- this._reseed = 1;
- };
- HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
- if (this._reseed > this.reseedInterval) throw new Error('Reseed is required'); // Optional encoding
- if (typeof enc !== 'string') {
- addEnc = add;
- add = enc;
- enc = null;
- } // Optional additional data
- if (add) {
- add = utils.toArray(add, addEnc || 'hex');
- this._update(add);
- }
- var temp = [];
- while (temp.length < len) {
- this.V = this._hmac().update(this.V).digest();
- temp = temp.concat(this.V);
- }
- var res = temp.slice(0, len);
- this._update(add);
- this._reseed++;
- return utils.encode(res, enc);
- };
- },{"hash.js":263,"minimalistic-assert":328,"minimalistic-crypto-utils":329}],276:[function(require,module,exports){
- "use strict";
- exports.read = function (buffer, offset, isLE, mLen, nBytes) {
- var e, m;
- var eLen = nBytes * 8 - mLen - 1;
- var eMax = (1 << eLen) - 1;
- var eBias = eMax >> 1;
- var nBits = -7;
- var i = isLE ? nBytes - 1 : 0;
- var d = isLE ? -1 : 1;
- var s = buffer[offset + i];
- i += d;
- e = s & (1 << -nBits) - 1;
- s >>= -nBits;
- nBits += eLen;
- for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
- m = e & (1 << -nBits) - 1;
- e >>= -nBits;
- nBits += mLen;
- for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
- if (e === 0) {
- e = 1 - eBias;
- } else if (e === eMax) {
- return m ? NaN : (s ? -1 : 1) * Infinity;
- } else {
- m = m + Math.pow(2, mLen);
- e = e - eBias;
- }
- return (s ? -1 : 1) * m * Math.pow(2, e - mLen);
- };
- exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
- var e, m, c;
- var eLen = nBytes * 8 - mLen - 1;
- var eMax = (1 << eLen) - 1;
- var eBias = eMax >> 1;
- var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0;
- var i = isLE ? 0 : nBytes - 1;
- var d = isLE ? 1 : -1;
- var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;
- value = Math.abs(value);
- if (isNaN(value) || value === Infinity) {
- m = isNaN(value) ? 1 : 0;
- e = eMax;
- } else {
- e = Math.floor(Math.log(value) / Math.LN2);
- if (value * (c = Math.pow(2, -e)) < 1) {
- e--;
- c *= 2;
- }
- if (e + eBias >= 1) {
- value += rt / c;
- } else {
- value += rt * Math.pow(2, 1 - eBias);
- }
- if (value * c >= 2) {
- e++;
- c /= 2;
- }
- if (e + eBias >= eMax) {
- m = 0;
- e = eMax;
- } else if (e + eBias >= 1) {
- m = (value * c - 1) * Math.pow(2, mLen);
- e = e + eBias;
- } else {
- m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
- e = 0;
- }
- }
- for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
- e = e << mLen | m;
- eLen += mLen;
- for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
- buffer[offset + i - d] |= s * 128;
- };
- },{}],277:[function(require,module,exports){
- (function (global){
- 'use strict';
- var Mutation = global.MutationObserver || global.WebKitMutationObserver;
- var scheduleDrain;
- {
- if (Mutation) {
- var called = 0;
- var observer = new Mutation(nextTick);
- var element = global.document.createTextNode('');
- observer.observe(element, {
- characterData: true
- });
- scheduleDrain = function scheduleDrain() {
- element.data = called = ++called % 2;
- };
- } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {
- var channel = new global.MessageChannel();
- channel.port1.onmessage = nextTick;
- scheduleDrain = function scheduleDrain() {
- channel.port2.postMessage(0);
- };
- } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {
- scheduleDrain = function scheduleDrain() {
- // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
- // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
- var scriptEl = global.document.createElement('script');
- scriptEl.onreadystatechange = function () {
- nextTick();
- scriptEl.onreadystatechange = null;
- scriptEl.parentNode.removeChild(scriptEl);
- scriptEl = null;
- };
- global.document.documentElement.appendChild(scriptEl);
- };
- } else {
- scheduleDrain = function scheduleDrain() {
- setTimeout(nextTick, 0);
- };
- }
- }
- var draining;
- var queue = []; //named nextTick for less confusing stack traces
- function nextTick() {
- draining = true;
- var i, oldQueue;
- var len = queue.length;
- while (len) {
- oldQueue = queue;
- queue = [];
- i = -1;
- while (++i < len) {
- oldQueue[i]();
- }
- len = queue.length;
- }
- draining = false;
- }
- module.exports = immediate;
- function immediate(task) {
- if (queue.push(task) === 1 && !draining) {
- scheduleDrain();
- }
- }
- }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{}],278:[function(require,module,exports){
- "use strict";
- if (typeof Object.create === 'function') {
- // implementation from standard node.js 'util' module
- module.exports = function inherits(ctor, superCtor) {
- if (superCtor) {
- ctor.super_ = superCtor;
- ctor.prototype = Object.create(superCtor.prototype, {
- constructor: {
- value: ctor,
- enumerable: false,
- writable: true,
- configurable: true
- }
- });
- }
- };
- } else {
- // old school shim for old browsers
- module.exports = function inherits(ctor, superCtor) {
- if (superCtor) {
- ctor.super_ = superCtor;
- var TempCtor = function TempCtor() {};
- TempCtor.prototype = superCtor.prototype;
- ctor.prototype = new TempCtor();
- ctor.prototype.constructor = ctor;
- }
- };
- }
- },{}],279:[function(require,module,exports){
- "use strict";
- /*!
- * Determine if an object is a Buffer
- *
- * @author Feross Aboukhadijeh <https://feross.org>
- * @license MIT
- */
- // The _isBuffer check is for Safari 5-7 support, because it's missing
- // Object.prototype.constructor. Remove this eventually
- module.exports = function (obj) {
- return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer);
- };
- function isBuffer(obj) {
- return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj);
- } // For Node v0.10 support. Remove this eventually.
- function isSlowBuffer(obj) {
- return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0));
- }
- },{}],280:[function(require,module,exports){
- "use strict";
- var toString = {}.toString;
- module.exports = Array.isArray || function (arr) {
- return toString.call(arr) == '[object Array]';
- };
- },{}],281:[function(require,module,exports){
- 'use strict';
- var utils = require('./utils');
- var support = require('./support'); // private property
- var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; // public method for encoding
- exports.encode = function (input) {
- var output = [];
- var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
- var i = 0,
- len = input.length,
- remainingBytes = len;
- var isArray = utils.getTypeOf(input) !== "string";
- while (i < input.length) {
- remainingBytes = len - i;
- if (!isArray) {
- chr1 = input.charCodeAt(i++);
- chr2 = i < len ? input.charCodeAt(i++) : 0;
- chr3 = i < len ? input.charCodeAt(i++) : 0;
- } else {
- chr1 = input[i++];
- chr2 = i < len ? input[i++] : 0;
- chr3 = i < len ? input[i++] : 0;
- }
- enc1 = chr1 >> 2;
- enc2 = (chr1 & 3) << 4 | chr2 >> 4;
- enc3 = remainingBytes > 1 ? (chr2 & 15) << 2 | chr3 >> 6 : 64;
- enc4 = remainingBytes > 2 ? chr3 & 63 : 64;
- output.push(_keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4));
- }
- return output.join("");
- }; // public method for decoding
- exports.decode = function (input) {
- var chr1, chr2, chr3;
- var enc1, enc2, enc3, enc4;
- var i = 0,
- resultIndex = 0;
- var dataUrlPrefix = "data:";
- if (input.substr(0, dataUrlPrefix.length) === dataUrlPrefix) {
- // This is a common error: people give a data url
- // (data:image/png;base64,iVBOR...) with a {base64: true} and
- // wonders why things don't work.
- // We can detect that the string input looks like a data url but we
- // *can't* be sure it is one: removing everything up to the comma would
- // be too dangerous.
- throw new Error("Invalid base64 input, it looks like a data url.");
- }
- input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
- var totalLength = input.length * 3 / 4;
- if (input.charAt(input.length - 1) === _keyStr.charAt(64)) {
- totalLength--;
- }
- if (input.charAt(input.length - 2) === _keyStr.charAt(64)) {
- totalLength--;
- }
- if (totalLength % 1 !== 0) {
- // totalLength is not an integer, the length does not match a valid
- // base64 content. That can happen if:
- // - the input is not a base64 content
- // - the input is *almost* a base64 content, with a extra chars at the
- // beginning or at the end
- // - the input uses a base64 variant (base64url for example)
- throw new Error("Invalid base64 input, bad content length.");
- }
- var output;
- if (support.uint8array) {
- output = new Uint8Array(totalLength | 0);
- } else {
- output = new Array(totalLength | 0);
- }
- while (i < input.length) {
- enc1 = _keyStr.indexOf(input.charAt(i++));
- enc2 = _keyStr.indexOf(input.charAt(i++));
- enc3 = _keyStr.indexOf(input.charAt(i++));
- enc4 = _keyStr.indexOf(input.charAt(i++));
- chr1 = enc1 << 2 | enc2 >> 4;
- chr2 = (enc2 & 15) << 4 | enc3 >> 2;
- chr3 = (enc3 & 3) << 6 | enc4;
- output[resultIndex++] = chr1;
- if (enc3 !== 64) {
- output[resultIndex++] = chr2;
- }
- if (enc4 !== 64) {
- output[resultIndex++] = chr3;
- }
- }
- return output;
- };
- },{"./support":310,"./utils":312}],282:[function(require,module,exports){
- 'use strict';
- var external = require("./external");
- var DataWorker = require('./stream/DataWorker');
- var DataLengthProbe = require('./stream/DataLengthProbe');
- var Crc32Probe = require('./stream/Crc32Probe');
- var DataLengthProbe = require('./stream/DataLengthProbe');
- /**
- * Represent a compressed object, with everything needed to decompress it.
- * @constructor
- * @param {number} compressedSize the size of the data compressed.
- * @param {number} uncompressedSize the size of the data after decompression.
- * @param {number} crc32 the crc32 of the decompressed file.
- * @param {object} compression the type of compression, see lib/compressions.js.
- * @param {String|ArrayBuffer|Uint8Array|Buffer} data the compressed data.
- */
- function CompressedObject(compressedSize, uncompressedSize, crc32, compression, data) {
- this.compressedSize = compressedSize;
- this.uncompressedSize = uncompressedSize;
- this.crc32 = crc32;
- this.compression = compression;
- this.compressedContent = data;
- }
- CompressedObject.prototype = {
- /**
- * Create a worker to get the uncompressed content.
- * @return {GenericWorker} the worker.
- */
- getContentWorker: function getContentWorker() {
- var worker = new DataWorker(external.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new DataLengthProbe("data_length"));
- var that = this;
- worker.on("end", function () {
- if (this.streamInfo['data_length'] !== that.uncompressedSize) {
- throw new Error("Bug : uncompressed data size mismatch");
- }
- });
- return worker;
- },
- /**
- * Create a worker to get the compressed content.
- * @return {GenericWorker} the worker.
- */
- getCompressedWorker: function getCompressedWorker() {
- return new DataWorker(external.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize", this.compressedSize).withStreamInfo("uncompressedSize", this.uncompressedSize).withStreamInfo("crc32", this.crc32).withStreamInfo("compression", this.compression);
- }
- };
- /**
- * Chain the given worker with other workers to compress the content with the
- * given compression.
- * @param {GenericWorker} uncompressedWorker the worker to pipe.
- * @param {Object} compression the compression object.
- * @param {Object} compressionOptions the options to use when compressing.
- * @return {GenericWorker} the new worker compressing the content.
- */
- CompressedObject.createWorkerFrom = function (uncompressedWorker, compression, compressionOptions) {
- return uncompressedWorker.pipe(new Crc32Probe()).pipe(new DataLengthProbe("uncompressedSize")).pipe(compression.compressWorker(compressionOptions)).pipe(new DataLengthProbe("compressedSize")).withStreamInfo("compression", compression);
- };
- module.exports = CompressedObject;
- },{"./external":286,"./stream/Crc32Probe":305,"./stream/DataLengthProbe":306,"./stream/DataWorker":307}],283:[function(require,module,exports){
- 'use strict';
- var GenericWorker = require("./stream/GenericWorker");
- exports.STORE = {
- magic: "\x00\x00",
- compressWorker: function compressWorker(compressionOptions) {
- return new GenericWorker("STORE compression");
- },
- uncompressWorker: function uncompressWorker() {
- return new GenericWorker("STORE decompression");
- }
- };
- exports.DEFLATE = require('./flate');
- },{"./flate":287,"./stream/GenericWorker":308}],284:[function(require,module,exports){
- 'use strict';
- var utils = require('./utils');
- /**
- * The following functions come from pako, from pako/lib/zlib/crc32.js
- * released under the MIT license, see pako https://github.com/nodeca/pako/
- */
- // Use ordinary array, since untyped makes no boost here
- function makeTable() {
- var c,
- table = [];
- for (var n = 0; n < 256; n++) {
- c = n;
- for (var k = 0; k < 8; k++) {
- c = c & 1 ? 0xEDB88320 ^ c >>> 1 : c >>> 1;
- }
- table[n] = c;
- }
- return table;
- } // Create table on load. Just 255 signed longs. Not a problem.
- var crcTable = makeTable();
- function crc32(crc, buf, len, pos) {
- var t = crcTable,
- end = pos + len;
- crc = crc ^ -1;
- for (var i = pos; i < end; i++) {
- crc = crc >>> 8 ^ t[(crc ^ buf[i]) & 0xFF];
- }
- return crc ^ -1; // >>> 0;
- } // That's all for the pako functions.
- /**
- * Compute the crc32 of a string.
- * This is almost the same as the function crc32, but for strings. Using the
- * same function for the two use cases leads to horrible performances.
- * @param {Number} crc the starting value of the crc.
- * @param {String} str the string to use.
- * @param {Number} len the length of the string.
- * @param {Number} pos the starting position for the crc32 computation.
- * @return {Number} the computed crc32.
- */
- function crc32str(crc, str, len, pos) {
- var t = crcTable,
- end = pos + len;
- crc = crc ^ -1;
- for (var i = pos; i < end; i++) {
- crc = crc >>> 8 ^ t[(crc ^ str.charCodeAt(i)) & 0xFF];
- }
- return crc ^ -1; // >>> 0;
- }
- module.exports = function crc32wrapper(input, crc) {
- if (typeof input === "undefined" || !input.length) {
- return 0;
- }
- var isArray = utils.getTypeOf(input) !== "string";
- if (isArray) {
- return crc32(crc | 0, input, input.length, 0);
- } else {
- return crc32str(crc | 0, input, input.length, 0);
- }
- };
- },{"./utils":312}],285:[function(require,module,exports){
- 'use strict';
- exports.base64 = false;
- exports.binary = false;
- exports.dir = false;
- exports.createFolders = true;
- exports.date = null;
- exports.compression = null;
- exports.compressionOptions = null;
- exports.comment = null;
- exports.unixPermissions = null;
- exports.dosPermissions = null;
- },{}],286:[function(require,module,exports){
- /* global Promise */
- 'use strict'; // load the global object first:
- // - it should be better integrated in the system (unhandledRejection in node)
- // - the environment may have a custom Promise implementation (see zone.js)
- var ES6Promise = null;
- if (typeof Promise !== "undefined") {
- ES6Promise = Promise;
- } else {
- ES6Promise = require("lie");
- }
- /**
- * Let the user use/change some implementations.
- */
- module.exports = {
- Promise: ES6Promise
- };
- },{"lie":316}],287:[function(require,module,exports){
- 'use strict';
- var USE_TYPEDARRAY = typeof Uint8Array !== 'undefined' && typeof Uint16Array !== 'undefined' && typeof Uint32Array !== 'undefined';
- var pako = require("pako");
- var utils = require("./utils");
- var GenericWorker = require("./stream/GenericWorker");
- var ARRAY_TYPE = USE_TYPEDARRAY ? "uint8array" : "array";
- exports.magic = "\x08\x00";
- /**
- * Create a worker that uses pako to inflate/deflate.
- * @constructor
- * @param {String} action the name of the pako function to call : either "Deflate" or "Inflate".
- * @param {Object} options the options to use when (de)compressing.
- */
- function FlateWorker(action, options) {
- GenericWorker.call(this, "FlateWorker/" + action);
- this._pako = null;
- this._pakoAction = action;
- this._pakoOptions = options; // the `meta` object from the last chunk received
- // this allow this worker to pass around metadata
- this.meta = {};
- }
- utils.inherits(FlateWorker, GenericWorker);
- /**
- * @see GenericWorker.processChunk
- */
- FlateWorker.prototype.processChunk = function (chunk) {
- this.meta = chunk.meta;
- if (this._pako === null) {
- this._createPako();
- }
- this._pako.push(utils.transformTo(ARRAY_TYPE, chunk.data), false);
- };
- /**
- * @see GenericWorker.flush
- */
- FlateWorker.prototype.flush = function () {
- GenericWorker.prototype.flush.call(this);
- if (this._pako === null) {
- this._createPako();
- }
- this._pako.push([], true);
- };
- /**
- * @see GenericWorker.cleanUp
- */
- FlateWorker.prototype.cleanUp = function () {
- GenericWorker.prototype.cleanUp.call(this);
- this._pako = null;
- };
- /**
- * Create the _pako object.
- * TODO: lazy-loading this object isn't the best solution but it's the
- * quickest. The best solution is to lazy-load the worker list. See also the
- * issue #446.
- */
- FlateWorker.prototype._createPako = function () {
- this._pako = new pako[this._pakoAction]({
- raw: true,
- level: this._pakoOptions.level || -1 // default compression
- });
- var self = this;
- this._pako.onData = function (data) {
- self.push({
- data: data,
- meta: self.meta
- });
- };
- };
- exports.compressWorker = function (compressionOptions) {
- return new FlateWorker("Deflate", compressionOptions);
- };
- exports.uncompressWorker = function () {
- return new FlateWorker("Inflate", {});
- };
- },{"./stream/GenericWorker":308,"./utils":312,"pako":330}],288:[function(require,module,exports){
- 'use strict';
- var utils = require('../utils');
- var GenericWorker = require('../stream/GenericWorker');
- var utf8 = require('../utf8');
- var crc32 = require('../crc32');
- var signature = require('../signature');
- /**
- * Transform an integer into a string in hexadecimal.
- * @private
- * @param {number} dec the number to convert.
- * @param {number} bytes the number of bytes to generate.
- * @returns {string} the result.
- */
- var decToHex = function decToHex(dec, bytes) {
- var hex = "",
- i;
- for (i = 0; i < bytes; i++) {
- hex += String.fromCharCode(dec & 0xff);
- dec = dec >>> 8;
- }
- return hex;
- };
- /**
- * Generate the UNIX part of the external file attributes.
- * @param {Object} unixPermissions the unix permissions or null.
- * @param {Boolean} isDir true if the entry is a directory, false otherwise.
- * @return {Number} a 32 bit integer.
- *
- * adapted from http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute :
- *
- * TTTTsstrwxrwxrwx0000000000ADVSHR
- * ^^^^____________________________ file type, see zipinfo.c (UNX_*)
- * ^^^_________________________ setuid, setgid, sticky
- * ^^^^^^^^^________________ permissions
- * ^^^^^^^^^^______ not used ?
- * ^^^^^^ DOS attribute bits : Archive, Directory, Volume label, System file, Hidden, Read only
- */
- var generateUnixExternalFileAttr = function generateUnixExternalFileAttr(unixPermissions, isDir) {
- var result = unixPermissions;
- if (!unixPermissions) {
- // I can't use octal values in strict mode, hence the hexa.
- // 040775 => 0x41fd
- // 0100664 => 0x81b4
- result = isDir ? 0x41fd : 0x81b4;
- }
- return (result & 0xFFFF) << 16;
- };
- /**
- * Generate the DOS part of the external file attributes.
- * @param {Object} dosPermissions the dos permissions or null.
- * @param {Boolean} isDir true if the entry is a directory, false otherwise.
- * @return {Number} a 32 bit integer.
- *
- * Bit 0 Read-Only
- * Bit 1 Hidden
- * Bit 2 System
- * Bit 3 Volume Label
- * Bit 4 Directory
- * Bit 5 Archive
- */
- var generateDosExternalFileAttr = function generateDosExternalFileAttr(dosPermissions, isDir) {
- // the dir flag is already set for compatibility
- return (dosPermissions || 0) & 0x3F;
- };
- /**
- * Generate the various parts used in the construction of the final zip file.
- * @param {Object} streamInfo the hash with information about the compressed file.
- * @param {Boolean} streamedContent is the content streamed ?
- * @param {Boolean} streamingEnded is the stream finished ?
- * @param {number} offset the current offset from the start of the zip file.
- * @param {String} platform let's pretend we are this platform (change platform dependents fields)
- * @param {Function} encodeFileName the function to encode the file name / comment.
- * @return {Object} the zip parts.
- */
- var generateZipParts = function generateZipParts(streamInfo, streamedContent, streamingEnded, offset, platform, encodeFileName) {
- var file = streamInfo['file'],
- compression = streamInfo['compression'],
- useCustomEncoding = encodeFileName !== utf8.utf8encode,
- encodedFileName = utils.transformTo("string", encodeFileName(file.name)),
- utfEncodedFileName = utils.transformTo("string", utf8.utf8encode(file.name)),
- comment = file.comment,
- encodedComment = utils.transformTo("string", encodeFileName(comment)),
- utfEncodedComment = utils.transformTo("string", utf8.utf8encode(comment)),
- useUTF8ForFileName = utfEncodedFileName.length !== file.name.length,
- useUTF8ForComment = utfEncodedComment.length !== comment.length,
- dosTime,
- dosDate,
- extraFields = "",
- unicodePathExtraField = "",
- unicodeCommentExtraField = "",
- dir = file.dir,
- date = file.date;
- var dataInfo = {
- crc32: 0,
- compressedSize: 0,
- uncompressedSize: 0
- }; // if the content is streamed, the sizes/crc32 are only available AFTER
- // the end of the stream.
- if (!streamedContent || streamingEnded) {
- dataInfo.crc32 = streamInfo['crc32'];
- dataInfo.compressedSize = streamInfo['compressedSize'];
- dataInfo.uncompressedSize = streamInfo['uncompressedSize'];
- }
- var bitflag = 0;
- if (streamedContent) {
- // Bit 3: the sizes/crc32 are set to zero in the local header.
- // The correct values are put in the data descriptor immediately
- // following the compressed data.
- bitflag |= 0x0008;
- }
- if (!useCustomEncoding && (useUTF8ForFileName || useUTF8ForComment)) {
- // Bit 11: Language encoding flag (EFS).
- bitflag |= 0x0800;
- }
- var extFileAttr = 0;
- var versionMadeBy = 0;
- if (dir) {
- // dos or unix, we set the dos dir flag
- extFileAttr |= 0x00010;
- }
- if (platform === "UNIX") {
- versionMadeBy = 0x031E; // UNIX, version 3.0
- extFileAttr |= generateUnixExternalFileAttr(file.unixPermissions, dir);
- } else {
- // DOS or other, fallback to DOS
- versionMadeBy = 0x0014; // DOS, version 2.0
- extFileAttr |= generateDosExternalFileAttr(file.dosPermissions, dir);
- } // date
- // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html
- // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html
- // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html
- dosTime = date.getUTCHours();
- dosTime = dosTime << 6;
- dosTime = dosTime | date.getUTCMinutes();
- dosTime = dosTime << 5;
- dosTime = dosTime | date.getUTCSeconds() / 2;
- dosDate = date.getUTCFullYear() - 1980;
- dosDate = dosDate << 4;
- dosDate = dosDate | date.getUTCMonth() + 1;
- dosDate = dosDate << 5;
- dosDate = dosDate | date.getUTCDate();
- if (useUTF8ForFileName) {
- // set the unicode path extra field. unzip needs at least one extra
- // field to correctly handle unicode path, so using the path is as good
- // as any other information. This could improve the situation with
- // other archive managers too.
- // This field is usually used without the utf8 flag, with a non
- // unicode path in the header (winrar, winzip). This helps (a bit)
- // with the messy Windows' default compressed folders feature but
- // breaks on p7zip which doesn't seek the unicode path extra field.
- // So for now, UTF-8 everywhere !
- unicodePathExtraField = // Version
- decToHex(1, 1) + // NameCRC32
- decToHex(crc32(encodedFileName), 4) + // UnicodeName
- utfEncodedFileName;
- extraFields += // Info-ZIP Unicode Path Extra Field
- "\x75\x70" + // size
- decToHex(unicodePathExtraField.length, 2) + // content
- unicodePathExtraField;
- }
- if (useUTF8ForComment) {
- unicodeCommentExtraField = // Version
- decToHex(1, 1) + // CommentCRC32
- decToHex(crc32(encodedComment), 4) + // UnicodeName
- utfEncodedComment;
- extraFields += // Info-ZIP Unicode Path Extra Field
- "\x75\x63" + // size
- decToHex(unicodeCommentExtraField.length, 2) + // content
- unicodeCommentExtraField;
- }
- var header = ""; // version needed to extract
- header += "\x0A\x00"; // general purpose bit flag
- header += decToHex(bitflag, 2); // compression method
- header += compression.magic; // last mod file time
- header += decToHex(dosTime, 2); // last mod file date
- header += decToHex(dosDate, 2); // crc-32
- header += decToHex(dataInfo.crc32, 4); // compressed size
- header += decToHex(dataInfo.compressedSize, 4); // uncompressed size
- header += decToHex(dataInfo.uncompressedSize, 4); // file name length
- header += decToHex(encodedFileName.length, 2); // extra field length
- header += decToHex(extraFields.length, 2);
- var fileRecord = signature.LOCAL_FILE_HEADER + header + encodedFileName + extraFields;
- var dirRecord = signature.CENTRAL_FILE_HEADER + // version made by (00: DOS)
- decToHex(versionMadeBy, 2) + // file header (common to file and central directory)
- header + // file comment length
- decToHex(encodedComment.length, 2) + // disk number start
- "\x00\x00" + // internal file attributes TODO
- "\x00\x00" + // external file attributes
- decToHex(extFileAttr, 4) + // relative offset of local header
- decToHex(offset, 4) + // file name
- encodedFileName + // extra field
- extraFields + // file comment
- encodedComment;
- return {
- fileRecord: fileRecord,
- dirRecord: dirRecord
- };
- };
- /**
- * Generate the EOCD record.
- * @param {Number} entriesCount the number of entries in the zip file.
- * @param {Number} centralDirLength the length (in bytes) of the central dir.
- * @param {Number} localDirLength the length (in bytes) of the local dir.
- * @param {String} comment the zip file comment as a binary string.
- * @param {Function} encodeFileName the function to encode the comment.
- * @return {String} the EOCD record.
- */
- var generateCentralDirectoryEnd = function generateCentralDirectoryEnd(entriesCount, centralDirLength, localDirLength, comment, encodeFileName) {
- var dirEnd = "";
- var encodedComment = utils.transformTo("string", encodeFileName(comment)); // end of central dir signature
- dirEnd = signature.CENTRAL_DIRECTORY_END + // number of this disk
- "\x00\x00" + // number of the disk with the start of the central directory
- "\x00\x00" + // total number of entries in the central directory on this disk
- decToHex(entriesCount, 2) + // total number of entries in the central directory
- decToHex(entriesCount, 2) + // size of the central directory 4 bytes
- decToHex(centralDirLength, 4) + // offset of start of central directory with respect to the starting disk number
- decToHex(localDirLength, 4) + // .ZIP file comment length
- decToHex(encodedComment.length, 2) + // .ZIP file comment
- encodedComment;
- return dirEnd;
- };
- /**
- * Generate data descriptors for a file entry.
- * @param {Object} streamInfo the hash generated by a worker, containing information
- * on the file entry.
- * @return {String} the data descriptors.
- */
- var generateDataDescriptors = function generateDataDescriptors(streamInfo) {
- var descriptor = "";
- descriptor = signature.DATA_DESCRIPTOR + // crc-32 4 bytes
- decToHex(streamInfo['crc32'], 4) + // compressed size 4 bytes
- decToHex(streamInfo['compressedSize'], 4) + // uncompressed size 4 bytes
- decToHex(streamInfo['uncompressedSize'], 4);
- return descriptor;
- };
- /**
- * A worker to concatenate other workers to create a zip file.
- * @param {Boolean} streamFiles `true` to stream the content of the files,
- * `false` to accumulate it.
- * @param {String} comment the comment to use.
- * @param {String} platform the platform to use, "UNIX" or "DOS".
- * @param {Function} encodeFileName the function to encode file names and comments.
- */
- function ZipFileWorker(streamFiles, comment, platform, encodeFileName) {
- GenericWorker.call(this, "ZipFileWorker"); // The number of bytes written so far. This doesn't count accumulated chunks.
- this.bytesWritten = 0; // The comment of the zip file
- this.zipComment = comment; // The platform "generating" the zip file.
- this.zipPlatform = platform; // the function to encode file names and comments.
- this.encodeFileName = encodeFileName; // Should we stream the content of the files ?
- this.streamFiles = streamFiles; // If `streamFiles` is false, we will need to accumulate the content of the
- // files to calculate sizes / crc32 (and write them *before* the content).
- // This boolean indicates if we are accumulating chunks (it will change a lot
- // during the lifetime of this worker).
- this.accumulate = false; // The buffer receiving chunks when accumulating content.
- this.contentBuffer = []; // The list of generated directory records.
- this.dirRecords = []; // The offset (in bytes) from the beginning of the zip file for the current source.
- this.currentSourceOffset = 0; // The total number of entries in this zip file.
- this.entriesCount = 0; // the name of the file currently being added, null when handling the end of the zip file.
- // Used for the emitted metadata.
- this.currentFile = null;
- this._sources = [];
- }
- utils.inherits(ZipFileWorker, GenericWorker);
- /**
- * @see GenericWorker.push
- */
- ZipFileWorker.prototype.push = function (chunk) {
- var currentFilePercent = chunk.meta.percent || 0;
- var entriesCount = this.entriesCount;
- var remainingFiles = this._sources.length;
- if (this.accumulate) {
- this.contentBuffer.push(chunk);
- } else {
- this.bytesWritten += chunk.data.length;
- GenericWorker.prototype.push.call(this, {
- data: chunk.data,
- meta: {
- currentFile: this.currentFile,
- percent: entriesCount ? (currentFilePercent + 100 * (entriesCount - remainingFiles - 1)) / entriesCount : 100
- }
- });
- }
- };
- /**
- * The worker started a new source (an other worker).
- * @param {Object} streamInfo the streamInfo object from the new source.
- */
- ZipFileWorker.prototype.openedSource = function (streamInfo) {
- this.currentSourceOffset = this.bytesWritten;
- this.currentFile = streamInfo['file'].name;
- var streamedContent = this.streamFiles && !streamInfo['file'].dir; // don't stream folders (because they don't have any content)
- if (streamedContent) {
- var record = generateZipParts(streamInfo, streamedContent, false, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);
- this.push({
- data: record.fileRecord,
- meta: {
- percent: 0
- }
- });
- } else {
- // we need to wait for the whole file before pushing anything
- this.accumulate = true;
- }
- };
- /**
- * The worker finished a source (an other worker).
- * @param {Object} streamInfo the streamInfo object from the finished source.
- */
- ZipFileWorker.prototype.closedSource = function (streamInfo) {
- this.accumulate = false;
- var streamedContent = this.streamFiles && !streamInfo['file'].dir;
- var record = generateZipParts(streamInfo, streamedContent, true, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);
- this.dirRecords.push(record.dirRecord);
- if (streamedContent) {
- // after the streamed file, we put data descriptors
- this.push({
- data: generateDataDescriptors(streamInfo),
- meta: {
- percent: 100
- }
- });
- } else {
- // the content wasn't streamed, we need to push everything now
- // first the file record, then the content
- this.push({
- data: record.fileRecord,
- meta: {
- percent: 0
- }
- });
- while (this.contentBuffer.length) {
- this.push(this.contentBuffer.shift());
- }
- }
- this.currentFile = null;
- };
- /**
- * @see GenericWorker.flush
- */
- ZipFileWorker.prototype.flush = function () {
- var localDirLength = this.bytesWritten;
- for (var i = 0; i < this.dirRecords.length; i++) {
- this.push({
- data: this.dirRecords[i],
- meta: {
- percent: 100
- }
- });
- }
- var centralDirLength = this.bytesWritten - localDirLength;
- var dirEnd = generateCentralDirectoryEnd(this.dirRecords.length, centralDirLength, localDirLength, this.zipComment, this.encodeFileName);
- this.push({
- data: dirEnd,
- meta: {
- percent: 100
- }
- });
- };
- /**
- * Prepare the next source to be read.
- */
- ZipFileWorker.prototype.prepareNextSource = function () {
- this.previous = this._sources.shift();
- this.openedSource(this.previous.streamInfo);
- if (this.isPaused) {
- this.previous.pause();
- } else {
- this.previous.resume();
- }
- };
- /**
- * @see GenericWorker.registerPrevious
- */
- ZipFileWorker.prototype.registerPrevious = function (previous) {
- this._sources.push(previous);
- var self = this;
- previous.on('data', function (chunk) {
- self.processChunk(chunk);
- });
- previous.on('end', function () {
- self.closedSource(self.previous.streamInfo);
- if (self._sources.length) {
- self.prepareNextSource();
- } else {
- self.end();
- }
- });
- previous.on('error', function (e) {
- self.error(e);
- });
- return this;
- };
- /**
- * @see GenericWorker.resume
- */
- ZipFileWorker.prototype.resume = function () {
- if (!GenericWorker.prototype.resume.call(this)) {
- return false;
- }
- if (!this.previous && this._sources.length) {
- this.prepareNextSource();
- return true;
- }
- if (!this.previous && !this._sources.length && !this.generatedError) {
- this.end();
- return true;
- }
- };
- /**
- * @see GenericWorker.error
- */
- ZipFileWorker.prototype.error = function (e) {
- var sources = this._sources;
- if (!GenericWorker.prototype.error.call(this, e)) {
- return false;
- }
- for (var i = 0; i < sources.length; i++) {
- try {
- sources[i].error(e);
- } catch (e) {// the `error` exploded, nothing to do
- }
- }
- return true;
- };
- /**
- * @see GenericWorker.lock
- */
- ZipFileWorker.prototype.lock = function () {
- GenericWorker.prototype.lock.call(this);
- var sources = this._sources;
- for (var i = 0; i < sources.length; i++) {
- sources[i].lock();
- }
- };
- module.exports = ZipFileWorker;
- },{"../crc32":284,"../signature":303,"../stream/GenericWorker":308,"../utf8":311,"../utils":312}],289:[function(require,module,exports){
- 'use strict';
- var compressions = require('../compressions');
- var ZipFileWorker = require('./ZipFileWorker');
- /**
- * Find the compression to use.
- * @param {String} fileCompression the compression defined at the file level, if any.
- * @param {String} zipCompression the compression defined at the load() level.
- * @return {Object} the compression object to use.
- */
- var getCompression = function getCompression(fileCompression, zipCompression) {
- var compressionName = fileCompression || zipCompression;
- var compression = compressions[compressionName];
- if (!compression) {
- throw new Error(compressionName + " is not a valid compression method !");
- }
- return compression;
- };
- /**
- * Create a worker to generate a zip file.
- * @param {JSZip} zip the JSZip instance at the right root level.
- * @param {Object} options to generate the zip file.
- * @param {String} comment the comment to use.
- */
- exports.generateWorker = function (zip, options, comment) {
- var zipFileWorker = new ZipFileWorker(options.streamFiles, comment, options.platform, options.encodeFileName);
- var entriesCount = 0;
- try {
- zip.forEach(function (relativePath, file) {
- entriesCount++;
- var compression = getCompression(file.options.compression, options.compression);
- var compressionOptions = file.options.compressionOptions || options.compressionOptions || {};
- var dir = file.dir,
- date = file.date;
- file._compressWorker(compression, compressionOptions).withStreamInfo("file", {
- name: relativePath,
- dir: dir,
- date: date,
- comment: file.comment || "",
- unixPermissions: file.unixPermissions,
- dosPermissions: file.dosPermissions
- }).pipe(zipFileWorker);
- });
- zipFileWorker.entriesCount = entriesCount;
- } catch (e) {
- zipFileWorker.error(e);
- }
- return zipFileWorker;
- };
- },{"../compressions":283,"./ZipFileWorker":288}],290:[function(require,module,exports){
- 'use strict';
- /**
- * Representation a of zip file in js
- * @constructor
- */
- function JSZip() {
- // if this constructor is used without `new`, it adds `new` before itself:
- if (!(this instanceof JSZip)) {
- return new JSZip();
- }
- if (arguments.length) {
- throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");
- } // object containing the files :
- // {
- // "folder/" : {...},
- // "folder/data.txt" : {...}
- // }
- this.files = {};
- this.comment = null; // Where we are in the hierarchy
- this.root = "";
- this.clone = function () {
- var newObj = new JSZip();
- for (var i in this) {
- if (typeof this[i] !== "function") {
- newObj[i] = this[i];
- }
- }
- return newObj;
- };
- }
- JSZip.prototype = require('./object');
- JSZip.prototype.loadAsync = require('./load');
- JSZip.support = require('./support');
- JSZip.defaults = require('./defaults'); // TODO find a better way to handle this version,
- // a require('package.json').version doesn't work with webpack, see #327
- JSZip.version = "3.5.0";
- JSZip.loadAsync = function (content, options) {
- return new JSZip().loadAsync(content, options);
- };
- JSZip.external = require("./external");
- module.exports = JSZip;
- },{"./defaults":285,"./external":286,"./load":291,"./object":295,"./support":310}],291:[function(require,module,exports){
- 'use strict';
- var utils = require('./utils');
- var external = require("./external");
- var utf8 = require('./utf8');
- var utils = require('./utils');
- var ZipEntries = require('./zipEntries');
- var Crc32Probe = require('./stream/Crc32Probe');
- var nodejsUtils = require("./nodejsUtils");
- /**
- * Check the CRC32 of an entry.
- * @param {ZipEntry} zipEntry the zip entry to check.
- * @return {Promise} the result.
- */
- function checkEntryCRC32(zipEntry) {
- return new external.Promise(function (resolve, reject) {
- var worker = zipEntry.decompressed.getContentWorker().pipe(new Crc32Probe());
- worker.on("error", function (e) {
- reject(e);
- }).on("end", function () {
- if (worker.streamInfo.crc32 !== zipEntry.decompressed.crc32) {
- reject(new Error("Corrupted zip : CRC32 mismatch"));
- } else {
- resolve();
- }
- }).resume();
- });
- }
- module.exports = function (data, options) {
- var zip = this;
- options = utils.extend(options || {}, {
- base64: false,
- checkCRC32: false,
- optimizedBinaryString: false,
- createFolders: false,
- decodeFileName: utf8.utf8decode
- });
- if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {
- return external.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file."));
- }
- return utils.prepareContent("the loaded zip file", data, true, options.optimizedBinaryString, options.base64).then(function (data) {
- var zipEntries = new ZipEntries(options);
- zipEntries.load(data);
- return zipEntries;
- }).then(function checkCRC32(zipEntries) {
- var promises = [external.Promise.resolve(zipEntries)];
- var files = zipEntries.files;
- if (options.checkCRC32) {
- for (var i = 0; i < files.length; i++) {
- promises.push(checkEntryCRC32(files[i]));
- }
- }
- return external.Promise.all(promises);
- }).then(function addFiles(results) {
- var zipEntries = results.shift();
- var files = zipEntries.files;
- for (var i = 0; i < files.length; i++) {
- var input = files[i];
- zip.file(input.fileNameStr, input.decompressed, {
- binary: true,
- optimizedBinaryString: true,
- date: input.date,
- dir: input.dir,
- comment: input.fileCommentStr.length ? input.fileCommentStr : null,
- unixPermissions: input.unixPermissions,
- dosPermissions: input.dosPermissions,
- createFolders: options.createFolders
- });
- }
- if (zipEntries.zipComment.length) {
- zip.comment = zipEntries.zipComment;
- }
- return zip;
- });
- };
- },{"./external":286,"./nodejsUtils":294,"./stream/Crc32Probe":305,"./utf8":311,"./utils":312,"./zipEntries":313}],292:[function(require,module,exports){
- "use strict";
- var utils = require('../utils');
- var GenericWorker = require('../stream/GenericWorker');
- /**
- * A worker that use a nodejs stream as source.
- * @constructor
- * @param {String} filename the name of the file entry for this stream.
- * @param {Readable} stream the nodejs stream.
- */
- function NodejsStreamInputAdapter(filename, stream) {
- GenericWorker.call(this, "Nodejs stream input adapter for " + filename);
- this._upstreamEnded = false;
- this._bindStream(stream);
- }
- utils.inherits(NodejsStreamInputAdapter, GenericWorker);
- /**
- * Prepare the stream and bind the callbacks on it.
- * Do this ASAP on node 0.10 ! A lazy binding doesn't always work.
- * @param {Stream} stream the nodejs stream to use.
- */
- NodejsStreamInputAdapter.prototype._bindStream = function (stream) {
- var self = this;
- this._stream = stream;
- stream.pause();
- stream.on("data", function (chunk) {
- self.push({
- data: chunk,
- meta: {
- percent: 0
- }
- });
- }).on("error", function (e) {
- if (self.isPaused) {
- this.generatedError = e;
- } else {
- self.error(e);
- }
- }).on("end", function () {
- if (self.isPaused) {
- self._upstreamEnded = true;
- } else {
- self.end();
- }
- });
- };
- NodejsStreamInputAdapter.prototype.pause = function () {
- if (!GenericWorker.prototype.pause.call(this)) {
- return false;
- }
- this._stream.pause();
- return true;
- };
- NodejsStreamInputAdapter.prototype.resume = function () {
- if (!GenericWorker.prototype.resume.call(this)) {
- return false;
- }
- if (this._upstreamEnded) {
- this.end();
- } else {
- this._stream.resume();
- }
- return true;
- };
- module.exports = NodejsStreamInputAdapter;
- },{"../stream/GenericWorker":308,"../utils":312}],293:[function(require,module,exports){
- 'use strict';
- var Readable = require('readable-stream').Readable;
- var utils = require('../utils');
- utils.inherits(NodejsStreamOutputAdapter, Readable);
- /**
- * A nodejs stream using a worker as source.
- * @see the SourceWrapper in http://nodejs.org/api/stream.html
- * @constructor
- * @param {StreamHelper} helper the helper wrapping the worker
- * @param {Object} options the nodejs stream options
- * @param {Function} updateCb the update callback.
- */
- function NodejsStreamOutputAdapter(helper, options, updateCb) {
- Readable.call(this, options);
- this._helper = helper;
- var self = this;
- helper.on("data", function (data, meta) {
- if (!self.push(data)) {
- self._helper.pause();
- }
- if (updateCb) {
- updateCb(meta);
- }
- }).on("error", function (e) {
- self.emit('error', e);
- }).on("end", function () {
- self.push(null);
- });
- }
- NodejsStreamOutputAdapter.prototype._read = function () {
- this._helper.resume();
- };
- module.exports = NodejsStreamOutputAdapter;
- },{"../utils":312,"readable-stream":296}],294:[function(require,module,exports){
- (function (Buffer){
- 'use strict';
- module.exports = {
- /**
- * True if this is running in Nodejs, will be undefined in a browser.
- * In a browser, browserify won't include this file and the whole module
- * will be resolved an empty object.
- */
- isNode: typeof Buffer !== "undefined",
- /**
- * Create a new nodejs Buffer from an existing content.
- * @param {Object} data the data to pass to the constructor.
- * @param {String} encoding the encoding to use.
- * @return {Buffer} a new Buffer.
- */
- newBufferFrom: function newBufferFrom(data, encoding) {
- if (Buffer.from && Buffer.from !== Uint8Array.from) {
- return Buffer.from(data, encoding);
- } else {
- if (typeof data === "number") {
- // Safeguard for old Node.js versions. On newer versions,
- // Buffer.from(number) / Buffer(number, encoding) already throw.
- throw new Error("The \"data\" argument must not be a number");
- }
- return new Buffer(data, encoding);
- }
- },
- /**
- * Create a new nodejs Buffer with the specified size.
- * @param {Integer} size the size of the buffer.
- * @return {Buffer} a new Buffer.
- */
- allocBuffer: function allocBuffer(size) {
- if (Buffer.alloc) {
- return Buffer.alloc(size);
- } else {
- var buf = new Buffer(size);
- buf.fill(0);
- return buf;
- }
- },
- /**
- * Find out if an object is a Buffer.
- * @param {Object} b the object to test.
- * @return {Boolean} true if the object is a Buffer, false otherwise.
- */
- isBuffer: function isBuffer(b) {
- return Buffer.isBuffer(b);
- },
- isStream: function isStream(obj) {
- return obj && typeof obj.on === "function" && typeof obj.pause === "function" && typeof obj.resume === "function";
- }
- };
- }).call(this,require("buffer").Buffer)
- },{"buffer":216}],295:[function(require,module,exports){
- 'use strict';
- var utf8 = require('./utf8');
- var utils = require('./utils');
- var GenericWorker = require('./stream/GenericWorker');
- var StreamHelper = require('./stream/StreamHelper');
- var defaults = require('./defaults');
- var CompressedObject = require('./compressedObject');
- var ZipObject = require('./zipObject');
- var generate = require("./generate");
- var nodejsUtils = require("./nodejsUtils");
- var NodejsStreamInputAdapter = require("./nodejs/NodejsStreamInputAdapter");
- /**
- * Add a file in the current folder.
- * @private
- * @param {string} name the name of the file
- * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file
- * @param {Object} originalOptions the options of the file
- * @return {Object} the new file.
- */
- var fileAdd = function fileAdd(name, data, originalOptions) {
- // be sure sub folders exist
- var dataType = utils.getTypeOf(data),
- parent;
- /*
- * Correct options.
- */
- var o = utils.extend(originalOptions || {}, defaults);
- o.date = o.date || new Date();
- if (o.compression !== null) {
- o.compression = o.compression.toUpperCase();
- }
- if (typeof o.unixPermissions === "string") {
- o.unixPermissions = parseInt(o.unixPermissions, 8);
- } // UNX_IFDIR 0040000 see zipinfo.c
- if (o.unixPermissions && o.unixPermissions & 0x4000) {
- o.dir = true;
- } // Bit 4 Directory
- if (o.dosPermissions && o.dosPermissions & 0x0010) {
- o.dir = true;
- }
- if (o.dir) {
- name = forceTrailingSlash(name);
- }
- if (o.createFolders && (parent = parentFolder(name))) {
- folderAdd.call(this, parent, true);
- }
- var isUnicodeString = dataType === "string" && o.binary === false && o.base64 === false;
- if (!originalOptions || typeof originalOptions.binary === "undefined") {
- o.binary = !isUnicodeString;
- }
- var isCompressedEmpty = data instanceof CompressedObject && data.uncompressedSize === 0;
- if (isCompressedEmpty || o.dir || !data || data.length === 0) {
- o.base64 = false;
- o.binary = true;
- data = "";
- o.compression = "STORE";
- dataType = "string";
- }
- /*
- * Convert content to fit.
- */
- var zipObjectContent = null;
- if (data instanceof CompressedObject || data instanceof GenericWorker) {
- zipObjectContent = data;
- } else if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {
- zipObjectContent = new NodejsStreamInputAdapter(name, data);
- } else {
- zipObjectContent = utils.prepareContent(name, data, o.binary, o.optimizedBinaryString, o.base64);
- }
- var object = new ZipObject(name, zipObjectContent, o);
- this.files[name] = object;
- /*
- TODO: we can't throw an exception because we have async promises
- (we can have a promise of a Date() for example) but returning a
- promise is useless because file(name, data) returns the JSZip
- object for chaining. Should we break that to allow the user
- to catch the error ?
- return external.Promise.resolve(zipObjectContent)
- .then(function () {
- return object;
- });
- */
- };
- /**
- * Find the parent folder of the path.
- * @private
- * @param {string} path the path to use
- * @return {string} the parent folder, or ""
- */
- var parentFolder = function parentFolder(path) {
- if (path.slice(-1) === '/') {
- path = path.substring(0, path.length - 1);
- }
- var lastSlash = path.lastIndexOf('/');
- return lastSlash > 0 ? path.substring(0, lastSlash) : "";
- };
- /**
- * Returns the path with a slash at the end.
- * @private
- * @param {String} path the path to check.
- * @return {String} the path with a trailing slash.
- */
- var forceTrailingSlash = function forceTrailingSlash(path) {
- // Check the name ends with a /
- if (path.slice(-1) !== "/") {
- path += "/"; // IE doesn't like substr(-1)
- }
- return path;
- };
- /**
- * Add a (sub) folder in the current folder.
- * @private
- * @param {string} name the folder's name
- * @param {boolean=} [createFolders] If true, automatically create sub
- * folders. Defaults to false.
- * @return {Object} the new folder.
- */
- var folderAdd = function folderAdd(name, createFolders) {
- createFolders = typeof createFolders !== 'undefined' ? createFolders : defaults.createFolders;
- name = forceTrailingSlash(name); // Does this folder already exist?
- if (!this.files[name]) {
- fileAdd.call(this, name, null, {
- dir: true,
- createFolders: createFolders
- });
- }
- return this.files[name];
- };
- /**
- * Cross-window, cross-Node-context regular expression detection
- * @param {Object} object Anything
- * @return {Boolean} true if the object is a regular expression,
- * false otherwise
- */
- function isRegExp(object) {
- return Object.prototype.toString.call(object) === "[object RegExp]";
- } // return the actual prototype of JSZip
- var out = {
- /**
- * @see loadAsync
- */
- load: function load() {
- throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.");
- },
- /**
- * Call a callback function for each entry at this folder level.
- * @param {Function} cb the callback function:
- * function (relativePath, file) {...}
- * It takes 2 arguments : the relative path and the file.
- */
- forEach: function forEach(cb) {
- var filename, relativePath, file;
- for (filename in this.files) {
- if (!this.files.hasOwnProperty(filename)) {
- continue;
- }
- file = this.files[filename];
- relativePath = filename.slice(this.root.length, filename.length);
- if (relativePath && filename.slice(0, this.root.length) === this.root) {
- // the file is in the current root
- cb(relativePath, file); // TODO reverse the parameters ? need to be clean AND consistent with the filter search fn...
- }
- }
- },
- /**
- * Filter nested files/folders with the specified function.
- * @param {Function} search the predicate to use :
- * function (relativePath, file) {...}
- * It takes 2 arguments : the relative path and the file.
- * @return {Array} An array of matching elements.
- */
- filter: function filter(search) {
- var result = [];
- this.forEach(function (relativePath, entry) {
- if (search(relativePath, entry)) {
- // the file matches the function
- result.push(entry);
- }
- });
- return result;
- },
- /**
- * Add a file to the zip file, or search a file.
- * @param {string|RegExp} name The name of the file to add (if data is defined),
- * the name of the file to find (if no data) or a regex to match files.
- * @param {String|ArrayBuffer|Uint8Array|Buffer} data The file data, either raw or base64 encoded
- * @param {Object} o File options
- * @return {JSZip|Object|Array} this JSZip object (when adding a file),
- * a file (when searching by string) or an array of files (when searching by regex).
- */
- file: function file(name, data, o) {
- if (arguments.length === 1) {
- if (isRegExp(name)) {
- var regexp = name;
- return this.filter(function (relativePath, file) {
- return !file.dir && regexp.test(relativePath);
- });
- } else {
- // text
- var obj = this.files[this.root + name];
- if (obj && !obj.dir) {
- return obj;
- } else {
- return null;
- }
- }
- } else {
- // more than one argument : we have data !
- name = this.root + name;
- fileAdd.call(this, name, data, o);
- }
- return this;
- },
- /**
- * Add a directory to the zip file, or search.
- * @param {String|RegExp} arg The name of the directory to add, or a regex to search folders.
- * @return {JSZip} an object with the new directory as the root, or an array containing matching folders.
- */
- folder: function folder(arg) {
- if (!arg) {
- return this;
- }
- if (isRegExp(arg)) {
- return this.filter(function (relativePath, file) {
- return file.dir && arg.test(relativePath);
- });
- } // else, name is a new folder
- var name = this.root + arg;
- var newFolder = folderAdd.call(this, name); // Allow chaining by returning a new object with this folder as the root
- var ret = this.clone();
- ret.root = newFolder.name;
- return ret;
- },
- /**
- * Delete a file, or a directory and all sub-files, from the zip
- * @param {string} name the name of the file to delete
- * @return {JSZip} this JSZip object
- */
- remove: function remove(name) {
- name = this.root + name;
- var file = this.files[name];
- if (!file) {
- // Look for any folders
- if (name.slice(-1) !== "/") {
- name += "/";
- }
- file = this.files[name];
- }
- if (file && !file.dir) {
- // file
- delete this.files[name];
- } else {
- // maybe a folder, delete recursively
- var kids = this.filter(function (relativePath, file) {
- return file.name.slice(0, name.length) === name;
- });
- for (var i = 0; i < kids.length; i++) {
- delete this.files[kids[i].name];
- }
- }
- return this;
- },
- /**
- * Generate the complete zip file
- * @param {Object} options the options to generate the zip file :
- * - compression, "STORE" by default.
- * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob.
- * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the zip file
- */
- generate: function generate(options) {
- throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.");
- },
- /**
- * Generate the complete zip file as an internal stream.
- * @param {Object} options the options to generate the zip file :
- * - compression, "STORE" by default.
- * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob.
- * @return {StreamHelper} the streamed zip file.
- */
- generateInternalStream: function generateInternalStream(options) {
- var worker,
- opts = {};
- try {
- opts = utils.extend(options || {}, {
- streamFiles: false,
- compression: "STORE",
- compressionOptions: null,
- type: "",
- platform: "DOS",
- comment: null,
- mimeType: 'application/zip',
- encodeFileName: utf8.utf8encode
- });
- opts.type = opts.type.toLowerCase();
- opts.compression = opts.compression.toUpperCase(); // "binarystring" is preferred but the internals use "string".
- if (opts.type === "binarystring") {
- opts.type = "string";
- }
- if (!opts.type) {
- throw new Error("No output type specified.");
- }
- utils.checkSupport(opts.type); // accept nodejs `process.platform`
- if (opts.platform === 'darwin' || opts.platform === 'freebsd' || opts.platform === 'linux' || opts.platform === 'sunos') {
- opts.platform = "UNIX";
- }
- if (opts.platform === 'win32') {
- opts.platform = "DOS";
- }
- var comment = opts.comment || this.comment || "";
- worker = generate.generateWorker(this, opts, comment);
- } catch (e) {
- worker = new GenericWorker("error");
- worker.error(e);
- }
- return new StreamHelper(worker, opts.type || "string", opts.mimeType);
- },
- /**
- * Generate the complete zip file asynchronously.
- * @see generateInternalStream
- */
- generateAsync: function generateAsync(options, onUpdate) {
- return this.generateInternalStream(options).accumulate(onUpdate);
- },
- /**
- * Generate the complete zip file asynchronously.
- * @see generateInternalStream
- */
- generateNodeStream: function generateNodeStream(options, onUpdate) {
- options = options || {};
- if (!options.type) {
- options.type = "nodebuffer";
- }
- return this.generateInternalStream(options).toNodejsStream(onUpdate);
- }
- };
- module.exports = out;
- },{"./compressedObject":282,"./defaults":285,"./generate":289,"./nodejs/NodejsStreamInputAdapter":292,"./nodejsUtils":294,"./stream/GenericWorker":308,"./stream/StreamHelper":309,"./utf8":311,"./utils":312,"./zipObject":315}],296:[function(require,module,exports){
- "use strict";
- /*
- * This file is used by module bundlers (browserify/webpack/etc) when
- * including a stream implementation. We use "readable-stream" to get a
- * consistent behavior between nodejs versions but bundlers often have a shim
- * for "stream". Using this shim greatly improve the compatibility and greatly
- * reduce the final size of the bundle (only one stream implementation, not
- * two).
- */
- module.exports = require("stream");
- },{"stream":396}],297:[function(require,module,exports){
- 'use strict';
- var DataReader = require('./DataReader');
- var utils = require('../utils');
- function ArrayReader(data) {
- DataReader.call(this, data);
- for (var i = 0; i < this.data.length; i++) {
- data[i] = data[i] & 0xFF;
- }
- }
- utils.inherits(ArrayReader, DataReader);
- /**
- * @see DataReader.byteAt
- */
- ArrayReader.prototype.byteAt = function (i) {
- return this.data[this.zero + i];
- };
- /**
- * @see DataReader.lastIndexOfSignature
- */
- ArrayReader.prototype.lastIndexOfSignature = function (sig) {
- var sig0 = sig.charCodeAt(0),
- sig1 = sig.charCodeAt(1),
- sig2 = sig.charCodeAt(2),
- sig3 = sig.charCodeAt(3);
- for (var i = this.length - 4; i >= 0; --i) {
- if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) {
- return i - this.zero;
- }
- }
- return -1;
- };
- /**
- * @see DataReader.readAndCheckSignature
- */
- ArrayReader.prototype.readAndCheckSignature = function (sig) {
- var sig0 = sig.charCodeAt(0),
- sig1 = sig.charCodeAt(1),
- sig2 = sig.charCodeAt(2),
- sig3 = sig.charCodeAt(3),
- data = this.readData(4);
- return sig0 === data[0] && sig1 === data[1] && sig2 === data[2] && sig3 === data[3];
- };
- /**
- * @see DataReader.readData
- */
- ArrayReader.prototype.readData = function (size) {
- this.checkOffset(size);
- if (size === 0) {
- return [];
- }
- var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);
- this.index += size;
- return result;
- };
- module.exports = ArrayReader;
- },{"../utils":312,"./DataReader":298}],298:[function(require,module,exports){
- 'use strict';
- var utils = require('../utils');
- function DataReader(data) {
- this.data = data; // type : see implementation
- this.length = data.length;
- this.index = 0;
- this.zero = 0;
- }
- DataReader.prototype = {
- /**
- * Check that the offset will not go too far.
- * @param {string} offset the additional offset to check.
- * @throws {Error} an Error if the offset is out of bounds.
- */
- checkOffset: function checkOffset(offset) {
- this.checkIndex(this.index + offset);
- },
- /**
- * Check that the specified index will not be too far.
- * @param {string} newIndex the index to check.
- * @throws {Error} an Error if the index is out of bounds.
- */
- checkIndex: function checkIndex(newIndex) {
- if (this.length < this.zero + newIndex || newIndex < 0) {
- throw new Error("End of data reached (data length = " + this.length + ", asked index = " + newIndex + "). Corrupted zip ?");
- }
- },
- /**
- * Change the index.
- * @param {number} newIndex The new index.
- * @throws {Error} if the new index is out of the data.
- */
- setIndex: function setIndex(newIndex) {
- this.checkIndex(newIndex);
- this.index = newIndex;
- },
- /**
- * Skip the next n bytes.
- * @param {number} n the number of bytes to skip.
- * @throws {Error} if the new index is out of the data.
- */
- skip: function skip(n) {
- this.setIndex(this.index + n);
- },
- /**
- * Get the byte at the specified index.
- * @param {number} i the index to use.
- * @return {number} a byte.
- */
- byteAt: function byteAt(i) {// see implementations
- },
- /**
- * Get the next number with a given byte size.
- * @param {number} size the number of bytes to read.
- * @return {number} the corresponding number.
- */
- readInt: function readInt(size) {
- var result = 0,
- i;
- this.checkOffset(size);
- for (i = this.index + size - 1; i >= this.index; i--) {
- result = (result << 8) + this.byteAt(i);
- }
- this.index += size;
- return result;
- },
- /**
- * Get the next string with a given byte size.
- * @param {number} size the number of bytes to read.
- * @return {string} the corresponding string.
- */
- readString: function readString(size) {
- return utils.transformTo("string", this.readData(size));
- },
- /**
- * Get raw data without conversion, <size> bytes.
- * @param {number} size the number of bytes to read.
- * @return {Object} the raw data, implementation specific.
- */
- readData: function readData(size) {// see implementations
- },
- /**
- * Find the last occurrence of a zip signature (4 bytes).
- * @param {string} sig the signature to find.
- * @return {number} the index of the last occurrence, -1 if not found.
- */
- lastIndexOfSignature: function lastIndexOfSignature(sig) {// see implementations
- },
- /**
- * Read the signature (4 bytes) at the current position and compare it with sig.
- * @param {string} sig the expected signature
- * @return {boolean} true if the signature matches, false otherwise.
- */
- readAndCheckSignature: function readAndCheckSignature(sig) {// see implementations
- },
- /**
- * Get the next date.
- * @return {Date} the date.
- */
- readDate: function readDate() {
- var dostime = this.readInt(4);
- return new Date(Date.UTC((dostime >> 25 & 0x7f) + 1980, // year
- (dostime >> 21 & 0x0f) - 1, // month
- dostime >> 16 & 0x1f, // day
- dostime >> 11 & 0x1f, // hour
- dostime >> 5 & 0x3f, // minute
- (dostime & 0x1f) << 1)); // second
- }
- };
- module.exports = DataReader;
- },{"../utils":312}],299:[function(require,module,exports){
- 'use strict';
- var Uint8ArrayReader = require('./Uint8ArrayReader');
- var utils = require('../utils');
- function NodeBufferReader(data) {
- Uint8ArrayReader.call(this, data);
- }
- utils.inherits(NodeBufferReader, Uint8ArrayReader);
- /**
- * @see DataReader.readData
- */
- NodeBufferReader.prototype.readData = function (size) {
- this.checkOffset(size);
- var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);
- this.index += size;
- return result;
- };
- module.exports = NodeBufferReader;
- },{"../utils":312,"./Uint8ArrayReader":301}],300:[function(require,module,exports){
- 'use strict';
- var DataReader = require('./DataReader');
- var utils = require('../utils');
- function StringReader(data) {
- DataReader.call(this, data);
- }
- utils.inherits(StringReader, DataReader);
- /**
- * @see DataReader.byteAt
- */
- StringReader.prototype.byteAt = function (i) {
- return this.data.charCodeAt(this.zero + i);
- };
- /**
- * @see DataReader.lastIndexOfSignature
- */
- StringReader.prototype.lastIndexOfSignature = function (sig) {
- return this.data.lastIndexOf(sig) - this.zero;
- };
- /**
- * @see DataReader.readAndCheckSignature
- */
- StringReader.prototype.readAndCheckSignature = function (sig) {
- var data = this.readData(4);
- return sig === data;
- };
- /**
- * @see DataReader.readData
- */
- StringReader.prototype.readData = function (size) {
- this.checkOffset(size); // this will work because the constructor applied the "& 0xff" mask.
- var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);
- this.index += size;
- return result;
- };
- module.exports = StringReader;
- },{"../utils":312,"./DataReader":298}],301:[function(require,module,exports){
- 'use strict';
- var ArrayReader = require('./ArrayReader');
- var utils = require('../utils');
- function Uint8ArrayReader(data) {
- ArrayReader.call(this, data);
- }
- utils.inherits(Uint8ArrayReader, ArrayReader);
- /**
- * @see DataReader.readData
- */
- Uint8ArrayReader.prototype.readData = function (size) {
- this.checkOffset(size);
- if (size === 0) {
- // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of [].
- return new Uint8Array(0);
- }
- var result = this.data.subarray(this.zero + this.index, this.zero + this.index + size);
- this.index += size;
- return result;
- };
- module.exports = Uint8ArrayReader;
- },{"../utils":312,"./ArrayReader":297}],302:[function(require,module,exports){
- 'use strict';
- var utils = require('../utils');
- var support = require('../support');
- var ArrayReader = require('./ArrayReader');
- var StringReader = require('./StringReader');
- var NodeBufferReader = require('./NodeBufferReader');
- var Uint8ArrayReader = require('./Uint8ArrayReader');
- /**
- * Create a reader adapted to the data.
- * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data to read.
- * @return {DataReader} the data reader.
- */
- module.exports = function (data) {
- var type = utils.getTypeOf(data);
- utils.checkSupport(type);
- if (type === "string" && !support.uint8array) {
- return new StringReader(data);
- }
- if (type === "nodebuffer") {
- return new NodeBufferReader(data);
- }
- if (support.uint8array) {
- return new Uint8ArrayReader(utils.transformTo("uint8array", data));
- }
- return new ArrayReader(utils.transformTo("array", data));
- };
- },{"../support":310,"../utils":312,"./ArrayReader":297,"./NodeBufferReader":299,"./StringReader":300,"./Uint8ArrayReader":301}],303:[function(require,module,exports){
- 'use strict';
- exports.LOCAL_FILE_HEADER = "PK\x03\x04";
- exports.CENTRAL_FILE_HEADER = "PK\x01\x02";
- exports.CENTRAL_DIRECTORY_END = "PK\x05\x06";
- exports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK\x06\x07";
- exports.ZIP64_CENTRAL_DIRECTORY_END = "PK\x06\x06";
- exports.DATA_DESCRIPTOR = "PK\x07\x08";
- },{}],304:[function(require,module,exports){
- 'use strict';
- var GenericWorker = require('./GenericWorker');
- var utils = require('../utils');
- /**
- * A worker which convert chunks to a specified type.
- * @constructor
- * @param {String} destType the destination type.
- */
- function ConvertWorker(destType) {
- GenericWorker.call(this, "ConvertWorker to " + destType);
- this.destType = destType;
- }
- utils.inherits(ConvertWorker, GenericWorker);
- /**
- * @see GenericWorker.processChunk
- */
- ConvertWorker.prototype.processChunk = function (chunk) {
- this.push({
- data: utils.transformTo(this.destType, chunk.data),
- meta: chunk.meta
- });
- };
- module.exports = ConvertWorker;
- },{"../utils":312,"./GenericWorker":308}],305:[function(require,module,exports){
- 'use strict';
- var GenericWorker = require('./GenericWorker');
- var crc32 = require('../crc32');
- var utils = require('../utils');
- /**
- * A worker which calculate the crc32 of the data flowing through.
- * @constructor
- */
- function Crc32Probe() {
- GenericWorker.call(this, "Crc32Probe");
- this.withStreamInfo("crc32", 0);
- }
- utils.inherits(Crc32Probe, GenericWorker);
- /**
- * @see GenericWorker.processChunk
- */
- Crc32Probe.prototype.processChunk = function (chunk) {
- this.streamInfo.crc32 = crc32(chunk.data, this.streamInfo.crc32 || 0);
- this.push(chunk);
- };
- module.exports = Crc32Probe;
- },{"../crc32":284,"../utils":312,"./GenericWorker":308}],306:[function(require,module,exports){
- 'use strict';
- var utils = require('../utils');
- var GenericWorker = require('./GenericWorker');
- /**
- * A worker which calculate the total length of the data flowing through.
- * @constructor
- * @param {String} propName the name used to expose the length
- */
- function DataLengthProbe(propName) {
- GenericWorker.call(this, "DataLengthProbe for " + propName);
- this.propName = propName;
- this.withStreamInfo(propName, 0);
- }
- utils.inherits(DataLengthProbe, GenericWorker);
- /**
- * @see GenericWorker.processChunk
- */
- DataLengthProbe.prototype.processChunk = function (chunk) {
- if (chunk) {
- var length = this.streamInfo[this.propName] || 0;
- this.streamInfo[this.propName] = length + chunk.data.length;
- }
- GenericWorker.prototype.processChunk.call(this, chunk);
- };
- module.exports = DataLengthProbe;
- },{"../utils":312,"./GenericWorker":308}],307:[function(require,module,exports){
- 'use strict';
- var utils = require('../utils');
- var GenericWorker = require('./GenericWorker'); // the size of the generated chunks
- // TODO expose this as a public variable
- var DEFAULT_BLOCK_SIZE = 16 * 1024;
- /**
- * A worker that reads a content and emits chunks.
- * @constructor
- * @param {Promise} dataP the promise of the data to split
- */
- function DataWorker(dataP) {
- GenericWorker.call(this, "DataWorker");
- var self = this;
- this.dataIsReady = false;
- this.index = 0;
- this.max = 0;
- this.data = null;
- this.type = "";
- this._tickScheduled = false;
- dataP.then(function (data) {
- self.dataIsReady = true;
- self.data = data;
- self.max = data && data.length || 0;
- self.type = utils.getTypeOf(data);
- if (!self.isPaused) {
- self._tickAndRepeat();
- }
- }, function (e) {
- self.error(e);
- });
- }
- utils.inherits(DataWorker, GenericWorker);
- /**
- * @see GenericWorker.cleanUp
- */
- DataWorker.prototype.cleanUp = function () {
- GenericWorker.prototype.cleanUp.call(this);
- this.data = null;
- };
- /**
- * @see GenericWorker.resume
- */
- DataWorker.prototype.resume = function () {
- if (!GenericWorker.prototype.resume.call(this)) {
- return false;
- }
- if (!this._tickScheduled && this.dataIsReady) {
- this._tickScheduled = true;
- utils.delay(this._tickAndRepeat, [], this);
- }
- return true;
- };
- /**
- * Trigger a tick a schedule an other call to this function.
- */
- DataWorker.prototype._tickAndRepeat = function () {
- this._tickScheduled = false;
- if (this.isPaused || this.isFinished) {
- return;
- }
- this._tick();
- if (!this.isFinished) {
- utils.delay(this._tickAndRepeat, [], this);
- this._tickScheduled = true;
- }
- };
- /**
- * Read and push a chunk.
- */
- DataWorker.prototype._tick = function () {
- if (this.isPaused || this.isFinished) {
- return false;
- }
- var size = DEFAULT_BLOCK_SIZE;
- var data = null,
- nextIndex = Math.min(this.max, this.index + size);
- if (this.index >= this.max) {
- // EOF
- return this.end();
- } else {
- switch (this.type) {
- case "string":
- data = this.data.substring(this.index, nextIndex);
- break;
- case "uint8array":
- data = this.data.subarray(this.index, nextIndex);
- break;
- case "array":
- case "nodebuffer":
- data = this.data.slice(this.index, nextIndex);
- break;
- }
- this.index = nextIndex;
- return this.push({
- data: data,
- meta: {
- percent: this.max ? this.index / this.max * 100 : 0
- }
- });
- }
- };
- module.exports = DataWorker;
- },{"../utils":312,"./GenericWorker":308}],308:[function(require,module,exports){
- 'use strict';
- /**
- * A worker that does nothing but passing chunks to the next one. This is like
- * a nodejs stream but with some differences. On the good side :
- * - it works on IE 6-9 without any issue / polyfill
- * - it weights less than the full dependencies bundled with browserify
- * - it forwards errors (no need to declare an error handler EVERYWHERE)
- *
- * A chunk is an object with 2 attributes : `meta` and `data`. The former is an
- * object containing anything (`percent` for example), see each worker for more
- * details. The latter is the real data (String, Uint8Array, etc).
- *
- * @constructor
- * @param {String} name the name of the stream (mainly used for debugging purposes)
- */
- function GenericWorker(name) {
- // the name of the worker
- this.name = name || "default"; // an object containing metadata about the workers chain
- this.streamInfo = {}; // an error which happened when the worker was paused
- this.generatedError = null; // an object containing metadata to be merged by this worker into the general metadata
- this.extraStreamInfo = {}; // true if the stream is paused (and should not do anything), false otherwise
- this.isPaused = true; // true if the stream is finished (and should not do anything), false otherwise
- this.isFinished = false; // true if the stream is locked to prevent further structure updates (pipe), false otherwise
- this.isLocked = false; // the event listeners
- this._listeners = {
- 'data': [],
- 'end': [],
- 'error': []
- }; // the previous worker, if any
- this.previous = null;
- }
- GenericWorker.prototype = {
- /**
- * Push a chunk to the next workers.
- * @param {Object} chunk the chunk to push
- */
- push: function push(chunk) {
- this.emit("data", chunk);
- },
- /**
- * End the stream.
- * @return {Boolean} true if this call ended the worker, false otherwise.
- */
- end: function end() {
- if (this.isFinished) {
- return false;
- }
- this.flush();
- try {
- this.emit("end");
- this.cleanUp();
- this.isFinished = true;
- } catch (e) {
- this.emit("error", e);
- }
- return true;
- },
- /**
- * End the stream with an error.
- * @param {Error} e the error which caused the premature end.
- * @return {Boolean} true if this call ended the worker with an error, false otherwise.
- */
- error: function error(e) {
- if (this.isFinished) {
- return false;
- }
- if (this.isPaused) {
- this.generatedError = e;
- } else {
- this.isFinished = true;
- this.emit("error", e); // in the workers chain exploded in the middle of the chain,
- // the error event will go downward but we also need to notify
- // workers upward that there has been an error.
- if (this.previous) {
- this.previous.error(e);
- }
- this.cleanUp();
- }
- return true;
- },
- /**
- * Add a callback on an event.
- * @param {String} name the name of the event (data, end, error)
- * @param {Function} listener the function to call when the event is triggered
- * @return {GenericWorker} the current object for chainability
- */
- on: function on(name, listener) {
- this._listeners[name].push(listener);
- return this;
- },
- /**
- * Clean any references when a worker is ending.
- */
- cleanUp: function cleanUp() {
- this.streamInfo = this.generatedError = this.extraStreamInfo = null;
- this._listeners = [];
- },
- /**
- * Trigger an event. This will call registered callback with the provided arg.
- * @param {String} name the name of the event (data, end, error)
- * @param {Object} arg the argument to call the callback with.
- */
- emit: function emit(name, arg) {
- if (this._listeners[name]) {
- for (var i = 0; i < this._listeners[name].length; i++) {
- this._listeners[name][i].call(this, arg);
- }
- }
- },
- /**
- * Chain a worker with an other.
- * @param {Worker} next the worker receiving events from the current one.
- * @return {worker} the next worker for chainability
- */
- pipe: function pipe(next) {
- return next.registerPrevious(this);
- },
- /**
- * Same as `pipe` in the other direction.
- * Using an API with `pipe(next)` is very easy.
- * Implementing the API with the point of view of the next one registering
- * a source is easier, see the ZipFileWorker.
- * @param {Worker} previous the previous worker, sending events to this one
- * @return {Worker} the current worker for chainability
- */
- registerPrevious: function registerPrevious(previous) {
- if (this.isLocked) {
- throw new Error("The stream '" + this + "' has already been used.");
- } // sharing the streamInfo...
- this.streamInfo = previous.streamInfo; // ... and adding our own bits
- this.mergeStreamInfo();
- this.previous = previous;
- var self = this;
- previous.on('data', function (chunk) {
- self.processChunk(chunk);
- });
- previous.on('end', function () {
- self.end();
- });
- previous.on('error', function (e) {
- self.error(e);
- });
- return this;
- },
- /**
- * Pause the stream so it doesn't send events anymore.
- * @return {Boolean} true if this call paused the worker, false otherwise.
- */
- pause: function pause() {
- if (this.isPaused || this.isFinished) {
- return false;
- }
- this.isPaused = true;
- if (this.previous) {
- this.previous.pause();
- }
- return true;
- },
- /**
- * Resume a paused stream.
- * @return {Boolean} true if this call resumed the worker, false otherwise.
- */
- resume: function resume() {
- if (!this.isPaused || this.isFinished) {
- return false;
- }
- this.isPaused = false; // if true, the worker tried to resume but failed
- var withError = false;
- if (this.generatedError) {
- this.error(this.generatedError);
- withError = true;
- }
- if (this.previous) {
- this.previous.resume();
- }
- return !withError;
- },
- /**
- * Flush any remaining bytes as the stream is ending.
- */
- flush: function flush() {},
- /**
- * Process a chunk. This is usually the method overridden.
- * @param {Object} chunk the chunk to process.
- */
- processChunk: function processChunk(chunk) {
- this.push(chunk);
- },
- /**
- * Add a key/value to be added in the workers chain streamInfo once activated.
- * @param {String} key the key to use
- * @param {Object} value the associated value
- * @return {Worker} the current worker for chainability
- */
- withStreamInfo: function withStreamInfo(key, value) {
- this.extraStreamInfo[key] = value;
- this.mergeStreamInfo();
- return this;
- },
- /**
- * Merge this worker's streamInfo into the chain's streamInfo.
- */
- mergeStreamInfo: function mergeStreamInfo() {
- for (var key in this.extraStreamInfo) {
- if (!this.extraStreamInfo.hasOwnProperty(key)) {
- continue;
- }
- this.streamInfo[key] = this.extraStreamInfo[key];
- }
- },
- /**
- * Lock the stream to prevent further updates on the workers chain.
- * After calling this method, all calls to pipe will fail.
- */
- lock: function lock() {
- if (this.isLocked) {
- throw new Error("The stream '" + this + "' has already been used.");
- }
- this.isLocked = true;
- if (this.previous) {
- this.previous.lock();
- }
- },
- /**
- *
- * Pretty print the workers chain.
- */
- toString: function toString() {
- var me = "Worker " + this.name;
- if (this.previous) {
- return this.previous + " -> " + me;
- } else {
- return me;
- }
- }
- };
- module.exports = GenericWorker;
- },{}],309:[function(require,module,exports){
- (function (Buffer){
- 'use strict';
- var utils = require('../utils');
- var ConvertWorker = require('./ConvertWorker');
- var GenericWorker = require('./GenericWorker');
- var base64 = require('../base64');
- var support = require("../support");
- var external = require("../external");
- var NodejsStreamOutputAdapter = null;
- if (support.nodestream) {
- try {
- NodejsStreamOutputAdapter = require('../nodejs/NodejsStreamOutputAdapter');
- } catch (e) {}
- }
- /**
- * Apply the final transformation of the data. If the user wants a Blob for
- * example, it's easier to work with an U8intArray and finally do the
- * ArrayBuffer/Blob conversion.
- * @param {String} type the name of the final type
- * @param {String|Uint8Array|Buffer} content the content to transform
- * @param {String} mimeType the mime type of the content, if applicable.
- * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the content in the right format.
- */
- function transformZipOutput(type, content, mimeType) {
- switch (type) {
- case "blob":
- return utils.newBlob(utils.transformTo("arraybuffer", content), mimeType);
- case "base64":
- return base64.encode(content);
- default:
- return utils.transformTo(type, content);
- }
- }
- /**
- * Concatenate an array of data of the given type.
- * @param {String} type the type of the data in the given array.
- * @param {Array} dataArray the array containing the data chunks to concatenate
- * @return {String|Uint8Array|Buffer} the concatenated data
- * @throws Error if the asked type is unsupported
- */
- function concat(type, dataArray) {
- var i,
- index = 0,
- res = null,
- totalLength = 0;
- for (i = 0; i < dataArray.length; i++) {
- totalLength += dataArray[i].length;
- }
- switch (type) {
- case "string":
- return dataArray.join("");
- case "array":
- return Array.prototype.concat.apply([], dataArray);
- case "uint8array":
- res = new Uint8Array(totalLength);
- for (i = 0; i < dataArray.length; i++) {
- res.set(dataArray[i], index);
- index += dataArray[i].length;
- }
- return res;
- case "nodebuffer":
- return Buffer.concat(dataArray);
- default:
- throw new Error("concat : unsupported type '" + type + "'");
- }
- }
- /**
- * Listen a StreamHelper, accumulate its content and concatenate it into a
- * complete block.
- * @param {StreamHelper} helper the helper to use.
- * @param {Function} updateCallback a callback called on each update. Called
- * with one arg :
- * - the metadata linked to the update received.
- * @return Promise the promise for the accumulation.
- */
- function _accumulate(helper, updateCallback) {
- return new external.Promise(function (resolve, reject) {
- var dataArray = [];
- var chunkType = helper._internalType,
- resultType = helper._outputType,
- mimeType = helper._mimeType;
- helper.on('data', function (data, meta) {
- dataArray.push(data);
- if (updateCallback) {
- updateCallback(meta);
- }
- }).on('error', function (err) {
- dataArray = [];
- reject(err);
- }).on('end', function () {
- try {
- var result = transformZipOutput(resultType, concat(chunkType, dataArray), mimeType);
- resolve(result);
- } catch (e) {
- reject(e);
- }
- dataArray = [];
- }).resume();
- });
- }
- /**
- * An helper to easily use workers outside of JSZip.
- * @constructor
- * @param {Worker} worker the worker to wrap
- * @param {String} outputType the type of data expected by the use
- * @param {String} mimeType the mime type of the content, if applicable.
- */
- function StreamHelper(worker, outputType, mimeType) {
- var internalType = outputType;
- switch (outputType) {
- case "blob":
- case "arraybuffer":
- internalType = "uint8array";
- break;
- case "base64":
- internalType = "string";
- break;
- }
- try {
- // the type used internally
- this._internalType = internalType; // the type used to output results
- this._outputType = outputType; // the mime type
- this._mimeType = mimeType;
- utils.checkSupport(internalType);
- this._worker = worker.pipe(new ConvertWorker(internalType)); // the last workers can be rewired without issues but we need to
- // prevent any updates on previous workers.
- worker.lock();
- } catch (e) {
- this._worker = new GenericWorker("error");
- this._worker.error(e);
- }
- }
- StreamHelper.prototype = {
- /**
- * Listen a StreamHelper, accumulate its content and concatenate it into a
- * complete block.
- * @param {Function} updateCb the update callback.
- * @return Promise the promise for the accumulation.
- */
- accumulate: function accumulate(updateCb) {
- return _accumulate(this, updateCb);
- },
- /**
- * Add a listener on an event triggered on a stream.
- * @param {String} evt the name of the event
- * @param {Function} fn the listener
- * @return {StreamHelper} the current helper.
- */
- on: function on(evt, fn) {
- var self = this;
- if (evt === "data") {
- this._worker.on(evt, function (chunk) {
- fn.call(self, chunk.data, chunk.meta);
- });
- } else {
- this._worker.on(evt, function () {
- utils.delay(fn, arguments, self);
- });
- }
- return this;
- },
- /**
- * Resume the flow of chunks.
- * @return {StreamHelper} the current helper.
- */
- resume: function resume() {
- utils.delay(this._worker.resume, [], this._worker);
- return this;
- },
- /**
- * Pause the flow of chunks.
- * @return {StreamHelper} the current helper.
- */
- pause: function pause() {
- this._worker.pause();
- return this;
- },
- /**
- * Return a nodejs stream for this helper.
- * @param {Function} updateCb the update callback.
- * @return {NodejsStreamOutputAdapter} the nodejs stream.
- */
- toNodejsStream: function toNodejsStream(updateCb) {
- utils.checkSupport("nodestream");
- if (this._outputType !== "nodebuffer") {
- // an object stream containing blob/arraybuffer/uint8array/string
- // is strange and I don't know if it would be useful.
- // I you find this comment and have a good usecase, please open a
- // bug report !
- throw new Error(this._outputType + " is not supported by this method");
- }
- return new NodejsStreamOutputAdapter(this, {
- objectMode: this._outputType !== "nodebuffer"
- }, updateCb);
- }
- };
- module.exports = StreamHelper;
- }).call(this,require("buffer").Buffer)
- },{"../base64":281,"../external":286,"../nodejs/NodejsStreamOutputAdapter":293,"../support":310,"../utils":312,"./ConvertWorker":304,"./GenericWorker":308,"buffer":216}],310:[function(require,module,exports){
- (function (Buffer){
- 'use strict';
- exports.base64 = true;
- exports.array = true;
- exports.string = true;
- exports.arraybuffer = typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined";
- exports.nodebuffer = typeof Buffer !== "undefined"; // contains true if JSZip can read/generate Uint8Array, false otherwise.
- exports.uint8array = typeof Uint8Array !== "undefined";
- if (typeof ArrayBuffer === "undefined") {
- exports.blob = false;
- } else {
- var buffer = new ArrayBuffer(0);
- try {
- exports.blob = new Blob([buffer], {
- type: "application/zip"
- }).size === 0;
- } catch (e) {
- try {
- var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder;
- var builder = new Builder();
- builder.append(buffer);
- exports.blob = builder.getBlob('application/zip').size === 0;
- } catch (e) {
- exports.blob = false;
- }
- }
- }
- try {
- exports.nodestream = !!require('readable-stream').Readable;
- } catch (e) {
- exports.nodestream = false;
- }
- }).call(this,require("buffer").Buffer)
- },{"buffer":216,"readable-stream":296}],311:[function(require,module,exports){
- 'use strict';
- var utils = require('./utils');
- var support = require('./support');
- var nodejsUtils = require('./nodejsUtils');
- var GenericWorker = require('./stream/GenericWorker');
- /**
- * The following functions come from pako, from pako/lib/utils/strings
- * released under the MIT license, see pako https://github.com/nodeca/pako/
- */
- // Table with utf8 lengths (calculated by first byte of sequence)
- // Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,
- // because max possible codepoint is 0x10ffff
- var _utf8len = new Array(256);
- for (var i = 0; i < 256; i++) {
- _utf8len[i] = i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1;
- }
- _utf8len[254] = _utf8len[254] = 1; // Invalid sequence start
- // convert string to array (typed, when possible)
- var string2buf = function string2buf(str) {
- var buf,
- c,
- c2,
- m_pos,
- i,
- str_len = str.length,
- buf_len = 0; // count binary size
- for (m_pos = 0; m_pos < str_len; m_pos++) {
- c = str.charCodeAt(m_pos);
- if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) {
- c2 = str.charCodeAt(m_pos + 1);
- if ((c2 & 0xfc00) === 0xdc00) {
- c = 0x10000 + (c - 0xd800 << 10) + (c2 - 0xdc00);
- m_pos++;
- }
- }
- buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;
- } // allocate buffer
- if (support.uint8array) {
- buf = new Uint8Array(buf_len);
- } else {
- buf = new Array(buf_len);
- } // convert
- for (i = 0, m_pos = 0; i < buf_len; m_pos++) {
- c = str.charCodeAt(m_pos);
- if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) {
- c2 = str.charCodeAt(m_pos + 1);
- if ((c2 & 0xfc00) === 0xdc00) {
- c = 0x10000 + (c - 0xd800 << 10) + (c2 - 0xdc00);
- m_pos++;
- }
- }
- if (c < 0x80) {
- /* one byte */
- buf[i++] = c;
- } else if (c < 0x800) {
- /* two bytes */
- buf[i++] = 0xC0 | c >>> 6;
- buf[i++] = 0x80 | c & 0x3f;
- } else if (c < 0x10000) {
- /* three bytes */
- buf[i++] = 0xE0 | c >>> 12;
- buf[i++] = 0x80 | c >>> 6 & 0x3f;
- buf[i++] = 0x80 | c & 0x3f;
- } else {
- /* four bytes */
- buf[i++] = 0xf0 | c >>> 18;
- buf[i++] = 0x80 | c >>> 12 & 0x3f;
- buf[i++] = 0x80 | c >>> 6 & 0x3f;
- buf[i++] = 0x80 | c & 0x3f;
- }
- }
- return buf;
- }; // Calculate max possible position in utf8 buffer,
- // that will not break sequence. If that's not possible
- // - (very small limits) return max size as is.
- //
- // buf[] - utf8 bytes array
- // max - length limit (mandatory);
- var utf8border = function utf8border(buf, max) {
- var pos;
- max = max || buf.length;
- if (max > buf.length) {
- max = buf.length;
- } // go back from last position, until start of sequence found
- pos = max - 1;
- while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) {
- pos--;
- } // Fuckup - very small and broken sequence,
- // return max, because we should return something anyway.
- if (pos < 0) {
- return max;
- } // If we came to start of buffer - that means vuffer is too small,
- // return max too.
- if (pos === 0) {
- return max;
- }
- return pos + _utf8len[buf[pos]] > max ? pos : max;
- }; // convert array to string
- var buf2string = function buf2string(buf) {
- var str, i, out, c, c_len;
- var len = buf.length; // Reserve max possible length (2 words per char)
- // NB: by unknown reasons, Array is significantly faster for
- // String.fromCharCode.apply than Uint16Array.
- var utf16buf = new Array(len * 2);
- for (out = 0, i = 0; i < len;) {
- c = buf[i++]; // quick process ascii
- if (c < 0x80) {
- utf16buf[out++] = c;
- continue;
- }
- c_len = _utf8len[c]; // skip 5 & 6 byte codes
- if (c_len > 4) {
- utf16buf[out++] = 0xfffd;
- i += c_len - 1;
- continue;
- } // apply mask on first byte
- c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; // join the rest
- while (c_len > 1 && i < len) {
- c = c << 6 | buf[i++] & 0x3f;
- c_len--;
- } // terminated by end of string?
- if (c_len > 1) {
- utf16buf[out++] = 0xfffd;
- continue;
- }
- if (c < 0x10000) {
- utf16buf[out++] = c;
- } else {
- c -= 0x10000;
- utf16buf[out++] = 0xd800 | c >> 10 & 0x3ff;
- utf16buf[out++] = 0xdc00 | c & 0x3ff;
- }
- } // shrinkBuf(utf16buf, out)
- if (utf16buf.length !== out) {
- if (utf16buf.subarray) {
- utf16buf = utf16buf.subarray(0, out);
- } else {
- utf16buf.length = out;
- }
- } // return String.fromCharCode.apply(null, utf16buf);
- return utils.applyFromCharCode(utf16buf);
- }; // That's all for the pako functions.
- /**
- * Transform a javascript string into an array (typed if possible) of bytes,
- * UTF-8 encoded.
- * @param {String} str the string to encode
- * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string.
- */
- exports.utf8encode = function utf8encode(str) {
- if (support.nodebuffer) {
- return nodejsUtils.newBufferFrom(str, "utf-8");
- }
- return string2buf(str);
- };
- /**
- * Transform a bytes array (or a representation) representing an UTF-8 encoded
- * string into a javascript string.
- * @param {Array|Uint8Array|Buffer} buf the data de decode
- * @return {String} the decoded string.
- */
- exports.utf8decode = function utf8decode(buf) {
- if (support.nodebuffer) {
- return utils.transformTo("nodebuffer", buf).toString("utf-8");
- }
- buf = utils.transformTo(support.uint8array ? "uint8array" : "array", buf);
- return buf2string(buf);
- };
- /**
- * A worker to decode utf8 encoded binary chunks into string chunks.
- * @constructor
- */
- function Utf8DecodeWorker() {
- GenericWorker.call(this, "utf-8 decode"); // the last bytes if a chunk didn't end with a complete codepoint.
- this.leftOver = null;
- }
- utils.inherits(Utf8DecodeWorker, GenericWorker);
- /**
- * @see GenericWorker.processChunk
- */
- Utf8DecodeWorker.prototype.processChunk = function (chunk) {
- var data = utils.transformTo(support.uint8array ? "uint8array" : "array", chunk.data); // 1st step, re-use what's left of the previous chunk
- if (this.leftOver && this.leftOver.length) {
- if (support.uint8array) {
- var previousData = data;
- data = new Uint8Array(previousData.length + this.leftOver.length);
- data.set(this.leftOver, 0);
- data.set(previousData, this.leftOver.length);
- } else {
- data = this.leftOver.concat(data);
- }
- this.leftOver = null;
- }
- var nextBoundary = utf8border(data);
- var usableData = data;
- if (nextBoundary !== data.length) {
- if (support.uint8array) {
- usableData = data.subarray(0, nextBoundary);
- this.leftOver = data.subarray(nextBoundary, data.length);
- } else {
- usableData = data.slice(0, nextBoundary);
- this.leftOver = data.slice(nextBoundary, data.length);
- }
- }
- this.push({
- data: exports.utf8decode(usableData),
- meta: chunk.meta
- });
- };
- /**
- * @see GenericWorker.flush
- */
- Utf8DecodeWorker.prototype.flush = function () {
- if (this.leftOver && this.leftOver.length) {
- this.push({
- data: exports.utf8decode(this.leftOver),
- meta: {}
- });
- this.leftOver = null;
- }
- };
- exports.Utf8DecodeWorker = Utf8DecodeWorker;
- /**
- * A worker to endcode string chunks into utf8 encoded binary chunks.
- * @constructor
- */
- function Utf8EncodeWorker() {
- GenericWorker.call(this, "utf-8 encode");
- }
- utils.inherits(Utf8EncodeWorker, GenericWorker);
- /**
- * @see GenericWorker.processChunk
- */
- Utf8EncodeWorker.prototype.processChunk = function (chunk) {
- this.push({
- data: exports.utf8encode(chunk.data),
- meta: chunk.meta
- });
- };
- exports.Utf8EncodeWorker = Utf8EncodeWorker;
- },{"./nodejsUtils":294,"./stream/GenericWorker":308,"./support":310,"./utils":312}],312:[function(require,module,exports){
- 'use strict';
- var support = require('./support');
- var base64 = require('./base64');
- var nodejsUtils = require('./nodejsUtils');
- var setImmediate = require('set-immediate-shim');
- var external = require("./external");
- /**
- * Convert a string that pass as a "binary string": it should represent a byte
- * array but may have > 255 char codes. Be sure to take only the first byte
- * and returns the byte array.
- * @param {String} str the string to transform.
- * @return {Array|Uint8Array} the string in a binary format.
- */
- function string2binary(str) {
- var result = null;
- if (support.uint8array) {
- result = new Uint8Array(str.length);
- } else {
- result = new Array(str.length);
- }
- return stringToArrayLike(str, result);
- }
- /**
- * Create a new blob with the given content and the given type.
- * @param {String|ArrayBuffer} part the content to put in the blob. DO NOT use
- * an Uint8Array because the stock browser of android 4 won't accept it (it
- * will be silently converted to a string, "[object Uint8Array]").
- *
- * Use only ONE part to build the blob to avoid a memory leak in IE11 / Edge:
- * when a large amount of Array is used to create the Blob, the amount of
- * memory consumed is nearly 100 times the original data amount.
- *
- * @param {String} type the mime type of the blob.
- * @return {Blob} the created blob.
- */
- exports.newBlob = function (part, type) {
- exports.checkSupport("blob");
- try {
- // Blob constructor
- return new Blob([part], {
- type: type
- });
- } catch (e) {
- try {
- // deprecated, browser only, old way
- var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder;
- var builder = new Builder();
- builder.append(part);
- return builder.getBlob(type);
- } catch (e) {
- // well, fuck ?!
- throw new Error("Bug : can't construct the Blob.");
- }
- }
- };
- /**
- * The identity function.
- * @param {Object} input the input.
- * @return {Object} the same input.
- */
- function identity(input) {
- return input;
- }
- /**
- * Fill in an array with a string.
- * @param {String} str the string to use.
- * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated).
- * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array.
- */
- function stringToArrayLike(str, array) {
- for (var i = 0; i < str.length; ++i) {
- array[i] = str.charCodeAt(i) & 0xFF;
- }
- return array;
- }
- /**
- * An helper for the function arrayLikeToString.
- * This contains static information and functions that
- * can be optimized by the browser JIT compiler.
- */
- var arrayToStringHelper = {
- /**
- * Transform an array of int into a string, chunk by chunk.
- * See the performances notes on arrayLikeToString.
- * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.
- * @param {String} type the type of the array.
- * @param {Integer} chunk the chunk size.
- * @return {String} the resulting string.
- * @throws Error if the chunk is too big for the stack.
- */
- stringifyByChunk: function stringifyByChunk(array, type, chunk) {
- var result = [],
- k = 0,
- len = array.length; // shortcut
- if (len <= chunk) {
- return String.fromCharCode.apply(null, array);
- }
- while (k < len) {
- if (type === "array" || type === "nodebuffer") {
- result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len))));
- } else {
- result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len))));
- }
- k += chunk;
- }
- return result.join("");
- },
- /**
- * Call String.fromCharCode on every item in the array.
- * This is the naive implementation, which generate A LOT of intermediate string.
- * This should be used when everything else fail.
- * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.
- * @return {String} the result.
- */
- stringifyByChar: function stringifyByChar(array) {
- var resultStr = "";
- for (var i = 0; i < array.length; i++) {
- resultStr += String.fromCharCode(array[i]);
- }
- return resultStr;
- },
- applyCanBeUsed: {
- /**
- * true if the browser accepts to use String.fromCharCode on Uint8Array
- */
- uint8array: function () {
- try {
- return support.uint8array && String.fromCharCode.apply(null, new Uint8Array(1)).length === 1;
- } catch (e) {
- return false;
- }
- }(),
- /**
- * true if the browser accepts to use String.fromCharCode on nodejs Buffer.
- */
- nodebuffer: function () {
- try {
- return support.nodebuffer && String.fromCharCode.apply(null, nodejsUtils.allocBuffer(1)).length === 1;
- } catch (e) {
- return false;
- }
- }()
- }
- };
- /**
- * Transform an array-like object to a string.
- * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.
- * @return {String} the result.
- */
- function arrayLikeToString(array) {
- // Performances notes :
- // --------------------
- // String.fromCharCode.apply(null, array) is the fastest, see
- // see http://jsperf.com/converting-a-uint8array-to-a-string/2
- // but the stack is limited (and we can get huge arrays !).
- //
- // result += String.fromCharCode(array[i]); generate too many strings !
- //
- // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2
- // TODO : we now have workers that split the work. Do we still need that ?
- var chunk = 65536,
- type = exports.getTypeOf(array),
- canUseApply = true;
- if (type === "uint8array") {
- canUseApply = arrayToStringHelper.applyCanBeUsed.uint8array;
- } else if (type === "nodebuffer") {
- canUseApply = arrayToStringHelper.applyCanBeUsed.nodebuffer;
- }
- if (canUseApply) {
- while (chunk > 1) {
- try {
- return arrayToStringHelper.stringifyByChunk(array, type, chunk);
- } catch (e) {
- chunk = Math.floor(chunk / 2);
- }
- }
- } // no apply or chunk error : slow and painful algorithm
- // default browser on android 4.*
- return arrayToStringHelper.stringifyByChar(array);
- }
- exports.applyFromCharCode = arrayLikeToString;
- /**
- * Copy the data from an array-like to an other array-like.
- * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array.
- * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated.
- * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array.
- */
- function arrayLikeToArrayLike(arrayFrom, arrayTo) {
- for (var i = 0; i < arrayFrom.length; i++) {
- arrayTo[i] = arrayFrom[i];
- }
- return arrayTo;
- } // a matrix containing functions to transform everything into everything.
- var transform = {}; // string to ?
- transform["string"] = {
- "string": identity,
- "array": function array(input) {
- return stringToArrayLike(input, new Array(input.length));
- },
- "arraybuffer": function arraybuffer(input) {
- return transform["string"]["uint8array"](input).buffer;
- },
- "uint8array": function uint8array(input) {
- return stringToArrayLike(input, new Uint8Array(input.length));
- },
- "nodebuffer": function nodebuffer(input) {
- return stringToArrayLike(input, nodejsUtils.allocBuffer(input.length));
- }
- }; // array to ?
- transform["array"] = {
- "string": arrayLikeToString,
- "array": identity,
- "arraybuffer": function arraybuffer(input) {
- return new Uint8Array(input).buffer;
- },
- "uint8array": function uint8array(input) {
- return new Uint8Array(input);
- },
- "nodebuffer": function nodebuffer(input) {
- return nodejsUtils.newBufferFrom(input);
- }
- }; // arraybuffer to ?
- transform["arraybuffer"] = {
- "string": function string(input) {
- return arrayLikeToString(new Uint8Array(input));
- },
- "array": function array(input) {
- return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength));
- },
- "arraybuffer": identity,
- "uint8array": function uint8array(input) {
- return new Uint8Array(input);
- },
- "nodebuffer": function nodebuffer(input) {
- return nodejsUtils.newBufferFrom(new Uint8Array(input));
- }
- }; // uint8array to ?
- transform["uint8array"] = {
- "string": arrayLikeToString,
- "array": function array(input) {
- return arrayLikeToArrayLike(input, new Array(input.length));
- },
- "arraybuffer": function arraybuffer(input) {
- return input.buffer;
- },
- "uint8array": identity,
- "nodebuffer": function nodebuffer(input) {
- return nodejsUtils.newBufferFrom(input);
- }
- }; // nodebuffer to ?
- transform["nodebuffer"] = {
- "string": arrayLikeToString,
- "array": function array(input) {
- return arrayLikeToArrayLike(input, new Array(input.length));
- },
- "arraybuffer": function arraybuffer(input) {
- return transform["nodebuffer"]["uint8array"](input).buffer;
- },
- "uint8array": function uint8array(input) {
- return arrayLikeToArrayLike(input, new Uint8Array(input.length));
- },
- "nodebuffer": identity
- };
- /**
- * Transform an input into any type.
- * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer.
- * If no output type is specified, the unmodified input will be returned.
- * @param {String} outputType the output type.
- * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert.
- * @throws {Error} an Error if the browser doesn't support the requested output type.
- */
- exports.transformTo = function (outputType, input) {
- if (!input) {
- // undefined, null, etc
- // an empty string won't harm.
- input = "";
- }
- if (!outputType) {
- return input;
- }
- exports.checkSupport(outputType);
- var inputType = exports.getTypeOf(input);
- var result = transform[inputType][outputType](input);
- return result;
- };
- /**
- * Return the type of the input.
- * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer.
- * @param {Object} input the input to identify.
- * @return {String} the (lowercase) type of the input.
- */
- exports.getTypeOf = function (input) {
- if (typeof input === "string") {
- return "string";
- }
- if (Object.prototype.toString.call(input) === "[object Array]") {
- return "array";
- }
- if (support.nodebuffer && nodejsUtils.isBuffer(input)) {
- return "nodebuffer";
- }
- if (support.uint8array && input instanceof Uint8Array) {
- return "uint8array";
- }
- if (support.arraybuffer && input instanceof ArrayBuffer) {
- return "arraybuffer";
- }
- };
- /**
- * Throw an exception if the type is not supported.
- * @param {String} type the type to check.
- * @throws {Error} an Error if the browser doesn't support the requested type.
- */
- exports.checkSupport = function (type) {
- var supported = support[type.toLowerCase()];
- if (!supported) {
- throw new Error(type + " is not supported by this platform");
- }
- };
- exports.MAX_VALUE_16BITS = 65535;
- exports.MAX_VALUE_32BITS = -1; // well, "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" is parsed as -1
- /**
- * Prettify a string read as binary.
- * @param {string} str the string to prettify.
- * @return {string} a pretty string.
- */
- exports.pretty = function (str) {
- var res = '',
- code,
- i;
- for (i = 0; i < (str || "").length; i++) {
- code = str.charCodeAt(i);
- res += '\\x' + (code < 16 ? "0" : "") + code.toString(16).toUpperCase();
- }
- return res;
- };
- /**
- * Defer the call of a function.
- * @param {Function} callback the function to call asynchronously.
- * @param {Array} args the arguments to give to the callback.
- */
- exports.delay = function (callback, args, self) {
- setImmediate(function () {
- callback.apply(self || null, args || []);
- });
- };
- /**
- * Extends a prototype with an other, without calling a constructor with
- * side effects. Inspired by nodejs' `utils.inherits`
- * @param {Function} ctor the constructor to augment
- * @param {Function} superCtor the parent constructor to use
- */
- exports.inherits = function (ctor, superCtor) {
- var Obj = function Obj() {};
- Obj.prototype = superCtor.prototype;
- ctor.prototype = new Obj();
- };
- /**
- * Merge the objects passed as parameters into a new one.
- * @private
- * @param {...Object} var_args All objects to merge.
- * @return {Object} a new object with the data of the others.
- */
- exports.extend = function () {
- var result = {},
- i,
- attr;
- for (i = 0; i < arguments.length; i++) {
- // arguments is not enumerable in some browsers
- for (attr in arguments[i]) {
- if (arguments[i].hasOwnProperty(attr) && typeof result[attr] === "undefined") {
- result[attr] = arguments[i][attr];
- }
- }
- }
- return result;
- };
- /**
- * Transform arbitrary content into a Promise.
- * @param {String} name a name for the content being processed.
- * @param {Object} inputData the content to process.
- * @param {Boolean} isBinary true if the content is not an unicode string
- * @param {Boolean} isOptimizedBinaryString true if the string content only has one byte per character.
- * @param {Boolean} isBase64 true if the string content is encoded with base64.
- * @return {Promise} a promise in a format usable by JSZip.
- */
- exports.prepareContent = function (name, inputData, isBinary, isOptimizedBinaryString, isBase64) {
- // if inputData is already a promise, this flatten it.
- var promise = external.Promise.resolve(inputData).then(function (data) {
- var isBlob = support.blob && (data instanceof Blob || ['[object File]', '[object Blob]'].indexOf(Object.prototype.toString.call(data)) !== -1);
- if (isBlob && typeof FileReader !== "undefined") {
- return new external.Promise(function (resolve, reject) {
- var reader = new FileReader();
- reader.onload = function (e) {
- resolve(e.target.result);
- };
- reader.onerror = function (e) {
- reject(e.target.error);
- };
- reader.readAsArrayBuffer(data);
- });
- } else {
- return data;
- }
- });
- return promise.then(function (data) {
- var dataType = exports.getTypeOf(data);
- if (!dataType) {
- return external.Promise.reject(new Error("Can't read the data of '" + name + "'. Is it " + "in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?"));
- } // special case : it's way easier to work with Uint8Array than with ArrayBuffer
- if (dataType === "arraybuffer") {
- data = exports.transformTo("uint8array", data);
- } else if (dataType === "string") {
- if (isBase64) {
- data = base64.decode(data);
- } else if (isBinary) {
- // optimizedBinaryString === true means that the file has already been filtered with a 0xFF mask
- if (isOptimizedBinaryString !== true) {
- // this is a string, not in a base64 format.
- // Be sure that this is a correct "binary string"
- data = string2binary(data);
- }
- }
- }
- return data;
- });
- };
- },{"./base64":281,"./external":286,"./nodejsUtils":294,"./support":310,"set-immediate-shim":387}],313:[function(require,module,exports){
- 'use strict';
- var readerFor = require('./reader/readerFor');
- var utils = require('./utils');
- var sig = require('./signature');
- var ZipEntry = require('./zipEntry');
- var utf8 = require('./utf8');
- var support = require('./support'); // class ZipEntries {{{
- /**
- * All the entries in the zip file.
- * @constructor
- * @param {Object} loadOptions Options for loading the stream.
- */
- function ZipEntries(loadOptions) {
- this.files = [];
- this.loadOptions = loadOptions;
- }
- ZipEntries.prototype = {
- /**
- * Check that the reader is on the specified signature.
- * @param {string} expectedSignature the expected signature.
- * @throws {Error} if it is an other signature.
- */
- checkSignature: function checkSignature(expectedSignature) {
- if (!this.reader.readAndCheckSignature(expectedSignature)) {
- this.reader.index -= 4;
- var signature = this.reader.readString(4);
- throw new Error("Corrupted zip or bug: unexpected signature " + "(" + utils.pretty(signature) + ", expected " + utils.pretty(expectedSignature) + ")");
- }
- },
- /**
- * Check if the given signature is at the given index.
- * @param {number} askedIndex the index to check.
- * @param {string} expectedSignature the signature to expect.
- * @return {boolean} true if the signature is here, false otherwise.
- */
- isSignature: function isSignature(askedIndex, expectedSignature) {
- var currentIndex = this.reader.index;
- this.reader.setIndex(askedIndex);
- var signature = this.reader.readString(4);
- var result = signature === expectedSignature;
- this.reader.setIndex(currentIndex);
- return result;
- },
- /**
- * Read the end of the central directory.
- */
- readBlockEndOfCentral: function readBlockEndOfCentral() {
- this.diskNumber = this.reader.readInt(2);
- this.diskWithCentralDirStart = this.reader.readInt(2);
- this.centralDirRecordsOnThisDisk = this.reader.readInt(2);
- this.centralDirRecords = this.reader.readInt(2);
- this.centralDirSize = this.reader.readInt(4);
- this.centralDirOffset = this.reader.readInt(4);
- this.zipCommentLength = this.reader.readInt(2); // warning : the encoding depends of the system locale
- // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded.
- // On a windows machine, this field is encoded with the localized windows code page.
- var zipComment = this.reader.readData(this.zipCommentLength);
- var decodeParamType = support.uint8array ? "uint8array" : "array"; // To get consistent behavior with the generation part, we will assume that
- // this is utf8 encoded unless specified otherwise.
- var decodeContent = utils.transformTo(decodeParamType, zipComment);
- this.zipComment = this.loadOptions.decodeFileName(decodeContent);
- },
- /**
- * Read the end of the Zip 64 central directory.
- * Not merged with the method readEndOfCentral :
- * The end of central can coexist with its Zip64 brother,
- * I don't want to read the wrong number of bytes !
- */
- readBlockZip64EndOfCentral: function readBlockZip64EndOfCentral() {
- this.zip64EndOfCentralSize = this.reader.readInt(8);
- this.reader.skip(4); // this.versionMadeBy = this.reader.readString(2);
- // this.versionNeeded = this.reader.readInt(2);
- this.diskNumber = this.reader.readInt(4);
- this.diskWithCentralDirStart = this.reader.readInt(4);
- this.centralDirRecordsOnThisDisk = this.reader.readInt(8);
- this.centralDirRecords = this.reader.readInt(8);
- this.centralDirSize = this.reader.readInt(8);
- this.centralDirOffset = this.reader.readInt(8);
- this.zip64ExtensibleData = {};
- var extraDataSize = this.zip64EndOfCentralSize - 44,
- index = 0,
- extraFieldId,
- extraFieldLength,
- extraFieldValue;
- while (index < extraDataSize) {
- extraFieldId = this.reader.readInt(2);
- extraFieldLength = this.reader.readInt(4);
- extraFieldValue = this.reader.readData(extraFieldLength);
- this.zip64ExtensibleData[extraFieldId] = {
- id: extraFieldId,
- length: extraFieldLength,
- value: extraFieldValue
- };
- }
- },
- /**
- * Read the end of the Zip 64 central directory locator.
- */
- readBlockZip64EndOfCentralLocator: function readBlockZip64EndOfCentralLocator() {
- this.diskWithZip64CentralDirStart = this.reader.readInt(4);
- this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8);
- this.disksCount = this.reader.readInt(4);
- if (this.disksCount > 1) {
- throw new Error("Multi-volumes zip are not supported");
- }
- },
- /**
- * Read the local files, based on the offset read in the central part.
- */
- readLocalFiles: function readLocalFiles() {
- var i, file;
- for (i = 0; i < this.files.length; i++) {
- file = this.files[i];
- this.reader.setIndex(file.localHeaderOffset);
- this.checkSignature(sig.LOCAL_FILE_HEADER);
- file.readLocalPart(this.reader);
- file.handleUTF8();
- file.processAttributes();
- }
- },
- /**
- * Read the central directory.
- */
- readCentralDir: function readCentralDir() {
- var file;
- this.reader.setIndex(this.centralDirOffset);
- while (this.reader.readAndCheckSignature(sig.CENTRAL_FILE_HEADER)) {
- file = new ZipEntry({
- zip64: this.zip64
- }, this.loadOptions);
- file.readCentralPart(this.reader);
- this.files.push(file);
- }
- if (this.centralDirRecords !== this.files.length) {
- if (this.centralDirRecords !== 0 && this.files.length === 0) {
- // We expected some records but couldn't find ANY.
- // This is really suspicious, as if something went wrong.
- throw new Error("Corrupted zip or bug: expected " + this.centralDirRecords + " records in central dir, got " + this.files.length);
- } else {// We found some records but not all.
- // Something is wrong but we got something for the user: no error here.
- // console.warn("expected", this.centralDirRecords, "records in central dir, got", this.files.length);
- }
- }
- },
- /**
- * Read the end of central directory.
- */
- readEndOfCentral: function readEndOfCentral() {
- var offset = this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END);
- if (offset < 0) {
- // Check if the content is a truncated zip or complete garbage.
- // A "LOCAL_FILE_HEADER" is not required at the beginning (auto
- // extractible zip for example) but it can give a good hint.
- // If an ajax request was used without responseType, we will also
- // get unreadable data.
- var isGarbage = !this.isSignature(0, sig.LOCAL_FILE_HEADER);
- if (isGarbage) {
- throw new Error("Can't find end of central directory : is this a zip file ? " + "If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html");
- } else {
- throw new Error("Corrupted zip: can't find end of central directory");
- }
- }
- this.reader.setIndex(offset);
- var endOfCentralDirOffset = offset;
- this.checkSignature(sig.CENTRAL_DIRECTORY_END);
- this.readBlockEndOfCentral();
- /* extract from the zip spec :
- 4) If one of the fields in the end of central directory
- record is too small to hold required data, the field
- should be set to -1 (0xFFFF or 0xFFFFFFFF) and the
- ZIP64 format record should be created.
- 5) The end of central directory record and the
- Zip64 end of central directory locator record must
- reside on the same disk when splitting or spanning
- an archive.
- */
- if (this.diskNumber === utils.MAX_VALUE_16BITS || this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || this.centralDirRecords === utils.MAX_VALUE_16BITS || this.centralDirSize === utils.MAX_VALUE_32BITS || this.centralDirOffset === utils.MAX_VALUE_32BITS) {
- this.zip64 = true;
- /*
- Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from
- the zip file can fit into a 32bits integer. This cannot be solved : JavaScript represents
- all numbers as 64-bit double precision IEEE 754 floating point numbers.
- So, we have 53bits for integers and bitwise operations treat everything as 32bits.
- see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators
- and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5
- */
- // should look for a zip64 EOCD locator
- offset = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);
- if (offset < 0) {
- throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator");
- }
- this.reader.setIndex(offset);
- this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);
- this.readBlockZip64EndOfCentralLocator(); // now the zip64 EOCD record
- if (!this.isSignature(this.relativeOffsetEndOfZip64CentralDir, sig.ZIP64_CENTRAL_DIRECTORY_END)) {
- // console.warn("ZIP64 end of central directory not where expected.");
- this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);
- if (this.relativeOffsetEndOfZip64CentralDir < 0) {
- throw new Error("Corrupted zip: can't find the ZIP64 end of central directory");
- }
- }
- this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir);
- this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);
- this.readBlockZip64EndOfCentral();
- }
- var expectedEndOfCentralDirOffset = this.centralDirOffset + this.centralDirSize;
- if (this.zip64) {
- expectedEndOfCentralDirOffset += 20; // end of central dir 64 locator
- expectedEndOfCentralDirOffset += 12
- /* should not include the leading 12 bytes */
- + this.zip64EndOfCentralSize;
- }
- var extraBytes = endOfCentralDirOffset - expectedEndOfCentralDirOffset;
- if (extraBytes > 0) {
- // console.warn(extraBytes, "extra bytes at beginning or within zipfile");
- if (this.isSignature(endOfCentralDirOffset, sig.CENTRAL_FILE_HEADER)) {// The offsets seem wrong, but we have something at the specified offset.
- // So… we keep it.
- } else {
- // the offset is wrong, update the "zero" of the reader
- // this happens if data has been prepended (crx files for example)
- this.reader.zero = extraBytes;
- }
- } else if (extraBytes < 0) {
- throw new Error("Corrupted zip: missing " + Math.abs(extraBytes) + " bytes.");
- }
- },
- prepareReader: function prepareReader(data) {
- this.reader = readerFor(data);
- },
- /**
- * Read a zip file and create ZipEntries.
- * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file.
- */
- load: function load(data) {
- this.prepareReader(data);
- this.readEndOfCentral();
- this.readCentralDir();
- this.readLocalFiles();
- }
- }; // }}} end of ZipEntries
- module.exports = ZipEntries;
- },{"./reader/readerFor":302,"./signature":303,"./support":310,"./utf8":311,"./utils":312,"./zipEntry":314}],314:[function(require,module,exports){
- 'use strict';
- var readerFor = require('./reader/readerFor');
- var utils = require('./utils');
- var CompressedObject = require('./compressedObject');
- var crc32fn = require('./crc32');
- var utf8 = require('./utf8');
- var compressions = require('./compressions');
- var support = require('./support');
- var MADE_BY_DOS = 0x00;
- var MADE_BY_UNIX = 0x03;
- /**
- * Find a compression registered in JSZip.
- * @param {string} compressionMethod the method magic to find.
- * @return {Object|null} the JSZip compression object, null if none found.
- */
- var findCompression = function findCompression(compressionMethod) {
- for (var method in compressions) {
- if (!compressions.hasOwnProperty(method)) {
- continue;
- }
- if (compressions[method].magic === compressionMethod) {
- return compressions[method];
- }
- }
- return null;
- }; // class ZipEntry {{{
- /**
- * An entry in the zip file.
- * @constructor
- * @param {Object} options Options of the current file.
- * @param {Object} loadOptions Options for loading the stream.
- */
- function ZipEntry(options, loadOptions) {
- this.options = options;
- this.loadOptions = loadOptions;
- }
- ZipEntry.prototype = {
- /**
- * say if the file is encrypted.
- * @return {boolean} true if the file is encrypted, false otherwise.
- */
- isEncrypted: function isEncrypted() {
- // bit 1 is set
- return (this.bitFlag & 0x0001) === 0x0001;
- },
- /**
- * say if the file has utf-8 filename/comment.
- * @return {boolean} true if the filename/comment is in utf-8, false otherwise.
- */
- useUTF8: function useUTF8() {
- // bit 11 is set
- return (this.bitFlag & 0x0800) === 0x0800;
- },
- /**
- * Read the local part of a zip file and add the info in this object.
- * @param {DataReader} reader the reader to use.
- */
- readLocalPart: function readLocalPart(reader) {
- var compression, localExtraFieldsLength; // we already know everything from the central dir !
- // If the central dir data are false, we are doomed.
- // On the bright side, the local part is scary : zip64, data descriptors, both, etc.
- // The less data we get here, the more reliable this should be.
- // Let's skip the whole header and dash to the data !
- reader.skip(22); // in some zip created on windows, the filename stored in the central dir contains \ instead of /.
- // Strangely, the filename here is OK.
- // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes
- // or APPNOTE#4.4.17.1, "All slashes MUST be forward slashes '/'") but there are a lot of bad zip generators...
- // Search "unzip mismatching "local" filename continuing with "central" filename version" on
- // the internet.
- //
- // I think I see the logic here : the central directory is used to display
- // content and the local directory is used to extract the files. Mixing / and \
- // may be used to display \ to windows users and use / when extracting the files.
- // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394
- this.fileNameLength = reader.readInt(2);
- localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir
- // the fileName is stored as binary data, the handleUTF8 method will take care of the encoding.
- this.fileName = reader.readData(this.fileNameLength);
- reader.skip(localExtraFieldsLength);
- if (this.compressedSize === -1 || this.uncompressedSize === -1) {
- throw new Error("Bug or corrupted zip : didn't get enough information from the central directory " + "(compressedSize === -1 || uncompressedSize === -1)");
- }
- compression = findCompression(this.compressionMethod);
- if (compression === null) {
- // no compression found
- throw new Error("Corrupted zip : compression " + utils.pretty(this.compressionMethod) + " unknown (inner file : " + utils.transformTo("string", this.fileName) + ")");
- }
- this.decompressed = new CompressedObject(this.compressedSize, this.uncompressedSize, this.crc32, compression, reader.readData(this.compressedSize));
- },
- /**
- * Read the central part of a zip file and add the info in this object.
- * @param {DataReader} reader the reader to use.
- */
- readCentralPart: function readCentralPart(reader) {
- this.versionMadeBy = reader.readInt(2);
- reader.skip(2); // this.versionNeeded = reader.readInt(2);
- this.bitFlag = reader.readInt(2);
- this.compressionMethod = reader.readString(2);
- this.date = reader.readDate();
- this.crc32 = reader.readInt(4);
- this.compressedSize = reader.readInt(4);
- this.uncompressedSize = reader.readInt(4);
- var fileNameLength = reader.readInt(2);
- this.extraFieldsLength = reader.readInt(2);
- this.fileCommentLength = reader.readInt(2);
- this.diskNumberStart = reader.readInt(2);
- this.internalFileAttributes = reader.readInt(2);
- this.externalFileAttributes = reader.readInt(4);
- this.localHeaderOffset = reader.readInt(4);
- if (this.isEncrypted()) {
- throw new Error("Encrypted zip are not supported");
- } // will be read in the local part, see the comments there
- reader.skip(fileNameLength);
- this.readExtraFields(reader);
- this.parseZIP64ExtraField(reader);
- this.fileComment = reader.readData(this.fileCommentLength);
- },
- /**
- * Parse the external file attributes and get the unix/dos permissions.
- */
- processAttributes: function processAttributes() {
- this.unixPermissions = null;
- this.dosPermissions = null;
- var madeBy = this.versionMadeBy >> 8; // Check if we have the DOS directory flag set.
- // We look for it in the DOS and UNIX permissions
- // but some unknown platform could set it as a compatibility flag.
- this.dir = this.externalFileAttributes & 0x0010 ? true : false;
- if (madeBy === MADE_BY_DOS) {
- // first 6 bits (0 to 5)
- this.dosPermissions = this.externalFileAttributes & 0x3F;
- }
- if (madeBy === MADE_BY_UNIX) {
- this.unixPermissions = this.externalFileAttributes >> 16 & 0xFFFF; // the octal permissions are in (this.unixPermissions & 0x01FF).toString(8);
- } // fail safe : if the name ends with a / it probably means a folder
- if (!this.dir && this.fileNameStr.slice(-1) === '/') {
- this.dir = true;
- }
- },
- /**
- * Parse the ZIP64 extra field and merge the info in the current ZipEntry.
- * @param {DataReader} reader the reader to use.
- */
- parseZIP64ExtraField: function parseZIP64ExtraField(reader) {
- if (!this.extraFields[0x0001]) {
- return;
- } // should be something, preparing the extra reader
- var extraReader = readerFor(this.extraFields[0x0001].value); // I really hope that these 64bits integer can fit in 32 bits integer, because js
- // won't let us have more.
- if (this.uncompressedSize === utils.MAX_VALUE_32BITS) {
- this.uncompressedSize = extraReader.readInt(8);
- }
- if (this.compressedSize === utils.MAX_VALUE_32BITS) {
- this.compressedSize = extraReader.readInt(8);
- }
- if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) {
- this.localHeaderOffset = extraReader.readInt(8);
- }
- if (this.diskNumberStart === utils.MAX_VALUE_32BITS) {
- this.diskNumberStart = extraReader.readInt(4);
- }
- },
- /**
- * Read the central part of a zip file and add the info in this object.
- * @param {DataReader} reader the reader to use.
- */
- readExtraFields: function readExtraFields(reader) {
- var end = reader.index + this.extraFieldsLength,
- extraFieldId,
- extraFieldLength,
- extraFieldValue;
- if (!this.extraFields) {
- this.extraFields = {};
- }
- while (reader.index + 4 < end) {
- extraFieldId = reader.readInt(2);
- extraFieldLength = reader.readInt(2);
- extraFieldValue = reader.readData(extraFieldLength);
- this.extraFields[extraFieldId] = {
- id: extraFieldId,
- length: extraFieldLength,
- value: extraFieldValue
- };
- }
- reader.setIndex(end);
- },
- /**
- * Apply an UTF8 transformation if needed.
- */
- handleUTF8: function handleUTF8() {
- var decodeParamType = support.uint8array ? "uint8array" : "array";
- if (this.useUTF8()) {
- this.fileNameStr = utf8.utf8decode(this.fileName);
- this.fileCommentStr = utf8.utf8decode(this.fileComment);
- } else {
- var upath = this.findExtraFieldUnicodePath();
- if (upath !== null) {
- this.fileNameStr = upath;
- } else {
- // ASCII text or unsupported code page
- var fileNameByteArray = utils.transformTo(decodeParamType, this.fileName);
- this.fileNameStr = this.loadOptions.decodeFileName(fileNameByteArray);
- }
- var ucomment = this.findExtraFieldUnicodeComment();
- if (ucomment !== null) {
- this.fileCommentStr = ucomment;
- } else {
- // ASCII text or unsupported code page
- var commentByteArray = utils.transformTo(decodeParamType, this.fileComment);
- this.fileCommentStr = this.loadOptions.decodeFileName(commentByteArray);
- }
- }
- },
- /**
- * Find the unicode path declared in the extra field, if any.
- * @return {String} the unicode path, null otherwise.
- */
- findExtraFieldUnicodePath: function findExtraFieldUnicodePath() {
- var upathField = this.extraFields[0x7075];
- if (upathField) {
- var extraReader = readerFor(upathField.value); // wrong version
- if (extraReader.readInt(1) !== 1) {
- return null;
- } // the crc of the filename changed, this field is out of date.
- if (crc32fn(this.fileName) !== extraReader.readInt(4)) {
- return null;
- }
- return utf8.utf8decode(extraReader.readData(upathField.length - 5));
- }
- return null;
- },
- /**
- * Find the unicode comment declared in the extra field, if any.
- * @return {String} the unicode comment, null otherwise.
- */
- findExtraFieldUnicodeComment: function findExtraFieldUnicodeComment() {
- var ucommentField = this.extraFields[0x6375];
- if (ucommentField) {
- var extraReader = readerFor(ucommentField.value); // wrong version
- if (extraReader.readInt(1) !== 1) {
- return null;
- } // the crc of the comment changed, this field is out of date.
- if (crc32fn(this.fileComment) !== extraReader.readInt(4)) {
- return null;
- }
- return utf8.utf8decode(extraReader.readData(ucommentField.length - 5));
- }
- return null;
- }
- };
- module.exports = ZipEntry;
- },{"./compressedObject":282,"./compressions":283,"./crc32":284,"./reader/readerFor":302,"./support":310,"./utf8":311,"./utils":312}],315:[function(require,module,exports){
- 'use strict';
- var StreamHelper = require('./stream/StreamHelper');
- var DataWorker = require('./stream/DataWorker');
- var utf8 = require('./utf8');
- var CompressedObject = require('./compressedObject');
- var GenericWorker = require('./stream/GenericWorker');
- /**
- * A simple object representing a file in the zip file.
- * @constructor
- * @param {string} name the name of the file
- * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data
- * @param {Object} options the options of the file
- */
- var ZipObject = function ZipObject(name, data, options) {
- this.name = name;
- this.dir = options.dir;
- this.date = options.date;
- this.comment = options.comment;
- this.unixPermissions = options.unixPermissions;
- this.dosPermissions = options.dosPermissions;
- this._data = data;
- this._dataBinary = options.binary; // keep only the compression
- this.options = {
- compression: options.compression,
- compressionOptions: options.compressionOptions
- };
- };
- ZipObject.prototype = {
- /**
- * Create an internal stream for the content of this object.
- * @param {String} type the type of each chunk.
- * @return StreamHelper the stream.
- */
- internalStream: function internalStream(type) {
- var result = null,
- outputType = "string";
- try {
- if (!type) {
- throw new Error("No output type specified.");
- }
- outputType = type.toLowerCase();
- var askUnicodeString = outputType === "string" || outputType === "text";
- if (outputType === "binarystring" || outputType === "text") {
- outputType = "string";
- }
- result = this._decompressWorker();
- var isUnicodeString = !this._dataBinary;
- if (isUnicodeString && !askUnicodeString) {
- result = result.pipe(new utf8.Utf8EncodeWorker());
- }
- if (!isUnicodeString && askUnicodeString) {
- result = result.pipe(new utf8.Utf8DecodeWorker());
- }
- } catch (e) {
- result = new GenericWorker("error");
- result.error(e);
- }
- return new StreamHelper(result, outputType, "");
- },
- /**
- * Prepare the content in the asked type.
- * @param {String} type the type of the result.
- * @param {Function} onUpdate a function to call on each internal update.
- * @return Promise the promise of the result.
- */
- async: function async(type, onUpdate) {
- return this.internalStream(type).accumulate(onUpdate);
- },
- /**
- * Prepare the content as a nodejs stream.
- * @param {String} type the type of each chunk.
- * @param {Function} onUpdate a function to call on each internal update.
- * @return Stream the stream.
- */
- nodeStream: function nodeStream(type, onUpdate) {
- return this.internalStream(type || "nodebuffer").toNodejsStream(onUpdate);
- },
- /**
- * Return a worker for the compressed content.
- * @private
- * @param {Object} compression the compression object to use.
- * @param {Object} compressionOptions the options to use when compressing.
- * @return Worker the worker.
- */
- _compressWorker: function _compressWorker(compression, compressionOptions) {
- if (this._data instanceof CompressedObject && this._data.compression.magic === compression.magic) {
- return this._data.getCompressedWorker();
- } else {
- var result = this._decompressWorker();
- if (!this._dataBinary) {
- result = result.pipe(new utf8.Utf8EncodeWorker());
- }
- return CompressedObject.createWorkerFrom(result, compression, compressionOptions);
- }
- },
- /**
- * Return a worker for the decompressed content.
- * @private
- * @return Worker the worker.
- */
- _decompressWorker: function _decompressWorker() {
- if (this._data instanceof CompressedObject) {
- return this._data.getContentWorker();
- } else if (this._data instanceof GenericWorker) {
- return this._data;
- } else {
- return new DataWorker(this._data);
- }
- }
- };
- var removedMethods = ["asText", "asBinary", "asNodeBuffer", "asUint8Array", "asArrayBuffer"];
- var removedFn = function removedFn() {
- throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.");
- };
- for (var i = 0; i < removedMethods.length; i++) {
- ZipObject.prototype[removedMethods[i]] = removedFn;
- }
- module.exports = ZipObject;
- },{"./compressedObject":282,"./stream/DataWorker":307,"./stream/GenericWorker":308,"./stream/StreamHelper":309,"./utf8":311}],316:[function(require,module,exports){
- 'use strict';
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- var immediate = require('immediate');
- /* istanbul ignore next */
- function INTERNAL() {}
- var handlers = {};
- var REJECTED = ['REJECTED'];
- var FULFILLED = ['FULFILLED'];
- var PENDING = ['PENDING'];
- module.exports = Promise;
- function Promise(resolver) {
- if (typeof resolver !== 'function') {
- throw new TypeError('resolver must be a function');
- }
- this.state = PENDING;
- this.queue = [];
- this.outcome = void 0;
- if (resolver !== INTERNAL) {
- safelyResolveThenable(this, resolver);
- }
- }
- Promise.prototype["finally"] = function (callback) {
- if (typeof callback !== 'function') {
- return this;
- }
- var p = this.constructor;
- return this.then(resolve, reject);
- function resolve(value) {
- function yes() {
- return value;
- }
- return p.resolve(callback()).then(yes);
- }
- function reject(reason) {
- function no() {
- throw reason;
- }
- return p.resolve(callback()).then(no);
- }
- };
- Promise.prototype["catch"] = function (onRejected) {
- return this.then(null, onRejected);
- };
- Promise.prototype.then = function (onFulfilled, onRejected) {
- if (typeof onFulfilled !== 'function' && this.state === FULFILLED || typeof onRejected !== 'function' && this.state === REJECTED) {
- return this;
- }
- var promise = new this.constructor(INTERNAL);
- if (this.state !== PENDING) {
- var resolver = this.state === FULFILLED ? onFulfilled : onRejected;
- unwrap(promise, resolver, this.outcome);
- } else {
- this.queue.push(new QueueItem(promise, onFulfilled, onRejected));
- }
- return promise;
- };
- function QueueItem(promise, onFulfilled, onRejected) {
- this.promise = promise;
- if (typeof onFulfilled === 'function') {
- this.onFulfilled = onFulfilled;
- this.callFulfilled = this.otherCallFulfilled;
- }
- if (typeof onRejected === 'function') {
- this.onRejected = onRejected;
- this.callRejected = this.otherCallRejected;
- }
- }
- QueueItem.prototype.callFulfilled = function (value) {
- handlers.resolve(this.promise, value);
- };
- QueueItem.prototype.otherCallFulfilled = function (value) {
- unwrap(this.promise, this.onFulfilled, value);
- };
- QueueItem.prototype.callRejected = function (value) {
- handlers.reject(this.promise, value);
- };
- QueueItem.prototype.otherCallRejected = function (value) {
- unwrap(this.promise, this.onRejected, value);
- };
- function unwrap(promise, func, value) {
- immediate(function () {
- var returnValue;
- try {
- returnValue = func(value);
- } catch (e) {
- return handlers.reject(promise, e);
- }
- if (returnValue === promise) {
- handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));
- } else {
- handlers.resolve(promise, returnValue);
- }
- });
- }
- handlers.resolve = function (self, value) {
- var result = tryCatch(getThen, value);
- if (result.status === 'error') {
- return handlers.reject(self, result.value);
- }
- var thenable = result.value;
- if (thenable) {
- safelyResolveThenable(self, thenable);
- } else {
- self.state = FULFILLED;
- self.outcome = value;
- var i = -1;
- var len = self.queue.length;
- while (++i < len) {
- self.queue[i].callFulfilled(value);
- }
- }
- return self;
- };
- handlers.reject = function (self, error) {
- self.state = REJECTED;
- self.outcome = error;
- var i = -1;
- var len = self.queue.length;
- while (++i < len) {
- self.queue[i].callRejected(error);
- }
- return self;
- };
- function getThen(obj) {
- // Make sure we only access the accessor once as required by the spec
- var then = obj && obj.then;
- if (obj && (_typeof(obj) === 'object' || typeof obj === 'function') && typeof then === 'function') {
- return function appyThen() {
- then.apply(obj, arguments);
- };
- }
- }
- function safelyResolveThenable(self, thenable) {
- // Either fulfill, reject or reject with error
- var called = false;
- function onError(value) {
- if (called) {
- return;
- }
- called = true;
- handlers.reject(self, value);
- }
- function onSuccess(value) {
- if (called) {
- return;
- }
- called = true;
- handlers.resolve(self, value);
- }
- function tryToUnwrap() {
- thenable(onSuccess, onError);
- }
- var result = tryCatch(tryToUnwrap);
- if (result.status === 'error') {
- onError(result.value);
- }
- }
- function tryCatch(func, value) {
- var out = {};
- try {
- out.value = func(value);
- out.status = 'success';
- } catch (e) {
- out.status = 'error';
- out.value = e;
- }
- return out;
- }
- Promise.resolve = resolve;
- function resolve(value) {
- if (value instanceof this) {
- return value;
- }
- return handlers.resolve(new this(INTERNAL), value);
- }
- Promise.reject = reject;
- function reject(reason) {
- var promise = new this(INTERNAL);
- return handlers.reject(promise, reason);
- }
- Promise.all = all;
- function all(iterable) {
- var self = this;
- if (Object.prototype.toString.call(iterable) !== '[object Array]') {
- return this.reject(new TypeError('must be an array'));
- }
- var len = iterable.length;
- var called = false;
- if (!len) {
- return this.resolve([]);
- }
- var values = new Array(len);
- var resolved = 0;
- var i = -1;
- var promise = new this(INTERNAL);
- while (++i < len) {
- allResolver(iterable[i], i);
- }
- return promise;
- function allResolver(value, i) {
- self.resolve(value).then(resolveFromAll, function (error) {
- if (!called) {
- called = true;
- handlers.reject(promise, error);
- }
- });
- function resolveFromAll(outValue) {
- values[i] = outValue;
- if (++resolved === len && !called) {
- called = true;
- handlers.resolve(promise, values);
- }
- }
- }
- }
- Promise.race = race;
- function race(iterable) {
- var self = this;
- if (Object.prototype.toString.call(iterable) !== '[object Array]') {
- return this.reject(new TypeError('must be an array'));
- }
- var len = iterable.length;
- var called = false;
- if (!len) {
- return this.resolve([]);
- }
- var i = -1;
- var promise = new this(INTERNAL);
- while (++i < len) {
- resolver(iterable[i]);
- }
- return promise;
- function resolver(value) {
- self.resolve(value).then(function (response) {
- if (!called) {
- called = true;
- handlers.resolve(promise, response);
- }
- }, function (error) {
- if (!called) {
- called = true;
- handlers.reject(promise, error);
- }
- });
- }
- }
- },{"immediate":277}],317:[function(require,module,exports){
- (function (global){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- /**
- * lodash (Custom Build) <https://lodash.com/>
- * Build: `lodash modularize exports="npm" -o ./`
- * Copyright jQuery Foundation and other contributors <https://jquery.org/>
- * Released under MIT license <https://lodash.com/license>
- * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
- * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- */
- /** Used as references for various `Number` constants. */
- var INFINITY = 1 / 0;
- /** `Object#toString` result references. */
- var symbolTag = '[object Symbol]';
- /**
- * Used to match `RegExp`
- * [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns).
- */
- var reRegExpChar = /[\\^$.*+?()[\]{}|]/g,
- reHasRegExpChar = RegExp(reRegExpChar.source);
- /** Detect free variable `global` from Node.js. */
- var freeGlobal = (typeof global === "undefined" ? "undefined" : _typeof(global)) == 'object' && global && global.Object === Object && global;
- /** Detect free variable `self`. */
- var freeSelf = (typeof self === "undefined" ? "undefined" : _typeof(self)) == 'object' && self && self.Object === Object && self;
- /** Used as a reference to the global object. */
- var root = freeGlobal || freeSelf || Function('return this')();
- /** Used for built-in method references. */
- var objectProto = Object.prototype;
- /**
- * Used to resolve the
- * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
- * of values.
- */
- var objectToString = objectProto.toString;
- /** Built-in value references. */
- var _Symbol = root.Symbol;
- /** Used to convert symbols to primitives and strings. */
- var symbolProto = _Symbol ? _Symbol.prototype : undefined,
- symbolToString = symbolProto ? symbolProto.toString : undefined;
- /**
- * The base implementation of `_.toString` which doesn't convert nullish
- * values to empty strings.
- *
- * @private
- * @param {*} value The value to process.
- * @returns {string} Returns the string.
- */
- function baseToString(value) {
- // Exit early for strings to avoid a performance hit in some environments.
- if (typeof value == 'string') {
- return value;
- }
- if (isSymbol(value)) {
- return symbolToString ? symbolToString.call(value) : '';
- }
- var result = value + '';
- return result == '0' && 1 / value == -INFINITY ? '-0' : result;
- }
- /**
- * Checks if `value` is object-like. A value is object-like if it's not `null`
- * and has a `typeof` result of "object".
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
- * @example
- *
- * _.isObjectLike({});
- * // => true
- *
- * _.isObjectLike([1, 2, 3]);
- * // => true
- *
- * _.isObjectLike(_.noop);
- * // => false
- *
- * _.isObjectLike(null);
- * // => false
- */
- function isObjectLike(value) {
- return !!value && _typeof(value) == 'object';
- }
- /**
- * Checks if `value` is classified as a `Symbol` primitive or object.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
- * @example
- *
- * _.isSymbol(Symbol.iterator);
- * // => true
- *
- * _.isSymbol('abc');
- * // => false
- */
- function isSymbol(value) {
- return _typeof(value) == 'symbol' || isObjectLike(value) && objectToString.call(value) == symbolTag;
- }
- /**
- * Converts `value` to a string. An empty string is returned for `null`
- * and `undefined` values. The sign of `-0` is preserved.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to process.
- * @returns {string} Returns the string.
- * @example
- *
- * _.toString(null);
- * // => ''
- *
- * _.toString(-0);
- * // => '-0'
- *
- * _.toString([1, 2, 3]);
- * // => '1,2,3'
- */
- function toString(value) {
- return value == null ? '' : baseToString(value);
- }
- /**
- * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+",
- * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`.
- *
- * @static
- * @memberOf _
- * @since 3.0.0
- * @category String
- * @param {string} [string=''] The string to escape.
- * @returns {string} Returns the escaped string.
- * @example
- *
- * _.escapeRegExp('[lodash](https://lodash.com/)');
- * // => '\[lodash\]\(https://lodash\.com/\)'
- */
- function escapeRegExp(string) {
- string = toString(string);
- return string && reHasRegExpChar.test(string) ? string.replace(reRegExpChar, '\\$&') : string;
- }
- module.exports = escapeRegExp;
- }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{}],318:[function(require,module,exports){
- (function (global){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- /**
- * lodash (Custom Build) <https://lodash.com/>
- * Build: `lodash modularize exports="npm" -o ./`
- * Copyright jQuery Foundation and other contributors <https://jquery.org/>
- * Released under MIT license <https://lodash.com/license>
- * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
- * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- */
- /** Used as the size to enable large array optimizations. */
- var LARGE_ARRAY_SIZE = 200;
- /** Used as the `TypeError` message for "Functions" methods. */
- var FUNC_ERROR_TEXT = 'Expected a function';
- /** Used to stand-in for `undefined` hash values. */
- var HASH_UNDEFINED = '__lodash_hash_undefined__';
- /** Used to compose bitmasks for comparison styles. */
- var UNORDERED_COMPARE_FLAG = 1,
- PARTIAL_COMPARE_FLAG = 2;
- /** Used as references for various `Number` constants. */
- var INFINITY = 1 / 0,
- MAX_SAFE_INTEGER = 9007199254740991;
- /** `Object#toString` result references. */
- var argsTag = '[object Arguments]',
- arrayTag = '[object Array]',
- boolTag = '[object Boolean]',
- dateTag = '[object Date]',
- errorTag = '[object Error]',
- funcTag = '[object Function]',
- genTag = '[object GeneratorFunction]',
- mapTag = '[object Map]',
- numberTag = '[object Number]',
- objectTag = '[object Object]',
- promiseTag = '[object Promise]',
- regexpTag = '[object RegExp]',
- setTag = '[object Set]',
- stringTag = '[object String]',
- symbolTag = '[object Symbol]',
- weakMapTag = '[object WeakMap]';
- var arrayBufferTag = '[object ArrayBuffer]',
- dataViewTag = '[object DataView]',
- float32Tag = '[object Float32Array]',
- float64Tag = '[object Float64Array]',
- int8Tag = '[object Int8Array]',
- int16Tag = '[object Int16Array]',
- int32Tag = '[object Int32Array]',
- uint8Tag = '[object Uint8Array]',
- uint8ClampedTag = '[object Uint8ClampedArray]',
- uint16Tag = '[object Uint16Array]',
- uint32Tag = '[object Uint32Array]';
- /** Used to match property names within property paths. */
- var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
- reIsPlainProp = /^\w*$/,
- reLeadingDot = /^\./,
- rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
- /**
- * Used to match `RegExp`
- * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
- */
- var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
- /** Used to match backslashes in property paths. */
- var reEscapeChar = /\\(\\)?/g;
- /** Used to detect host constructors (Safari). */
- var reIsHostCtor = /^\[object .+?Constructor\]$/;
- /** Used to detect unsigned integer values. */
- var reIsUint = /^(?:0|[1-9]\d*)$/;
- /** Used to identify `toStringTag` values of typed arrays. */
- var typedArrayTags = {};
- typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;
- typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
- /** Detect free variable `global` from Node.js. */
- var freeGlobal = (typeof global === "undefined" ? "undefined" : _typeof(global)) == 'object' && global && global.Object === Object && global;
- /** Detect free variable `self`. */
- var freeSelf = (typeof self === "undefined" ? "undefined" : _typeof(self)) == 'object' && self && self.Object === Object && self;
- /** Used as a reference to the global object. */
- var root = freeGlobal || freeSelf || Function('return this')();
- /** Detect free variable `exports`. */
- var freeExports = (typeof exports === "undefined" ? "undefined" : _typeof(exports)) == 'object' && exports && !exports.nodeType && exports;
- /** Detect free variable `module`. */
- var freeModule = freeExports && (typeof module === "undefined" ? "undefined" : _typeof(module)) == 'object' && module && !module.nodeType && module;
- /** Detect the popular CommonJS extension `module.exports`. */
- var moduleExports = freeModule && freeModule.exports === freeExports;
- /** Detect free variable `process` from Node.js. */
- var freeProcess = moduleExports && freeGlobal.process;
- /** Used to access faster Node.js helpers. */
- var nodeUtil = function () {
- try {
- return freeProcess && freeProcess.binding('util');
- } catch (e) {}
- }();
- /* Node.js helper references. */
- var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
- /**
- * A specialized version of `baseAggregator` for arrays.
- *
- * @private
- * @param {Array} [array] The array to iterate over.
- * @param {Function} setter The function to set `accumulator` values.
- * @param {Function} iteratee The iteratee to transform keys.
- * @param {Object} accumulator The initial aggregated object.
- * @returns {Function} Returns `accumulator`.
- */
- function arrayAggregator(array, setter, iteratee, accumulator) {
- var index = -1,
- length = array ? array.length : 0;
- while (++index < length) {
- var value = array[index];
- setter(accumulator, value, iteratee(value), array);
- }
- return accumulator;
- }
- /**
- * A specialized version of `_.some` for arrays without support for iteratee
- * shorthands.
- *
- * @private
- * @param {Array} [array] The array to iterate over.
- * @param {Function} predicate The function invoked per iteration.
- * @returns {boolean} Returns `true` if any element passes the predicate check,
- * else `false`.
- */
- function arraySome(array, predicate) {
- var index = -1,
- length = array ? array.length : 0;
- while (++index < length) {
- if (predicate(array[index], index, array)) {
- return true;
- }
- }
- return false;
- }
- /**
- * The base implementation of `_.property` without support for deep paths.
- *
- * @private
- * @param {string} key The key of the property to get.
- * @returns {Function} Returns the new accessor function.
- */
- function baseProperty(key) {
- return function (object) {
- return object == null ? undefined : object[key];
- };
- }
- /**
- * The base implementation of `_.times` without support for iteratee shorthands
- * or max array length checks.
- *
- * @private
- * @param {number} n The number of times to invoke `iteratee`.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Array} Returns the array of results.
- */
- function baseTimes(n, iteratee) {
- var index = -1,
- result = Array(n);
- while (++index < n) {
- result[index] = iteratee(index);
- }
- return result;
- }
- /**
- * The base implementation of `_.unary` without support for storing metadata.
- *
- * @private
- * @param {Function} func The function to cap arguments for.
- * @returns {Function} Returns the new capped function.
- */
- function baseUnary(func) {
- return function (value) {
- return func(value);
- };
- }
- /**
- * Gets the value at `key` of `object`.
- *
- * @private
- * @param {Object} [object] The object to query.
- * @param {string} key The key of the property to get.
- * @returns {*} Returns the property value.
- */
- function getValue(object, key) {
- return object == null ? undefined : object[key];
- }
- /**
- * Checks if `value` is a host object in IE < 9.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
- */
- function isHostObject(value) {
- // Many host objects are `Object` objects that can coerce to strings
- // despite having improperly defined `toString` methods.
- var result = false;
- if (value != null && typeof value.toString != 'function') {
- try {
- result = !!(value + '');
- } catch (e) {}
- }
- return result;
- }
- /**
- * Converts `map` to its key-value pairs.
- *
- * @private
- * @param {Object} map The map to convert.
- * @returns {Array} Returns the key-value pairs.
- */
- function mapToArray(map) {
- var index = -1,
- result = Array(map.size);
- map.forEach(function (value, key) {
- result[++index] = [key, value];
- });
- return result;
- }
- /**
- * Creates a unary function that invokes `func` with its argument transformed.
- *
- * @private
- * @param {Function} func The function to wrap.
- * @param {Function} transform The argument transform.
- * @returns {Function} Returns the new function.
- */
- function overArg(func, transform) {
- return function (arg) {
- return func(transform(arg));
- };
- }
- /**
- * Converts `set` to an array of its values.
- *
- * @private
- * @param {Object} set The set to convert.
- * @returns {Array} Returns the values.
- */
- function setToArray(set) {
- var index = -1,
- result = Array(set.size);
- set.forEach(function (value) {
- result[++index] = value;
- });
- return result;
- }
- /** Used for built-in method references. */
- var arrayProto = Array.prototype,
- funcProto = Function.prototype,
- objectProto = Object.prototype;
- /** Used to detect overreaching core-js shims. */
- var coreJsData = root['__core-js_shared__'];
- /** Used to detect methods masquerading as native. */
- var maskSrcKey = function () {
- var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
- return uid ? 'Symbol(src)_1.' + uid : '';
- }();
- /** Used to resolve the decompiled source of functions. */
- var funcToString = funcProto.toString;
- /** Used to check objects for own properties. */
- var hasOwnProperty = objectProto.hasOwnProperty;
- /**
- * Used to resolve the
- * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
- * of values.
- */
- var objectToString = objectProto.toString;
- /** Used to detect if a method is native. */
- var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&').replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$');
- /** Built-in value references. */
- var _Symbol = root.Symbol,
- Uint8Array = root.Uint8Array,
- propertyIsEnumerable = objectProto.propertyIsEnumerable,
- splice = arrayProto.splice;
- /* Built-in method references for those with the same name as other `lodash` methods. */
- var nativeKeys = overArg(Object.keys, Object);
- /* Built-in method references that are verified to be native. */
- var DataView = getNative(root, 'DataView'),
- Map = getNative(root, 'Map'),
- Promise = getNative(root, 'Promise'),
- Set = getNative(root, 'Set'),
- WeakMap = getNative(root, 'WeakMap'),
- nativeCreate = getNative(Object, 'create');
- /** Used to detect maps, sets, and weakmaps. */
- var dataViewCtorString = toSource(DataView),
- mapCtorString = toSource(Map),
- promiseCtorString = toSource(Promise),
- setCtorString = toSource(Set),
- weakMapCtorString = toSource(WeakMap);
- /** Used to convert symbols to primitives and strings. */
- var symbolProto = _Symbol ? _Symbol.prototype : undefined,
- symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,
- symbolToString = symbolProto ? symbolProto.toString : undefined;
- /**
- * Creates a hash object.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
- function Hash(entries) {
- var index = -1,
- length = entries ? entries.length : 0;
- this.clear();
- while (++index < length) {
- var entry = entries[index];
- this.set(entry[0], entry[1]);
- }
- }
- /**
- * Removes all key-value entries from the hash.
- *
- * @private
- * @name clear
- * @memberOf Hash
- */
- function hashClear() {
- this.__data__ = nativeCreate ? nativeCreate(null) : {};
- }
- /**
- * Removes `key` and its value from the hash.
- *
- * @private
- * @name delete
- * @memberOf Hash
- * @param {Object} hash The hash to modify.
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
- function hashDelete(key) {
- return this.has(key) && delete this.__data__[key];
- }
- /**
- * Gets the hash value for `key`.
- *
- * @private
- * @name get
- * @memberOf Hash
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
- function hashGet(key) {
- var data = this.__data__;
- if (nativeCreate) {
- var result = data[key];
- return result === HASH_UNDEFINED ? undefined : result;
- }
- return hasOwnProperty.call(data, key) ? data[key] : undefined;
- }
- /**
- * Checks if a hash value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf Hash
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
- function hashHas(key) {
- var data = this.__data__;
- return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);
- }
- /**
- * Sets the hash `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf Hash
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the hash instance.
- */
- function hashSet(key, value) {
- var data = this.__data__;
- data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED : value;
- return this;
- } // Add methods to `Hash`.
- Hash.prototype.clear = hashClear;
- Hash.prototype['delete'] = hashDelete;
- Hash.prototype.get = hashGet;
- Hash.prototype.has = hashHas;
- Hash.prototype.set = hashSet;
- /**
- * Creates an list cache object.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
- function ListCache(entries) {
- var index = -1,
- length = entries ? entries.length : 0;
- this.clear();
- while (++index < length) {
- var entry = entries[index];
- this.set(entry[0], entry[1]);
- }
- }
- /**
- * Removes all key-value entries from the list cache.
- *
- * @private
- * @name clear
- * @memberOf ListCache
- */
- function listCacheClear() {
- this.__data__ = [];
- }
- /**
- * Removes `key` and its value from the list cache.
- *
- * @private
- * @name delete
- * @memberOf ListCache
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
- function listCacheDelete(key) {
- var data = this.__data__,
- index = assocIndexOf(data, key);
- if (index < 0) {
- return false;
- }
- var lastIndex = data.length - 1;
- if (index == lastIndex) {
- data.pop();
- } else {
- splice.call(data, index, 1);
- }
- return true;
- }
- /**
- * Gets the list cache value for `key`.
- *
- * @private
- * @name get
- * @memberOf ListCache
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
- function listCacheGet(key) {
- var data = this.__data__,
- index = assocIndexOf(data, key);
- return index < 0 ? undefined : data[index][1];
- }
- /**
- * Checks if a list cache value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf ListCache
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
- function listCacheHas(key) {
- return assocIndexOf(this.__data__, key) > -1;
- }
- /**
- * Sets the list cache `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf ListCache
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the list cache instance.
- */
- function listCacheSet(key, value) {
- var data = this.__data__,
- index = assocIndexOf(data, key);
- if (index < 0) {
- data.push([key, value]);
- } else {
- data[index][1] = value;
- }
- return this;
- } // Add methods to `ListCache`.
- ListCache.prototype.clear = listCacheClear;
- ListCache.prototype['delete'] = listCacheDelete;
- ListCache.prototype.get = listCacheGet;
- ListCache.prototype.has = listCacheHas;
- ListCache.prototype.set = listCacheSet;
- /**
- * Creates a map cache object to store key-value pairs.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
- function MapCache(entries) {
- var index = -1,
- length = entries ? entries.length : 0;
- this.clear();
- while (++index < length) {
- var entry = entries[index];
- this.set(entry[0], entry[1]);
- }
- }
- /**
- * Removes all key-value entries from the map.
- *
- * @private
- * @name clear
- * @memberOf MapCache
- */
- function mapCacheClear() {
- this.__data__ = {
- 'hash': new Hash(),
- 'map': new (Map || ListCache)(),
- 'string': new Hash()
- };
- }
- /**
- * Removes `key` and its value from the map.
- *
- * @private
- * @name delete
- * @memberOf MapCache
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
- function mapCacheDelete(key) {
- return getMapData(this, key)['delete'](key);
- }
- /**
- * Gets the map value for `key`.
- *
- * @private
- * @name get
- * @memberOf MapCache
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
- function mapCacheGet(key) {
- return getMapData(this, key).get(key);
- }
- /**
- * Checks if a map value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf MapCache
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
- function mapCacheHas(key) {
- return getMapData(this, key).has(key);
- }
- /**
- * Sets the map `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf MapCache
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the map cache instance.
- */
- function mapCacheSet(key, value) {
- getMapData(this, key).set(key, value);
- return this;
- } // Add methods to `MapCache`.
- MapCache.prototype.clear = mapCacheClear;
- MapCache.prototype['delete'] = mapCacheDelete;
- MapCache.prototype.get = mapCacheGet;
- MapCache.prototype.has = mapCacheHas;
- MapCache.prototype.set = mapCacheSet;
- /**
- *
- * Creates an array cache object to store unique values.
- *
- * @private
- * @constructor
- * @param {Array} [values] The values to cache.
- */
- function SetCache(values) {
- var index = -1,
- length = values ? values.length : 0;
- this.__data__ = new MapCache();
- while (++index < length) {
- this.add(values[index]);
- }
- }
- /**
- * Adds `value` to the array cache.
- *
- * @private
- * @name add
- * @memberOf SetCache
- * @alias push
- * @param {*} value The value to cache.
- * @returns {Object} Returns the cache instance.
- */
- function setCacheAdd(value) {
- this.__data__.set(value, HASH_UNDEFINED);
- return this;
- }
- /**
- * Checks if `value` is in the array cache.
- *
- * @private
- * @name has
- * @memberOf SetCache
- * @param {*} value The value to search for.
- * @returns {number} Returns `true` if `value` is found, else `false`.
- */
- function setCacheHas(value) {
- return this.__data__.has(value);
- } // Add methods to `SetCache`.
- SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
- SetCache.prototype.has = setCacheHas;
- /**
- * Creates a stack cache object to store key-value pairs.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
- function Stack(entries) {
- this.__data__ = new ListCache(entries);
- }
- /**
- * Removes all key-value entries from the stack.
- *
- * @private
- * @name clear
- * @memberOf Stack
- */
- function stackClear() {
- this.__data__ = new ListCache();
- }
- /**
- * Removes `key` and its value from the stack.
- *
- * @private
- * @name delete
- * @memberOf Stack
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
- function stackDelete(key) {
- return this.__data__['delete'](key);
- }
- /**
- * Gets the stack value for `key`.
- *
- * @private
- * @name get
- * @memberOf Stack
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
- function stackGet(key) {
- return this.__data__.get(key);
- }
- /**
- * Checks if a stack value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf Stack
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
- function stackHas(key) {
- return this.__data__.has(key);
- }
- /**
- * Sets the stack `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf Stack
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the stack cache instance.
- */
- function stackSet(key, value) {
- var cache = this.__data__;
- if (cache instanceof ListCache) {
- var pairs = cache.__data__;
- if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) {
- pairs.push([key, value]);
- return this;
- }
- cache = this.__data__ = new MapCache(pairs);
- }
- cache.set(key, value);
- return this;
- } // Add methods to `Stack`.
- Stack.prototype.clear = stackClear;
- Stack.prototype['delete'] = stackDelete;
- Stack.prototype.get = stackGet;
- Stack.prototype.has = stackHas;
- Stack.prototype.set = stackSet;
- /**
- * Creates an array of the enumerable property names of the array-like `value`.
- *
- * @private
- * @param {*} value The value to query.
- * @param {boolean} inherited Specify returning inherited property names.
- * @returns {Array} Returns the array of property names.
- */
- function arrayLikeKeys(value, inherited) {
- // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
- // Safari 9 makes `arguments.length` enumerable in strict mode.
- var result = isArray(value) || isArguments(value) ? baseTimes(value.length, String) : [];
- var length = result.length,
- skipIndexes = !!length;
- for (var key in value) {
- if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && (key == 'length' || isIndex(key, length)))) {
- result.push(key);
- }
- }
- return result;
- }
- /**
- * Gets the index at which the `key` is found in `array` of key-value pairs.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {*} key The key to search for.
- * @returns {number} Returns the index of the matched value, else `-1`.
- */
- function assocIndexOf(array, key) {
- var length = array.length;
- while (length--) {
- if (eq(array[length][0], key)) {
- return length;
- }
- }
- return -1;
- }
- /**
- * Aggregates elements of `collection` on `accumulator` with keys transformed
- * by `iteratee` and values set by `setter`.
- *
- * @private
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} setter The function to set `accumulator` values.
- * @param {Function} iteratee The iteratee to transform keys.
- * @param {Object} accumulator The initial aggregated object.
- * @returns {Function} Returns `accumulator`.
- */
- function baseAggregator(collection, setter, iteratee, accumulator) {
- baseEach(collection, function (value, key, collection) {
- setter(accumulator, value, iteratee(value), collection);
- });
- return accumulator;
- }
- /**
- * The base implementation of `_.forEach` without support for iteratee shorthands.
- *
- * @private
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Array|Object} Returns `collection`.
- */
- var baseEach = createBaseEach(baseForOwn);
- /**
- * The base implementation of `baseForOwn` which iterates over `object`
- * properties returned by `keysFunc` and invokes `iteratee` for each property.
- * Iteratee functions may exit iteration early by explicitly returning `false`.
- *
- * @private
- * @param {Object} object The object to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @param {Function} keysFunc The function to get the keys of `object`.
- * @returns {Object} Returns `object`.
- */
- var baseFor = createBaseFor();
- /**
- * The base implementation of `_.forOwn` without support for iteratee shorthands.
- *
- * @private
- * @param {Object} object The object to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Object} Returns `object`.
- */
- function baseForOwn(object, iteratee) {
- return object && baseFor(object, iteratee, keys);
- }
- /**
- * The base implementation of `_.get` without support for default values.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {Array|string} path The path of the property to get.
- * @returns {*} Returns the resolved value.
- */
- function baseGet(object, path) {
- path = isKey(path, object) ? [path] : castPath(path);
- var index = 0,
- length = path.length;
- while (object != null && index < length) {
- object = object[toKey(path[index++])];
- }
- return index && index == length ? object : undefined;
- }
- /**
- * The base implementation of `getTag`.
- *
- * @private
- * @param {*} value The value to query.
- * @returns {string} Returns the `toStringTag`.
- */
- function baseGetTag(value) {
- return objectToString.call(value);
- }
- /**
- * The base implementation of `_.hasIn` without support for deep paths.
- *
- * @private
- * @param {Object} [object] The object to query.
- * @param {Array|string} key The key to check.
- * @returns {boolean} Returns `true` if `key` exists, else `false`.
- */
- function baseHasIn(object, key) {
- return object != null && key in Object(object);
- }
- /**
- * The base implementation of `_.isEqual` which supports partial comparisons
- * and tracks traversed objects.
- *
- * @private
- * @param {*} value The value to compare.
- * @param {*} other The other value to compare.
- * @param {Function} [customizer] The function to customize comparisons.
- * @param {boolean} [bitmask] The bitmask of comparison flags.
- * The bitmask may be composed of the following flags:
- * 1 - Unordered comparison
- * 2 - Partial comparison
- * @param {Object} [stack] Tracks traversed `value` and `other` objects.
- * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
- */
- function baseIsEqual(value, other, customizer, bitmask, stack) {
- if (value === other) {
- return true;
- }
- if (value == null || other == null || !isObject(value) && !isObjectLike(other)) {
- return value !== value && other !== other;
- }
- return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);
- }
- /**
- * A specialized version of `baseIsEqual` for arrays and objects which performs
- * deep comparisons and tracks traversed objects enabling objects with circular
- * references to be compared.
- *
- * @private
- * @param {Object} object The object to compare.
- * @param {Object} other The other object to compare.
- * @param {Function} equalFunc The function to determine equivalents of values.
- * @param {Function} [customizer] The function to customize comparisons.
- * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`
- * for more details.
- * @param {Object} [stack] Tracks traversed `object` and `other` objects.
- * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
- */
- function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {
- var objIsArr = isArray(object),
- othIsArr = isArray(other),
- objTag = arrayTag,
- othTag = arrayTag;
- if (!objIsArr) {
- objTag = getTag(object);
- objTag = objTag == argsTag ? objectTag : objTag;
- }
- if (!othIsArr) {
- othTag = getTag(other);
- othTag = othTag == argsTag ? objectTag : othTag;
- }
- var objIsObj = objTag == objectTag && !isHostObject(object),
- othIsObj = othTag == objectTag && !isHostObject(other),
- isSameTag = objTag == othTag;
- if (isSameTag && !objIsObj) {
- stack || (stack = new Stack());
- return objIsArr || isTypedArray(object) ? equalArrays(object, other, equalFunc, customizer, bitmask, stack) : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);
- }
- if (!(bitmask & PARTIAL_COMPARE_FLAG)) {
- var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
- othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
- if (objIsWrapped || othIsWrapped) {
- var objUnwrapped = objIsWrapped ? object.value() : object,
- othUnwrapped = othIsWrapped ? other.value() : other;
- stack || (stack = new Stack());
- return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);
- }
- }
- if (!isSameTag) {
- return false;
- }
- stack || (stack = new Stack());
- return equalObjects(object, other, equalFunc, customizer, bitmask, stack);
- }
- /**
- * The base implementation of `_.isMatch` without support for iteratee shorthands.
- *
- * @private
- * @param {Object} object The object to inspect.
- * @param {Object} source The object of property values to match.
- * @param {Array} matchData The property names, values, and compare flags to match.
- * @param {Function} [customizer] The function to customize comparisons.
- * @returns {boolean} Returns `true` if `object` is a match, else `false`.
- */
- function baseIsMatch(object, source, matchData, customizer) {
- var index = matchData.length,
- length = index,
- noCustomizer = !customizer;
- if (object == null) {
- return !length;
- }
- object = Object(object);
- while (index--) {
- var data = matchData[index];
- if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) {
- return false;
- }
- }
- while (++index < length) {
- data = matchData[index];
- var key = data[0],
- objValue = object[key],
- srcValue = data[1];
- if (noCustomizer && data[2]) {
- if (objValue === undefined && !(key in object)) {
- return false;
- }
- } else {
- var stack = new Stack();
- if (customizer) {
- var result = customizer(objValue, srcValue, key, object, source, stack);
- }
- if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack) : result)) {
- return false;
- }
- }
- }
- return true;
- }
- /**
- * The base implementation of `_.isNative` without bad shim checks.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a native function,
- * else `false`.
- */
- function baseIsNative(value) {
- if (!isObject(value) || isMasked(value)) {
- return false;
- }
- var pattern = isFunction(value) || isHostObject(value) ? reIsNative : reIsHostCtor;
- return pattern.test(toSource(value));
- }
- /**
- * The base implementation of `_.isTypedArray` without Node.js optimizations.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
- */
- function baseIsTypedArray(value) {
- return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objectToString.call(value)];
- }
- /**
- * The base implementation of `_.iteratee`.
- *
- * @private
- * @param {*} [value=_.identity] The value to convert to an iteratee.
- * @returns {Function} Returns the iteratee.
- */
- function baseIteratee(value) {
- // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
- // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
- if (typeof value == 'function') {
- return value;
- }
- if (value == null) {
- return identity;
- }
- if (_typeof(value) == 'object') {
- return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value);
- }
- return property(value);
- }
- /**
- * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names.
- */
- function baseKeys(object) {
- if (!isPrototype(object)) {
- return nativeKeys(object);
- }
- var result = [];
- for (var key in Object(object)) {
- if (hasOwnProperty.call(object, key) && key != 'constructor') {
- result.push(key);
- }
- }
- return result;
- }
- /**
- * The base implementation of `_.matches` which doesn't clone `source`.
- *
- * @private
- * @param {Object} source The object of property values to match.
- * @returns {Function} Returns the new spec function.
- */
- function baseMatches(source) {
- var matchData = getMatchData(source);
- if (matchData.length == 1 && matchData[0][2]) {
- return matchesStrictComparable(matchData[0][0], matchData[0][1]);
- }
- return function (object) {
- return object === source || baseIsMatch(object, source, matchData);
- };
- }
- /**
- * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
- *
- * @private
- * @param {string} path The path of the property to get.
- * @param {*} srcValue The value to match.
- * @returns {Function} Returns the new spec function.
- */
- function baseMatchesProperty(path, srcValue) {
- if (isKey(path) && isStrictComparable(srcValue)) {
- return matchesStrictComparable(toKey(path), srcValue);
- }
- return function (object) {
- var objValue = get(object, path);
- return objValue === undefined && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG);
- };
- }
- /**
- * A specialized version of `baseProperty` which supports deep paths.
- *
- * @private
- * @param {Array|string} path The path of the property to get.
- * @returns {Function} Returns the new accessor function.
- */
- function basePropertyDeep(path) {
- return function (object) {
- return baseGet(object, path);
- };
- }
- /**
- * The base implementation of `_.toString` which doesn't convert nullish
- * values to empty strings.
- *
- * @private
- * @param {*} value The value to process.
- * @returns {string} Returns the string.
- */
- function baseToString(value) {
- // Exit early for strings to avoid a performance hit in some environments.
- if (typeof value == 'string') {
- return value;
- }
- if (isSymbol(value)) {
- return symbolToString ? symbolToString.call(value) : '';
- }
- var result = value + '';
- return result == '0' && 1 / value == -INFINITY ? '-0' : result;
- }
- /**
- * Casts `value` to a path array if it's not one.
- *
- * @private
- * @param {*} value The value to inspect.
- * @returns {Array} Returns the cast property path array.
- */
- function castPath(value) {
- return isArray(value) ? value : stringToPath(value);
- }
- /**
- * Creates a function like `_.groupBy`.
- *
- * @private
- * @param {Function} setter The function to set accumulator values.
- * @param {Function} [initializer] The accumulator object initializer.
- * @returns {Function} Returns the new aggregator function.
- */
- function createAggregator(setter, initializer) {
- return function (collection, iteratee) {
- var func = isArray(collection) ? arrayAggregator : baseAggregator,
- accumulator = initializer ? initializer() : {};
- return func(collection, setter, baseIteratee(iteratee, 2), accumulator);
- };
- }
- /**
- * Creates a `baseEach` or `baseEachRight` function.
- *
- * @private
- * @param {Function} eachFunc The function to iterate over a collection.
- * @param {boolean} [fromRight] Specify iterating from right to left.
- * @returns {Function} Returns the new base function.
- */
- function createBaseEach(eachFunc, fromRight) {
- return function (collection, iteratee) {
- if (collection == null) {
- return collection;
- }
- if (!isArrayLike(collection)) {
- return eachFunc(collection, iteratee);
- }
- var length = collection.length,
- index = fromRight ? length : -1,
- iterable = Object(collection);
- while (fromRight ? index-- : ++index < length) {
- if (iteratee(iterable[index], index, iterable) === false) {
- break;
- }
- }
- return collection;
- };
- }
- /**
- * Creates a base function for methods like `_.forIn` and `_.forOwn`.
- *
- * @private
- * @param {boolean} [fromRight] Specify iterating from right to left.
- * @returns {Function} Returns the new base function.
- */
- function createBaseFor(fromRight) {
- return function (object, iteratee, keysFunc) {
- var index = -1,
- iterable = Object(object),
- props = keysFunc(object),
- length = props.length;
- while (length--) {
- var key = props[fromRight ? length : ++index];
- if (iteratee(iterable[key], key, iterable) === false) {
- break;
- }
- }
- return object;
- };
- }
- /**
- * A specialized version of `baseIsEqualDeep` for arrays with support for
- * partial deep comparisons.
- *
- * @private
- * @param {Array} array The array to compare.
- * @param {Array} other The other array to compare.
- * @param {Function} equalFunc The function to determine equivalents of values.
- * @param {Function} customizer The function to customize comparisons.
- * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
- * for more details.
- * @param {Object} stack Tracks traversed `array` and `other` objects.
- * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
- */
- function equalArrays(array, other, equalFunc, customizer, bitmask, stack) {
- var isPartial = bitmask & PARTIAL_COMPARE_FLAG,
- arrLength = array.length,
- othLength = other.length;
- if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
- return false;
- } // Assume cyclic values are equal.
- var stacked = stack.get(array);
- if (stacked && stack.get(other)) {
- return stacked == other;
- }
- var index = -1,
- result = true,
- seen = bitmask & UNORDERED_COMPARE_FLAG ? new SetCache() : undefined;
- stack.set(array, other);
- stack.set(other, array); // Ignore non-index properties.
- while (++index < arrLength) {
- var arrValue = array[index],
- othValue = other[index];
- if (customizer) {
- var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);
- }
- if (compared !== undefined) {
- if (compared) {
- continue;
- }
- result = false;
- break;
- } // Recursively compare arrays (susceptible to call stack limits).
- if (seen) {
- if (!arraySome(other, function (othValue, othIndex) {
- if (!seen.has(othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {
- return seen.add(othIndex);
- }
- })) {
- result = false;
- break;
- }
- } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {
- result = false;
- break;
- }
- }
- stack['delete'](array);
- stack['delete'](other);
- return result;
- }
- /**
- * A specialized version of `baseIsEqualDeep` for comparing objects of
- * the same `toStringTag`.
- *
- * **Note:** This function only supports comparing values with tags of
- * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
- *
- * @private
- * @param {Object} object The object to compare.
- * @param {Object} other The other object to compare.
- * @param {string} tag The `toStringTag` of the objects to compare.
- * @param {Function} equalFunc The function to determine equivalents of values.
- * @param {Function} customizer The function to customize comparisons.
- * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
- * for more details.
- * @param {Object} stack Tracks traversed `object` and `other` objects.
- * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
- */
- function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {
- switch (tag) {
- case dataViewTag:
- if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {
- return false;
- }
- object = object.buffer;
- other = other.buffer;
- case arrayBufferTag:
- if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
- return false;
- }
- return true;
- case boolTag:
- case dateTag:
- case numberTag:
- // Coerce booleans to `1` or `0` and dates to milliseconds.
- // Invalid dates are coerced to `NaN`.
- return eq(+object, +other);
- case errorTag:
- return object.name == other.name && object.message == other.message;
- case regexpTag:
- case stringTag:
- // Coerce regexes to strings and treat strings, primitives and objects,
- // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
- // for more details.
- return object == other + '';
- case mapTag:
- var convert = mapToArray;
- case setTag:
- var isPartial = bitmask & PARTIAL_COMPARE_FLAG;
- convert || (convert = setToArray);
- if (object.size != other.size && !isPartial) {
- return false;
- } // Assume cyclic values are equal.
- var stacked = stack.get(object);
- if (stacked) {
- return stacked == other;
- }
- bitmask |= UNORDERED_COMPARE_FLAG; // Recursively compare objects (susceptible to call stack limits).
- stack.set(object, other);
- var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);
- stack['delete'](object);
- return result;
- case symbolTag:
- if (symbolValueOf) {
- return symbolValueOf.call(object) == symbolValueOf.call(other);
- }
- }
- return false;
- }
- /**
- * A specialized version of `baseIsEqualDeep` for objects with support for
- * partial deep comparisons.
- *
- * @private
- * @param {Object} object The object to compare.
- * @param {Object} other The other object to compare.
- * @param {Function} equalFunc The function to determine equivalents of values.
- * @param {Function} customizer The function to customize comparisons.
- * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
- * for more details.
- * @param {Object} stack Tracks traversed `object` and `other` objects.
- * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
- */
- function equalObjects(object, other, equalFunc, customizer, bitmask, stack) {
- var isPartial = bitmask & PARTIAL_COMPARE_FLAG,
- objProps = keys(object),
- objLength = objProps.length,
- othProps = keys(other),
- othLength = othProps.length;
- if (objLength != othLength && !isPartial) {
- return false;
- }
- var index = objLength;
- while (index--) {
- var key = objProps[index];
- if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
- return false;
- }
- } // Assume cyclic values are equal.
- var stacked = stack.get(object);
- if (stacked && stack.get(other)) {
- return stacked == other;
- }
- var result = true;
- stack.set(object, other);
- stack.set(other, object);
- var skipCtor = isPartial;
- while (++index < objLength) {
- key = objProps[index];
- var objValue = object[key],
- othValue = other[key];
- if (customizer) {
- var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);
- } // Recursively compare objects (susceptible to call stack limits).
- if (!(compared === undefined ? objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack) : compared)) {
- result = false;
- break;
- }
- skipCtor || (skipCtor = key == 'constructor');
- }
- if (result && !skipCtor) {
- var objCtor = object.constructor,
- othCtor = other.constructor; // Non `Object` object instances with different constructors are not equal.
- if (objCtor != othCtor && 'constructor' in object && 'constructor' in other && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) {
- result = false;
- }
- }
- stack['delete'](object);
- stack['delete'](other);
- return result;
- }
- /**
- * Gets the data for `map`.
- *
- * @private
- * @param {Object} map The map to query.
- * @param {string} key The reference key.
- * @returns {*} Returns the map data.
- */
- function getMapData(map, key) {
- var data = map.__data__;
- return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map;
- }
- /**
- * Gets the property names, values, and compare flags of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the match data of `object`.
- */
- function getMatchData(object) {
- var result = keys(object),
- length = result.length;
- while (length--) {
- var key = result[length],
- value = object[key];
- result[length] = [key, value, isStrictComparable(value)];
- }
- return result;
- }
- /**
- * Gets the native function at `key` of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {string} key The key of the method to get.
- * @returns {*} Returns the function if it's native, else `undefined`.
- */
- function getNative(object, key) {
- var value = getValue(object, key);
- return baseIsNative(value) ? value : undefined;
- }
- /**
- * Gets the `toStringTag` of `value`.
- *
- * @private
- * @param {*} value The value to query.
- * @returns {string} Returns the `toStringTag`.
- */
- var getTag = baseGetTag; // Fallback for data views, maps, sets, and weak maps in IE 11,
- // for data views in Edge < 14, and promises in Node.js.
- if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map && getTag(new Map()) != mapTag || Promise && getTag(Promise.resolve()) != promiseTag || Set && getTag(new Set()) != setTag || WeakMap && getTag(new WeakMap()) != weakMapTag) {
- getTag = function getTag(value) {
- var result = objectToString.call(value),
- Ctor = result == objectTag ? value.constructor : undefined,
- ctorString = Ctor ? toSource(Ctor) : undefined;
- if (ctorString) {
- switch (ctorString) {
- case dataViewCtorString:
- return dataViewTag;
- case mapCtorString:
- return mapTag;
- case promiseCtorString:
- return promiseTag;
- case setCtorString:
- return setTag;
- case weakMapCtorString:
- return weakMapTag;
- }
- }
- return result;
- };
- }
- /**
- * Checks if `path` exists on `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {Array|string} path The path to check.
- * @param {Function} hasFunc The function to check properties.
- * @returns {boolean} Returns `true` if `path` exists, else `false`.
- */
- function hasPath(object, path, hasFunc) {
- path = isKey(path, object) ? [path] : castPath(path);
- var result,
- index = -1,
- length = path.length;
- while (++index < length) {
- var key = toKey(path[index]);
- if (!(result = object != null && hasFunc(object, key))) {
- break;
- }
- object = object[key];
- }
- if (result) {
- return result;
- }
- var length = object ? object.length : 0;
- return !!length && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object));
- }
- /**
- * Checks if `value` is a valid array-like index.
- *
- * @private
- * @param {*} value The value to check.
- * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
- * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
- */
- function isIndex(value, length) {
- length = length == null ? MAX_SAFE_INTEGER : length;
- return !!length && (typeof value == 'number' || reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;
- }
- /**
- * Checks if `value` is a property name and not a property path.
- *
- * @private
- * @param {*} value The value to check.
- * @param {Object} [object] The object to query keys on.
- * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
- */
- function isKey(value, object) {
- if (isArray(value)) {
- return false;
- }
- var type = _typeof(value);
- if (type == 'number' || type == 'symbol' || type == 'boolean' || value == null || isSymbol(value)) {
- return true;
- }
- return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object);
- }
- /**
- * Checks if `value` is suitable for use as unique object key.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
- */
- function isKeyable(value) {
- var type = _typeof(value);
- return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null;
- }
- /**
- * Checks if `func` has its source masked.
- *
- * @private
- * @param {Function} func The function to check.
- * @returns {boolean} Returns `true` if `func` is masked, else `false`.
- */
- function isMasked(func) {
- return !!maskSrcKey && maskSrcKey in func;
- }
- /**
- * Checks if `value` is likely a prototype object.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
- */
- function isPrototype(value) {
- var Ctor = value && value.constructor,
- proto = typeof Ctor == 'function' && Ctor.prototype || objectProto;
- return value === proto;
- }
- /**
- * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` if suitable for strict
- * equality comparisons, else `false`.
- */
- function isStrictComparable(value) {
- return value === value && !isObject(value);
- }
- /**
- * A specialized version of `matchesProperty` for source values suitable
- * for strict equality comparisons, i.e. `===`.
- *
- * @private
- * @param {string} key The key of the property to get.
- * @param {*} srcValue The value to match.
- * @returns {Function} Returns the new spec function.
- */
- function matchesStrictComparable(key, srcValue) {
- return function (object) {
- if (object == null) {
- return false;
- }
- return object[key] === srcValue && (srcValue !== undefined || key in Object(object));
- };
- }
- /**
- * Converts `string` to a property path array.
- *
- * @private
- * @param {string} string The string to convert.
- * @returns {Array} Returns the property path array.
- */
- var stringToPath = memoize(function (string) {
- string = toString(string);
- var result = [];
- if (reLeadingDot.test(string)) {
- result.push('');
- }
- string.replace(rePropName, function (match, number, quote, string) {
- result.push(quote ? string.replace(reEscapeChar, '$1') : number || match);
- });
- return result;
- });
- /**
- * Converts `value` to a string key if it's not a string or symbol.
- *
- * @private
- * @param {*} value The value to inspect.
- * @returns {string|symbol} Returns the key.
- */
- function toKey(value) {
- if (typeof value == 'string' || isSymbol(value)) {
- return value;
- }
- var result = value + '';
- return result == '0' && 1 / value == -INFINITY ? '-0' : result;
- }
- /**
- * Converts `func` to its source code.
- *
- * @private
- * @param {Function} func The function to process.
- * @returns {string} Returns the source code.
- */
- function toSource(func) {
- if (func != null) {
- try {
- return funcToString.call(func);
- } catch (e) {}
- try {
- return func + '';
- } catch (e) {}
- }
- return '';
- }
- /**
- * Creates an object composed of keys generated from the results of running
- * each element of `collection` thru `iteratee`. The order of grouped values
- * is determined by the order they occur in `collection`. The corresponding
- * value of each key is an array of elements responsible for generating the
- * key. The iteratee is invoked with one argument: (value).
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Collection
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} [iteratee=_.identity]
- * The iteratee to transform keys.
- * @returns {Object} Returns the composed aggregate object.
- * @example
- *
- * _.groupBy([6.1, 4.2, 6.3], Math.floor);
- * // => { '4': [4.2], '6': [6.1, 6.3] }
- *
- * // The `_.property` iteratee shorthand.
- * _.groupBy(['one', 'two', 'three'], 'length');
- * // => { '3': ['one', 'two'], '5': ['three'] }
- */
- var groupBy = createAggregator(function (result, value, key) {
- if (hasOwnProperty.call(result, key)) {
- result[key].push(value);
- } else {
- result[key] = [value];
- }
- });
- /**
- * Creates a function that memoizes the result of `func`. If `resolver` is
- * provided, it determines the cache key for storing the result based on the
- * arguments provided to the memoized function. By default, the first argument
- * provided to the memoized function is used as the map cache key. The `func`
- * is invoked with the `this` binding of the memoized function.
- *
- * **Note:** The cache is exposed as the `cache` property on the memoized
- * function. Its creation may be customized by replacing the `_.memoize.Cache`
- * constructor with one whose instances implement the
- * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
- * method interface of `delete`, `get`, `has`, and `set`.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Function
- * @param {Function} func The function to have its output memoized.
- * @param {Function} [resolver] The function to resolve the cache key.
- * @returns {Function} Returns the new memoized function.
- * @example
- *
- * var object = { 'a': 1, 'b': 2 };
- * var other = { 'c': 3, 'd': 4 };
- *
- * var values = _.memoize(_.values);
- * values(object);
- * // => [1, 2]
- *
- * values(other);
- * // => [3, 4]
- *
- * object.a = 2;
- * values(object);
- * // => [1, 2]
- *
- * // Modify the result cache.
- * values.cache.set(object, ['a', 'b']);
- * values(object);
- * // => ['a', 'b']
- *
- * // Replace `_.memoize.Cache`.
- * _.memoize.Cache = WeakMap;
- */
- function memoize(func, resolver) {
- if (typeof func != 'function' || resolver && typeof resolver != 'function') {
- throw new TypeError(FUNC_ERROR_TEXT);
- }
- var memoized = function memoized() {
- var args = arguments,
- key = resolver ? resolver.apply(this, args) : args[0],
- cache = memoized.cache;
- if (cache.has(key)) {
- return cache.get(key);
- }
- var result = func.apply(this, args);
- memoized.cache = cache.set(key, result);
- return result;
- };
- memoized.cache = new (memoize.Cache || MapCache)();
- return memoized;
- } // Assign cache to `_.memoize`.
- memoize.Cache = MapCache;
- /**
- * Performs a
- * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
- * comparison between two values to determine if they are equivalent.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to compare.
- * @param {*} other The other value to compare.
- * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
- * @example
- *
- * var object = { 'a': 1 };
- * var other = { 'a': 1 };
- *
- * _.eq(object, object);
- * // => true
- *
- * _.eq(object, other);
- * // => false
- *
- * _.eq('a', 'a');
- * // => true
- *
- * _.eq('a', Object('a'));
- * // => false
- *
- * _.eq(NaN, NaN);
- * // => true
- */
- function eq(value, other) {
- return value === other || value !== value && other !== other;
- }
- /**
- * Checks if `value` is likely an `arguments` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an `arguments` object,
- * else `false`.
- * @example
- *
- * _.isArguments(function() { return arguments; }());
- * // => true
- *
- * _.isArguments([1, 2, 3]);
- * // => false
- */
- function isArguments(value) {
- // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
- return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);
- }
- /**
- * Checks if `value` is classified as an `Array` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an array, else `false`.
- * @example
- *
- * _.isArray([1, 2, 3]);
- * // => true
- *
- * _.isArray(document.body.children);
- * // => false
- *
- * _.isArray('abc');
- * // => false
- *
- * _.isArray(_.noop);
- * // => false
- */
- var isArray = Array.isArray;
- /**
- * Checks if `value` is array-like. A value is considered array-like if it's
- * not a function and has a `value.length` that's an integer greater than or
- * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
- * @example
- *
- * _.isArrayLike([1, 2, 3]);
- * // => true
- *
- * _.isArrayLike(document.body.children);
- * // => true
- *
- * _.isArrayLike('abc');
- * // => true
- *
- * _.isArrayLike(_.noop);
- * // => false
- */
- function isArrayLike(value) {
- return value != null && isLength(value.length) && !isFunction(value);
- }
- /**
- * This method is like `_.isArrayLike` except that it also checks if `value`
- * is an object.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an array-like object,
- * else `false`.
- * @example
- *
- * _.isArrayLikeObject([1, 2, 3]);
- * // => true
- *
- * _.isArrayLikeObject(document.body.children);
- * // => true
- *
- * _.isArrayLikeObject('abc');
- * // => false
- *
- * _.isArrayLikeObject(_.noop);
- * // => false
- */
- function isArrayLikeObject(value) {
- return isObjectLike(value) && isArrayLike(value);
- }
- /**
- * Checks if `value` is classified as a `Function` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a function, else `false`.
- * @example
- *
- * _.isFunction(_);
- * // => true
- *
- * _.isFunction(/abc/);
- * // => false
- */
- function isFunction(value) {
- // The use of `Object#toString` avoids issues with the `typeof` operator
- // in Safari 8-9 which returns 'object' for typed array and other constructors.
- var tag = isObject(value) ? objectToString.call(value) : '';
- return tag == funcTag || tag == genTag;
- }
- /**
- * Checks if `value` is a valid array-like length.
- *
- * **Note:** This method is loosely based on
- * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
- * @example
- *
- * _.isLength(3);
- * // => true
- *
- * _.isLength(Number.MIN_VALUE);
- * // => false
- *
- * _.isLength(Infinity);
- * // => false
- *
- * _.isLength('3');
- * // => false
- */
- function isLength(value) {
- return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
- }
- /**
- * Checks if `value` is the
- * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
- * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an object, else `false`.
- * @example
- *
- * _.isObject({});
- * // => true
- *
- * _.isObject([1, 2, 3]);
- * // => true
- *
- * _.isObject(_.noop);
- * // => true
- *
- * _.isObject(null);
- * // => false
- */
- function isObject(value) {
- var type = _typeof(value);
- return !!value && (type == 'object' || type == 'function');
- }
- /**
- * Checks if `value` is object-like. A value is object-like if it's not `null`
- * and has a `typeof` result of "object".
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
- * @example
- *
- * _.isObjectLike({});
- * // => true
- *
- * _.isObjectLike([1, 2, 3]);
- * // => true
- *
- * _.isObjectLike(_.noop);
- * // => false
- *
- * _.isObjectLike(null);
- * // => false
- */
- function isObjectLike(value) {
- return !!value && _typeof(value) == 'object';
- }
- /**
- * Checks if `value` is classified as a `Symbol` primitive or object.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
- * @example
- *
- * _.isSymbol(Symbol.iterator);
- * // => true
- *
- * _.isSymbol('abc');
- * // => false
- */
- function isSymbol(value) {
- return _typeof(value) == 'symbol' || isObjectLike(value) && objectToString.call(value) == symbolTag;
- }
- /**
- * Checks if `value` is classified as a typed array.
- *
- * @static
- * @memberOf _
- * @since 3.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
- * @example
- *
- * _.isTypedArray(new Uint8Array);
- * // => true
- *
- * _.isTypedArray([]);
- * // => false
- */
- var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
- /**
- * Converts `value` to a string. An empty string is returned for `null`
- * and `undefined` values. The sign of `-0` is preserved.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to process.
- * @returns {string} Returns the string.
- * @example
- *
- * _.toString(null);
- * // => ''
- *
- * _.toString(-0);
- * // => '-0'
- *
- * _.toString([1, 2, 3]);
- * // => '1,2,3'
- */
- function toString(value) {
- return value == null ? '' : baseToString(value);
- }
- /**
- * Gets the value at `path` of `object`. If the resolved value is
- * `undefined`, the `defaultValue` is returned in its place.
- *
- * @static
- * @memberOf _
- * @since 3.7.0
- * @category Object
- * @param {Object} object The object to query.
- * @param {Array|string} path The path of the property to get.
- * @param {*} [defaultValue] The value returned for `undefined` resolved values.
- * @returns {*} Returns the resolved value.
- * @example
- *
- * var object = { 'a': [{ 'b': { 'c': 3 } }] };
- *
- * _.get(object, 'a[0].b.c');
- * // => 3
- *
- * _.get(object, ['a', '0', 'b', 'c']);
- * // => 3
- *
- * _.get(object, 'a.b.c', 'default');
- * // => 'default'
- */
- function get(object, path, defaultValue) {
- var result = object == null ? undefined : baseGet(object, path);
- return result === undefined ? defaultValue : result;
- }
- /**
- * Checks if `path` is a direct or inherited property of `object`.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Object
- * @param {Object} object The object to query.
- * @param {Array|string} path The path to check.
- * @returns {boolean} Returns `true` if `path` exists, else `false`.
- * @example
- *
- * var object = _.create({ 'a': _.create({ 'b': 2 }) });
- *
- * _.hasIn(object, 'a');
- * // => true
- *
- * _.hasIn(object, 'a.b');
- * // => true
- *
- * _.hasIn(object, ['a', 'b']);
- * // => true
- *
- * _.hasIn(object, 'b');
- * // => false
- */
- function hasIn(object, path) {
- return object != null && hasPath(object, path, baseHasIn);
- }
- /**
- * Creates an array of the own enumerable property names of `object`.
- *
- * **Note:** Non-object values are coerced to objects. See the
- * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
- * for more details.
- *
- * @static
- * @since 0.1.0
- * @memberOf _
- * @category Object
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names.
- * @example
- *
- * function Foo() {
- * this.a = 1;
- * this.b = 2;
- * }
- *
- * Foo.prototype.c = 3;
- *
- * _.keys(new Foo);
- * // => ['a', 'b'] (iteration order is not guaranteed)
- *
- * _.keys('hi');
- * // => ['0', '1']
- */
- function keys(object) {
- return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
- }
- /**
- * This method returns the first argument it receives.
- *
- * @static
- * @since 0.1.0
- * @memberOf _
- * @category Util
- * @param {*} value Any value.
- * @returns {*} Returns `value`.
- * @example
- *
- * var object = { 'a': 1 };
- *
- * console.log(_.identity(object) === object);
- * // => true
- */
- function identity(value) {
- return value;
- }
- /**
- * Creates a function that returns the value at `path` of a given object.
- *
- * @static
- * @memberOf _
- * @since 2.4.0
- * @category Util
- * @param {Array|string} path The path of the property to get.
- * @returns {Function} Returns the new accessor function.
- * @example
- *
- * var objects = [
- * { 'a': { 'b': 2 } },
- * { 'a': { 'b': 1 } }
- * ];
- *
- * _.map(objects, _.property('a.b'));
- * // => [2, 1]
- *
- * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
- * // => [1, 2]
- */
- function property(path) {
- return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
- }
- module.exports = groupBy;
- }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{}],319:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- /**
- * lodash 3.0.3 (Custom Build) <https://lodash.com/>
- * Build: `lodash modularize exports="npm" -o ./`
- * Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <https://lodash.com/license>
- */
- /** `Object#toString` result references. */
- var boolTag = '[object Boolean]';
- /** Used for built-in method references. */
- var objectProto = Object.prototype;
- /**
- * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
- * of values.
- */
- var objectToString = objectProto.toString;
- /**
- * Checks if `value` is classified as a boolean primitive or object.
- *
- * @static
- * @memberOf _
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
- * @example
- *
- * _.isBoolean(false);
- * // => true
- *
- * _.isBoolean(null);
- * // => false
- */
- function isBoolean(value) {
- return value === true || value === false || isObjectLike(value) && objectToString.call(value) == boolTag;
- }
- /**
- * Checks if `value` is object-like. A value is object-like if it's not `null`
- * and has a `typeof` result of "object".
- *
- * @static
- * @memberOf _
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
- * @example
- *
- * _.isObjectLike({});
- * // => true
- *
- * _.isObjectLike([1, 2, 3]);
- * // => true
- *
- * _.isObjectLike(_.noop);
- * // => false
- *
- * _.isObjectLike(null);
- * // => false
- */
- function isObjectLike(value) {
- return !!value && _typeof(value) == 'object';
- }
- module.exports = isBoolean;
- },{}],320:[function(require,module,exports){
- (function (global){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- /**
- * Lodash (Custom Build) <https://lodash.com/>
- * Build: `lodash modularize exports="npm" -o ./`
- * Copyright JS Foundation and other contributors <https://js.foundation/>
- * Released under MIT license <https://lodash.com/license>
- * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
- * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- */
- /** Used as the size to enable large array optimizations. */
- var LARGE_ARRAY_SIZE = 200;
- /** Used to stand-in for `undefined` hash values. */
- var HASH_UNDEFINED = '__lodash_hash_undefined__';
- /** Used to compose bitmasks for value comparisons. */
- var COMPARE_PARTIAL_FLAG = 1,
- COMPARE_UNORDERED_FLAG = 2;
- /** Used as references for various `Number` constants. */
- var MAX_SAFE_INTEGER = 9007199254740991;
- /** `Object#toString` result references. */
- var argsTag = '[object Arguments]',
- arrayTag = '[object Array]',
- asyncTag = '[object AsyncFunction]',
- boolTag = '[object Boolean]',
- dateTag = '[object Date]',
- errorTag = '[object Error]',
- funcTag = '[object Function]',
- genTag = '[object GeneratorFunction]',
- mapTag = '[object Map]',
- numberTag = '[object Number]',
- nullTag = '[object Null]',
- objectTag = '[object Object]',
- promiseTag = '[object Promise]',
- proxyTag = '[object Proxy]',
- regexpTag = '[object RegExp]',
- setTag = '[object Set]',
- stringTag = '[object String]',
- symbolTag = '[object Symbol]',
- undefinedTag = '[object Undefined]',
- weakMapTag = '[object WeakMap]';
- var arrayBufferTag = '[object ArrayBuffer]',
- dataViewTag = '[object DataView]',
- float32Tag = '[object Float32Array]',
- float64Tag = '[object Float64Array]',
- int8Tag = '[object Int8Array]',
- int16Tag = '[object Int16Array]',
- int32Tag = '[object Int32Array]',
- uint8Tag = '[object Uint8Array]',
- uint8ClampedTag = '[object Uint8ClampedArray]',
- uint16Tag = '[object Uint16Array]',
- uint32Tag = '[object Uint32Array]';
- /**
- * Used to match `RegExp`
- * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
- */
- var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
- /** Used to detect host constructors (Safari). */
- var reIsHostCtor = /^\[object .+?Constructor\]$/;
- /** Used to detect unsigned integer values. */
- var reIsUint = /^(?:0|[1-9]\d*)$/;
- /** Used to identify `toStringTag` values of typed arrays. */
- var typedArrayTags = {};
- typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;
- typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
- /** Detect free variable `global` from Node.js. */
- var freeGlobal = (typeof global === "undefined" ? "undefined" : _typeof(global)) == 'object' && global && global.Object === Object && global;
- /** Detect free variable `self`. */
- var freeSelf = (typeof self === "undefined" ? "undefined" : _typeof(self)) == 'object' && self && self.Object === Object && self;
- /** Used as a reference to the global object. */
- var root = freeGlobal || freeSelf || Function('return this')();
- /** Detect free variable `exports`. */
- var freeExports = (typeof exports === "undefined" ? "undefined" : _typeof(exports)) == 'object' && exports && !exports.nodeType && exports;
- /** Detect free variable `module`. */
- var freeModule = freeExports && (typeof module === "undefined" ? "undefined" : _typeof(module)) == 'object' && module && !module.nodeType && module;
- /** Detect the popular CommonJS extension `module.exports`. */
- var moduleExports = freeModule && freeModule.exports === freeExports;
- /** Detect free variable `process` from Node.js. */
- var freeProcess = moduleExports && freeGlobal.process;
- /** Used to access faster Node.js helpers. */
- var nodeUtil = function () {
- try {
- return freeProcess && freeProcess.binding && freeProcess.binding('util');
- } catch (e) {}
- }();
- /* Node.js helper references. */
- var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
- /**
- * A specialized version of `_.filter` for arrays without support for
- * iteratee shorthands.
- *
- * @private
- * @param {Array} [array] The array to iterate over.
- * @param {Function} predicate The function invoked per iteration.
- * @returns {Array} Returns the new filtered array.
- */
- function arrayFilter(array, predicate) {
- var index = -1,
- length = array == null ? 0 : array.length,
- resIndex = 0,
- result = [];
- while (++index < length) {
- var value = array[index];
- if (predicate(value, index, array)) {
- result[resIndex++] = value;
- }
- }
- return result;
- }
- /**
- * Appends the elements of `values` to `array`.
- *
- * @private
- * @param {Array} array The array to modify.
- * @param {Array} values The values to append.
- * @returns {Array} Returns `array`.
- */
- function arrayPush(array, values) {
- var index = -1,
- length = values.length,
- offset = array.length;
- while (++index < length) {
- array[offset + index] = values[index];
- }
- return array;
- }
- /**
- * A specialized version of `_.some` for arrays without support for iteratee
- * shorthands.
- *
- * @private
- * @param {Array} [array] The array to iterate over.
- * @param {Function} predicate The function invoked per iteration.
- * @returns {boolean} Returns `true` if any element passes the predicate check,
- * else `false`.
- */
- function arraySome(array, predicate) {
- var index = -1,
- length = array == null ? 0 : array.length;
- while (++index < length) {
- if (predicate(array[index], index, array)) {
- return true;
- }
- }
- return false;
- }
- /**
- * The base implementation of `_.times` without support for iteratee shorthands
- * or max array length checks.
- *
- * @private
- * @param {number} n The number of times to invoke `iteratee`.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Array} Returns the array of results.
- */
- function baseTimes(n, iteratee) {
- var index = -1,
- result = Array(n);
- while (++index < n) {
- result[index] = iteratee(index);
- }
- return result;
- }
- /**
- * The base implementation of `_.unary` without support for storing metadata.
- *
- * @private
- * @param {Function} func The function to cap arguments for.
- * @returns {Function} Returns the new capped function.
- */
- function baseUnary(func) {
- return function (value) {
- return func(value);
- };
- }
- /**
- * Checks if a `cache` value for `key` exists.
- *
- * @private
- * @param {Object} cache The cache to query.
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
- function cacheHas(cache, key) {
- return cache.has(key);
- }
- /**
- * Gets the value at `key` of `object`.
- *
- * @private
- * @param {Object} [object] The object to query.
- * @param {string} key The key of the property to get.
- * @returns {*} Returns the property value.
- */
- function getValue(object, key) {
- return object == null ? undefined : object[key];
- }
- /**
- * Converts `map` to its key-value pairs.
- *
- * @private
- * @param {Object} map The map to convert.
- * @returns {Array} Returns the key-value pairs.
- */
- function mapToArray(map) {
- var index = -1,
- result = Array(map.size);
- map.forEach(function (value, key) {
- result[++index] = [key, value];
- });
- return result;
- }
- /**
- * Creates a unary function that invokes `func` with its argument transformed.
- *
- * @private
- * @param {Function} func The function to wrap.
- * @param {Function} transform The argument transform.
- * @returns {Function} Returns the new function.
- */
- function overArg(func, transform) {
- return function (arg) {
- return func(transform(arg));
- };
- }
- /**
- * Converts `set` to an array of its values.
- *
- * @private
- * @param {Object} set The set to convert.
- * @returns {Array} Returns the values.
- */
- function setToArray(set) {
- var index = -1,
- result = Array(set.size);
- set.forEach(function (value) {
- result[++index] = value;
- });
- return result;
- }
- /** Used for built-in method references. */
- var arrayProto = Array.prototype,
- funcProto = Function.prototype,
- objectProto = Object.prototype;
- /** Used to detect overreaching core-js shims. */
- var coreJsData = root['__core-js_shared__'];
- /** Used to resolve the decompiled source of functions. */
- var funcToString = funcProto.toString;
- /** Used to check objects for own properties. */
- var hasOwnProperty = objectProto.hasOwnProperty;
- /** Used to detect methods masquerading as native. */
- var maskSrcKey = function () {
- var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
- return uid ? 'Symbol(src)_1.' + uid : '';
- }();
- /**
- * Used to resolve the
- * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
- * of values.
- */
- var nativeObjectToString = objectProto.toString;
- /** Used to detect if a method is native. */
- var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&').replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$');
- /** Built-in value references. */
- var Buffer = moduleExports ? root.Buffer : undefined,
- _Symbol = root.Symbol,
- Uint8Array = root.Uint8Array,
- propertyIsEnumerable = objectProto.propertyIsEnumerable,
- splice = arrayProto.splice,
- symToStringTag = _Symbol ? _Symbol.toStringTag : undefined;
- /* Built-in method references for those with the same name as other `lodash` methods. */
- var nativeGetSymbols = Object.getOwnPropertySymbols,
- nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,
- nativeKeys = overArg(Object.keys, Object);
- /* Built-in method references that are verified to be native. */
- var DataView = getNative(root, 'DataView'),
- Map = getNative(root, 'Map'),
- Promise = getNative(root, 'Promise'),
- Set = getNative(root, 'Set'),
- WeakMap = getNative(root, 'WeakMap'),
- nativeCreate = getNative(Object, 'create');
- /** Used to detect maps, sets, and weakmaps. */
- var dataViewCtorString = toSource(DataView),
- mapCtorString = toSource(Map),
- promiseCtorString = toSource(Promise),
- setCtorString = toSource(Set),
- weakMapCtorString = toSource(WeakMap);
- /** Used to convert symbols to primitives and strings. */
- var symbolProto = _Symbol ? _Symbol.prototype : undefined,
- symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;
- /**
- * Creates a hash object.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
- function Hash(entries) {
- var index = -1,
- length = entries == null ? 0 : entries.length;
- this.clear();
- while (++index < length) {
- var entry = entries[index];
- this.set(entry[0], entry[1]);
- }
- }
- /**
- * Removes all key-value entries from the hash.
- *
- * @private
- * @name clear
- * @memberOf Hash
- */
- function hashClear() {
- this.__data__ = nativeCreate ? nativeCreate(null) : {};
- this.size = 0;
- }
- /**
- * Removes `key` and its value from the hash.
- *
- * @private
- * @name delete
- * @memberOf Hash
- * @param {Object} hash The hash to modify.
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
- function hashDelete(key) {
- var result = this.has(key) && delete this.__data__[key];
- this.size -= result ? 1 : 0;
- return result;
- }
- /**
- * Gets the hash value for `key`.
- *
- * @private
- * @name get
- * @memberOf Hash
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
- function hashGet(key) {
- var data = this.__data__;
- if (nativeCreate) {
- var result = data[key];
- return result === HASH_UNDEFINED ? undefined : result;
- }
- return hasOwnProperty.call(data, key) ? data[key] : undefined;
- }
- /**
- * Checks if a hash value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf Hash
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
- function hashHas(key) {
- var data = this.__data__;
- return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);
- }
- /**
- * Sets the hash `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf Hash
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the hash instance.
- */
- function hashSet(key, value) {
- var data = this.__data__;
- this.size += this.has(key) ? 0 : 1;
- data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED : value;
- return this;
- } // Add methods to `Hash`.
- Hash.prototype.clear = hashClear;
- Hash.prototype['delete'] = hashDelete;
- Hash.prototype.get = hashGet;
- Hash.prototype.has = hashHas;
- Hash.prototype.set = hashSet;
- /**
- * Creates an list cache object.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
- function ListCache(entries) {
- var index = -1,
- length = entries == null ? 0 : entries.length;
- this.clear();
- while (++index < length) {
- var entry = entries[index];
- this.set(entry[0], entry[1]);
- }
- }
- /**
- * Removes all key-value entries from the list cache.
- *
- * @private
- * @name clear
- * @memberOf ListCache
- */
- function listCacheClear() {
- this.__data__ = [];
- this.size = 0;
- }
- /**
- * Removes `key` and its value from the list cache.
- *
- * @private
- * @name delete
- * @memberOf ListCache
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
- function listCacheDelete(key) {
- var data = this.__data__,
- index = assocIndexOf(data, key);
- if (index < 0) {
- return false;
- }
- var lastIndex = data.length - 1;
- if (index == lastIndex) {
- data.pop();
- } else {
- splice.call(data, index, 1);
- }
- --this.size;
- return true;
- }
- /**
- * Gets the list cache value for `key`.
- *
- * @private
- * @name get
- * @memberOf ListCache
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
- function listCacheGet(key) {
- var data = this.__data__,
- index = assocIndexOf(data, key);
- return index < 0 ? undefined : data[index][1];
- }
- /**
- * Checks if a list cache value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf ListCache
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
- function listCacheHas(key) {
- return assocIndexOf(this.__data__, key) > -1;
- }
- /**
- * Sets the list cache `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf ListCache
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the list cache instance.
- */
- function listCacheSet(key, value) {
- var data = this.__data__,
- index = assocIndexOf(data, key);
- if (index < 0) {
- ++this.size;
- data.push([key, value]);
- } else {
- data[index][1] = value;
- }
- return this;
- } // Add methods to `ListCache`.
- ListCache.prototype.clear = listCacheClear;
- ListCache.prototype['delete'] = listCacheDelete;
- ListCache.prototype.get = listCacheGet;
- ListCache.prototype.has = listCacheHas;
- ListCache.prototype.set = listCacheSet;
- /**
- * Creates a map cache object to store key-value pairs.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
- function MapCache(entries) {
- var index = -1,
- length = entries == null ? 0 : entries.length;
- this.clear();
- while (++index < length) {
- var entry = entries[index];
- this.set(entry[0], entry[1]);
- }
- }
- /**
- * Removes all key-value entries from the map.
- *
- * @private
- * @name clear
- * @memberOf MapCache
- */
- function mapCacheClear() {
- this.size = 0;
- this.__data__ = {
- 'hash': new Hash(),
- 'map': new (Map || ListCache)(),
- 'string': new Hash()
- };
- }
- /**
- * Removes `key` and its value from the map.
- *
- * @private
- * @name delete
- * @memberOf MapCache
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
- function mapCacheDelete(key) {
- var result = getMapData(this, key)['delete'](key);
- this.size -= result ? 1 : 0;
- return result;
- }
- /**
- * Gets the map value for `key`.
- *
- * @private
- * @name get
- * @memberOf MapCache
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
- function mapCacheGet(key) {
- return getMapData(this, key).get(key);
- }
- /**
- * Checks if a map value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf MapCache
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
- function mapCacheHas(key) {
- return getMapData(this, key).has(key);
- }
- /**
- * Sets the map `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf MapCache
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the map cache instance.
- */
- function mapCacheSet(key, value) {
- var data = getMapData(this, key),
- size = data.size;
- data.set(key, value);
- this.size += data.size == size ? 0 : 1;
- return this;
- } // Add methods to `MapCache`.
- MapCache.prototype.clear = mapCacheClear;
- MapCache.prototype['delete'] = mapCacheDelete;
- MapCache.prototype.get = mapCacheGet;
- MapCache.prototype.has = mapCacheHas;
- MapCache.prototype.set = mapCacheSet;
- /**
- *
- * Creates an array cache object to store unique values.
- *
- * @private
- * @constructor
- * @param {Array} [values] The values to cache.
- */
- function SetCache(values) {
- var index = -1,
- length = values == null ? 0 : values.length;
- this.__data__ = new MapCache();
- while (++index < length) {
- this.add(values[index]);
- }
- }
- /**
- * Adds `value` to the array cache.
- *
- * @private
- * @name add
- * @memberOf SetCache
- * @alias push
- * @param {*} value The value to cache.
- * @returns {Object} Returns the cache instance.
- */
- function setCacheAdd(value) {
- this.__data__.set(value, HASH_UNDEFINED);
- return this;
- }
- /**
- * Checks if `value` is in the array cache.
- *
- * @private
- * @name has
- * @memberOf SetCache
- * @param {*} value The value to search for.
- * @returns {number} Returns `true` if `value` is found, else `false`.
- */
- function setCacheHas(value) {
- return this.__data__.has(value);
- } // Add methods to `SetCache`.
- SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
- SetCache.prototype.has = setCacheHas;
- /**
- * Creates a stack cache object to store key-value pairs.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
- function Stack(entries) {
- var data = this.__data__ = new ListCache(entries);
- this.size = data.size;
- }
- /**
- * Removes all key-value entries from the stack.
- *
- * @private
- * @name clear
- * @memberOf Stack
- */
- function stackClear() {
- this.__data__ = new ListCache();
- this.size = 0;
- }
- /**
- * Removes `key` and its value from the stack.
- *
- * @private
- * @name delete
- * @memberOf Stack
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
- function stackDelete(key) {
- var data = this.__data__,
- result = data['delete'](key);
- this.size = data.size;
- return result;
- }
- /**
- * Gets the stack value for `key`.
- *
- * @private
- * @name get
- * @memberOf Stack
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
- function stackGet(key) {
- return this.__data__.get(key);
- }
- /**
- * Checks if a stack value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf Stack
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
- function stackHas(key) {
- return this.__data__.has(key);
- }
- /**
- * Sets the stack `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf Stack
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the stack cache instance.
- */
- function stackSet(key, value) {
- var data = this.__data__;
- if (data instanceof ListCache) {
- var pairs = data.__data__;
- if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) {
- pairs.push([key, value]);
- this.size = ++data.size;
- return this;
- }
- data = this.__data__ = new MapCache(pairs);
- }
- data.set(key, value);
- this.size = data.size;
- return this;
- } // Add methods to `Stack`.
- Stack.prototype.clear = stackClear;
- Stack.prototype['delete'] = stackDelete;
- Stack.prototype.get = stackGet;
- Stack.prototype.has = stackHas;
- Stack.prototype.set = stackSet;
- /**
- * Creates an array of the enumerable property names of the array-like `value`.
- *
- * @private
- * @param {*} value The value to query.
- * @param {boolean} inherited Specify returning inherited property names.
- * @returns {Array} Returns the array of property names.
- */
- function arrayLikeKeys(value, inherited) {
- var isArr = isArray(value),
- isArg = !isArr && isArguments(value),
- isBuff = !isArr && !isArg && isBuffer(value),
- isType = !isArr && !isArg && !isBuff && isTypedArray(value),
- skipIndexes = isArr || isArg || isBuff || isType,
- result = skipIndexes ? baseTimes(value.length, String) : [],
- length = result.length;
- for (var key in value) {
- if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && ( // Safari 9 has enumerable `arguments.length` in strict mode.
- key == 'length' || // Node.js 0.10 has enumerable non-index properties on buffers.
- isBuff && (key == 'offset' || key == 'parent') || // PhantomJS 2 has enumerable non-index properties on typed arrays.
- isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset') || // Skip index properties.
- isIndex(key, length)))) {
- result.push(key);
- }
- }
- return result;
- }
- /**
- * Gets the index at which the `key` is found in `array` of key-value pairs.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {*} key The key to search for.
- * @returns {number} Returns the index of the matched value, else `-1`.
- */
- function assocIndexOf(array, key) {
- var length = array.length;
- while (length--) {
- if (eq(array[length][0], key)) {
- return length;
- }
- }
- return -1;
- }
- /**
- * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
- * `keysFunc` and `symbolsFunc` to get the enumerable property names and
- * symbols of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {Function} keysFunc The function to get the keys of `object`.
- * @param {Function} symbolsFunc The function to get the symbols of `object`.
- * @returns {Array} Returns the array of property names and symbols.
- */
- function baseGetAllKeys(object, keysFunc, symbolsFunc) {
- var result = keysFunc(object);
- return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
- }
- /**
- * The base implementation of `getTag` without fallbacks for buggy environments.
- *
- * @private
- * @param {*} value The value to query.
- * @returns {string} Returns the `toStringTag`.
- */
- function baseGetTag(value) {
- if (value == null) {
- return value === undefined ? undefinedTag : nullTag;
- }
- return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);
- }
- /**
- * The base implementation of `_.isArguments`.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an `arguments` object,
- */
- function baseIsArguments(value) {
- return isObjectLike(value) && baseGetTag(value) == argsTag;
- }
- /**
- * The base implementation of `_.isEqual` which supports partial comparisons
- * and tracks traversed objects.
- *
- * @private
- * @param {*} value The value to compare.
- * @param {*} other The other value to compare.
- * @param {boolean} bitmask The bitmask flags.
- * 1 - Unordered comparison
- * 2 - Partial comparison
- * @param {Function} [customizer] The function to customize comparisons.
- * @param {Object} [stack] Tracks traversed `value` and `other` objects.
- * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
- */
- function baseIsEqual(value, other, bitmask, customizer, stack) {
- if (value === other) {
- return true;
- }
- if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) {
- return value !== value && other !== other;
- }
- return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
- }
- /**
- * A specialized version of `baseIsEqual` for arrays and objects which performs
- * deep comparisons and tracks traversed objects enabling objects with circular
- * references to be compared.
- *
- * @private
- * @param {Object} object The object to compare.
- * @param {Object} other The other object to compare.
- * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
- * @param {Function} customizer The function to customize comparisons.
- * @param {Function} equalFunc The function to determine equivalents of values.
- * @param {Object} [stack] Tracks traversed `object` and `other` objects.
- * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
- */
- function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
- var objIsArr = isArray(object),
- othIsArr = isArray(other),
- objTag = objIsArr ? arrayTag : getTag(object),
- othTag = othIsArr ? arrayTag : getTag(other);
- objTag = objTag == argsTag ? objectTag : objTag;
- othTag = othTag == argsTag ? objectTag : othTag;
- var objIsObj = objTag == objectTag,
- othIsObj = othTag == objectTag,
- isSameTag = objTag == othTag;
- if (isSameTag && isBuffer(object)) {
- if (!isBuffer(other)) {
- return false;
- }
- objIsArr = true;
- objIsObj = false;
- }
- if (isSameTag && !objIsObj) {
- stack || (stack = new Stack());
- return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
- }
- if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
- var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
- othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
- if (objIsWrapped || othIsWrapped) {
- var objUnwrapped = objIsWrapped ? object.value() : object,
- othUnwrapped = othIsWrapped ? other.value() : other;
- stack || (stack = new Stack());
- return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
- }
- }
- if (!isSameTag) {
- return false;
- }
- stack || (stack = new Stack());
- return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
- }
- /**
- * The base implementation of `_.isNative` without bad shim checks.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a native function,
- * else `false`.
- */
- function baseIsNative(value) {
- if (!isObject(value) || isMasked(value)) {
- return false;
- }
- var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
- return pattern.test(toSource(value));
- }
- /**
- * The base implementation of `_.isTypedArray` without Node.js optimizations.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
- */
- function baseIsTypedArray(value) {
- return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
- }
- /**
- * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names.
- */
- function baseKeys(object) {
- if (!isPrototype(object)) {
- return nativeKeys(object);
- }
- var result = [];
- for (var key in Object(object)) {
- if (hasOwnProperty.call(object, key) && key != 'constructor') {
- result.push(key);
- }
- }
- return result;
- }
- /**
- * A specialized version of `baseIsEqualDeep` for arrays with support for
- * partial deep comparisons.
- *
- * @private
- * @param {Array} array The array to compare.
- * @param {Array} other The other array to compare.
- * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
- * @param {Function} customizer The function to customize comparisons.
- * @param {Function} equalFunc The function to determine equivalents of values.
- * @param {Object} stack Tracks traversed `array` and `other` objects.
- * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
- */
- function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
- var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
- arrLength = array.length,
- othLength = other.length;
- if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
- return false;
- } // Assume cyclic values are equal.
- var stacked = stack.get(array);
- if (stacked && stack.get(other)) {
- return stacked == other;
- }
- var index = -1,
- result = true,
- seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache() : undefined;
- stack.set(array, other);
- stack.set(other, array); // Ignore non-index properties.
- while (++index < arrLength) {
- var arrValue = array[index],
- othValue = other[index];
- if (customizer) {
- var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);
- }
- if (compared !== undefined) {
- if (compared) {
- continue;
- }
- result = false;
- break;
- } // Recursively compare arrays (susceptible to call stack limits).
- if (seen) {
- if (!arraySome(other, function (othValue, othIndex) {
- if (!cacheHas(seen, othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
- return seen.push(othIndex);
- }
- })) {
- result = false;
- break;
- }
- } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
- result = false;
- break;
- }
- }
- stack['delete'](array);
- stack['delete'](other);
- return result;
- }
- /**
- * A specialized version of `baseIsEqualDeep` for comparing objects of
- * the same `toStringTag`.
- *
- * **Note:** This function only supports comparing values with tags of
- * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
- *
- * @private
- * @param {Object} object The object to compare.
- * @param {Object} other The other object to compare.
- * @param {string} tag The `toStringTag` of the objects to compare.
- * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
- * @param {Function} customizer The function to customize comparisons.
- * @param {Function} equalFunc The function to determine equivalents of values.
- * @param {Object} stack Tracks traversed `object` and `other` objects.
- * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
- */
- function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
- switch (tag) {
- case dataViewTag:
- if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {
- return false;
- }
- object = object.buffer;
- other = other.buffer;
- case arrayBufferTag:
- if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
- return false;
- }
- return true;
- case boolTag:
- case dateTag:
- case numberTag:
- // Coerce booleans to `1` or `0` and dates to milliseconds.
- // Invalid dates are coerced to `NaN`.
- return eq(+object, +other);
- case errorTag:
- return object.name == other.name && object.message == other.message;
- case regexpTag:
- case stringTag:
- // Coerce regexes to strings and treat strings, primitives and objects,
- // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
- // for more details.
- return object == other + '';
- case mapTag:
- var convert = mapToArray;
- case setTag:
- var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
- convert || (convert = setToArray);
- if (object.size != other.size && !isPartial) {
- return false;
- } // Assume cyclic values are equal.
- var stacked = stack.get(object);
- if (stacked) {
- return stacked == other;
- }
- bitmask |= COMPARE_UNORDERED_FLAG; // Recursively compare objects (susceptible to call stack limits).
- stack.set(object, other);
- var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
- stack['delete'](object);
- return result;
- case symbolTag:
- if (symbolValueOf) {
- return symbolValueOf.call(object) == symbolValueOf.call(other);
- }
- }
- return false;
- }
- /**
- * A specialized version of `baseIsEqualDeep` for objects with support for
- * partial deep comparisons.
- *
- * @private
- * @param {Object} object The object to compare.
- * @param {Object} other The other object to compare.
- * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
- * @param {Function} customizer The function to customize comparisons.
- * @param {Function} equalFunc The function to determine equivalents of values.
- * @param {Object} stack Tracks traversed `object` and `other` objects.
- * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
- */
- function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
- var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
- objProps = getAllKeys(object),
- objLength = objProps.length,
- othProps = getAllKeys(other),
- othLength = othProps.length;
- if (objLength != othLength && !isPartial) {
- return false;
- }
- var index = objLength;
- while (index--) {
- var key = objProps[index];
- if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
- return false;
- }
- } // Assume cyclic values are equal.
- var stacked = stack.get(object);
- if (stacked && stack.get(other)) {
- return stacked == other;
- }
- var result = true;
- stack.set(object, other);
- stack.set(other, object);
- var skipCtor = isPartial;
- while (++index < objLength) {
- key = objProps[index];
- var objValue = object[key],
- othValue = other[key];
- if (customizer) {
- var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);
- } // Recursively compare objects (susceptible to call stack limits).
- if (!(compared === undefined ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {
- result = false;
- break;
- }
- skipCtor || (skipCtor = key == 'constructor');
- }
- if (result && !skipCtor) {
- var objCtor = object.constructor,
- othCtor = other.constructor; // Non `Object` object instances with different constructors are not equal.
- if (objCtor != othCtor && 'constructor' in object && 'constructor' in other && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) {
- result = false;
- }
- }
- stack['delete'](object);
- stack['delete'](other);
- return result;
- }
- /**
- * Creates an array of own enumerable property names and symbols of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names and symbols.
- */
- function getAllKeys(object) {
- return baseGetAllKeys(object, keys, getSymbols);
- }
- /**
- * Gets the data for `map`.
- *
- * @private
- * @param {Object} map The map to query.
- * @param {string} key The reference key.
- * @returns {*} Returns the map data.
- */
- function getMapData(map, key) {
- var data = map.__data__;
- return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map;
- }
- /**
- * Gets the native function at `key` of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {string} key The key of the method to get.
- * @returns {*} Returns the function if it's native, else `undefined`.
- */
- function getNative(object, key) {
- var value = getValue(object, key);
- return baseIsNative(value) ? value : undefined;
- }
- /**
- * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
- *
- * @private
- * @param {*} value The value to query.
- * @returns {string} Returns the raw `toStringTag`.
- */
- function getRawTag(value) {
- var isOwn = hasOwnProperty.call(value, symToStringTag),
- tag = value[symToStringTag];
- try {
- value[symToStringTag] = undefined;
- var unmasked = true;
- } catch (e) {}
- var result = nativeObjectToString.call(value);
- if (unmasked) {
- if (isOwn) {
- value[symToStringTag] = tag;
- } else {
- delete value[symToStringTag];
- }
- }
- return result;
- }
- /**
- * Creates an array of the own enumerable symbols of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of symbols.
- */
- var getSymbols = !nativeGetSymbols ? stubArray : function (object) {
- if (object == null) {
- return [];
- }
- object = Object(object);
- return arrayFilter(nativeGetSymbols(object), function (symbol) {
- return propertyIsEnumerable.call(object, symbol);
- });
- };
- /**
- * Gets the `toStringTag` of `value`.
- *
- * @private
- * @param {*} value The value to query.
- * @returns {string} Returns the `toStringTag`.
- */
- var getTag = baseGetTag; // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
- if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map && getTag(new Map()) != mapTag || Promise && getTag(Promise.resolve()) != promiseTag || Set && getTag(new Set()) != setTag || WeakMap && getTag(new WeakMap()) != weakMapTag) {
- getTag = function getTag(value) {
- var result = baseGetTag(value),
- Ctor = result == objectTag ? value.constructor : undefined,
- ctorString = Ctor ? toSource(Ctor) : '';
- if (ctorString) {
- switch (ctorString) {
- case dataViewCtorString:
- return dataViewTag;
- case mapCtorString:
- return mapTag;
- case promiseCtorString:
- return promiseTag;
- case setCtorString:
- return setTag;
- case weakMapCtorString:
- return weakMapTag;
- }
- }
- return result;
- };
- }
- /**
- * Checks if `value` is a valid array-like index.
- *
- * @private
- * @param {*} value The value to check.
- * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
- * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
- */
- function isIndex(value, length) {
- length = length == null ? MAX_SAFE_INTEGER : length;
- return !!length && (typeof value == 'number' || reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;
- }
- /**
- * Checks if `value` is suitable for use as unique object key.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
- */
- function isKeyable(value) {
- var type = _typeof(value);
- return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null;
- }
- /**
- * Checks if `func` has its source masked.
- *
- * @private
- * @param {Function} func The function to check.
- * @returns {boolean} Returns `true` if `func` is masked, else `false`.
- */
- function isMasked(func) {
- return !!maskSrcKey && maskSrcKey in func;
- }
- /**
- * Checks if `value` is likely a prototype object.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
- */
- function isPrototype(value) {
- var Ctor = value && value.constructor,
- proto = typeof Ctor == 'function' && Ctor.prototype || objectProto;
- return value === proto;
- }
- /**
- * Converts `value` to a string using `Object.prototype.toString`.
- *
- * @private
- * @param {*} value The value to convert.
- * @returns {string} Returns the converted string.
- */
- function objectToString(value) {
- return nativeObjectToString.call(value);
- }
- /**
- * Converts `func` to its source code.
- *
- * @private
- * @param {Function} func The function to convert.
- * @returns {string} Returns the source code.
- */
- function toSource(func) {
- if (func != null) {
- try {
- return funcToString.call(func);
- } catch (e) {}
- try {
- return func + '';
- } catch (e) {}
- }
- return '';
- }
- /**
- * Performs a
- * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
- * comparison between two values to determine if they are equivalent.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to compare.
- * @param {*} other The other value to compare.
- * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
- * @example
- *
- * var object = { 'a': 1 };
- * var other = { 'a': 1 };
- *
- * _.eq(object, object);
- * // => true
- *
- * _.eq(object, other);
- * // => false
- *
- * _.eq('a', 'a');
- * // => true
- *
- * _.eq('a', Object('a'));
- * // => false
- *
- * _.eq(NaN, NaN);
- * // => true
- */
- function eq(value, other) {
- return value === other || value !== value && other !== other;
- }
- /**
- * Checks if `value` is likely an `arguments` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an `arguments` object,
- * else `false`.
- * @example
- *
- * _.isArguments(function() { return arguments; }());
- * // => true
- *
- * _.isArguments([1, 2, 3]);
- * // => false
- */
- var isArguments = baseIsArguments(function () {
- return arguments;
- }()) ? baseIsArguments : function (value) {
- return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');
- };
- /**
- * Checks if `value` is classified as an `Array` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an array, else `false`.
- * @example
- *
- * _.isArray([1, 2, 3]);
- * // => true
- *
- * _.isArray(document.body.children);
- * // => false
- *
- * _.isArray('abc');
- * // => false
- *
- * _.isArray(_.noop);
- * // => false
- */
- var isArray = Array.isArray;
- /**
- * Checks if `value` is array-like. A value is considered array-like if it's
- * not a function and has a `value.length` that's an integer greater than or
- * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
- * @example
- *
- * _.isArrayLike([1, 2, 3]);
- * // => true
- *
- * _.isArrayLike(document.body.children);
- * // => true
- *
- * _.isArrayLike('abc');
- * // => true
- *
- * _.isArrayLike(_.noop);
- * // => false
- */
- function isArrayLike(value) {
- return value != null && isLength(value.length) && !isFunction(value);
- }
- /**
- * Checks if `value` is a buffer.
- *
- * @static
- * @memberOf _
- * @since 4.3.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
- * @example
- *
- * _.isBuffer(new Buffer(2));
- * // => true
- *
- * _.isBuffer(new Uint8Array(2));
- * // => false
- */
- var isBuffer = nativeIsBuffer || stubFalse;
- /**
- * Performs a deep comparison between two values to determine if they are
- * equivalent.
- *
- * **Note:** This method supports comparing arrays, array buffers, booleans,
- * date objects, error objects, maps, numbers, `Object` objects, regexes,
- * sets, strings, symbols, and typed arrays. `Object` objects are compared
- * by their own, not inherited, enumerable properties. Functions and DOM
- * nodes are compared by strict equality, i.e. `===`.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to compare.
- * @param {*} other The other value to compare.
- * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
- * @example
- *
- * var object = { 'a': 1 };
- * var other = { 'a': 1 };
- *
- * _.isEqual(object, other);
- * // => true
- *
- * object === other;
- * // => false
- */
- function isEqual(value, other) {
- return baseIsEqual(value, other);
- }
- /**
- * Checks if `value` is classified as a `Function` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a function, else `false`.
- * @example
- *
- * _.isFunction(_);
- * // => true
- *
- * _.isFunction(/abc/);
- * // => false
- */
- function isFunction(value) {
- if (!isObject(value)) {
- return false;
- } // The use of `Object#toString` avoids issues with the `typeof` operator
- // in Safari 9 which returns 'object' for typed arrays and other constructors.
- var tag = baseGetTag(value);
- return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
- }
- /**
- * Checks if `value` is a valid array-like length.
- *
- * **Note:** This method is loosely based on
- * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
- * @example
- *
- * _.isLength(3);
- * // => true
- *
- * _.isLength(Number.MIN_VALUE);
- * // => false
- *
- * _.isLength(Infinity);
- * // => false
- *
- * _.isLength('3');
- * // => false
- */
- function isLength(value) {
- return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
- }
- /**
- * Checks if `value` is the
- * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
- * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an object, else `false`.
- * @example
- *
- * _.isObject({});
- * // => true
- *
- * _.isObject([1, 2, 3]);
- * // => true
- *
- * _.isObject(_.noop);
- * // => true
- *
- * _.isObject(null);
- * // => false
- */
- function isObject(value) {
- var type = _typeof(value);
- return value != null && (type == 'object' || type == 'function');
- }
- /**
- * Checks if `value` is object-like. A value is object-like if it's not `null`
- * and has a `typeof` result of "object".
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
- * @example
- *
- * _.isObjectLike({});
- * // => true
- *
- * _.isObjectLike([1, 2, 3]);
- * // => true
- *
- * _.isObjectLike(_.noop);
- * // => false
- *
- * _.isObjectLike(null);
- * // => false
- */
- function isObjectLike(value) {
- return value != null && _typeof(value) == 'object';
- }
- /**
- * Checks if `value` is classified as a typed array.
- *
- * @static
- * @memberOf _
- * @since 3.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
- * @example
- *
- * _.isTypedArray(new Uint8Array);
- * // => true
- *
- * _.isTypedArray([]);
- * // => false
- */
- var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
- /**
- * Creates an array of the own enumerable property names of `object`.
- *
- * **Note:** Non-object values are coerced to objects. See the
- * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
- * for more details.
- *
- * @static
- * @since 0.1.0
- * @memberOf _
- * @category Object
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names.
- * @example
- *
- * function Foo() {
- * this.a = 1;
- * this.b = 2;
- * }
- *
- * Foo.prototype.c = 3;
- *
- * _.keys(new Foo);
- * // => ['a', 'b'] (iteration order is not guaranteed)
- *
- * _.keys('hi');
- * // => ['0', '1']
- */
- function keys(object) {
- return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
- }
- /**
- * This method returns a new empty array.
- *
- * @static
- * @memberOf _
- * @since 4.13.0
- * @category Util
- * @returns {Array} Returns the new empty array.
- * @example
- *
- * var arrays = _.times(2, _.stubArray);
- *
- * console.log(arrays);
- * // => [[], []]
- *
- * console.log(arrays[0] === arrays[1]);
- * // => false
- */
- function stubArray() {
- return [];
- }
- /**
- * This method returns `false`.
- *
- * @static
- * @memberOf _
- * @since 4.13.0
- * @category Util
- * @returns {boolean} Returns `false`.
- * @example
- *
- * _.times(2, _.stubFalse);
- * // => [false, false]
- */
- function stubFalse() {
- return false;
- }
- module.exports = isEqual;
- }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{}],321:[function(require,module,exports){
- (function (global){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- /**
- * Lodash (Custom Build) <https://lodash.com/>
- * Build: `lodash modularize exports="npm" -o ./`
- * Copyright JS Foundation and other contributors <https://js.foundation/>
- * Released under MIT license <https://lodash.com/license>
- * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
- * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- */
- /** `Object#toString` result references. */
- var asyncTag = '[object AsyncFunction]',
- funcTag = '[object Function]',
- genTag = '[object GeneratorFunction]',
- nullTag = '[object Null]',
- proxyTag = '[object Proxy]',
- undefinedTag = '[object Undefined]';
- /** Detect free variable `global` from Node.js. */
- var freeGlobal = (typeof global === "undefined" ? "undefined" : _typeof(global)) == 'object' && global && global.Object === Object && global;
- /** Detect free variable `self`. */
- var freeSelf = (typeof self === "undefined" ? "undefined" : _typeof(self)) == 'object' && self && self.Object === Object && self;
- /** Used as a reference to the global object. */
- var root = freeGlobal || freeSelf || Function('return this')();
- /** Used for built-in method references. */
- var objectProto = Object.prototype;
- /** Used to check objects for own properties. */
- var hasOwnProperty = objectProto.hasOwnProperty;
- /**
- * Used to resolve the
- * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
- * of values.
- */
- var nativeObjectToString = objectProto.toString;
- /** Built-in value references. */
- var _Symbol = root.Symbol,
- symToStringTag = _Symbol ? _Symbol.toStringTag : undefined;
- /**
- * The base implementation of `getTag` without fallbacks for buggy environments.
- *
- * @private
- * @param {*} value The value to query.
- * @returns {string} Returns the `toStringTag`.
- */
- function baseGetTag(value) {
- if (value == null) {
- return value === undefined ? undefinedTag : nullTag;
- }
- return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);
- }
- /**
- * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
- *
- * @private
- * @param {*} value The value to query.
- * @returns {string} Returns the raw `toStringTag`.
- */
- function getRawTag(value) {
- var isOwn = hasOwnProperty.call(value, symToStringTag),
- tag = value[symToStringTag];
- try {
- value[symToStringTag] = undefined;
- var unmasked = true;
- } catch (e) {}
- var result = nativeObjectToString.call(value);
- if (unmasked) {
- if (isOwn) {
- value[symToStringTag] = tag;
- } else {
- delete value[symToStringTag];
- }
- }
- return result;
- }
- /**
- * Converts `value` to a string using `Object.prototype.toString`.
- *
- * @private
- * @param {*} value The value to convert.
- * @returns {string} Returns the converted string.
- */
- function objectToString(value) {
- return nativeObjectToString.call(value);
- }
- /**
- * Checks if `value` is classified as a `Function` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a function, else `false`.
- * @example
- *
- * _.isFunction(_);
- * // => true
- *
- * _.isFunction(/abc/);
- * // => false
- */
- function isFunction(value) {
- if (!isObject(value)) {
- return false;
- } // The use of `Object#toString` avoids issues with the `typeof` operator
- // in Safari 9 which returns 'object' for typed arrays and other constructors.
- var tag = baseGetTag(value);
- return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
- }
- /**
- * Checks if `value` is the
- * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
- * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an object, else `false`.
- * @example
- *
- * _.isObject({});
- * // => true
- *
- * _.isObject([1, 2, 3]);
- * // => true
- *
- * _.isObject(_.noop);
- * // => true
- *
- * _.isObject(null);
- * // => false
- */
- function isObject(value) {
- var type = _typeof(value);
- return value != null && (type == 'object' || type == 'function');
- }
- module.exports = isFunction;
- }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{}],322:[function(require,module,exports){
- "use strict";
- /**
- * lodash 4.0.0 (Custom Build) <https://lodash.com/>
- * Build: `lodash modularize exports="npm" -o ./`
- * Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <https://lodash.com/license>
- */
- /**
- * Checks if `value` is `null` or `undefined`.
- *
- * @static
- * @memberOf _
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is nullish, else `false`.
- * @example
- *
- * _.isNil(null);
- * // => true
- *
- * _.isNil(void 0);
- * // => true
- *
- * _.isNil(NaN);
- * // => false
- */
- function isNil(value) {
- return value == null;
- }
- module.exports = isNil;
- },{}],323:[function(require,module,exports){
- "use strict";
- /**
- * lodash 3.0.1 (Custom Build) <https://lodash.com/>
- * Build: `lodash modern modularize exports="npm" -o ./`
- * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <https://lodash.com/license>
- */
- /**
- * Checks if `value` is `undefined`.
- *
- * @static
- * @memberOf _
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
- * @example
- *
- * _.isUndefined(void 0);
- * // => true
- *
- * _.isUndefined(null);
- * // => false
- */
- function isUndefined(value) {
- return value === undefined;
- }
- module.exports = isUndefined;
- },{}],324:[function(require,module,exports){
- (function (global){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- /**
- * lodash (Custom Build) <https://lodash.com/>
- * Build: `lodash modularize exports="npm" -o ./`
- * Copyright jQuery Foundation and other contributors <https://jquery.org/>
- * Released under MIT license <https://lodash.com/license>
- * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
- * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- */
- /** Used as the size to enable large array optimizations. */
- var LARGE_ARRAY_SIZE = 200;
- /** Used to stand-in for `undefined` hash values. */
- var HASH_UNDEFINED = '__lodash_hash_undefined__';
- /** Used as references for various `Number` constants. */
- var INFINITY = 1 / 0;
- /** `Object#toString` result references. */
- var funcTag = '[object Function]',
- genTag = '[object GeneratorFunction]';
- /**
- * Used to match `RegExp`
- * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
- */
- var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
- /** Used to detect host constructors (Safari). */
- var reIsHostCtor = /^\[object .+?Constructor\]$/;
- /** Detect free variable `global` from Node.js. */
- var freeGlobal = (typeof global === "undefined" ? "undefined" : _typeof(global)) == 'object' && global && global.Object === Object && global;
- /** Detect free variable `self`. */
- var freeSelf = (typeof self === "undefined" ? "undefined" : _typeof(self)) == 'object' && self && self.Object === Object && self;
- /** Used as a reference to the global object. */
- var root = freeGlobal || freeSelf || Function('return this')();
- /**
- * A specialized version of `_.includes` for arrays without support for
- * specifying an index to search from.
- *
- * @private
- * @param {Array} [array] The array to inspect.
- * @param {*} target The value to search for.
- * @returns {boolean} Returns `true` if `target` is found, else `false`.
- */
- function arrayIncludes(array, value) {
- var length = array ? array.length : 0;
- return !!length && baseIndexOf(array, value, 0) > -1;
- }
- /**
- * This function is like `arrayIncludes` except that it accepts a comparator.
- *
- * @private
- * @param {Array} [array] The array to inspect.
- * @param {*} target The value to search for.
- * @param {Function} comparator The comparator invoked per element.
- * @returns {boolean} Returns `true` if `target` is found, else `false`.
- */
- function arrayIncludesWith(array, value, comparator) {
- var index = -1,
- length = array ? array.length : 0;
- while (++index < length) {
- if (comparator(value, array[index])) {
- return true;
- }
- }
- return false;
- }
- /**
- * The base implementation of `_.findIndex` and `_.findLastIndex` without
- * support for iteratee shorthands.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {Function} predicate The function invoked per iteration.
- * @param {number} fromIndex The index to search from.
- * @param {boolean} [fromRight] Specify iterating from right to left.
- * @returns {number} Returns the index of the matched value, else `-1`.
- */
- function baseFindIndex(array, predicate, fromIndex, fromRight) {
- var length = array.length,
- index = fromIndex + (fromRight ? 1 : -1);
- while (fromRight ? index-- : ++index < length) {
- if (predicate(array[index], index, array)) {
- return index;
- }
- }
- return -1;
- }
- /**
- * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {*} value The value to search for.
- * @param {number} fromIndex The index to search from.
- * @returns {number} Returns the index of the matched value, else `-1`.
- */
- function baseIndexOf(array, value, fromIndex) {
- if (value !== value) {
- return baseFindIndex(array, baseIsNaN, fromIndex);
- }
- var index = fromIndex - 1,
- length = array.length;
- while (++index < length) {
- if (array[index] === value) {
- return index;
- }
- }
- return -1;
- }
- /**
- * The base implementation of `_.isNaN` without support for number objects.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
- */
- function baseIsNaN(value) {
- return value !== value;
- }
- /**
- * Checks if a cache value for `key` exists.
- *
- * @private
- * @param {Object} cache The cache to query.
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
- function cacheHas(cache, key) {
- return cache.has(key);
- }
- /**
- * Gets the value at `key` of `object`.
- *
- * @private
- * @param {Object} [object] The object to query.
- * @param {string} key The key of the property to get.
- * @returns {*} Returns the property value.
- */
- function getValue(object, key) {
- return object == null ? undefined : object[key];
- }
- /**
- * Checks if `value` is a host object in IE < 9.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
- */
- function isHostObject(value) {
- // Many host objects are `Object` objects that can coerce to strings
- // despite having improperly defined `toString` methods.
- var result = false;
- if (value != null && typeof value.toString != 'function') {
- try {
- result = !!(value + '');
- } catch (e) {}
- }
- return result;
- }
- /**
- * Converts `set` to an array of its values.
- *
- * @private
- * @param {Object} set The set to convert.
- * @returns {Array} Returns the values.
- */
- function setToArray(set) {
- var index = -1,
- result = Array(set.size);
- set.forEach(function (value) {
- result[++index] = value;
- });
- return result;
- }
- /** Used for built-in method references. */
- var arrayProto = Array.prototype,
- funcProto = Function.prototype,
- objectProto = Object.prototype;
- /** Used to detect overreaching core-js shims. */
- var coreJsData = root['__core-js_shared__'];
- /** Used to detect methods masquerading as native. */
- var maskSrcKey = function () {
- var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
- return uid ? 'Symbol(src)_1.' + uid : '';
- }();
- /** Used to resolve the decompiled source of functions. */
- var funcToString = funcProto.toString;
- /** Used to check objects for own properties. */
- var hasOwnProperty = objectProto.hasOwnProperty;
- /**
- * Used to resolve the
- * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
- * of values.
- */
- var objectToString = objectProto.toString;
- /** Used to detect if a method is native. */
- var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&').replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$');
- /** Built-in value references. */
- var splice = arrayProto.splice;
- /* Built-in method references that are verified to be native. */
- var Map = getNative(root, 'Map'),
- Set = getNative(root, 'Set'),
- nativeCreate = getNative(Object, 'create');
- /**
- * Creates a hash object.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
- function Hash(entries) {
- var index = -1,
- length = entries ? entries.length : 0;
- this.clear();
- while (++index < length) {
- var entry = entries[index];
- this.set(entry[0], entry[1]);
- }
- }
- /**
- * Removes all key-value entries from the hash.
- *
- * @private
- * @name clear
- * @memberOf Hash
- */
- function hashClear() {
- this.__data__ = nativeCreate ? nativeCreate(null) : {};
- }
- /**
- * Removes `key` and its value from the hash.
- *
- * @private
- * @name delete
- * @memberOf Hash
- * @param {Object} hash The hash to modify.
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
- function hashDelete(key) {
- return this.has(key) && delete this.__data__[key];
- }
- /**
- * Gets the hash value for `key`.
- *
- * @private
- * @name get
- * @memberOf Hash
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
- function hashGet(key) {
- var data = this.__data__;
- if (nativeCreate) {
- var result = data[key];
- return result === HASH_UNDEFINED ? undefined : result;
- }
- return hasOwnProperty.call(data, key) ? data[key] : undefined;
- }
- /**
- * Checks if a hash value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf Hash
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
- function hashHas(key) {
- var data = this.__data__;
- return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);
- }
- /**
- * Sets the hash `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf Hash
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the hash instance.
- */
- function hashSet(key, value) {
- var data = this.__data__;
- data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED : value;
- return this;
- } // Add methods to `Hash`.
- Hash.prototype.clear = hashClear;
- Hash.prototype['delete'] = hashDelete;
- Hash.prototype.get = hashGet;
- Hash.prototype.has = hashHas;
- Hash.prototype.set = hashSet;
- /**
- * Creates an list cache object.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
- function ListCache(entries) {
- var index = -1,
- length = entries ? entries.length : 0;
- this.clear();
- while (++index < length) {
- var entry = entries[index];
- this.set(entry[0], entry[1]);
- }
- }
- /**
- * Removes all key-value entries from the list cache.
- *
- * @private
- * @name clear
- * @memberOf ListCache
- */
- function listCacheClear() {
- this.__data__ = [];
- }
- /**
- * Removes `key` and its value from the list cache.
- *
- * @private
- * @name delete
- * @memberOf ListCache
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
- function listCacheDelete(key) {
- var data = this.__data__,
- index = assocIndexOf(data, key);
- if (index < 0) {
- return false;
- }
- var lastIndex = data.length - 1;
- if (index == lastIndex) {
- data.pop();
- } else {
- splice.call(data, index, 1);
- }
- return true;
- }
- /**
- * Gets the list cache value for `key`.
- *
- * @private
- * @name get
- * @memberOf ListCache
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
- function listCacheGet(key) {
- var data = this.__data__,
- index = assocIndexOf(data, key);
- return index < 0 ? undefined : data[index][1];
- }
- /**
- * Checks if a list cache value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf ListCache
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
- function listCacheHas(key) {
- return assocIndexOf(this.__data__, key) > -1;
- }
- /**
- * Sets the list cache `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf ListCache
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the list cache instance.
- */
- function listCacheSet(key, value) {
- var data = this.__data__,
- index = assocIndexOf(data, key);
- if (index < 0) {
- data.push([key, value]);
- } else {
- data[index][1] = value;
- }
- return this;
- } // Add methods to `ListCache`.
- ListCache.prototype.clear = listCacheClear;
- ListCache.prototype['delete'] = listCacheDelete;
- ListCache.prototype.get = listCacheGet;
- ListCache.prototype.has = listCacheHas;
- ListCache.prototype.set = listCacheSet;
- /**
- * Creates a map cache object to store key-value pairs.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
- function MapCache(entries) {
- var index = -1,
- length = entries ? entries.length : 0;
- this.clear();
- while (++index < length) {
- var entry = entries[index];
- this.set(entry[0], entry[1]);
- }
- }
- /**
- * Removes all key-value entries from the map.
- *
- * @private
- * @name clear
- * @memberOf MapCache
- */
- function mapCacheClear() {
- this.__data__ = {
- 'hash': new Hash(),
- 'map': new (Map || ListCache)(),
- 'string': new Hash()
- };
- }
- /**
- * Removes `key` and its value from the map.
- *
- * @private
- * @name delete
- * @memberOf MapCache
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
- function mapCacheDelete(key) {
- return getMapData(this, key)['delete'](key);
- }
- /**
- * Gets the map value for `key`.
- *
- * @private
- * @name get
- * @memberOf MapCache
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
- function mapCacheGet(key) {
- return getMapData(this, key).get(key);
- }
- /**
- * Checks if a map value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf MapCache
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
- function mapCacheHas(key) {
- return getMapData(this, key).has(key);
- }
- /**
- * Sets the map `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf MapCache
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the map cache instance.
- */
- function mapCacheSet(key, value) {
- getMapData(this, key).set(key, value);
- return this;
- } // Add methods to `MapCache`.
- MapCache.prototype.clear = mapCacheClear;
- MapCache.prototype['delete'] = mapCacheDelete;
- MapCache.prototype.get = mapCacheGet;
- MapCache.prototype.has = mapCacheHas;
- MapCache.prototype.set = mapCacheSet;
- /**
- *
- * Creates an array cache object to store unique values.
- *
- * @private
- * @constructor
- * @param {Array} [values] The values to cache.
- */
- function SetCache(values) {
- var index = -1,
- length = values ? values.length : 0;
- this.__data__ = new MapCache();
- while (++index < length) {
- this.add(values[index]);
- }
- }
- /**
- * Adds `value` to the array cache.
- *
- * @private
- * @name add
- * @memberOf SetCache
- * @alias push
- * @param {*} value The value to cache.
- * @returns {Object} Returns the cache instance.
- */
- function setCacheAdd(value) {
- this.__data__.set(value, HASH_UNDEFINED);
- return this;
- }
- /**
- * Checks if `value` is in the array cache.
- *
- * @private
- * @name has
- * @memberOf SetCache
- * @param {*} value The value to search for.
- * @returns {number} Returns `true` if `value` is found, else `false`.
- */
- function setCacheHas(value) {
- return this.__data__.has(value);
- } // Add methods to `SetCache`.
- SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
- SetCache.prototype.has = setCacheHas;
- /**
- * Gets the index at which the `key` is found in `array` of key-value pairs.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {*} key The key to search for.
- * @returns {number} Returns the index of the matched value, else `-1`.
- */
- function assocIndexOf(array, key) {
- var length = array.length;
- while (length--) {
- if (eq(array[length][0], key)) {
- return length;
- }
- }
- return -1;
- }
- /**
- * The base implementation of `_.isNative` without bad shim checks.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a native function,
- * else `false`.
- */
- function baseIsNative(value) {
- if (!isObject(value) || isMasked(value)) {
- return false;
- }
- var pattern = isFunction(value) || isHostObject(value) ? reIsNative : reIsHostCtor;
- return pattern.test(toSource(value));
- }
- /**
- * The base implementation of `_.uniqBy` without support for iteratee shorthands.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {Function} [iteratee] The iteratee invoked per element.
- * @param {Function} [comparator] The comparator invoked per element.
- * @returns {Array} Returns the new duplicate free array.
- */
- function baseUniq(array, iteratee, comparator) {
- var index = -1,
- includes = arrayIncludes,
- length = array.length,
- isCommon = true,
- result = [],
- seen = result;
- if (comparator) {
- isCommon = false;
- includes = arrayIncludesWith;
- } else if (length >= LARGE_ARRAY_SIZE) {
- var set = iteratee ? null : createSet(array);
- if (set) {
- return setToArray(set);
- }
- isCommon = false;
- includes = cacheHas;
- seen = new SetCache();
- } else {
- seen = iteratee ? [] : result;
- }
- outer: while (++index < length) {
- var value = array[index],
- computed = iteratee ? iteratee(value) : value;
- value = comparator || value !== 0 ? value : 0;
- if (isCommon && computed === computed) {
- var seenIndex = seen.length;
- while (seenIndex--) {
- if (seen[seenIndex] === computed) {
- continue outer;
- }
- }
- if (iteratee) {
- seen.push(computed);
- }
- result.push(value);
- } else if (!includes(seen, computed, comparator)) {
- if (seen !== result) {
- seen.push(computed);
- }
- result.push(value);
- }
- }
- return result;
- }
- /**
- * Creates a set object of `values`.
- *
- * @private
- * @param {Array} values The values to add to the set.
- * @returns {Object} Returns the new set.
- */
- var createSet = !(Set && 1 / setToArray(new Set([, -0]))[1] == INFINITY) ? noop : function (values) {
- return new Set(values);
- };
- /**
- * Gets the data for `map`.
- *
- * @private
- * @param {Object} map The map to query.
- * @param {string} key The reference key.
- * @returns {*} Returns the map data.
- */
- function getMapData(map, key) {
- var data = map.__data__;
- return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map;
- }
- /**
- * Gets the native function at `key` of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {string} key The key of the method to get.
- * @returns {*} Returns the function if it's native, else `undefined`.
- */
- function getNative(object, key) {
- var value = getValue(object, key);
- return baseIsNative(value) ? value : undefined;
- }
- /**
- * Checks if `value` is suitable for use as unique object key.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
- */
- function isKeyable(value) {
- var type = _typeof(value);
- return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null;
- }
- /**
- * Checks if `func` has its source masked.
- *
- * @private
- * @param {Function} func The function to check.
- * @returns {boolean} Returns `true` if `func` is masked, else `false`.
- */
- function isMasked(func) {
- return !!maskSrcKey && maskSrcKey in func;
- }
- /**
- * Converts `func` to its source code.
- *
- * @private
- * @param {Function} func The function to process.
- * @returns {string} Returns the source code.
- */
- function toSource(func) {
- if (func != null) {
- try {
- return funcToString.call(func);
- } catch (e) {}
- try {
- return func + '';
- } catch (e) {}
- }
- return '';
- }
- /**
- * Creates a duplicate-free version of an array, using
- * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
- * for equality comparisons, in which only the first occurrence of each
- * element is kept.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Array
- * @param {Array} array The array to inspect.
- * @returns {Array} Returns the new duplicate free array.
- * @example
- *
- * _.uniq([2, 1, 2]);
- * // => [2, 1]
- */
- function uniq(array) {
- return array && array.length ? baseUniq(array) : [];
- }
- /**
- * Performs a
- * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
- * comparison between two values to determine if they are equivalent.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to compare.
- * @param {*} other The other value to compare.
- * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
- * @example
- *
- * var object = { 'a': 1 };
- * var other = { 'a': 1 };
- *
- * _.eq(object, object);
- * // => true
- *
- * _.eq(object, other);
- * // => false
- *
- * _.eq('a', 'a');
- * // => true
- *
- * _.eq('a', Object('a'));
- * // => false
- *
- * _.eq(NaN, NaN);
- * // => true
- */
- function eq(value, other) {
- return value === other || value !== value && other !== other;
- }
- /**
- * Checks if `value` is classified as a `Function` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a function, else `false`.
- * @example
- *
- * _.isFunction(_);
- * // => true
- *
- * _.isFunction(/abc/);
- * // => false
- */
- function isFunction(value) {
- // The use of `Object#toString` avoids issues with the `typeof` operator
- // in Safari 8-9 which returns 'object' for typed array and other constructors.
- var tag = isObject(value) ? objectToString.call(value) : '';
- return tag == funcTag || tag == genTag;
- }
- /**
- * Checks if `value` is the
- * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
- * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an object, else `false`.
- * @example
- *
- * _.isObject({});
- * // => true
- *
- * _.isObject([1, 2, 3]);
- * // => true
- *
- * _.isObject(_.noop);
- * // => true
- *
- * _.isObject(null);
- * // => false
- */
- function isObject(value) {
- var type = _typeof(value);
- return !!value && (type == 'object' || type == 'function');
- }
- /**
- * This method returns `undefined`.
- *
- * @static
- * @memberOf _
- * @since 2.3.0
- * @category Util
- * @example
- *
- * _.times(2, _.noop);
- * // => [undefined, undefined]
- */
- function noop() {// No operation performed.
- }
- module.exports = uniq;
- }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{}],325:[function(require,module,exports){
- 'use strict';
- var inherits = require('inherits');
- var HashBase = require('hash-base');
- var Buffer = require('safe-buffer').Buffer;
- var ARRAY16 = new Array(16);
- function MD5() {
- HashBase.call(this, 64); // state
- this._a = 0x67452301;
- this._b = 0xefcdab89;
- this._c = 0x98badcfe;
- this._d = 0x10325476;
- }
- inherits(MD5, HashBase);
- MD5.prototype._update = function () {
- var M = ARRAY16;
- for (var i = 0; i < 16; ++i) {
- M[i] = this._block.readInt32LE(i * 4);
- }
- var a = this._a;
- var b = this._b;
- var c = this._c;
- var d = this._d;
- a = fnF(a, b, c, d, M[0], 0xd76aa478, 7);
- d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12);
- c = fnF(c, d, a, b, M[2], 0x242070db, 17);
- b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22);
- a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7);
- d = fnF(d, a, b, c, M[5], 0x4787c62a, 12);
- c = fnF(c, d, a, b, M[6], 0xa8304613, 17);
- b = fnF(b, c, d, a, M[7], 0xfd469501, 22);
- a = fnF(a, b, c, d, M[8], 0x698098d8, 7);
- d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12);
- c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17);
- b = fnF(b, c, d, a, M[11], 0x895cd7be, 22);
- a = fnF(a, b, c, d, M[12], 0x6b901122, 7);
- d = fnF(d, a, b, c, M[13], 0xfd987193, 12);
- c = fnF(c, d, a, b, M[14], 0xa679438e, 17);
- b = fnF(b, c, d, a, M[15], 0x49b40821, 22);
- a = fnG(a, b, c, d, M[1], 0xf61e2562, 5);
- d = fnG(d, a, b, c, M[6], 0xc040b340, 9);
- c = fnG(c, d, a, b, M[11], 0x265e5a51, 14);
- b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20);
- a = fnG(a, b, c, d, M[5], 0xd62f105d, 5);
- d = fnG(d, a, b, c, M[10], 0x02441453, 9);
- c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14);
- b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20);
- a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5);
- d = fnG(d, a, b, c, M[14], 0xc33707d6, 9);
- c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14);
- b = fnG(b, c, d, a, M[8], 0x455a14ed, 20);
- a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5);
- d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9);
- c = fnG(c, d, a, b, M[7], 0x676f02d9, 14);
- b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20);
- a = fnH(a, b, c, d, M[5], 0xfffa3942, 4);
- d = fnH(d, a, b, c, M[8], 0x8771f681, 11);
- c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16);
- b = fnH(b, c, d, a, M[14], 0xfde5380c, 23);
- a = fnH(a, b, c, d, M[1], 0xa4beea44, 4);
- d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11);
- c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16);
- b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23);
- a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4);
- d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11);
- c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16);
- b = fnH(b, c, d, a, M[6], 0x04881d05, 23);
- a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4);
- d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11);
- c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16);
- b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23);
- a = fnI(a, b, c, d, M[0], 0xf4292244, 6);
- d = fnI(d, a, b, c, M[7], 0x432aff97, 10);
- c = fnI(c, d, a, b, M[14], 0xab9423a7, 15);
- b = fnI(b, c, d, a, M[5], 0xfc93a039, 21);
- a = fnI(a, b, c, d, M[12], 0x655b59c3, 6);
- d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10);
- c = fnI(c, d, a, b, M[10], 0xffeff47d, 15);
- b = fnI(b, c, d, a, M[1], 0x85845dd1, 21);
- a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6);
- d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10);
- c = fnI(c, d, a, b, M[6], 0xa3014314, 15);
- b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21);
- a = fnI(a, b, c, d, M[4], 0xf7537e82, 6);
- d = fnI(d, a, b, c, M[11], 0xbd3af235, 10);
- c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15);
- b = fnI(b, c, d, a, M[9], 0xeb86d391, 21);
- this._a = this._a + a | 0;
- this._b = this._b + b | 0;
- this._c = this._c + c | 0;
- this._d = this._d + d | 0;
- };
- MD5.prototype._digest = function () {
- // create padding and handle blocks
- this._block[this._blockOffset++] = 0x80;
- if (this._blockOffset > 56) {
- this._block.fill(0, this._blockOffset, 64);
- this._update();
- this._blockOffset = 0;
- }
- this._block.fill(0, this._blockOffset, 56);
- this._block.writeUInt32LE(this._length[0], 56);
- this._block.writeUInt32LE(this._length[1], 60);
- this._update(); // produce result
- var buffer = Buffer.allocUnsafe(16);
- buffer.writeInt32LE(this._a, 0);
- buffer.writeInt32LE(this._b, 4);
- buffer.writeInt32LE(this._c, 8);
- buffer.writeInt32LE(this._d, 12);
- return buffer;
- };
- function rotl(x, n) {
- return x << n | x >>> 32 - n;
- }
- function fnF(a, b, c, d, m, k, s) {
- return rotl(a + (b & c | ~b & d) + m + k | 0, s) + b | 0;
- }
- function fnG(a, b, c, d, m, k, s) {
- return rotl(a + (b & d | c & ~d) + m + k | 0, s) + b | 0;
- }
- function fnH(a, b, c, d, m, k, s) {
- return rotl(a + (b ^ c ^ d) + m + k | 0, s) + b | 0;
- }
- function fnI(a, b, c, d, m, k, s) {
- return rotl(a + (c ^ (b | ~d)) + m + k | 0, s) + b | 0;
- }
- module.exports = MD5;
- },{"hash-base":261,"inherits":278,"safe-buffer":384}],326:[function(require,module,exports){
- "use strict";
- var bn = require('bn.js');
- var brorand = require('brorand');
- function MillerRabin(rand) {
- this.rand = rand || new brorand.Rand();
- }
- module.exports = MillerRabin;
- MillerRabin.create = function create(rand) {
- return new MillerRabin(rand);
- };
- MillerRabin.prototype._randbelow = function _randbelow(n) {
- var len = n.bitLength();
- var min_bytes = Math.ceil(len / 8); // Generage random bytes until a number less than n is found.
- // This ensures that 0..n-1 have an equal probability of being selected.
- do {
- var a = new bn(this.rand.generate(min_bytes));
- } while (a.cmp(n) >= 0);
- return a;
- };
- MillerRabin.prototype._randrange = function _randrange(start, stop) {
- // Generate a random number greater than or equal to start and less than stop.
- var size = stop.sub(start);
- return start.add(this._randbelow(size));
- };
- MillerRabin.prototype.test = function test(n, k, cb) {
- var len = n.bitLength();
- var red = bn.mont(n);
- var rone = new bn(1).toRed(red);
- if (!k) k = Math.max(1, len / 48 | 0); // Find d and s, (n - 1) = (2 ^ s) * d;
- var n1 = n.subn(1);
- for (var s = 0; !n1.testn(s); s++) {}
- var d = n.shrn(s);
- var rn1 = n1.toRed(red);
- var prime = true;
- for (; k > 0; k--) {
- var a = this._randrange(new bn(2), n1);
- if (cb) cb(a);
- var x = a.toRed(red).redPow(d);
- if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) continue;
- for (var i = 1; i < s; i++) {
- x = x.redSqr();
- if (x.cmp(rone) === 0) return false;
- if (x.cmp(rn1) === 0) break;
- }
- if (i === s) return false;
- }
- return prime;
- };
- MillerRabin.prototype.getDivisor = function getDivisor(n, k) {
- var len = n.bitLength();
- var red = bn.mont(n);
- var rone = new bn(1).toRed(red);
- if (!k) k = Math.max(1, len / 48 | 0); // Find d and s, (n - 1) = (2 ^ s) * d;
- var n1 = n.subn(1);
- for (var s = 0; !n1.testn(s); s++) {}
- var d = n.shrn(s);
- var rn1 = n1.toRed(red);
- for (; k > 0; k--) {
- var a = this._randrange(new bn(2), n1);
- var g = n.gcd(a);
- if (g.cmpn(1) !== 0) return g;
- var x = a.toRed(red).redPow(d);
- if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) continue;
- for (var i = 1; i < s; i++) {
- x = x.redSqr();
- if (x.cmp(rone) === 0) return x.fromRed().subn(1).gcd(n);
- if (x.cmp(rn1) === 0) break;
- }
- if (i === s) {
- x = x.redSqr();
- return x.fromRed().subn(1).gcd(n);
- }
- }
- return false;
- };
- },{"bn.js":327,"brorand":184}],327:[function(require,module,exports){
- arguments[4][181][0].apply(exports,arguments)
- },{"buffer":185,"dup":181}],328:[function(require,module,exports){
- "use strict";
- module.exports = assert;
- function assert(val, msg) {
- if (!val) throw new Error(msg || 'Assertion failed');
- }
- assert.equal = function assertEqual(l, r, msg) {
- if (l != r) throw new Error(msg || 'Assertion failed: ' + l + ' != ' + r);
- };
- },{}],329:[function(require,module,exports){
- 'use strict';
- var utils = exports;
- function toArray(msg, enc) {
- if (Array.isArray(msg)) return msg.slice();
- if (!msg) return [];
- var res = [];
- if (typeof msg !== 'string') {
- for (var i = 0; i < msg.length; i++) {
- res[i] = msg[i] | 0;
- }
- return res;
- }
- if (enc === 'hex') {
- msg = msg.replace(/[^a-z0-9]+/ig, '');
- if (msg.length % 2 !== 0) msg = '0' + msg;
- for (var i = 0; i < msg.length; i += 2) {
- res.push(parseInt(msg[i] + msg[i + 1], 16));
- }
- } else {
- for (var i = 0; i < msg.length; i++) {
- var c = msg.charCodeAt(i);
- var hi = c >> 8;
- var lo = c & 0xff;
- if (hi) res.push(hi, lo);else res.push(lo);
- }
- }
- return res;
- }
- utils.toArray = toArray;
- function zero2(word) {
- if (word.length === 1) return '0' + word;else return word;
- }
- utils.zero2 = zero2;
- function toHex(msg) {
- var res = '';
- for (var i = 0; i < msg.length; i++) {
- res += zero2(msg[i].toString(16));
- }
- return res;
- }
- utils.toHex = toHex;
- utils.encode = function encode(arr, enc) {
- if (enc === 'hex') return toHex(arr);else return arr;
- };
- },{}],330:[function(require,module,exports){
- // Top level file is just a mixin of submodules & constants
- 'use strict';
- var assign = require('./lib/utils/common').assign;
- var deflate = require('./lib/deflate');
- var inflate = require('./lib/inflate');
- var constants = require('./lib/zlib/constants');
- var pako = {};
- assign(pako, deflate, inflate, constants);
- module.exports = pako;
- },{"./lib/deflate":331,"./lib/inflate":332,"./lib/utils/common":333,"./lib/zlib/constants":336}],331:[function(require,module,exports){
- 'use strict';
- var zlib_deflate = require('./zlib/deflate');
- var utils = require('./utils/common');
- var strings = require('./utils/strings');
- var msg = require('./zlib/messages');
- var ZStream = require('./zlib/zstream');
- var toString = Object.prototype.toString;
- /* Public constants ==========================================================*/
- /* ===========================================================================*/
- var Z_NO_FLUSH = 0;
- var Z_FINISH = 4;
- var Z_OK = 0;
- var Z_STREAM_END = 1;
- var Z_SYNC_FLUSH = 2;
- var Z_DEFAULT_COMPRESSION = -1;
- var Z_DEFAULT_STRATEGY = 0;
- var Z_DEFLATED = 8;
- /* ===========================================================================*/
- /**
- * class Deflate
- *
- * Generic JS-style wrapper for zlib calls. If you don't need
- * streaming behaviour - use more simple functions: [[deflate]],
- * [[deflateRaw]] and [[gzip]].
- **/
- /* internal
- * Deflate.chunks -> Array
- *
- * Chunks of output data, if [[Deflate#onData]] not overridden.
- **/
- /**
- * Deflate.result -> Uint8Array|Array
- *
- * Compressed result, generated by default [[Deflate#onData]]
- * and [[Deflate#onEnd]] handlers. Filled after you push last chunk
- * (call [[Deflate#push]] with `Z_FINISH` / `true` param) or if you
- * push a chunk with explicit flush (call [[Deflate#push]] with
- * `Z_SYNC_FLUSH` param).
- **/
- /**
- * Deflate.err -> Number
- *
- * Error code after deflate finished. 0 (Z_OK) on success.
- * You will not need it in real life, because deflate errors
- * are possible only on wrong options or bad `onData` / `onEnd`
- * custom handlers.
- **/
- /**
- * Deflate.msg -> String
- *
- * Error message, if [[Deflate.err]] != 0
- **/
- /**
- * new Deflate(options)
- * - options (Object): zlib deflate options.
- *
- * Creates new deflator instance with specified params. Throws exception
- * on bad params. Supported options:
- *
- * - `level`
- * - `windowBits`
- * - `memLevel`
- * - `strategy`
- * - `dictionary`
- *
- * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
- * for more information on these.
- *
- * Additional options, for internal needs:
- *
- * - `chunkSize` - size of generated data chunks (16K by default)
- * - `raw` (Boolean) - do raw deflate
- * - `gzip` (Boolean) - create gzip wrapper
- * - `to` (String) - if equal to 'string', then result will be "binary string"
- * (each char code [0..255])
- * - `header` (Object) - custom header for gzip
- * - `text` (Boolean) - true if compressed data believed to be text
- * - `time` (Number) - modification time, unix timestamp
- * - `os` (Number) - operation system code
- * - `extra` (Array) - array of bytes with extra data (max 65536)
- * - `name` (String) - file name (binary string)
- * - `comment` (String) - comment (binary string)
- * - `hcrc` (Boolean) - true if header crc should be added
- *
- * ##### Example:
- *
- * ```javascript
- * var pako = require('pako')
- * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])
- * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);
- *
- * var deflate = new pako.Deflate({ level: 3});
- *
- * deflate.push(chunk1, false);
- * deflate.push(chunk2, true); // true -> last chunk
- *
- * if (deflate.err) { throw new Error(deflate.err); }
- *
- * console.log(deflate.result);
- * ```
- **/
- function Deflate(options) {
- if (!(this instanceof Deflate)) return new Deflate(options);
- this.options = utils.assign({
- level: Z_DEFAULT_COMPRESSION,
- method: Z_DEFLATED,
- chunkSize: 16384,
- windowBits: 15,
- memLevel: 8,
- strategy: Z_DEFAULT_STRATEGY,
- to: ''
- }, options || {});
- var opt = this.options;
- if (opt.raw && opt.windowBits > 0) {
- opt.windowBits = -opt.windowBits;
- } else if (opt.gzip && opt.windowBits > 0 && opt.windowBits < 16) {
- opt.windowBits += 16;
- }
- this.err = 0; // error code, if happens (0 = Z_OK)
- this.msg = ''; // error message
- this.ended = false; // used to avoid multiple onEnd() calls
- this.chunks = []; // chunks of compressed data
- this.strm = new ZStream();
- this.strm.avail_out = 0;
- var status = zlib_deflate.deflateInit2(this.strm, opt.level, opt.method, opt.windowBits, opt.memLevel, opt.strategy);
- if (status !== Z_OK) {
- throw new Error(msg[status]);
- }
- if (opt.header) {
- zlib_deflate.deflateSetHeader(this.strm, opt.header);
- }
- if (opt.dictionary) {
- var dict; // Convert data if needed
- if (typeof opt.dictionary === 'string') {
- // If we need to compress text, change encoding to utf8.
- dict = strings.string2buf(opt.dictionary);
- } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {
- dict = new Uint8Array(opt.dictionary);
- } else {
- dict = opt.dictionary;
- }
- status = zlib_deflate.deflateSetDictionary(this.strm, dict);
- if (status !== Z_OK) {
- throw new Error(msg[status]);
- }
- this._dict_set = true;
- }
- }
- /**
- * Deflate#push(data[, mode]) -> Boolean
- * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be
- * converted to utf8 byte sequence.
- * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.
- * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.
- *
- * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with
- * new compressed chunks. Returns `true` on success. The last data block must have
- * mode Z_FINISH (or `true`). That will flush internal pending buffers and call
- * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you
- * can use mode Z_SYNC_FLUSH, keeping the compression context.
- *
- * On fail call [[Deflate#onEnd]] with error code and return false.
- *
- * We strongly recommend to use `Uint8Array` on input for best speed (output
- * array format is detected automatically). Also, don't skip last param and always
- * use the same type in your code (boolean or number). That will improve JS speed.
- *
- * For regular `Array`-s make sure all elements are [0..255].
- *
- * ##### Example
- *
- * ```javascript
- * push(chunk, false); // push one of data chunks
- * ...
- * push(chunk, true); // push last chunk
- * ```
- **/
- Deflate.prototype.push = function (data, mode) {
- var strm = this.strm;
- var chunkSize = this.options.chunkSize;
- var status, _mode;
- if (this.ended) {
- return false;
- }
- _mode = mode === ~~mode ? mode : mode === true ? Z_FINISH : Z_NO_FLUSH; // Convert data if needed
- if (typeof data === 'string') {
- // If we need to compress text, change encoding to utf8.
- strm.input = strings.string2buf(data);
- } else if (toString.call(data) === '[object ArrayBuffer]') {
- strm.input = new Uint8Array(data);
- } else {
- strm.input = data;
- }
- strm.next_in = 0;
- strm.avail_in = strm.input.length;
- do {
- if (strm.avail_out === 0) {
- strm.output = new utils.Buf8(chunkSize);
- strm.next_out = 0;
- strm.avail_out = chunkSize;
- }
- status = zlib_deflate.deflate(strm, _mode);
- /* no bad return value */
- if (status !== Z_STREAM_END && status !== Z_OK) {
- this.onEnd(status);
- this.ended = true;
- return false;
- }
- if (strm.avail_out === 0 || strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH)) {
- if (this.options.to === 'string') {
- this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));
- } else {
- this.onData(utils.shrinkBuf(strm.output, strm.next_out));
- }
- }
- } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END); // Finalize on the last chunk.
- if (_mode === Z_FINISH) {
- status = zlib_deflate.deflateEnd(this.strm);
- this.onEnd(status);
- this.ended = true;
- return status === Z_OK;
- } // callback interim results if Z_SYNC_FLUSH.
- if (_mode === Z_SYNC_FLUSH) {
- this.onEnd(Z_OK);
- strm.avail_out = 0;
- return true;
- }
- return true;
- };
- /**
- * Deflate#onData(chunk) -> Void
- * - chunk (Uint8Array|Array|String): output data. Type of array depends
- * on js engine support. When string output requested, each chunk
- * will be string.
- *
- * By default, stores data blocks in `chunks[]` property and glue
- * those in `onEnd`. Override this handler, if you need another behaviour.
- **/
- Deflate.prototype.onData = function (chunk) {
- this.chunks.push(chunk);
- };
- /**
- * Deflate#onEnd(status) -> Void
- * - status (Number): deflate status. 0 (Z_OK) on success,
- * other if not.
- *
- * Called once after you tell deflate that the input stream is
- * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)
- * or if an error happened. By default - join collected chunks,
- * free memory and fill `results` / `err` properties.
- **/
- Deflate.prototype.onEnd = function (status) {
- // On success - join
- if (status === Z_OK) {
- if (this.options.to === 'string') {
- this.result = this.chunks.join('');
- } else {
- this.result = utils.flattenChunks(this.chunks);
- }
- }
- this.chunks = [];
- this.err = status;
- this.msg = this.strm.msg;
- };
- /**
- * deflate(data[, options]) -> Uint8Array|Array|String
- * - data (Uint8Array|Array|String): input data to compress.
- * - options (Object): zlib deflate options.
- *
- * Compress `data` with deflate algorithm and `options`.
- *
- * Supported options are:
- *
- * - level
- * - windowBits
- * - memLevel
- * - strategy
- * - dictionary
- *
- * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
- * for more information on these.
- *
- * Sugar (options):
- *
- * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify
- * negative windowBits implicitly.
- * - `to` (String) - if equal to 'string', then result will be "binary string"
- * (each char code [0..255])
- *
- * ##### Example:
- *
- * ```javascript
- * var pako = require('pako')
- * , data = Uint8Array([1,2,3,4,5,6,7,8,9]);
- *
- * console.log(pako.deflate(data));
- * ```
- **/
- function deflate(input, options) {
- var deflator = new Deflate(options);
- deflator.push(input, true); // That will never happens, if you don't cheat with options :)
- if (deflator.err) {
- throw deflator.msg || msg[deflator.err];
- }
- return deflator.result;
- }
- /**
- * deflateRaw(data[, options]) -> Uint8Array|Array|String
- * - data (Uint8Array|Array|String): input data to compress.
- * - options (Object): zlib deflate options.
- *
- * The same as [[deflate]], but creates raw data, without wrapper
- * (header and adler32 crc).
- **/
- function deflateRaw(input, options) {
- options = options || {};
- options.raw = true;
- return deflate(input, options);
- }
- /**
- * gzip(data[, options]) -> Uint8Array|Array|String
- * - data (Uint8Array|Array|String): input data to compress.
- * - options (Object): zlib deflate options.
- *
- * The same as [[deflate]], but create gzip wrapper instead of
- * deflate one.
- **/
- function gzip(input, options) {
- options = options || {};
- options.gzip = true;
- return deflate(input, options);
- }
- exports.Deflate = Deflate;
- exports.deflate = deflate;
- exports.deflateRaw = deflateRaw;
- exports.gzip = gzip;
- },{"./utils/common":333,"./utils/strings":334,"./zlib/deflate":338,"./zlib/messages":343,"./zlib/zstream":345}],332:[function(require,module,exports){
- 'use strict';
- var zlib_inflate = require('./zlib/inflate');
- var utils = require('./utils/common');
- var strings = require('./utils/strings');
- var c = require('./zlib/constants');
- var msg = require('./zlib/messages');
- var ZStream = require('./zlib/zstream');
- var GZheader = require('./zlib/gzheader');
- var toString = Object.prototype.toString;
- /**
- * class Inflate
- *
- * Generic JS-style wrapper for zlib calls. If you don't need
- * streaming behaviour - use more simple functions: [[inflate]]
- * and [[inflateRaw]].
- **/
- /* internal
- * inflate.chunks -> Array
- *
- * Chunks of output data, if [[Inflate#onData]] not overridden.
- **/
- /**
- * Inflate.result -> Uint8Array|Array|String
- *
- * Uncompressed result, generated by default [[Inflate#onData]]
- * and [[Inflate#onEnd]] handlers. Filled after you push last chunk
- * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you
- * push a chunk with explicit flush (call [[Inflate#push]] with
- * `Z_SYNC_FLUSH` param).
- **/
- /**
- * Inflate.err -> Number
- *
- * Error code after inflate finished. 0 (Z_OK) on success.
- * Should be checked if broken data possible.
- **/
- /**
- * Inflate.msg -> String
- *
- * Error message, if [[Inflate.err]] != 0
- **/
- /**
- * new Inflate(options)
- * - options (Object): zlib inflate options.
- *
- * Creates new inflator instance with specified params. Throws exception
- * on bad params. Supported options:
- *
- * - `windowBits`
- * - `dictionary`
- *
- * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
- * for more information on these.
- *
- * Additional options, for internal needs:
- *
- * - `chunkSize` - size of generated data chunks (16K by default)
- * - `raw` (Boolean) - do raw inflate
- * - `to` (String) - if equal to 'string', then result will be converted
- * from utf8 to utf16 (javascript) string. When string output requested,
- * chunk length can differ from `chunkSize`, depending on content.
- *
- * By default, when no options set, autodetect deflate/gzip data format via
- * wrapper header.
- *
- * ##### Example:
- *
- * ```javascript
- * var pako = require('pako')
- * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])
- * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);
- *
- * var inflate = new pako.Inflate({ level: 3});
- *
- * inflate.push(chunk1, false);
- * inflate.push(chunk2, true); // true -> last chunk
- *
- * if (inflate.err) { throw new Error(inflate.err); }
- *
- * console.log(inflate.result);
- * ```
- **/
- function Inflate(options) {
- if (!(this instanceof Inflate)) return new Inflate(options);
- this.options = utils.assign({
- chunkSize: 16384,
- windowBits: 0,
- to: ''
- }, options || {});
- var opt = this.options; // Force window size for `raw` data, if not set directly,
- // because we have no header for autodetect.
- if (opt.raw && opt.windowBits >= 0 && opt.windowBits < 16) {
- opt.windowBits = -opt.windowBits;
- if (opt.windowBits === 0) {
- opt.windowBits = -15;
- }
- } // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate
- if (opt.windowBits >= 0 && opt.windowBits < 16 && !(options && options.windowBits)) {
- opt.windowBits += 32;
- } // Gzip header has no info about windows size, we can do autodetect only
- // for deflate. So, if window size not set, force it to max when gzip possible
- if (opt.windowBits > 15 && opt.windowBits < 48) {
- // bit 3 (16) -> gzipped data
- // bit 4 (32) -> autodetect gzip/deflate
- if ((opt.windowBits & 15) === 0) {
- opt.windowBits |= 15;
- }
- }
- this.err = 0; // error code, if happens (0 = Z_OK)
- this.msg = ''; // error message
- this.ended = false; // used to avoid multiple onEnd() calls
- this.chunks = []; // chunks of compressed data
- this.strm = new ZStream();
- this.strm.avail_out = 0;
- var status = zlib_inflate.inflateInit2(this.strm, opt.windowBits);
- if (status !== c.Z_OK) {
- throw new Error(msg[status]);
- }
- this.header = new GZheader();
- zlib_inflate.inflateGetHeader(this.strm, this.header); // Setup dictionary
- if (opt.dictionary) {
- // Convert data if needed
- if (typeof opt.dictionary === 'string') {
- opt.dictionary = strings.string2buf(opt.dictionary);
- } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {
- opt.dictionary = new Uint8Array(opt.dictionary);
- }
- if (opt.raw) {
- //In raw mode we need to set the dictionary early
- status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary);
- if (status !== c.Z_OK) {
- throw new Error(msg[status]);
- }
- }
- }
- }
- /**
- * Inflate#push(data[, mode]) -> Boolean
- * - data (Uint8Array|Array|ArrayBuffer|String): input data
- * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.
- * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.
- *
- * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with
- * new output chunks. Returns `true` on success. The last data block must have
- * mode Z_FINISH (or `true`). That will flush internal pending buffers and call
- * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you
- * can use mode Z_SYNC_FLUSH, keeping the decompression context.
- *
- * On fail call [[Inflate#onEnd]] with error code and return false.
- *
- * We strongly recommend to use `Uint8Array` on input for best speed (output
- * format is detected automatically). Also, don't skip last param and always
- * use the same type in your code (boolean or number). That will improve JS speed.
- *
- * For regular `Array`-s make sure all elements are [0..255].
- *
- * ##### Example
- *
- * ```javascript
- * push(chunk, false); // push one of data chunks
- * ...
- * push(chunk, true); // push last chunk
- * ```
- **/
- Inflate.prototype.push = function (data, mode) {
- var strm = this.strm;
- var chunkSize = this.options.chunkSize;
- var dictionary = this.options.dictionary;
- var status, _mode;
- var next_out_utf8, tail, utf8str; // Flag to properly process Z_BUF_ERROR on testing inflate call
- // when we check that all output data was flushed.
- var allowBufError = false;
- if (this.ended) {
- return false;
- }
- _mode = mode === ~~mode ? mode : mode === true ? c.Z_FINISH : c.Z_NO_FLUSH; // Convert data if needed
- if (typeof data === 'string') {
- // Only binary strings can be decompressed on practice
- strm.input = strings.binstring2buf(data);
- } else if (toString.call(data) === '[object ArrayBuffer]') {
- strm.input = new Uint8Array(data);
- } else {
- strm.input = data;
- }
- strm.next_in = 0;
- strm.avail_in = strm.input.length;
- do {
- if (strm.avail_out === 0) {
- strm.output = new utils.Buf8(chunkSize);
- strm.next_out = 0;
- strm.avail_out = chunkSize;
- }
- status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH);
- /* no bad return value */
- if (status === c.Z_NEED_DICT && dictionary) {
- status = zlib_inflate.inflateSetDictionary(this.strm, dictionary);
- }
- if (status === c.Z_BUF_ERROR && allowBufError === true) {
- status = c.Z_OK;
- allowBufError = false;
- }
- if (status !== c.Z_STREAM_END && status !== c.Z_OK) {
- this.onEnd(status);
- this.ended = true;
- return false;
- }
- if (strm.next_out) {
- if (strm.avail_out === 0 || status === c.Z_STREAM_END || strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH)) {
- if (this.options.to === 'string') {
- next_out_utf8 = strings.utf8border(strm.output, strm.next_out);
- tail = strm.next_out - next_out_utf8;
- utf8str = strings.buf2string(strm.output, next_out_utf8); // move tail
- strm.next_out = tail;
- strm.avail_out = chunkSize - tail;
- if (tail) {
- utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0);
- }
- this.onData(utf8str);
- } else {
- this.onData(utils.shrinkBuf(strm.output, strm.next_out));
- }
- }
- } // When no more input data, we should check that internal inflate buffers
- // are flushed. The only way to do it when avail_out = 0 - run one more
- // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.
- // Here we set flag to process this error properly.
- //
- // NOTE. Deflate does not return error in this case and does not needs such
- // logic.
- if (strm.avail_in === 0 && strm.avail_out === 0) {
- allowBufError = true;
- }
- } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END);
- if (status === c.Z_STREAM_END) {
- _mode = c.Z_FINISH;
- } // Finalize on the last chunk.
- if (_mode === c.Z_FINISH) {
- status = zlib_inflate.inflateEnd(this.strm);
- this.onEnd(status);
- this.ended = true;
- return status === c.Z_OK;
- } // callback interim results if Z_SYNC_FLUSH.
- if (_mode === c.Z_SYNC_FLUSH) {
- this.onEnd(c.Z_OK);
- strm.avail_out = 0;
- return true;
- }
- return true;
- };
- /**
- * Inflate#onData(chunk) -> Void
- * - chunk (Uint8Array|Array|String): output data. Type of array depends
- * on js engine support. When string output requested, each chunk
- * will be string.
- *
- * By default, stores data blocks in `chunks[]` property and glue
- * those in `onEnd`. Override this handler, if you need another behaviour.
- **/
- Inflate.prototype.onData = function (chunk) {
- this.chunks.push(chunk);
- };
- /**
- * Inflate#onEnd(status) -> Void
- * - status (Number): inflate status. 0 (Z_OK) on success,
- * other if not.
- *
- * Called either after you tell inflate that the input stream is
- * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)
- * or if an error happened. By default - join collected chunks,
- * free memory and fill `results` / `err` properties.
- **/
- Inflate.prototype.onEnd = function (status) {
- // On success - join
- if (status === c.Z_OK) {
- if (this.options.to === 'string') {
- // Glue & convert here, until we teach pako to send
- // utf8 aligned strings to onData
- this.result = this.chunks.join('');
- } else {
- this.result = utils.flattenChunks(this.chunks);
- }
- }
- this.chunks = [];
- this.err = status;
- this.msg = this.strm.msg;
- };
- /**
- * inflate(data[, options]) -> Uint8Array|Array|String
- * - data (Uint8Array|Array|String): input data to decompress.
- * - options (Object): zlib inflate options.
- *
- * Decompress `data` with inflate/ungzip and `options`. Autodetect
- * format via wrapper header by default. That's why we don't provide
- * separate `ungzip` method.
- *
- * Supported options are:
- *
- * - windowBits
- *
- * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
- * for more information.
- *
- * Sugar (options):
- *
- * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify
- * negative windowBits implicitly.
- * - `to` (String) - if equal to 'string', then result will be converted
- * from utf8 to utf16 (javascript) string. When string output requested,
- * chunk length can differ from `chunkSize`, depending on content.
- *
- *
- * ##### Example:
- *
- * ```javascript
- * var pako = require('pako')
- * , input = pako.deflate([1,2,3,4,5,6,7,8,9])
- * , output;
- *
- * try {
- * output = pako.inflate(input);
- * } catch (err)
- * console.log(err);
- * }
- * ```
- **/
- function inflate(input, options) {
- var inflator = new Inflate(options);
- inflator.push(input, true); // That will never happens, if you don't cheat with options :)
- if (inflator.err) {
- throw inflator.msg || msg[inflator.err];
- }
- return inflator.result;
- }
- /**
- * inflateRaw(data[, options]) -> Uint8Array|Array|String
- * - data (Uint8Array|Array|String): input data to decompress.
- * - options (Object): zlib inflate options.
- *
- * The same as [[inflate]], but creates raw data, without wrapper
- * (header and adler32 crc).
- **/
- function inflateRaw(input, options) {
- options = options || {};
- options.raw = true;
- return inflate(input, options);
- }
- /**
- * ungzip(data[, options]) -> Uint8Array|Array|String
- * - data (Uint8Array|Array|String): input data to decompress.
- * - options (Object): zlib inflate options.
- *
- * Just shortcut to [[inflate]], because it autodetects format
- * by header.content. Done for convenience.
- **/
- exports.Inflate = Inflate;
- exports.inflate = inflate;
- exports.inflateRaw = inflateRaw;
- exports.ungzip = inflate;
- },{"./utils/common":333,"./utils/strings":334,"./zlib/constants":336,"./zlib/gzheader":339,"./zlib/inflate":341,"./zlib/messages":343,"./zlib/zstream":345}],333:[function(require,module,exports){
- 'use strict';
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- var TYPED_OK = typeof Uint8Array !== 'undefined' && typeof Uint16Array !== 'undefined' && typeof Int32Array !== 'undefined';
- function _has(obj, key) {
- return Object.prototype.hasOwnProperty.call(obj, key);
- }
- exports.assign = function (obj
- /*from1, from2, from3, ...*/
- ) {
- var sources = Array.prototype.slice.call(arguments, 1);
- while (sources.length) {
- var source = sources.shift();
- if (!source) {
- continue;
- }
- if (_typeof(source) !== 'object') {
- throw new TypeError(source + 'must be non-object');
- }
- for (var p in source) {
- if (_has(source, p)) {
- obj[p] = source[p];
- }
- }
- }
- return obj;
- }; // reduce buffer size, avoiding mem copy
- exports.shrinkBuf = function (buf, size) {
- if (buf.length === size) {
- return buf;
- }
- if (buf.subarray) {
- return buf.subarray(0, size);
- }
- buf.length = size;
- return buf;
- };
- var fnTyped = {
- arraySet: function arraySet(dest, src, src_offs, len, dest_offs) {
- if (src.subarray && dest.subarray) {
- dest.set(src.subarray(src_offs, src_offs + len), dest_offs);
- return;
- } // Fallback to ordinary array
- for (var i = 0; i < len; i++) {
- dest[dest_offs + i] = src[src_offs + i];
- }
- },
- // Join array of chunks to single array.
- flattenChunks: function flattenChunks(chunks) {
- var i, l, len, pos, chunk, result; // calculate data length
- len = 0;
- for (i = 0, l = chunks.length; i < l; i++) {
- len += chunks[i].length;
- } // join chunks
- result = new Uint8Array(len);
- pos = 0;
- for (i = 0, l = chunks.length; i < l; i++) {
- chunk = chunks[i];
- result.set(chunk, pos);
- pos += chunk.length;
- }
- return result;
- }
- };
- var fnUntyped = {
- arraySet: function arraySet(dest, src, src_offs, len, dest_offs) {
- for (var i = 0; i < len; i++) {
- dest[dest_offs + i] = src[src_offs + i];
- }
- },
- // Join array of chunks to single array.
- flattenChunks: function flattenChunks(chunks) {
- return [].concat.apply([], chunks);
- }
- }; // Enable/Disable typed arrays use, for testing
- //
- exports.setTyped = function (on) {
- if (on) {
- exports.Buf8 = Uint8Array;
- exports.Buf16 = Uint16Array;
- exports.Buf32 = Int32Array;
- exports.assign(exports, fnTyped);
- } else {
- exports.Buf8 = Array;
- exports.Buf16 = Array;
- exports.Buf32 = Array;
- exports.assign(exports, fnUntyped);
- }
- };
- exports.setTyped(TYPED_OK);
- },{}],334:[function(require,module,exports){
- // String encode/decode helpers
- 'use strict';
- var utils = require('./common'); // Quick check if we can use fast array to bin string conversion
- //
- // - apply(Array) can fail on Android 2.2
- // - apply(Uint8Array) can fail on iOS 5.1 Safari
- //
- var STR_APPLY_OK = true;
- var STR_APPLY_UIA_OK = true;
- try {
- String.fromCharCode.apply(null, [0]);
- } catch (__) {
- STR_APPLY_OK = false;
- }
- try {
- String.fromCharCode.apply(null, new Uint8Array(1));
- } catch (__) {
- STR_APPLY_UIA_OK = false;
- } // Table with utf8 lengths (calculated by first byte of sequence)
- // Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,
- // because max possible codepoint is 0x10ffff
- var _utf8len = new utils.Buf8(256);
- for (var q = 0; q < 256; q++) {
- _utf8len[q] = q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1;
- }
- _utf8len[254] = _utf8len[254] = 1; // Invalid sequence start
- // convert string to array (typed, when possible)
- exports.string2buf = function (str) {
- var buf,
- c,
- c2,
- m_pos,
- i,
- str_len = str.length,
- buf_len = 0; // count binary size
- for (m_pos = 0; m_pos < str_len; m_pos++) {
- c = str.charCodeAt(m_pos);
- if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) {
- c2 = str.charCodeAt(m_pos + 1);
- if ((c2 & 0xfc00) === 0xdc00) {
- c = 0x10000 + (c - 0xd800 << 10) + (c2 - 0xdc00);
- m_pos++;
- }
- }
- buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;
- } // allocate buffer
- buf = new utils.Buf8(buf_len); // convert
- for (i = 0, m_pos = 0; i < buf_len; m_pos++) {
- c = str.charCodeAt(m_pos);
- if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) {
- c2 = str.charCodeAt(m_pos + 1);
- if ((c2 & 0xfc00) === 0xdc00) {
- c = 0x10000 + (c - 0xd800 << 10) + (c2 - 0xdc00);
- m_pos++;
- }
- }
- if (c < 0x80) {
- /* one byte */
- buf[i++] = c;
- } else if (c < 0x800) {
- /* two bytes */
- buf[i++] = 0xC0 | c >>> 6;
- buf[i++] = 0x80 | c & 0x3f;
- } else if (c < 0x10000) {
- /* three bytes */
- buf[i++] = 0xE0 | c >>> 12;
- buf[i++] = 0x80 | c >>> 6 & 0x3f;
- buf[i++] = 0x80 | c & 0x3f;
- } else {
- /* four bytes */
- buf[i++] = 0xf0 | c >>> 18;
- buf[i++] = 0x80 | c >>> 12 & 0x3f;
- buf[i++] = 0x80 | c >>> 6 & 0x3f;
- buf[i++] = 0x80 | c & 0x3f;
- }
- }
- return buf;
- }; // Helper (used in 2 places)
- function buf2binstring(buf, len) {
- // On Chrome, the arguments in a function call that are allowed is `65534`.
- // If the length of the buffer is smaller than that, we can use this optimization,
- // otherwise we will take a slower path.
- if (len < 65534) {
- if (buf.subarray && STR_APPLY_UIA_OK || !buf.subarray && STR_APPLY_OK) {
- return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));
- }
- }
- var result = '';
- for (var i = 0; i < len; i++) {
- result += String.fromCharCode(buf[i]);
- }
- return result;
- } // Convert byte array to binary string
- exports.buf2binstring = function (buf) {
- return buf2binstring(buf, buf.length);
- }; // Convert binary string (typed, when possible)
- exports.binstring2buf = function (str) {
- var buf = new utils.Buf8(str.length);
- for (var i = 0, len = buf.length; i < len; i++) {
- buf[i] = str.charCodeAt(i);
- }
- return buf;
- }; // convert array to string
- exports.buf2string = function (buf, max) {
- var i, out, c, c_len;
- var len = max || buf.length; // Reserve max possible length (2 words per char)
- // NB: by unknown reasons, Array is significantly faster for
- // String.fromCharCode.apply than Uint16Array.
- var utf16buf = new Array(len * 2);
- for (out = 0, i = 0; i < len;) {
- c = buf[i++]; // quick process ascii
- if (c < 0x80) {
- utf16buf[out++] = c;
- continue;
- }
- c_len = _utf8len[c]; // skip 5 & 6 byte codes
- if (c_len > 4) {
- utf16buf[out++] = 0xfffd;
- i += c_len - 1;
- continue;
- } // apply mask on first byte
- c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; // join the rest
- while (c_len > 1 && i < len) {
- c = c << 6 | buf[i++] & 0x3f;
- c_len--;
- } // terminated by end of string?
- if (c_len > 1) {
- utf16buf[out++] = 0xfffd;
- continue;
- }
- if (c < 0x10000) {
- utf16buf[out++] = c;
- } else {
- c -= 0x10000;
- utf16buf[out++] = 0xd800 | c >> 10 & 0x3ff;
- utf16buf[out++] = 0xdc00 | c & 0x3ff;
- }
- }
- return buf2binstring(utf16buf, out);
- }; // Calculate max possible position in utf8 buffer,
- // that will not break sequence. If that's not possible
- // - (very small limits) return max size as is.
- //
- // buf[] - utf8 bytes array
- // max - length limit (mandatory);
- exports.utf8border = function (buf, max) {
- var pos;
- max = max || buf.length;
- if (max > buf.length) {
- max = buf.length;
- } // go back from last position, until start of sequence found
- pos = max - 1;
- while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) {
- pos--;
- } // Very small and broken sequence,
- // return max, because we should return something anyway.
- if (pos < 0) {
- return max;
- } // If we came to start of buffer - that means buffer is too small,
- // return max too.
- if (pos === 0) {
- return max;
- }
- return pos + _utf8len[buf[pos]] > max ? pos : max;
- };
- },{"./common":333}],335:[function(require,module,exports){
- 'use strict'; // Note: adler32 takes 12% for level 0 and 2% for level 6.
- // It isn't worth it to make additional optimizations as in original.
- // Small size is preferable.
- // (C) 1995-2013 Jean-loup Gailly and Mark Adler
- // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
- //
- // This software is provided 'as-is', without any express or implied
- // warranty. In no event will the authors be held liable for any damages
- // arising from the use of this software.
- //
- // Permission is granted to anyone to use this software for any purpose,
- // including commercial applications, and to alter it and redistribute it
- // freely, subject to the following restrictions:
- //
- // 1. The origin of this software must not be misrepresented; you must not
- // claim that you wrote the original software. If you use this software
- // in a product, an acknowledgment in the product documentation would be
- // appreciated but is not required.
- // 2. Altered source versions must be plainly marked as such, and must not be
- // misrepresented as being the original software.
- // 3. This notice may not be removed or altered from any source distribution.
- function adler32(adler, buf, len, pos) {
- var s1 = adler & 0xffff | 0,
- s2 = adler >>> 16 & 0xffff | 0,
- n = 0;
- while (len !== 0) {
- // Set limit ~ twice less than 5552, to keep
- // s2 in 31-bits, because we force signed ints.
- // in other case %= will fail.
- n = len > 2000 ? 2000 : len;
- len -= n;
- do {
- s1 = s1 + buf[pos++] | 0;
- s2 = s2 + s1 | 0;
- } while (--n);
- s1 %= 65521;
- s2 %= 65521;
- }
- return s1 | s2 << 16 | 0;
- }
- module.exports = adler32;
- },{}],336:[function(require,module,exports){
- 'use strict'; // (C) 1995-2013 Jean-loup Gailly and Mark Adler
- // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
- //
- // This software is provided 'as-is', without any express or implied
- // warranty. In no event will the authors be held liable for any damages
- // arising from the use of this software.
- //
- // Permission is granted to anyone to use this software for any purpose,
- // including commercial applications, and to alter it and redistribute it
- // freely, subject to the following restrictions:
- //
- // 1. The origin of this software must not be misrepresented; you must not
- // claim that you wrote the original software. If you use this software
- // in a product, an acknowledgment in the product documentation would be
- // appreciated but is not required.
- // 2. Altered source versions must be plainly marked as such, and must not be
- // misrepresented as being the original software.
- // 3. This notice may not be removed or altered from any source distribution.
- module.exports = {
- /* Allowed flush values; see deflate() and inflate() below for details */
- Z_NO_FLUSH: 0,
- Z_PARTIAL_FLUSH: 1,
- Z_SYNC_FLUSH: 2,
- Z_FULL_FLUSH: 3,
- Z_FINISH: 4,
- Z_BLOCK: 5,
- Z_TREES: 6,
- /* Return codes for the compression/decompression functions. Negative values
- * are errors, positive values are used for special but normal events.
- */
- Z_OK: 0,
- Z_STREAM_END: 1,
- Z_NEED_DICT: 2,
- Z_ERRNO: -1,
- Z_STREAM_ERROR: -2,
- Z_DATA_ERROR: -3,
- //Z_MEM_ERROR: -4,
- Z_BUF_ERROR: -5,
- //Z_VERSION_ERROR: -6,
- /* compression levels */
- Z_NO_COMPRESSION: 0,
- Z_BEST_SPEED: 1,
- Z_BEST_COMPRESSION: 9,
- Z_DEFAULT_COMPRESSION: -1,
- Z_FILTERED: 1,
- Z_HUFFMAN_ONLY: 2,
- Z_RLE: 3,
- Z_FIXED: 4,
- Z_DEFAULT_STRATEGY: 0,
- /* Possible values of the data_type field (though see inflate()) */
- Z_BINARY: 0,
- Z_TEXT: 1,
- //Z_ASCII: 1, // = Z_TEXT (deprecated)
- Z_UNKNOWN: 2,
- /* The deflate compression method */
- Z_DEFLATED: 8 //Z_NULL: null // Use -1 or null inline, depending on var type
- };
- },{}],337:[function(require,module,exports){
- 'use strict'; // Note: we can't get significant speed boost here.
- // So write code to minimize size - no pregenerated tables
- // and array tools dependencies.
- // (C) 1995-2013 Jean-loup Gailly and Mark Adler
- // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
- //
- // This software is provided 'as-is', without any express or implied
- // warranty. In no event will the authors be held liable for any damages
- // arising from the use of this software.
- //
- // Permission is granted to anyone to use this software for any purpose,
- // including commercial applications, and to alter it and redistribute it
- // freely, subject to the following restrictions:
- //
- // 1. The origin of this software must not be misrepresented; you must not
- // claim that you wrote the original software. If you use this software
- // in a product, an acknowledgment in the product documentation would be
- // appreciated but is not required.
- // 2. Altered source versions must be plainly marked as such, and must not be
- // misrepresented as being the original software.
- // 3. This notice may not be removed or altered from any source distribution.
- // Use ordinary array, since untyped makes no boost here
- function makeTable() {
- var c,
- table = [];
- for (var n = 0; n < 256; n++) {
- c = n;
- for (var k = 0; k < 8; k++) {
- c = c & 1 ? 0xEDB88320 ^ c >>> 1 : c >>> 1;
- }
- table[n] = c;
- }
- return table;
- } // Create table on load. Just 255 signed longs. Not a problem.
- var crcTable = makeTable();
- function crc32(crc, buf, len, pos) {
- var t = crcTable,
- end = pos + len;
- crc ^= -1;
- for (var i = pos; i < end; i++) {
- crc = crc >>> 8 ^ t[(crc ^ buf[i]) & 0xFF];
- }
- return crc ^ -1; // >>> 0;
- }
- module.exports = crc32;
- },{}],338:[function(require,module,exports){
- 'use strict'; // (C) 1995-2013 Jean-loup Gailly and Mark Adler
- // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
- //
- // This software is provided 'as-is', without any express or implied
- // warranty. In no event will the authors be held liable for any damages
- // arising from the use of this software.
- //
- // Permission is granted to anyone to use this software for any purpose,
- // including commercial applications, and to alter it and redistribute it
- // freely, subject to the following restrictions:
- //
- // 1. The origin of this software must not be misrepresented; you must not
- // claim that you wrote the original software. If you use this software
- // in a product, an acknowledgment in the product documentation would be
- // appreciated but is not required.
- // 2. Altered source versions must be plainly marked as such, and must not be
- // misrepresented as being the original software.
- // 3. This notice may not be removed or altered from any source distribution.
- var utils = require('../utils/common');
- var trees = require('./trees');
- var adler32 = require('./adler32');
- var crc32 = require('./crc32');
- var msg = require('./messages');
- /* Public constants ==========================================================*/
- /* ===========================================================================*/
- /* Allowed flush values; see deflate() and inflate() below for details */
- var Z_NO_FLUSH = 0;
- var Z_PARTIAL_FLUSH = 1; //var Z_SYNC_FLUSH = 2;
- var Z_FULL_FLUSH = 3;
- var Z_FINISH = 4;
- var Z_BLOCK = 5; //var Z_TREES = 6;
- /* Return codes for the compression/decompression functions. Negative values
- * are errors, positive values are used for special but normal events.
- */
- var Z_OK = 0;
- var Z_STREAM_END = 1; //var Z_NEED_DICT = 2;
- //var Z_ERRNO = -1;
- var Z_STREAM_ERROR = -2;
- var Z_DATA_ERROR = -3; //var Z_MEM_ERROR = -4;
- var Z_BUF_ERROR = -5; //var Z_VERSION_ERROR = -6;
- /* compression levels */
- //var Z_NO_COMPRESSION = 0;
- //var Z_BEST_SPEED = 1;
- //var Z_BEST_COMPRESSION = 9;
- var Z_DEFAULT_COMPRESSION = -1;
- var Z_FILTERED = 1;
- var Z_HUFFMAN_ONLY = 2;
- var Z_RLE = 3;
- var Z_FIXED = 4;
- var Z_DEFAULT_STRATEGY = 0;
- /* Possible values of the data_type field (though see inflate()) */
- //var Z_BINARY = 0;
- //var Z_TEXT = 1;
- //var Z_ASCII = 1; // = Z_TEXT
- var Z_UNKNOWN = 2;
- /* The deflate compression method */
- var Z_DEFLATED = 8;
- /*============================================================================*/
- var MAX_MEM_LEVEL = 9;
- /* Maximum value for memLevel in deflateInit2 */
- var MAX_WBITS = 15;
- /* 32K LZ77 window */
- var DEF_MEM_LEVEL = 8;
- var LENGTH_CODES = 29;
- /* number of length codes, not counting the special END_BLOCK code */
- var LITERALS = 256;
- /* number of literal bytes 0..255 */
- var L_CODES = LITERALS + 1 + LENGTH_CODES;
- /* number of Literal or Length codes, including the END_BLOCK code */
- var D_CODES = 30;
- /* number of distance codes */
- var BL_CODES = 19;
- /* number of codes used to transfer the bit lengths */
- var HEAP_SIZE = 2 * L_CODES + 1;
- /* maximum heap size */
- var MAX_BITS = 15;
- /* All codes must not exceed MAX_BITS bits */
- var MIN_MATCH = 3;
- var MAX_MATCH = 258;
- var MIN_LOOKAHEAD = MAX_MATCH + MIN_MATCH + 1;
- var PRESET_DICT = 0x20;
- var INIT_STATE = 42;
- var EXTRA_STATE = 69;
- var NAME_STATE = 73;
- var COMMENT_STATE = 91;
- var HCRC_STATE = 103;
- var BUSY_STATE = 113;
- var FINISH_STATE = 666;
- var BS_NEED_MORE = 1;
- /* block not completed, need more input or more output */
- var BS_BLOCK_DONE = 2;
- /* block flush performed */
- var BS_FINISH_STARTED = 3;
- /* finish started, need only more output at next deflate */
- var BS_FINISH_DONE = 4;
- /* finish done, accept no more input or output */
- var OS_CODE = 0x03; // Unix :) . Don't detect, use this default.
- function err(strm, errorCode) {
- strm.msg = msg[errorCode];
- return errorCode;
- }
- function rank(f) {
- return (f << 1) - (f > 4 ? 9 : 0);
- }
- function zero(buf) {
- var len = buf.length;
- while (--len >= 0) {
- buf[len] = 0;
- }
- }
- /* =========================================================================
- * Flush as much pending output as possible. All deflate() output goes
- * through this function so some applications may wish to modify it
- * to avoid allocating a large strm->output buffer and copying into it.
- * (See also read_buf()).
- */
- function flush_pending(strm) {
- var s = strm.state; //_tr_flush_bits(s);
- var len = s.pending;
- if (len > strm.avail_out) {
- len = strm.avail_out;
- }
- if (len === 0) {
- return;
- }
- utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);
- strm.next_out += len;
- s.pending_out += len;
- strm.total_out += len;
- strm.avail_out -= len;
- s.pending -= len;
- if (s.pending === 0) {
- s.pending_out = 0;
- }
- }
- function flush_block_only(s, last) {
- trees._tr_flush_block(s, s.block_start >= 0 ? s.block_start : -1, s.strstart - s.block_start, last);
- s.block_start = s.strstart;
- flush_pending(s.strm);
- }
- function put_byte(s, b) {
- s.pending_buf[s.pending++] = b;
- }
- /* =========================================================================
- * Put a short in the pending buffer. The 16-bit value is put in MSB order.
- * IN assertion: the stream state is correct and there is enough room in
- * pending_buf.
- */
- function putShortMSB(s, b) {
- // put_byte(s, (Byte)(b >> 8));
- // put_byte(s, (Byte)(b & 0xff));
- s.pending_buf[s.pending++] = b >>> 8 & 0xff;
- s.pending_buf[s.pending++] = b & 0xff;
- }
- /* ===========================================================================
- * Read a new buffer from the current input stream, update the adler32
- * and total number of bytes read. All deflate() input goes through
- * this function so some applications may wish to modify it to avoid
- * allocating a large strm->input buffer and copying from it.
- * (See also flush_pending()).
- */
- function read_buf(strm, buf, start, size) {
- var len = strm.avail_in;
- if (len > size) {
- len = size;
- }
- if (len === 0) {
- return 0;
- }
- strm.avail_in -= len; // zmemcpy(buf, strm->next_in, len);
- utils.arraySet(buf, strm.input, strm.next_in, len, start);
- if (strm.state.wrap === 1) {
- strm.adler = adler32(strm.adler, buf, len, start);
- } else if (strm.state.wrap === 2) {
- strm.adler = crc32(strm.adler, buf, len, start);
- }
- strm.next_in += len;
- strm.total_in += len;
- return len;
- }
- /* ===========================================================================
- * Set match_start to the longest match starting at the given string and
- * return its length. Matches shorter or equal to prev_length are discarded,
- * in which case the result is equal to prev_length and match_start is
- * garbage.
- * IN assertions: cur_match is the head of the hash chain for the current
- * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
- * OUT assertion: the match length is not greater than s->lookahead.
- */
- function longest_match(s, cur_match) {
- var chain_length = s.max_chain_length;
- /* max hash chain length */
- var scan = s.strstart;
- /* current string */
- var match;
- /* matched string */
- var len;
- /* length of current match */
- var best_len = s.prev_length;
- /* best match length so far */
- var nice_match = s.nice_match;
- /* stop if match long enough */
- var limit = s.strstart > s.w_size - MIN_LOOKAHEAD ? s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0
- /*NIL*/
- ;
- var _win = s.window; // shortcut
- var wmask = s.w_mask;
- var prev = s.prev;
- /* Stop when cur_match becomes <= limit. To simplify the code,
- * we prevent matches with the string of window index 0.
- */
- var strend = s.strstart + MAX_MATCH;
- var scan_end1 = _win[scan + best_len - 1];
- var scan_end = _win[scan + best_len];
- /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
- * It is easy to get rid of this optimization if necessary.
- */
- // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
- /* Do not waste too much time if we already have a good match: */
- if (s.prev_length >= s.good_match) {
- chain_length >>= 2;
- }
- /* Do not look for matches beyond the end of the input. This is necessary
- * to make deflate deterministic.
- */
- if (nice_match > s.lookahead) {
- nice_match = s.lookahead;
- } // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
- do {
- // Assert(cur_match < s->strstart, "no future");
- match = cur_match;
- /* Skip to next match if the match length cannot increase
- * or if the match length is less than 2. Note that the checks below
- * for insufficient lookahead only occur occasionally for performance
- * reasons. Therefore uninitialized memory will be accessed, and
- * conditional jumps will be made that depend on those values.
- * However the length of the match is limited to the lookahead, so
- * the output of deflate is not affected by the uninitialized values.
- */
- if (_win[match + best_len] !== scan_end || _win[match + best_len - 1] !== scan_end1 || _win[match] !== _win[scan] || _win[++match] !== _win[scan + 1]) {
- continue;
- }
- /* The check at best_len-1 can be removed because it will be made
- * again later. (This heuristic is not always a win.)
- * It is not necessary to compare scan[2] and match[2] since they
- * are always equal when the other bytes match, given that
- * the hash keys are equal and that HASH_BITS >= 8.
- */
- scan += 2;
- match++; // Assert(*scan == *match, "match[2]?");
- /* We check for insufficient lookahead only every 8th comparison;
- * the 256th check will be made at strstart+258.
- */
- do {
- /*jshint noempty:false*/
- } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && scan < strend); // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
- len = MAX_MATCH - (strend - scan);
- scan = strend - MAX_MATCH;
- if (len > best_len) {
- s.match_start = cur_match;
- best_len = len;
- if (len >= nice_match) {
- break;
- }
- scan_end1 = _win[scan + best_len - 1];
- scan_end = _win[scan + best_len];
- }
- } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);
- if (best_len <= s.lookahead) {
- return best_len;
- }
- return s.lookahead;
- }
- /* ===========================================================================
- * Fill the window when the lookahead becomes insufficient.
- * Updates strstart and lookahead.
- *
- * IN assertion: lookahead < MIN_LOOKAHEAD
- * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
- * At least one byte has been read, or avail_in == 0; reads are
- * performed for at least two bytes (required for the zip translate_eol
- * option -- not supported here).
- */
- function fill_window(s) {
- var _w_size = s.w_size;
- var p, n, m, more, str; //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");
- do {
- more = s.window_size - s.lookahead - s.strstart; // JS ints have 32 bit, block below not needed
- /* Deal with !@#$% 64K limit: */
- //if (sizeof(int) <= 2) {
- // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
- // more = wsize;
- //
- // } else if (more == (unsigned)(-1)) {
- // /* Very unlikely, but possible on 16 bit machine if
- // * strstart == 0 && lookahead == 1 (input done a byte at time)
- // */
- // more--;
- // }
- //}
- /* If the window is almost full and there is insufficient lookahead,
- * move the upper half to the lower one to make room in the upper half.
- */
- if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {
- utils.arraySet(s.window, s.window, _w_size, _w_size, 0);
- s.match_start -= _w_size;
- s.strstart -= _w_size;
- /* we now have strstart >= MAX_DIST */
- s.block_start -= _w_size;
- /* Slide the hash table (could be avoided with 32 bit values
- at the expense of memory usage). We slide even when level == 0
- to keep the hash table consistent if we switch back to level > 0
- later. (Using level 0 permanently is not an optimal usage of
- zlib, so we don't care about this pathological case.)
- */
- n = s.hash_size;
- p = n;
- do {
- m = s.head[--p];
- s.head[p] = m >= _w_size ? m - _w_size : 0;
- } while (--n);
- n = _w_size;
- p = n;
- do {
- m = s.prev[--p];
- s.prev[p] = m >= _w_size ? m - _w_size : 0;
- /* If n is not on any hash chain, prev[n] is garbage but
- * its value will never be used.
- */
- } while (--n);
- more += _w_size;
- }
- if (s.strm.avail_in === 0) {
- break;
- }
- /* If there was no sliding:
- * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
- * more == window_size - lookahead - strstart
- * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
- * => more >= window_size - 2*WSIZE + 2
- * In the BIG_MEM or MMAP case (not yet supported),
- * window_size == input_size + MIN_LOOKAHEAD &&
- * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
- * Otherwise, window_size == 2*WSIZE so more >= 2.
- * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
- */
- //Assert(more >= 2, "more < 2");
- n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);
- s.lookahead += n;
- /* Initialize the hash value now that we have some input: */
- if (s.lookahead + s.insert >= MIN_MATCH) {
- str = s.strstart - s.insert;
- s.ins_h = s.window[str];
- /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */
- s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + 1]) & s.hash_mask; //#if MIN_MATCH != 3
- // Call update_hash() MIN_MATCH-3 more times
- //#endif
- while (s.insert) {
- /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */
- s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;
- s.prev[str & s.w_mask] = s.head[s.ins_h];
- s.head[s.ins_h] = str;
- str++;
- s.insert--;
- if (s.lookahead + s.insert < MIN_MATCH) {
- break;
- }
- }
- }
- /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
- * but this is not important since only literal bytes will be emitted.
- */
- } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);
- /* If the WIN_INIT bytes after the end of the current data have never been
- * written, then zero those bytes in order to avoid memory check reports of
- * the use of uninitialized (or uninitialised as Julian writes) bytes by
- * the longest match routines. Update the high water mark for the next
- * time through here. WIN_INIT is set to MAX_MATCH since the longest match
- * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
- */
- // if (s.high_water < s.window_size) {
- // var curr = s.strstart + s.lookahead;
- // var init = 0;
- //
- // if (s.high_water < curr) {
- // /* Previous high water mark below current data -- zero WIN_INIT
- // * bytes or up to end of window, whichever is less.
- // */
- // init = s.window_size - curr;
- // if (init > WIN_INIT)
- // init = WIN_INIT;
- // zmemzero(s->window + curr, (unsigned)init);
- // s->high_water = curr + init;
- // }
- // else if (s->high_water < (ulg)curr + WIN_INIT) {
- // /* High water mark at or above current data, but below current data
- // * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
- // * to end of window, whichever is less.
- // */
- // init = (ulg)curr + WIN_INIT - s->high_water;
- // if (init > s->window_size - s->high_water)
- // init = s->window_size - s->high_water;
- // zmemzero(s->window + s->high_water, (unsigned)init);
- // s->high_water += init;
- // }
- // }
- //
- // Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
- // "not enough room for search");
- }
- /* ===========================================================================
- * Copy without compression as much as possible from the input stream, return
- * the current block state.
- * This function does not insert new strings in the dictionary since
- * uncompressible data is probably not useful. This function is used
- * only for the level=0 compression option.
- * NOTE: this function should be optimized to avoid extra copying from
- * window to pending_buf.
- */
- function deflate_stored(s, flush) {
- /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
- * to pending_buf_size, and each stored block has a 5 byte header:
- */
- var max_block_size = 0xffff;
- if (max_block_size > s.pending_buf_size - 5) {
- max_block_size = s.pending_buf_size - 5;
- }
- /* Copy as much as possible from input to output: */
- for (;;) {
- /* Fill the window as much as possible: */
- if (s.lookahead <= 1) {
- //Assert(s->strstart < s->w_size+MAX_DIST(s) ||
- // s->block_start >= (long)s->w_size, "slide too late");
- // if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||
- // s.block_start >= s.w_size)) {
- // throw new Error("slide too late");
- // }
- fill_window(s);
- if (s.lookahead === 0 && flush === Z_NO_FLUSH) {
- return BS_NEED_MORE;
- }
- if (s.lookahead === 0) {
- break;
- }
- /* flush the current block */
- } //Assert(s->block_start >= 0L, "block gone");
- // if (s.block_start < 0) throw new Error("block gone");
- s.strstart += s.lookahead;
- s.lookahead = 0;
- /* Emit a stored block if pending_buf will be full: */
- var max_start = s.block_start + max_block_size;
- if (s.strstart === 0 || s.strstart >= max_start) {
- /* strstart == 0 is possible when wraparound on 16-bit machine */
- s.lookahead = s.strstart - max_start;
- s.strstart = max_start;
- /*** FLUSH_BLOCK(s, 0); ***/
- flush_block_only(s, false);
- if (s.strm.avail_out === 0) {
- return BS_NEED_MORE;
- }
- /***/
- }
- /* Flush if we may have to slide, otherwise block_start may become
- * negative and the data will be gone:
- */
- if (s.strstart - s.block_start >= s.w_size - MIN_LOOKAHEAD) {
- /*** FLUSH_BLOCK(s, 0); ***/
- flush_block_only(s, false);
- if (s.strm.avail_out === 0) {
- return BS_NEED_MORE;
- }
- /***/
- }
- }
- s.insert = 0;
- if (flush === Z_FINISH) {
- /*** FLUSH_BLOCK(s, 1); ***/
- flush_block_only(s, true);
- if (s.strm.avail_out === 0) {
- return BS_FINISH_STARTED;
- }
- /***/
- return BS_FINISH_DONE;
- }
- if (s.strstart > s.block_start) {
- /*** FLUSH_BLOCK(s, 0); ***/
- flush_block_only(s, false);
- if (s.strm.avail_out === 0) {
- return BS_NEED_MORE;
- }
- /***/
- }
- return BS_NEED_MORE;
- }
- /* ===========================================================================
- * Compress as much as possible from the input stream, return the current
- * block state.
- * This function does not perform lazy evaluation of matches and inserts
- * new strings in the dictionary only for unmatched strings or for short
- * matches. It is used only for the fast compression options.
- */
- function deflate_fast(s, flush) {
- var hash_head;
- /* head of the hash chain */
- var bflush;
- /* set if current block must be flushed */
- for (;;) {
- /* Make sure that we always have enough lookahead, except
- * at the end of the input file. We need MAX_MATCH bytes
- * for the next match, plus MIN_MATCH bytes to insert the
- * string following the next match.
- */
- if (s.lookahead < MIN_LOOKAHEAD) {
- fill_window(s);
- if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
- return BS_NEED_MORE;
- }
- if (s.lookahead === 0) {
- break;
- /* flush the current block */
- }
- }
- /* Insert the string window[strstart .. strstart+2] in the
- * dictionary, and set hash_head to the head of the hash chain:
- */
- hash_head = 0
- /*NIL*/
- ;
- if (s.lookahead >= MIN_MATCH) {
- /*** INSERT_STRING(s, s.strstart, hash_head); ***/
- s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
- hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
- s.head[s.ins_h] = s.strstart;
- /***/
- }
- /* Find the longest match, discarding those <= prev_length.
- * At this point we have always match_length < MIN_MATCH
- */
- if (hash_head !== 0
- /*NIL*/
- && s.strstart - hash_head <= s.w_size - MIN_LOOKAHEAD) {
- /* To simplify the code, we prevent matches with the string
- * of window index 0 (in particular we have to avoid a match
- * of the string with itself at the start of the input file).
- */
- s.match_length = longest_match(s, hash_head);
- /* longest_match() sets match_start */
- }
- if (s.match_length >= MIN_MATCH) {
- // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only
- /*** _tr_tally_dist(s, s.strstart - s.match_start,
- s.match_length - MIN_MATCH, bflush); ***/
- bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);
- s.lookahead -= s.match_length;
- /* Insert new strings in the hash table only if the match length
- * is not too large. This saves time but degrades compression.
- */
- if (s.match_length <= s.max_lazy_match
- /*max_insert_length*/
- && s.lookahead >= MIN_MATCH) {
- s.match_length--;
- /* string at strstart already in table */
- do {
- s.strstart++;
- /*** INSERT_STRING(s, s.strstart, hash_head); ***/
- s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
- hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
- s.head[s.ins_h] = s.strstart;
- /***/
- /* strstart never exceeds WSIZE-MAX_MATCH, so there are
- * always MIN_MATCH bytes ahead.
- */
- } while (--s.match_length !== 0);
- s.strstart++;
- } else {
- s.strstart += s.match_length;
- s.match_length = 0;
- s.ins_h = s.window[s.strstart];
- /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */
- s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + 1]) & s.hash_mask; //#if MIN_MATCH != 3
- // Call UPDATE_HASH() MIN_MATCH-3 more times
- //#endif
- /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
- * matter since it will be recomputed at next deflate call.
- */
- }
- } else {
- /* No match, output a literal byte */
- //Tracevv((stderr,"%c", s.window[s.strstart]));
- /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
- bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
- s.lookahead--;
- s.strstart++;
- }
- if (bflush) {
- /*** FLUSH_BLOCK(s, 0); ***/
- flush_block_only(s, false);
- if (s.strm.avail_out === 0) {
- return BS_NEED_MORE;
- }
- /***/
- }
- }
- s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;
- if (flush === Z_FINISH) {
- /*** FLUSH_BLOCK(s, 1); ***/
- flush_block_only(s, true);
- if (s.strm.avail_out === 0) {
- return BS_FINISH_STARTED;
- }
- /***/
- return BS_FINISH_DONE;
- }
- if (s.last_lit) {
- /*** FLUSH_BLOCK(s, 0); ***/
- flush_block_only(s, false);
- if (s.strm.avail_out === 0) {
- return BS_NEED_MORE;
- }
- /***/
- }
- return BS_BLOCK_DONE;
- }
- /* ===========================================================================
- * Same as above, but achieves better compression. We use a lazy
- * evaluation for matches: a match is finally adopted only if there is
- * no better match at the next window position.
- */
- function deflate_slow(s, flush) {
- var hash_head;
- /* head of hash chain */
- var bflush;
- /* set if current block must be flushed */
- var max_insert;
- /* Process the input block. */
- for (;;) {
- /* Make sure that we always have enough lookahead, except
- * at the end of the input file. We need MAX_MATCH bytes
- * for the next match, plus MIN_MATCH bytes to insert the
- * string following the next match.
- */
- if (s.lookahead < MIN_LOOKAHEAD) {
- fill_window(s);
- if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
- return BS_NEED_MORE;
- }
- if (s.lookahead === 0) {
- break;
- }
- /* flush the current block */
- }
- /* Insert the string window[strstart .. strstart+2] in the
- * dictionary, and set hash_head to the head of the hash chain:
- */
- hash_head = 0
- /*NIL*/
- ;
- if (s.lookahead >= MIN_MATCH) {
- /*** INSERT_STRING(s, s.strstart, hash_head); ***/
- s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
- hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
- s.head[s.ins_h] = s.strstart;
- /***/
- }
- /* Find the longest match, discarding those <= prev_length.
- */
- s.prev_length = s.match_length;
- s.prev_match = s.match_start;
- s.match_length = MIN_MATCH - 1;
- if (hash_head !== 0
- /*NIL*/
- && s.prev_length < s.max_lazy_match && s.strstart - hash_head <= s.w_size - MIN_LOOKAHEAD
- /*MAX_DIST(s)*/
- ) {
- /* To simplify the code, we prevent matches with the string
- * of window index 0 (in particular we have to avoid a match
- * of the string with itself at the start of the input file).
- */
- s.match_length = longest_match(s, hash_head);
- /* longest_match() sets match_start */
- if (s.match_length <= 5 && (s.strategy === Z_FILTERED || s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096
- /*TOO_FAR*/
- )) {
- /* If prev_match is also MIN_MATCH, match_start is garbage
- * but we will ignore the current match anyway.
- */
- s.match_length = MIN_MATCH - 1;
- }
- }
- /* If there was a match at the previous step and the current
- * match is not better, output the previous match:
- */
- if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {
- max_insert = s.strstart + s.lookahead - MIN_MATCH;
- /* Do not insert strings in hash table beyond this. */
- //check_match(s, s.strstart-1, s.prev_match, s.prev_length);
- /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,
- s.prev_length - MIN_MATCH, bflush);***/
- bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);
- /* Insert in hash table all strings up to the end of the match.
- * strstart-1 and strstart are already inserted. If there is not
- * enough lookahead, the last two strings are not inserted in
- * the hash table.
- */
- s.lookahead -= s.prev_length - 1;
- s.prev_length -= 2;
- do {
- if (++s.strstart <= max_insert) {
- /*** INSERT_STRING(s, s.strstart, hash_head); ***/
- s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
- hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
- s.head[s.ins_h] = s.strstart;
- /***/
- }
- } while (--s.prev_length !== 0);
- s.match_available = 0;
- s.match_length = MIN_MATCH - 1;
- s.strstart++;
- if (bflush) {
- /*** FLUSH_BLOCK(s, 0); ***/
- flush_block_only(s, false);
- if (s.strm.avail_out === 0) {
- return BS_NEED_MORE;
- }
- /***/
- }
- } else if (s.match_available) {
- /* If there was no match at the previous position, output a
- * single literal. If there was a match but the current match
- * is longer, truncate the previous match to a single literal.
- */
- //Tracevv((stderr,"%c", s->window[s->strstart-1]));
- /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
- bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);
- if (bflush) {
- /*** FLUSH_BLOCK_ONLY(s, 0) ***/
- flush_block_only(s, false);
- /***/
- }
- s.strstart++;
- s.lookahead--;
- if (s.strm.avail_out === 0) {
- return BS_NEED_MORE;
- }
- } else {
- /* There is no previous match to compare with, wait for
- * the next step to decide.
- */
- s.match_available = 1;
- s.strstart++;
- s.lookahead--;
- }
- } //Assert (flush != Z_NO_FLUSH, "no flush?");
- if (s.match_available) {
- //Tracevv((stderr,"%c", s->window[s->strstart-1]));
- /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
- bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);
- s.match_available = 0;
- }
- s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;
- if (flush === Z_FINISH) {
- /*** FLUSH_BLOCK(s, 1); ***/
- flush_block_only(s, true);
- if (s.strm.avail_out === 0) {
- return BS_FINISH_STARTED;
- }
- /***/
- return BS_FINISH_DONE;
- }
- if (s.last_lit) {
- /*** FLUSH_BLOCK(s, 0); ***/
- flush_block_only(s, false);
- if (s.strm.avail_out === 0) {
- return BS_NEED_MORE;
- }
- /***/
- }
- return BS_BLOCK_DONE;
- }
- /* ===========================================================================
- * For Z_RLE, simply look for runs of bytes, generate matches only of distance
- * one. Do not maintain a hash table. (It will be regenerated if this run of
- * deflate switches away from Z_RLE.)
- */
- function deflate_rle(s, flush) {
- var bflush;
- /* set if current block must be flushed */
- var prev;
- /* byte at distance one to match */
- var scan, strend;
- /* scan goes up to strend for length of run */
- var _win = s.window;
- for (;;) {
- /* Make sure that we always have enough lookahead, except
- * at the end of the input file. We need MAX_MATCH bytes
- * for the longest run, plus one for the unrolled loop.
- */
- if (s.lookahead <= MAX_MATCH) {
- fill_window(s);
- if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {
- return BS_NEED_MORE;
- }
- if (s.lookahead === 0) {
- break;
- }
- /* flush the current block */
- }
- /* See how many times the previous byte repeats */
- s.match_length = 0;
- if (s.lookahead >= MIN_MATCH && s.strstart > 0) {
- scan = s.strstart - 1;
- prev = _win[scan];
- if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {
- strend = s.strstart + MAX_MATCH;
- do {
- /*jshint noempty:false*/
- } while (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && scan < strend);
- s.match_length = MAX_MATCH - (strend - scan);
- if (s.match_length > s.lookahead) {
- s.match_length = s.lookahead;
- }
- } //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan");
- }
- /* Emit match if have run of MIN_MATCH or longer, else emit literal */
- if (s.match_length >= MIN_MATCH) {
- //check_match(s, s.strstart, s.strstart - 1, s.match_length);
- /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/
- bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);
- s.lookahead -= s.match_length;
- s.strstart += s.match_length;
- s.match_length = 0;
- } else {
- /* No match, output a literal byte */
- //Tracevv((stderr,"%c", s->window[s->strstart]));
- /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
- bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
- s.lookahead--;
- s.strstart++;
- }
- if (bflush) {
- /*** FLUSH_BLOCK(s, 0); ***/
- flush_block_only(s, false);
- if (s.strm.avail_out === 0) {
- return BS_NEED_MORE;
- }
- /***/
- }
- }
- s.insert = 0;
- if (flush === Z_FINISH) {
- /*** FLUSH_BLOCK(s, 1); ***/
- flush_block_only(s, true);
- if (s.strm.avail_out === 0) {
- return BS_FINISH_STARTED;
- }
- /***/
- return BS_FINISH_DONE;
- }
- if (s.last_lit) {
- /*** FLUSH_BLOCK(s, 0); ***/
- flush_block_only(s, false);
- if (s.strm.avail_out === 0) {
- return BS_NEED_MORE;
- }
- /***/
- }
- return BS_BLOCK_DONE;
- }
- /* ===========================================================================
- * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.
- * (It will be regenerated if this run of deflate switches away from Huffman.)
- */
- function deflate_huff(s, flush) {
- var bflush;
- /* set if current block must be flushed */
- for (;;) {
- /* Make sure that we have a literal to write. */
- if (s.lookahead === 0) {
- fill_window(s);
- if (s.lookahead === 0) {
- if (flush === Z_NO_FLUSH) {
- return BS_NEED_MORE;
- }
- break;
- /* flush the current block */
- }
- }
- /* Output a literal byte */
- s.match_length = 0; //Tracevv((stderr,"%c", s->window[s->strstart]));
- /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
- bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
- s.lookahead--;
- s.strstart++;
- if (bflush) {
- /*** FLUSH_BLOCK(s, 0); ***/
- flush_block_only(s, false);
- if (s.strm.avail_out === 0) {
- return BS_NEED_MORE;
- }
- /***/
- }
- }
- s.insert = 0;
- if (flush === Z_FINISH) {
- /*** FLUSH_BLOCK(s, 1); ***/
- flush_block_only(s, true);
- if (s.strm.avail_out === 0) {
- return BS_FINISH_STARTED;
- }
- /***/
- return BS_FINISH_DONE;
- }
- if (s.last_lit) {
- /*** FLUSH_BLOCK(s, 0); ***/
- flush_block_only(s, false);
- if (s.strm.avail_out === 0) {
- return BS_NEED_MORE;
- }
- /***/
- }
- return BS_BLOCK_DONE;
- }
- /* Values for max_lazy_match, good_match and max_chain_length, depending on
- * the desired pack level (0..9). The values given below have been tuned to
- * exclude worst case performance for pathological files. Better values may be
- * found for specific files.
- */
- function Config(good_length, max_lazy, nice_length, max_chain, func) {
- this.good_length = good_length;
- this.max_lazy = max_lazy;
- this.nice_length = nice_length;
- this.max_chain = max_chain;
- this.func = func;
- }
- var configuration_table;
- configuration_table = [
- /* good lazy nice chain */
- new Config(0, 0, 0, 0, deflate_stored),
- /* 0 store only */
- new Config(4, 4, 8, 4, deflate_fast),
- /* 1 max speed, no lazy matches */
- new Config(4, 5, 16, 8, deflate_fast),
- /* 2 */
- new Config(4, 6, 32, 32, deflate_fast),
- /* 3 */
- new Config(4, 4, 16, 16, deflate_slow),
- /* 4 lazy matches */
- new Config(8, 16, 32, 32, deflate_slow),
- /* 5 */
- new Config(8, 16, 128, 128, deflate_slow),
- /* 6 */
- new Config(8, 32, 128, 256, deflate_slow),
- /* 7 */
- new Config(32, 128, 258, 1024, deflate_slow),
- /* 8 */
- new Config(32, 258, 258, 4096, deflate_slow)
- /* 9 max compression */
- ];
- /* ===========================================================================
- * Initialize the "longest match" routines for a new zlib stream
- */
- function lm_init(s) {
- s.window_size = 2 * s.w_size;
- /*** CLEAR_HASH(s); ***/
- zero(s.head); // Fill with NIL (= 0);
- /* Set the default configuration parameters:
- */
- s.max_lazy_match = configuration_table[s.level].max_lazy;
- s.good_match = configuration_table[s.level].good_length;
- s.nice_match = configuration_table[s.level].nice_length;
- s.max_chain_length = configuration_table[s.level].max_chain;
- s.strstart = 0;
- s.block_start = 0;
- s.lookahead = 0;
- s.insert = 0;
- s.match_length = s.prev_length = MIN_MATCH - 1;
- s.match_available = 0;
- s.ins_h = 0;
- }
- function DeflateState() {
- this.strm = null;
- /* pointer back to this zlib stream */
- this.status = 0;
- /* as the name implies */
- this.pending_buf = null;
- /* output still pending */
- this.pending_buf_size = 0;
- /* size of pending_buf */
- this.pending_out = 0;
- /* next pending byte to output to the stream */
- this.pending = 0;
- /* nb of bytes in the pending buffer */
- this.wrap = 0;
- /* bit 0 true for zlib, bit 1 true for gzip */
- this.gzhead = null;
- /* gzip header information to write */
- this.gzindex = 0;
- /* where in extra, name, or comment */
- this.method = Z_DEFLATED;
- /* can only be DEFLATED */
- this.last_flush = -1;
- /* value of flush param for previous deflate call */
- this.w_size = 0;
- /* LZ77 window size (32K by default) */
- this.w_bits = 0;
- /* log2(w_size) (8..16) */
- this.w_mask = 0;
- /* w_size - 1 */
- this.window = null;
- /* Sliding window. Input bytes are read into the second half of the window,
- * and move to the first half later to keep a dictionary of at least wSize
- * bytes. With this organization, matches are limited to a distance of
- * wSize-MAX_MATCH bytes, but this ensures that IO is always
- * performed with a length multiple of the block size.
- */
- this.window_size = 0;
- /* Actual size of window: 2*wSize, except when the user input buffer
- * is directly used as sliding window.
- */
- this.prev = null;
- /* Link to older string with same hash index. To limit the size of this
- * array to 64K, this link is maintained only for the last 32K strings.
- * An index in this array is thus a window index modulo 32K.
- */
- this.head = null;
- /* Heads of the hash chains or NIL. */
- this.ins_h = 0;
- /* hash index of string to be inserted */
- this.hash_size = 0;
- /* number of elements in hash table */
- this.hash_bits = 0;
- /* log2(hash_size) */
- this.hash_mask = 0;
- /* hash_size-1 */
- this.hash_shift = 0;
- /* Number of bits by which ins_h must be shifted at each input
- * step. It must be such that after MIN_MATCH steps, the oldest
- * byte no longer takes part in the hash key, that is:
- * hash_shift * MIN_MATCH >= hash_bits
- */
- this.block_start = 0;
- /* Window position at the beginning of the current output block. Gets
- * negative when the window is moved backwards.
- */
- this.match_length = 0;
- /* length of best match */
- this.prev_match = 0;
- /* previous match */
- this.match_available = 0;
- /* set if previous match exists */
- this.strstart = 0;
- /* start of string to insert */
- this.match_start = 0;
- /* start of matching string */
- this.lookahead = 0;
- /* number of valid bytes ahead in window */
- this.prev_length = 0;
- /* Length of the best match at previous step. Matches not greater than this
- * are discarded. This is used in the lazy match evaluation.
- */
- this.max_chain_length = 0;
- /* To speed up deflation, hash chains are never searched beyond this
- * length. A higher limit improves compression ratio but degrades the
- * speed.
- */
- this.max_lazy_match = 0;
- /* Attempt to find a better match only when the current match is strictly
- * smaller than this value. This mechanism is used only for compression
- * levels >= 4.
- */
- // That's alias to max_lazy_match, don't use directly
- //this.max_insert_length = 0;
- /* Insert new strings in the hash table only if the match length is not
- * greater than this length. This saves time but degrades compression.
- * max_insert_length is used only for compression levels <= 3.
- */
- this.level = 0;
- /* compression level (1..9) */
- this.strategy = 0;
- /* favor or force Huffman coding*/
- this.good_match = 0;
- /* Use a faster search when the previous match is longer than this */
- this.nice_match = 0;
- /* Stop searching when current match exceeds this */
- /* used by trees.c: */
- /* Didn't use ct_data typedef below to suppress compiler warning */
- // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */
- // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
- // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */
- // Use flat array of DOUBLE size, with interleaved fata,
- // because JS does not support effective
- this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2);
- this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2);
- this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2);
- zero(this.dyn_ltree);
- zero(this.dyn_dtree);
- zero(this.bl_tree);
- this.l_desc = null;
- /* desc. for literal tree */
- this.d_desc = null;
- /* desc. for distance tree */
- this.bl_desc = null;
- /* desc. for bit length tree */
- //ush bl_count[MAX_BITS+1];
- this.bl_count = new utils.Buf16(MAX_BITS + 1);
- /* number of codes at each bit length for an optimal tree */
- //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */
- this.heap = new utils.Buf16(2 * L_CODES + 1);
- /* heap used to build the Huffman trees */
- zero(this.heap);
- this.heap_len = 0;
- /* number of elements in the heap */
- this.heap_max = 0;
- /* element of largest frequency */
- /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
- * The same heap array is used to build all trees.
- */
- this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];
- zero(this.depth);
- /* Depth of each subtree used as tie breaker for trees of equal frequency
- */
- this.l_buf = 0;
- /* buffer index for literals or lengths */
- this.lit_bufsize = 0;
- /* Size of match buffer for literals/lengths. There are 4 reasons for
- * limiting lit_bufsize to 64K:
- * - frequencies can be kept in 16 bit counters
- * - if compression is not successful for the first block, all input
- * data is still in the window so we can still emit a stored block even
- * when input comes from standard input. (This can also be done for
- * all blocks if lit_bufsize is not greater than 32K.)
- * - if compression is not successful for a file smaller than 64K, we can
- * even emit a stored file instead of a stored block (saving 5 bytes).
- * This is applicable only for zip (not gzip or zlib).
- * - creating new Huffman trees less frequently may not provide fast
- * adaptation to changes in the input data statistics. (Take for
- * example a binary file with poorly compressible code followed by
- * a highly compressible string table.) Smaller buffer sizes give
- * fast adaptation but have of course the overhead of transmitting
- * trees more frequently.
- * - I can't count above 4
- */
- this.last_lit = 0;
- /* running index in l_buf */
- this.d_buf = 0;
- /* Buffer index for distances. To simplify the code, d_buf and l_buf have
- * the same number of elements. To use different lengths, an extra flag
- * array would be necessary.
- */
- this.opt_len = 0;
- /* bit length of current block with optimal trees */
- this.static_len = 0;
- /* bit length of current block with static trees */
- this.matches = 0;
- /* number of string matches in current block */
- this.insert = 0;
- /* bytes at end of window left to insert */
- this.bi_buf = 0;
- /* Output buffer. bits are inserted starting at the bottom (least
- * significant bits).
- */
- this.bi_valid = 0;
- /* Number of valid bits in bi_buf. All bits above the last valid bit
- * are always zero.
- */
- // Used for window memory init. We safely ignore it for JS. That makes
- // sense only for pointers and memory check tools.
- //this.high_water = 0;
- /* High water mark offset in window for initialized bytes -- bytes above
- * this are set to zero in order to avoid memory check warnings when
- * longest match routines access bytes past the input. This is then
- * updated to the new high water mark.
- */
- }
- function deflateResetKeep(strm) {
- var s;
- if (!strm || !strm.state) {
- return err(strm, Z_STREAM_ERROR);
- }
- strm.total_in = strm.total_out = 0;
- strm.data_type = Z_UNKNOWN;
- s = strm.state;
- s.pending = 0;
- s.pending_out = 0;
- if (s.wrap < 0) {
- s.wrap = -s.wrap;
- /* was made negative by deflate(..., Z_FINISH); */
- }
- s.status = s.wrap ? INIT_STATE : BUSY_STATE;
- strm.adler = s.wrap === 2 ? 0 // crc32(0, Z_NULL, 0)
- : 1; // adler32(0, Z_NULL, 0)
- s.last_flush = Z_NO_FLUSH;
- trees._tr_init(s);
- return Z_OK;
- }
- function deflateReset(strm) {
- var ret = deflateResetKeep(strm);
- if (ret === Z_OK) {
- lm_init(strm.state);
- }
- return ret;
- }
- function deflateSetHeader(strm, head) {
- if (!strm || !strm.state) {
- return Z_STREAM_ERROR;
- }
- if (strm.state.wrap !== 2) {
- return Z_STREAM_ERROR;
- }
- strm.state.gzhead = head;
- return Z_OK;
- }
- function deflateInit2(strm, level, method, windowBits, memLevel, strategy) {
- if (!strm) {
- // === Z_NULL
- return Z_STREAM_ERROR;
- }
- var wrap = 1;
- if (level === Z_DEFAULT_COMPRESSION) {
- level = 6;
- }
- if (windowBits < 0) {
- /* suppress zlib wrapper */
- wrap = 0;
- windowBits = -windowBits;
- } else if (windowBits > 15) {
- wrap = 2;
- /* write gzip wrapper instead */
- windowBits -= 16;
- }
- if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED || windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) {
- return err(strm, Z_STREAM_ERROR);
- }
- if (windowBits === 8) {
- windowBits = 9;
- }
- /* until 256-byte window bug fixed */
- var s = new DeflateState();
- strm.state = s;
- s.strm = strm;
- s.wrap = wrap;
- s.gzhead = null;
- s.w_bits = windowBits;
- s.w_size = 1 << s.w_bits;
- s.w_mask = s.w_size - 1;
- s.hash_bits = memLevel + 7;
- s.hash_size = 1 << s.hash_bits;
- s.hash_mask = s.hash_size - 1;
- s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);
- s.window = new utils.Buf8(s.w_size * 2);
- s.head = new utils.Buf16(s.hash_size);
- s.prev = new utils.Buf16(s.w_size); // Don't need mem init magic for JS.
- //s.high_water = 0; /* nothing written to s->window yet */
- s.lit_bufsize = 1 << memLevel + 6;
- /* 16K elements by default */
- s.pending_buf_size = s.lit_bufsize * 4; //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
- //s->pending_buf = (uchf *) overlay;
- s.pending_buf = new utils.Buf8(s.pending_buf_size); // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)
- //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
- s.d_buf = 1 * s.lit_bufsize; //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
- s.l_buf = (1 + 2) * s.lit_bufsize;
- s.level = level;
- s.strategy = strategy;
- s.method = method;
- return deflateReset(strm);
- }
- function deflateInit(strm, level) {
- return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);
- }
- function deflate(strm, flush) {
- var old_flush, s;
- var beg, val; // for gzip header write only
- if (!strm || !strm.state || flush > Z_BLOCK || flush < 0) {
- return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;
- }
- s = strm.state;
- if (!strm.output || !strm.input && strm.avail_in !== 0 || s.status === FINISH_STATE && flush !== Z_FINISH) {
- return err(strm, strm.avail_out === 0 ? Z_BUF_ERROR : Z_STREAM_ERROR);
- }
- s.strm = strm;
- /* just in case */
- old_flush = s.last_flush;
- s.last_flush = flush;
- /* Write the header */
- if (s.status === INIT_STATE) {
- if (s.wrap === 2) {
- // GZIP header
- strm.adler = 0; //crc32(0L, Z_NULL, 0);
- put_byte(s, 31);
- put_byte(s, 139);
- put_byte(s, 8);
- if (!s.gzhead) {
- // s->gzhead == Z_NULL
- put_byte(s, 0);
- put_byte(s, 0);
- put_byte(s, 0);
- put_byte(s, 0);
- put_byte(s, 0);
- put_byte(s, s.level === 9 ? 2 : s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? 4 : 0);
- put_byte(s, OS_CODE);
- s.status = BUSY_STATE;
- } else {
- put_byte(s, (s.gzhead.text ? 1 : 0) + (s.gzhead.hcrc ? 2 : 0) + (!s.gzhead.extra ? 0 : 4) + (!s.gzhead.name ? 0 : 8) + (!s.gzhead.comment ? 0 : 16));
- put_byte(s, s.gzhead.time & 0xff);
- put_byte(s, s.gzhead.time >> 8 & 0xff);
- put_byte(s, s.gzhead.time >> 16 & 0xff);
- put_byte(s, s.gzhead.time >> 24 & 0xff);
- put_byte(s, s.level === 9 ? 2 : s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? 4 : 0);
- put_byte(s, s.gzhead.os & 0xff);
- if (s.gzhead.extra && s.gzhead.extra.length) {
- put_byte(s, s.gzhead.extra.length & 0xff);
- put_byte(s, s.gzhead.extra.length >> 8 & 0xff);
- }
- if (s.gzhead.hcrc) {
- strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);
- }
- s.gzindex = 0;
- s.status = EXTRA_STATE;
- }
- } else // DEFLATE header
- {
- var header = Z_DEFLATED + (s.w_bits - 8 << 4) << 8;
- var level_flags = -1;
- if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {
- level_flags = 0;
- } else if (s.level < 6) {
- level_flags = 1;
- } else if (s.level === 6) {
- level_flags = 2;
- } else {
- level_flags = 3;
- }
- header |= level_flags << 6;
- if (s.strstart !== 0) {
- header |= PRESET_DICT;
- }
- header += 31 - header % 31;
- s.status = BUSY_STATE;
- putShortMSB(s, header);
- /* Save the adler32 of the preset dictionary: */
- if (s.strstart !== 0) {
- putShortMSB(s, strm.adler >>> 16);
- putShortMSB(s, strm.adler & 0xffff);
- }
- strm.adler = 1; // adler32(0L, Z_NULL, 0);
- }
- } //#ifdef GZIP
- if (s.status === EXTRA_STATE) {
- if (s.gzhead.extra
- /* != Z_NULL*/
- ) {
- beg = s.pending;
- /* start of bytes to update crc */
- while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {
- if (s.pending === s.pending_buf_size) {
- if (s.gzhead.hcrc && s.pending > beg) {
- strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
- }
- flush_pending(strm);
- beg = s.pending;
- if (s.pending === s.pending_buf_size) {
- break;
- }
- }
- put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);
- s.gzindex++;
- }
- if (s.gzhead.hcrc && s.pending > beg) {
- strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
- }
- if (s.gzindex === s.gzhead.extra.length) {
- s.gzindex = 0;
- s.status = NAME_STATE;
- }
- } else {
- s.status = NAME_STATE;
- }
- }
- if (s.status === NAME_STATE) {
- if (s.gzhead.name
- /* != Z_NULL*/
- ) {
- beg = s.pending;
- /* start of bytes to update crc */
- //int val;
- do {
- if (s.pending === s.pending_buf_size) {
- if (s.gzhead.hcrc && s.pending > beg) {
- strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
- }
- flush_pending(strm);
- beg = s.pending;
- if (s.pending === s.pending_buf_size) {
- val = 1;
- break;
- }
- } // JS specific: little magic to add zero terminator to end of string
- if (s.gzindex < s.gzhead.name.length) {
- val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;
- } else {
- val = 0;
- }
- put_byte(s, val);
- } while (val !== 0);
- if (s.gzhead.hcrc && s.pending > beg) {
- strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
- }
- if (val === 0) {
- s.gzindex = 0;
- s.status = COMMENT_STATE;
- }
- } else {
- s.status = COMMENT_STATE;
- }
- }
- if (s.status === COMMENT_STATE) {
- if (s.gzhead.comment
- /* != Z_NULL*/
- ) {
- beg = s.pending;
- /* start of bytes to update crc */
- //int val;
- do {
- if (s.pending === s.pending_buf_size) {
- if (s.gzhead.hcrc && s.pending > beg) {
- strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
- }
- flush_pending(strm);
- beg = s.pending;
- if (s.pending === s.pending_buf_size) {
- val = 1;
- break;
- }
- } // JS specific: little magic to add zero terminator to end of string
- if (s.gzindex < s.gzhead.comment.length) {
- val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;
- } else {
- val = 0;
- }
- put_byte(s, val);
- } while (val !== 0);
- if (s.gzhead.hcrc && s.pending > beg) {
- strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
- }
- if (val === 0) {
- s.status = HCRC_STATE;
- }
- } else {
- s.status = HCRC_STATE;
- }
- }
- if (s.status === HCRC_STATE) {
- if (s.gzhead.hcrc) {
- if (s.pending + 2 > s.pending_buf_size) {
- flush_pending(strm);
- }
- if (s.pending + 2 <= s.pending_buf_size) {
- put_byte(s, strm.adler & 0xff);
- put_byte(s, strm.adler >> 8 & 0xff);
- strm.adler = 0; //crc32(0L, Z_NULL, 0);
- s.status = BUSY_STATE;
- }
- } else {
- s.status = BUSY_STATE;
- }
- } //#endif
- /* Flush as much pending output as possible */
- if (s.pending !== 0) {
- flush_pending(strm);
- if (strm.avail_out === 0) {
- /* Since avail_out is 0, deflate will be called again with
- * more output space, but possibly with both pending and
- * avail_in equal to zero. There won't be anything to do,
- * but this is not an error situation so make sure we
- * return OK instead of BUF_ERROR at next call of deflate:
- */
- s.last_flush = -1;
- return Z_OK;
- }
- /* Make sure there is something to do and avoid duplicate consecutive
- * flushes. For repeated and useless calls with Z_FINISH, we keep
- * returning Z_STREAM_END instead of Z_BUF_ERROR.
- */
- } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) && flush !== Z_FINISH) {
- return err(strm, Z_BUF_ERROR);
- }
- /* User must not provide more input after the first FINISH: */
- if (s.status === FINISH_STATE && strm.avail_in !== 0) {
- return err(strm, Z_BUF_ERROR);
- }
- /* Start a new block or continue the current one.
- */
- if (strm.avail_in !== 0 || s.lookahead !== 0 || flush !== Z_NO_FLUSH && s.status !== FINISH_STATE) {
- var bstate = s.strategy === Z_HUFFMAN_ONLY ? deflate_huff(s, flush) : s.strategy === Z_RLE ? deflate_rle(s, flush) : configuration_table[s.level].func(s, flush);
- if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {
- s.status = FINISH_STATE;
- }
- if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {
- if (strm.avail_out === 0) {
- s.last_flush = -1;
- /* avoid BUF_ERROR next call, see above */
- }
- return Z_OK;
- /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
- * of deflate should use the same flush parameter to make sure
- * that the flush is complete. So we don't have to output an
- * empty block here, this will be done at next call. This also
- * ensures that for a very small output buffer, we emit at most
- * one empty block.
- */
- }
- if (bstate === BS_BLOCK_DONE) {
- if (flush === Z_PARTIAL_FLUSH) {
- trees._tr_align(s);
- } else if (flush !== Z_BLOCK) {
- /* FULL_FLUSH or SYNC_FLUSH */
- trees._tr_stored_block(s, 0, 0, false);
- /* For a full flush, this empty block will be recognized
- * as a special marker by inflate_sync().
- */
- if (flush === Z_FULL_FLUSH) {
- /*** CLEAR_HASH(s); ***/
- /* forget history */
- zero(s.head); // Fill with NIL (= 0);
- if (s.lookahead === 0) {
- s.strstart = 0;
- s.block_start = 0;
- s.insert = 0;
- }
- }
- }
- flush_pending(strm);
- if (strm.avail_out === 0) {
- s.last_flush = -1;
- /* avoid BUF_ERROR at next call, see above */
- return Z_OK;
- }
- }
- } //Assert(strm->avail_out > 0, "bug2");
- //if (strm.avail_out <= 0) { throw new Error("bug2");}
- if (flush !== Z_FINISH) {
- return Z_OK;
- }
- if (s.wrap <= 0) {
- return Z_STREAM_END;
- }
- /* Write the trailer */
- if (s.wrap === 2) {
- put_byte(s, strm.adler & 0xff);
- put_byte(s, strm.adler >> 8 & 0xff);
- put_byte(s, strm.adler >> 16 & 0xff);
- put_byte(s, strm.adler >> 24 & 0xff);
- put_byte(s, strm.total_in & 0xff);
- put_byte(s, strm.total_in >> 8 & 0xff);
- put_byte(s, strm.total_in >> 16 & 0xff);
- put_byte(s, strm.total_in >> 24 & 0xff);
- } else {
- putShortMSB(s, strm.adler >>> 16);
- putShortMSB(s, strm.adler & 0xffff);
- }
- flush_pending(strm);
- /* If avail_out is zero, the application will call deflate again
- * to flush the rest.
- */
- if (s.wrap > 0) {
- s.wrap = -s.wrap;
- }
- /* write the trailer only once! */
- return s.pending !== 0 ? Z_OK : Z_STREAM_END;
- }
- function deflateEnd(strm) {
- var status;
- if (!strm
- /*== Z_NULL*/
- || !strm.state
- /*== Z_NULL*/
- ) {
- return Z_STREAM_ERROR;
- }
- status = strm.state.status;
- if (status !== INIT_STATE && status !== EXTRA_STATE && status !== NAME_STATE && status !== COMMENT_STATE && status !== HCRC_STATE && status !== BUSY_STATE && status !== FINISH_STATE) {
- return err(strm, Z_STREAM_ERROR);
- }
- strm.state = null;
- return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;
- }
- /* =========================================================================
- * Initializes the compression dictionary from the given byte
- * sequence without producing any compressed output.
- */
- function deflateSetDictionary(strm, dictionary) {
- var dictLength = dictionary.length;
- var s;
- var str, n;
- var wrap;
- var avail;
- var next;
- var input;
- var tmpDict;
- if (!strm
- /*== Z_NULL*/
- || !strm.state
- /*== Z_NULL*/
- ) {
- return Z_STREAM_ERROR;
- }
- s = strm.state;
- wrap = s.wrap;
- if (wrap === 2 || wrap === 1 && s.status !== INIT_STATE || s.lookahead) {
- return Z_STREAM_ERROR;
- }
- /* when using zlib wrappers, compute Adler-32 for provided dictionary */
- if (wrap === 1) {
- /* adler32(strm->adler, dictionary, dictLength); */
- strm.adler = adler32(strm.adler, dictionary, dictLength, 0);
- }
- s.wrap = 0;
- /* avoid computing Adler-32 in read_buf */
- /* if dictionary would fill window, just replace the history */
- if (dictLength >= s.w_size) {
- if (wrap === 0) {
- /* already empty otherwise */
- /*** CLEAR_HASH(s); ***/
- zero(s.head); // Fill with NIL (= 0);
- s.strstart = 0;
- s.block_start = 0;
- s.insert = 0;
- }
- /* use the tail */
- // dictionary = dictionary.slice(dictLength - s.w_size);
- tmpDict = new utils.Buf8(s.w_size);
- utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);
- dictionary = tmpDict;
- dictLength = s.w_size;
- }
- /* insert dictionary into window and hash */
- avail = strm.avail_in;
- next = strm.next_in;
- input = strm.input;
- strm.avail_in = dictLength;
- strm.next_in = 0;
- strm.input = dictionary;
- fill_window(s);
- while (s.lookahead >= MIN_MATCH) {
- str = s.strstart;
- n = s.lookahead - (MIN_MATCH - 1);
- do {
- /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */
- s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;
- s.prev[str & s.w_mask] = s.head[s.ins_h];
- s.head[s.ins_h] = str;
- str++;
- } while (--n);
- s.strstart = str;
- s.lookahead = MIN_MATCH - 1;
- fill_window(s);
- }
- s.strstart += s.lookahead;
- s.block_start = s.strstart;
- s.insert = s.lookahead;
- s.lookahead = 0;
- s.match_length = s.prev_length = MIN_MATCH - 1;
- s.match_available = 0;
- strm.next_in = next;
- strm.input = input;
- strm.avail_in = avail;
- s.wrap = wrap;
- return Z_OK;
- }
- exports.deflateInit = deflateInit;
- exports.deflateInit2 = deflateInit2;
- exports.deflateReset = deflateReset;
- exports.deflateResetKeep = deflateResetKeep;
- exports.deflateSetHeader = deflateSetHeader;
- exports.deflate = deflate;
- exports.deflateEnd = deflateEnd;
- exports.deflateSetDictionary = deflateSetDictionary;
- exports.deflateInfo = 'pako deflate (from Nodeca project)';
- /* Not implemented
- exports.deflateBound = deflateBound;
- exports.deflateCopy = deflateCopy;
- exports.deflateParams = deflateParams;
- exports.deflatePending = deflatePending;
- exports.deflatePrime = deflatePrime;
- exports.deflateTune = deflateTune;
- */
- },{"../utils/common":333,"./adler32":335,"./crc32":337,"./messages":343,"./trees":344}],339:[function(require,module,exports){
- 'use strict'; // (C) 1995-2013 Jean-loup Gailly and Mark Adler
- // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
- //
- // This software is provided 'as-is', without any express or implied
- // warranty. In no event will the authors be held liable for any damages
- // arising from the use of this software.
- //
- // Permission is granted to anyone to use this software for any purpose,
- // including commercial applications, and to alter it and redistribute it
- // freely, subject to the following restrictions:
- //
- // 1. The origin of this software must not be misrepresented; you must not
- // claim that you wrote the original software. If you use this software
- // in a product, an acknowledgment in the product documentation would be
- // appreciated but is not required.
- // 2. Altered source versions must be plainly marked as such, and must not be
- // misrepresented as being the original software.
- // 3. This notice may not be removed or altered from any source distribution.
- function GZheader() {
- /* true if compressed data believed to be text */
- this.text = 0;
- /* modification time */
- this.time = 0;
- /* extra flags (not used when writing a gzip file) */
- this.xflags = 0;
- /* operating system */
- this.os = 0;
- /* pointer to extra field or Z_NULL if none */
- this.extra = null;
- /* extra field length (valid if extra != Z_NULL) */
- this.extra_len = 0; // Actually, we don't need it in JS,
- // but leave for few code modifications
- //
- // Setup limits is not necessary because in js we should not preallocate memory
- // for inflate use constant limit in 65536 bytes
- //
- /* space at extra (only when reading header) */
- // this.extra_max = 0;
- /* pointer to zero-terminated file name or Z_NULL */
- this.name = '';
- /* space at name (only when reading header) */
- // this.name_max = 0;
- /* pointer to zero-terminated comment or Z_NULL */
- this.comment = '';
- /* space at comment (only when reading header) */
- // this.comm_max = 0;
- /* true if there was or will be a header crc */
- this.hcrc = 0;
- /* true when done reading gzip header (not used when writing a gzip file) */
- this.done = false;
- }
- module.exports = GZheader;
- },{}],340:[function(require,module,exports){
- 'use strict'; // (C) 1995-2013 Jean-loup Gailly and Mark Adler
- // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
- //
- // This software is provided 'as-is', without any express or implied
- // warranty. In no event will the authors be held liable for any damages
- // arising from the use of this software.
- //
- // Permission is granted to anyone to use this software for any purpose,
- // including commercial applications, and to alter it and redistribute it
- // freely, subject to the following restrictions:
- //
- // 1. The origin of this software must not be misrepresented; you must not
- // claim that you wrote the original software. If you use this software
- // in a product, an acknowledgment in the product documentation would be
- // appreciated but is not required.
- // 2. Altered source versions must be plainly marked as such, and must not be
- // misrepresented as being the original software.
- // 3. This notice may not be removed or altered from any source distribution.
- // See state defs from inflate.js
- var BAD = 30;
- /* got a data error -- remain here until reset */
- var TYPE = 12;
- /* i: waiting for type bits, including last-flag bit */
- /*
- Decode literal, length, and distance codes and write out the resulting
- literal and match bytes until either not enough input or output is
- available, an end-of-block is encountered, or a data error is encountered.
- When large enough input and output buffers are supplied to inflate(), for
- example, a 16K input buffer and a 64K output buffer, more than 95% of the
- inflate execution time is spent in this routine.
- Entry assumptions:
- state.mode === LEN
- strm.avail_in >= 6
- strm.avail_out >= 258
- start >= strm.avail_out
- state.bits < 8
- On return, state.mode is one of:
- LEN -- ran out of enough output space or enough available input
- TYPE -- reached end of block code, inflate() to interpret next block
- BAD -- error in block data
- Notes:
- - The maximum input bits used by a length/distance pair is 15 bits for the
- length code, 5 bits for the length extra, 15 bits for the distance code,
- and 13 bits for the distance extra. This totals 48 bits, or six bytes.
- Therefore if strm.avail_in >= 6, then there is enough input to avoid
- checking for available input while decoding.
- - The maximum bytes that a single length/distance pair can output is 258
- bytes, which is the maximum length that can be coded. inflate_fast()
- requires strm.avail_out >= 258 for each loop to avoid checking for
- output space.
- */
- module.exports = function inflate_fast(strm, start) {
- var state;
- var _in;
- /* local strm.input */
- var last;
- /* have enough input while in < last */
- var _out;
- /* local strm.output */
- var beg;
- /* inflate()'s initial strm.output */
- var end;
- /* while out < end, enough space available */
- //#ifdef INFLATE_STRICT
- var dmax;
- /* maximum distance from zlib header */
- //#endif
- var wsize;
- /* window size or zero if not using window */
- var whave;
- /* valid bytes in the window */
- var wnext;
- /* window write index */
- // Use `s_window` instead `window`, avoid conflict with instrumentation tools
- var s_window;
- /* allocated sliding window, if wsize != 0 */
- var hold;
- /* local strm.hold */
- var bits;
- /* local strm.bits */
- var lcode;
- /* local strm.lencode */
- var dcode;
- /* local strm.distcode */
- var lmask;
- /* mask for first level of length codes */
- var dmask;
- /* mask for first level of distance codes */
- var here;
- /* retrieved table entry */
- var op;
- /* code bits, operation, extra bits, or */
- /* window position, window bytes to copy */
- var len;
- /* match length, unused bytes */
- var dist;
- /* match distance */
- var from;
- /* where to copy match from */
- var from_source;
- var input, output; // JS specific, because we have no pointers
- /* copy state to local variables */
- state = strm.state; //here = state.here;
- _in = strm.next_in;
- input = strm.input;
- last = _in + (strm.avail_in - 5);
- _out = strm.next_out;
- output = strm.output;
- beg = _out - (start - strm.avail_out);
- end = _out + (strm.avail_out - 257); //#ifdef INFLATE_STRICT
- dmax = state.dmax; //#endif
- wsize = state.wsize;
- whave = state.whave;
- wnext = state.wnext;
- s_window = state.window;
- hold = state.hold;
- bits = state.bits;
- lcode = state.lencode;
- dcode = state.distcode;
- lmask = (1 << state.lenbits) - 1;
- dmask = (1 << state.distbits) - 1;
- /* decode literals and length/distances until end-of-block or not enough
- input data or output space */
- top: do {
- if (bits < 15) {
- hold += input[_in++] << bits;
- bits += 8;
- hold += input[_in++] << bits;
- bits += 8;
- }
- here = lcode[hold & lmask];
- dolen: for (;;) {
- // Goto emulation
- op = here >>> 24
- /*here.bits*/
- ;
- hold >>>= op;
- bits -= op;
- op = here >>> 16 & 0xff
- /*here.op*/
- ;
- if (op === 0) {
- /* literal */
- //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
- // "inflate: literal '%c'\n" :
- // "inflate: literal 0x%02x\n", here.val));
- output[_out++] = here & 0xffff
- /*here.val*/
- ;
- } else if (op & 16) {
- /* length base */
- len = here & 0xffff
- /*here.val*/
- ;
- op &= 15;
- /* number of extra bits */
- if (op) {
- if (bits < op) {
- hold += input[_in++] << bits;
- bits += 8;
- }
- len += hold & (1 << op) - 1;
- hold >>>= op;
- bits -= op;
- } //Tracevv((stderr, "inflate: length %u\n", len));
- if (bits < 15) {
- hold += input[_in++] << bits;
- bits += 8;
- hold += input[_in++] << bits;
- bits += 8;
- }
- here = dcode[hold & dmask];
- dodist: for (;;) {
- // goto emulation
- op = here >>> 24
- /*here.bits*/
- ;
- hold >>>= op;
- bits -= op;
- op = here >>> 16 & 0xff
- /*here.op*/
- ;
- if (op & 16) {
- /* distance base */
- dist = here & 0xffff
- /*here.val*/
- ;
- op &= 15;
- /* number of extra bits */
- if (bits < op) {
- hold += input[_in++] << bits;
- bits += 8;
- if (bits < op) {
- hold += input[_in++] << bits;
- bits += 8;
- }
- }
- dist += hold & (1 << op) - 1; //#ifdef INFLATE_STRICT
- if (dist > dmax) {
- strm.msg = 'invalid distance too far back';
- state.mode = BAD;
- break top;
- } //#endif
- hold >>>= op;
- bits -= op; //Tracevv((stderr, "inflate: distance %u\n", dist));
- op = _out - beg;
- /* max distance in output */
- if (dist > op) {
- /* see if copy from window */
- op = dist - op;
- /* distance back in window */
- if (op > whave) {
- if (state.sane) {
- strm.msg = 'invalid distance too far back';
- state.mode = BAD;
- break top;
- } // (!) This block is disabled in zlib defaults,
- // don't enable it for binary compatibility
- //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
- // if (len <= op - whave) {
- // do {
- // output[_out++] = 0;
- // } while (--len);
- // continue top;
- // }
- // len -= op - whave;
- // do {
- // output[_out++] = 0;
- // } while (--op > whave);
- // if (op === 0) {
- // from = _out - dist;
- // do {
- // output[_out++] = output[from++];
- // } while (--len);
- // continue top;
- // }
- //#endif
- }
- from = 0; // window index
- from_source = s_window;
- if (wnext === 0) {
- /* very common case */
- from += wsize - op;
- if (op < len) {
- /* some from window */
- len -= op;
- do {
- output[_out++] = s_window[from++];
- } while (--op);
- from = _out - dist;
- /* rest from output */
- from_source = output;
- }
- } else if (wnext < op) {
- /* wrap around window */
- from += wsize + wnext - op;
- op -= wnext;
- if (op < len) {
- /* some from end of window */
- len -= op;
- do {
- output[_out++] = s_window[from++];
- } while (--op);
- from = 0;
- if (wnext < len) {
- /* some from start of window */
- op = wnext;
- len -= op;
- do {
- output[_out++] = s_window[from++];
- } while (--op);
- from = _out - dist;
- /* rest from output */
- from_source = output;
- }
- }
- } else {
- /* contiguous in window */
- from += wnext - op;
- if (op < len) {
- /* some from window */
- len -= op;
- do {
- output[_out++] = s_window[from++];
- } while (--op);
- from = _out - dist;
- /* rest from output */
- from_source = output;
- }
- }
- while (len > 2) {
- output[_out++] = from_source[from++];
- output[_out++] = from_source[from++];
- output[_out++] = from_source[from++];
- len -= 3;
- }
- if (len) {
- output[_out++] = from_source[from++];
- if (len > 1) {
- output[_out++] = from_source[from++];
- }
- }
- } else {
- from = _out - dist;
- /* copy direct from output */
- do {
- /* minimum length is three */
- output[_out++] = output[from++];
- output[_out++] = output[from++];
- output[_out++] = output[from++];
- len -= 3;
- } while (len > 2);
- if (len) {
- output[_out++] = output[from++];
- if (len > 1) {
- output[_out++] = output[from++];
- }
- }
- }
- } else if ((op & 64) === 0) {
- /* 2nd level distance code */
- here = dcode[(here & 0xffff) + (
- /*here.val*/
- hold & (1 << op) - 1)];
- continue dodist;
- } else {
- strm.msg = 'invalid distance code';
- state.mode = BAD;
- break top;
- }
- break; // need to emulate goto via "continue"
- }
- } else if ((op & 64) === 0) {
- /* 2nd level length code */
- here = lcode[(here & 0xffff) + (
- /*here.val*/
- hold & (1 << op) - 1)];
- continue dolen;
- } else if (op & 32) {
- /* end-of-block */
- //Tracevv((stderr, "inflate: end of block\n"));
- state.mode = TYPE;
- break top;
- } else {
- strm.msg = 'invalid literal/length code';
- state.mode = BAD;
- break top;
- }
- break; // need to emulate goto via "continue"
- }
- } while (_in < last && _out < end);
- /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
- len = bits >> 3;
- _in -= len;
- bits -= len << 3;
- hold &= (1 << bits) - 1;
- /* update state and return */
- strm.next_in = _in;
- strm.next_out = _out;
- strm.avail_in = _in < last ? 5 + (last - _in) : 5 - (_in - last);
- strm.avail_out = _out < end ? 257 + (end - _out) : 257 - (_out - end);
- state.hold = hold;
- state.bits = bits;
- return;
- };
- },{}],341:[function(require,module,exports){
- 'use strict'; // (C) 1995-2013 Jean-loup Gailly and Mark Adler
- // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
- //
- // This software is provided 'as-is', without any express or implied
- // warranty. In no event will the authors be held liable for any damages
- // arising from the use of this software.
- //
- // Permission is granted to anyone to use this software for any purpose,
- // including commercial applications, and to alter it and redistribute it
- // freely, subject to the following restrictions:
- //
- // 1. The origin of this software must not be misrepresented; you must not
- // claim that you wrote the original software. If you use this software
- // in a product, an acknowledgment in the product documentation would be
- // appreciated but is not required.
- // 2. Altered source versions must be plainly marked as such, and must not be
- // misrepresented as being the original software.
- // 3. This notice may not be removed or altered from any source distribution.
- var utils = require('../utils/common');
- var adler32 = require('./adler32');
- var crc32 = require('./crc32');
- var inflate_fast = require('./inffast');
- var inflate_table = require('./inftrees');
- var CODES = 0;
- var LENS = 1;
- var DISTS = 2;
- /* Public constants ==========================================================*/
- /* ===========================================================================*/
- /* Allowed flush values; see deflate() and inflate() below for details */
- //var Z_NO_FLUSH = 0;
- //var Z_PARTIAL_FLUSH = 1;
- //var Z_SYNC_FLUSH = 2;
- //var Z_FULL_FLUSH = 3;
- var Z_FINISH = 4;
- var Z_BLOCK = 5;
- var Z_TREES = 6;
- /* Return codes for the compression/decompression functions. Negative values
- * are errors, positive values are used for special but normal events.
- */
- var Z_OK = 0;
- var Z_STREAM_END = 1;
- var Z_NEED_DICT = 2; //var Z_ERRNO = -1;
- var Z_STREAM_ERROR = -2;
- var Z_DATA_ERROR = -3;
- var Z_MEM_ERROR = -4;
- var Z_BUF_ERROR = -5; //var Z_VERSION_ERROR = -6;
- /* The deflate compression method */
- var Z_DEFLATED = 8;
- /* STATES ====================================================================*/
- /* ===========================================================================*/
- var HEAD = 1;
- /* i: waiting for magic header */
- var FLAGS = 2;
- /* i: waiting for method and flags (gzip) */
- var TIME = 3;
- /* i: waiting for modification time (gzip) */
- var OS = 4;
- /* i: waiting for extra flags and operating system (gzip) */
- var EXLEN = 5;
- /* i: waiting for extra length (gzip) */
- var EXTRA = 6;
- /* i: waiting for extra bytes (gzip) */
- var NAME = 7;
- /* i: waiting for end of file name (gzip) */
- var COMMENT = 8;
- /* i: waiting for end of comment (gzip) */
- var HCRC = 9;
- /* i: waiting for header crc (gzip) */
- var DICTID = 10;
- /* i: waiting for dictionary check value */
- var DICT = 11;
- /* waiting for inflateSetDictionary() call */
- var TYPE = 12;
- /* i: waiting for type bits, including last-flag bit */
- var TYPEDO = 13;
- /* i: same, but skip check to exit inflate on new block */
- var STORED = 14;
- /* i: waiting for stored size (length and complement) */
- var COPY_ = 15;
- /* i/o: same as COPY below, but only first time in */
- var COPY = 16;
- /* i/o: waiting for input or output to copy stored block */
- var TABLE = 17;
- /* i: waiting for dynamic block table lengths */
- var LENLENS = 18;
- /* i: waiting for code length code lengths */
- var CODELENS = 19;
- /* i: waiting for length/lit and distance code lengths */
- var LEN_ = 20;
- /* i: same as LEN below, but only first time in */
- var LEN = 21;
- /* i: waiting for length/lit/eob code */
- var LENEXT = 22;
- /* i: waiting for length extra bits */
- var DIST = 23;
- /* i: waiting for distance code */
- var DISTEXT = 24;
- /* i: waiting for distance extra bits */
- var MATCH = 25;
- /* o: waiting for output space to copy string */
- var LIT = 26;
- /* o: waiting for output space to write literal */
- var CHECK = 27;
- /* i: waiting for 32-bit check value */
- var LENGTH = 28;
- /* i: waiting for 32-bit length (gzip) */
- var DONE = 29;
- /* finished check, done -- remain here until reset */
- var BAD = 30;
- /* got a data error -- remain here until reset */
- var MEM = 31;
- /* got an inflate() memory error -- remain here until reset */
- var SYNC = 32;
- /* looking for synchronization bytes to restart inflate() */
- /* ===========================================================================*/
- var ENOUGH_LENS = 852;
- var ENOUGH_DISTS = 592; //var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);
- var MAX_WBITS = 15;
- /* 32K LZ77 window */
- var DEF_WBITS = MAX_WBITS;
- function zswap32(q) {
- return (q >>> 24 & 0xff) + (q >>> 8 & 0xff00) + ((q & 0xff00) << 8) + ((q & 0xff) << 24);
- }
- function InflateState() {
- this.mode = 0;
- /* current inflate mode */
- this.last = false;
- /* true if processing last block */
- this.wrap = 0;
- /* bit 0 true for zlib, bit 1 true for gzip */
- this.havedict = false;
- /* true if dictionary provided */
- this.flags = 0;
- /* gzip header method and flags (0 if zlib) */
- this.dmax = 0;
- /* zlib header max distance (INFLATE_STRICT) */
- this.check = 0;
- /* protected copy of check value */
- this.total = 0;
- /* protected copy of output count */
- // TODO: may be {}
- this.head = null;
- /* where to save gzip header information */
- /* sliding window */
- this.wbits = 0;
- /* log base 2 of requested window size */
- this.wsize = 0;
- /* window size or zero if not using window */
- this.whave = 0;
- /* valid bytes in the window */
- this.wnext = 0;
- /* window write index */
- this.window = null;
- /* allocated sliding window, if needed */
- /* bit accumulator */
- this.hold = 0;
- /* input bit accumulator */
- this.bits = 0;
- /* number of bits in "in" */
- /* for string and stored block copying */
- this.length = 0;
- /* literal or length of data to copy */
- this.offset = 0;
- /* distance back to copy string from */
- /* for table and code decoding */
- this.extra = 0;
- /* extra bits needed */
- /* fixed and dynamic code tables */
- this.lencode = null;
- /* starting table for length/literal codes */
- this.distcode = null;
- /* starting table for distance codes */
- this.lenbits = 0;
- /* index bits for lencode */
- this.distbits = 0;
- /* index bits for distcode */
- /* dynamic table building */
- this.ncode = 0;
- /* number of code length code lengths */
- this.nlen = 0;
- /* number of length code lengths */
- this.ndist = 0;
- /* number of distance code lengths */
- this.have = 0;
- /* number of code lengths in lens[] */
- this.next = null;
- /* next available space in codes[] */
- this.lens = new utils.Buf16(320);
- /* temporary storage for code lengths */
- this.work = new utils.Buf16(288);
- /* work area for code table building */
- /*
- because we don't have pointers in js, we use lencode and distcode directly
- as buffers so we don't need codes
- */
- //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */
- this.lendyn = null;
- /* dynamic table for length/literal codes (JS specific) */
- this.distdyn = null;
- /* dynamic table for distance codes (JS specific) */
- this.sane = 0;
- /* if false, allow invalid distance too far */
- this.back = 0;
- /* bits back of last unprocessed length/lit */
- this.was = 0;
- /* initial length of match */
- }
- function inflateResetKeep(strm) {
- var state;
- if (!strm || !strm.state) {
- return Z_STREAM_ERROR;
- }
- state = strm.state;
- strm.total_in = strm.total_out = state.total = 0;
- strm.msg = '';
- /*Z_NULL*/
- if (state.wrap) {
- /* to support ill-conceived Java test suite */
- strm.adler = state.wrap & 1;
- }
- state.mode = HEAD;
- state.last = 0;
- state.havedict = 0;
- state.dmax = 32768;
- state.head = null
- /*Z_NULL*/
- ;
- state.hold = 0;
- state.bits = 0; //state.lencode = state.distcode = state.next = state.codes;
- state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);
- state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);
- state.sane = 1;
- state.back = -1; //Tracev((stderr, "inflate: reset\n"));
- return Z_OK;
- }
- function inflateReset(strm) {
- var state;
- if (!strm || !strm.state) {
- return Z_STREAM_ERROR;
- }
- state = strm.state;
- state.wsize = 0;
- state.whave = 0;
- state.wnext = 0;
- return inflateResetKeep(strm);
- }
- function inflateReset2(strm, windowBits) {
- var wrap;
- var state;
- /* get the state */
- if (!strm || !strm.state) {
- return Z_STREAM_ERROR;
- }
- state = strm.state;
- /* extract wrap request from windowBits parameter */
- if (windowBits < 0) {
- wrap = 0;
- windowBits = -windowBits;
- } else {
- wrap = (windowBits >> 4) + 1;
- if (windowBits < 48) {
- windowBits &= 15;
- }
- }
- /* set number of window bits, free window if different */
- if (windowBits && (windowBits < 8 || windowBits > 15)) {
- return Z_STREAM_ERROR;
- }
- if (state.window !== null && state.wbits !== windowBits) {
- state.window = null;
- }
- /* update state and reset the rest of it */
- state.wrap = wrap;
- state.wbits = windowBits;
- return inflateReset(strm);
- }
- function inflateInit2(strm, windowBits) {
- var ret;
- var state;
- if (!strm) {
- return Z_STREAM_ERROR;
- } //strm.msg = Z_NULL; /* in case we return an error */
- state = new InflateState(); //if (state === Z_NULL) return Z_MEM_ERROR;
- //Tracev((stderr, "inflate: allocated\n"));
- strm.state = state;
- state.window = null
- /*Z_NULL*/
- ;
- ret = inflateReset2(strm, windowBits);
- if (ret !== Z_OK) {
- strm.state = null
- /*Z_NULL*/
- ;
- }
- return ret;
- }
- function inflateInit(strm) {
- return inflateInit2(strm, DEF_WBITS);
- }
- /*
- Return state with length and distance decoding tables and index sizes set to
- fixed code decoding. Normally this returns fixed tables from inffixed.h.
- If BUILDFIXED is defined, then instead this routine builds the tables the
- first time it's called, and returns those tables the first time and
- thereafter. This reduces the size of the code by about 2K bytes, in
- exchange for a little execution time. However, BUILDFIXED should not be
- used for threaded applications, since the rewriting of the tables and virgin
- may not be thread-safe.
- */
- var virgin = true;
- var lenfix, distfix; // We have no pointers in JS, so keep tables separate
- function fixedtables(state) {
- /* build fixed huffman tables if first call (may not be thread safe) */
- if (virgin) {
- var sym;
- lenfix = new utils.Buf32(512);
- distfix = new utils.Buf32(32);
- /* literal/length table */
- sym = 0;
- while (sym < 144) {
- state.lens[sym++] = 8;
- }
- while (sym < 256) {
- state.lens[sym++] = 9;
- }
- while (sym < 280) {
- state.lens[sym++] = 7;
- }
- while (sym < 288) {
- state.lens[sym++] = 8;
- }
- inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, {
- bits: 9
- });
- /* distance table */
- sym = 0;
- while (sym < 32) {
- state.lens[sym++] = 5;
- }
- inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, {
- bits: 5
- });
- /* do this just once */
- virgin = false;
- }
- state.lencode = lenfix;
- state.lenbits = 9;
- state.distcode = distfix;
- state.distbits = 5;
- }
- /*
- Update the window with the last wsize (normally 32K) bytes written before
- returning. If window does not exist yet, create it. This is only called
- when a window is already in use, or when output has been written during this
- inflate call, but the end of the deflate stream has not been reached yet.
- It is also called to create a window for dictionary data when a dictionary
- is loaded.
- Providing output buffers larger than 32K to inflate() should provide a speed
- advantage, since only the last 32K of output is copied to the sliding window
- upon return from inflate(), and since all distances after the first 32K of
- output will fall in the output data, making match copies simpler and faster.
- The advantage may be dependent on the size of the processor's data caches.
- */
- function updatewindow(strm, src, end, copy) {
- var dist;
- var state = strm.state;
- /* if it hasn't been done already, allocate space for the window */
- if (state.window === null) {
- state.wsize = 1 << state.wbits;
- state.wnext = 0;
- state.whave = 0;
- state.window = new utils.Buf8(state.wsize);
- }
- /* copy state->wsize or less output bytes into the circular window */
- if (copy >= state.wsize) {
- utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);
- state.wnext = 0;
- state.whave = state.wsize;
- } else {
- dist = state.wsize - state.wnext;
- if (dist > copy) {
- dist = copy;
- } //zmemcpy(state->window + state->wnext, end - copy, dist);
- utils.arraySet(state.window, src, end - copy, dist, state.wnext);
- copy -= dist;
- if (copy) {
- //zmemcpy(state->window, end - copy, copy);
- utils.arraySet(state.window, src, end - copy, copy, 0);
- state.wnext = copy;
- state.whave = state.wsize;
- } else {
- state.wnext += dist;
- if (state.wnext === state.wsize) {
- state.wnext = 0;
- }
- if (state.whave < state.wsize) {
- state.whave += dist;
- }
- }
- }
- return 0;
- }
- function inflate(strm, flush) {
- var state;
- var input, output; // input/output buffers
- var next;
- /* next input INDEX */
- var put;
- /* next output INDEX */
- var have, left;
- /* available input and output */
- var hold;
- /* bit buffer */
- var bits;
- /* bits in bit buffer */
- var _in, _out;
- /* save starting available input and output */
- var copy;
- /* number of stored or match bytes to copy */
- var from;
- /* where to copy match bytes from */
- var from_source;
- var here = 0;
- /* current decoding table entry */
- var here_bits, here_op, here_val; // paked "here" denormalized (JS specific)
- //var last; /* parent table entry */
- var last_bits, last_op, last_val; // paked "last" denormalized (JS specific)
- var len;
- /* length to copy for repeats, bits to drop */
- var ret;
- /* return code */
- var hbuf = new utils.Buf8(4);
- /* buffer for gzip header crc calculation */
- var opts;
- var n; // temporary var for NEED_BITS
- var order =
- /* permutation of code lengths */
- [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];
- if (!strm || !strm.state || !strm.output || !strm.input && strm.avail_in !== 0) {
- return Z_STREAM_ERROR;
- }
- state = strm.state;
- if (state.mode === TYPE) {
- state.mode = TYPEDO;
- }
- /* skip check */
- //--- LOAD() ---
- put = strm.next_out;
- output = strm.output;
- left = strm.avail_out;
- next = strm.next_in;
- input = strm.input;
- have = strm.avail_in;
- hold = state.hold;
- bits = state.bits; //---
- _in = have;
- _out = left;
- ret = Z_OK;
- inf_leave: // goto emulation
- for (;;) {
- switch (state.mode) {
- case HEAD:
- if (state.wrap === 0) {
- state.mode = TYPEDO;
- break;
- } //=== NEEDBITS(16);
- while (bits < 16) {
- if (have === 0) {
- break inf_leave;
- }
- have--;
- hold += input[next++] << bits;
- bits += 8;
- } //===//
- if (state.wrap & 2 && hold === 0x8b1f) {
- /* gzip header */
- state.check = 0
- /*crc32(0L, Z_NULL, 0)*/
- ; //=== CRC2(state.check, hold);
- hbuf[0] = hold & 0xff;
- hbuf[1] = hold >>> 8 & 0xff;
- state.check = crc32(state.check, hbuf, 2, 0); //===//
- //=== INITBITS();
- hold = 0;
- bits = 0; //===//
- state.mode = FLAGS;
- break;
- }
- state.flags = 0;
- /* expect zlib header */
- if (state.head) {
- state.head.done = false;
- }
- if (!(state.wrap & 1) ||
- /* check if zlib header allowed */
- (((hold & 0xff) <<
- /*BITS(8)*/
- 8) + (hold >> 8)) % 31) {
- strm.msg = 'incorrect header check';
- state.mode = BAD;
- break;
- }
- if ((hold & 0x0f) !==
- /*BITS(4)*/
- Z_DEFLATED) {
- strm.msg = 'unknown compression method';
- state.mode = BAD;
- break;
- } //--- DROPBITS(4) ---//
- hold >>>= 4;
- bits -= 4; //---//
- len = (hold & 0x0f) +
- /*BITS(4)*/
- 8;
- if (state.wbits === 0) {
- state.wbits = len;
- } else if (len > state.wbits) {
- strm.msg = 'invalid window size';
- state.mode = BAD;
- break;
- }
- state.dmax = 1 << len; //Tracev((stderr, "inflate: zlib header ok\n"));
- strm.adler = state.check = 1
- /*adler32(0L, Z_NULL, 0)*/
- ;
- state.mode = hold & 0x200 ? DICTID : TYPE; //=== INITBITS();
- hold = 0;
- bits = 0; //===//
- break;
- case FLAGS:
- //=== NEEDBITS(16); */
- while (bits < 16) {
- if (have === 0) {
- break inf_leave;
- }
- have--;
- hold += input[next++] << bits;
- bits += 8;
- } //===//
- state.flags = hold;
- if ((state.flags & 0xff) !== Z_DEFLATED) {
- strm.msg = 'unknown compression method';
- state.mode = BAD;
- break;
- }
- if (state.flags & 0xe000) {
- strm.msg = 'unknown header flags set';
- state.mode = BAD;
- break;
- }
- if (state.head) {
- state.head.text = hold >> 8 & 1;
- }
- if (state.flags & 0x0200) {
- //=== CRC2(state.check, hold);
- hbuf[0] = hold & 0xff;
- hbuf[1] = hold >>> 8 & 0xff;
- state.check = crc32(state.check, hbuf, 2, 0); //===//
- } //=== INITBITS();
- hold = 0;
- bits = 0; //===//
- state.mode = TIME;
- /* falls through */
- case TIME:
- //=== NEEDBITS(32); */
- while (bits < 32) {
- if (have === 0) {
- break inf_leave;
- }
- have--;
- hold += input[next++] << bits;
- bits += 8;
- } //===//
- if (state.head) {
- state.head.time = hold;
- }
- if (state.flags & 0x0200) {
- //=== CRC4(state.check, hold)
- hbuf[0] = hold & 0xff;
- hbuf[1] = hold >>> 8 & 0xff;
- hbuf[2] = hold >>> 16 & 0xff;
- hbuf[3] = hold >>> 24 & 0xff;
- state.check = crc32(state.check, hbuf, 4, 0); //===
- } //=== INITBITS();
- hold = 0;
- bits = 0; //===//
- state.mode = OS;
- /* falls through */
- case OS:
- //=== NEEDBITS(16); */
- while (bits < 16) {
- if (have === 0) {
- break inf_leave;
- }
- have--;
- hold += input[next++] << bits;
- bits += 8;
- } //===//
- if (state.head) {
- state.head.xflags = hold & 0xff;
- state.head.os = hold >> 8;
- }
- if (state.flags & 0x0200) {
- //=== CRC2(state.check, hold);
- hbuf[0] = hold & 0xff;
- hbuf[1] = hold >>> 8 & 0xff;
- state.check = crc32(state.check, hbuf, 2, 0); //===//
- } //=== INITBITS();
- hold = 0;
- bits = 0; //===//
- state.mode = EXLEN;
- /* falls through */
- case EXLEN:
- if (state.flags & 0x0400) {
- //=== NEEDBITS(16); */
- while (bits < 16) {
- if (have === 0) {
- break inf_leave;
- }
- have--;
- hold += input[next++] << bits;
- bits += 8;
- } //===//
- state.length = hold;
- if (state.head) {
- state.head.extra_len = hold;
- }
- if (state.flags & 0x0200) {
- //=== CRC2(state.check, hold);
- hbuf[0] = hold & 0xff;
- hbuf[1] = hold >>> 8 & 0xff;
- state.check = crc32(state.check, hbuf, 2, 0); //===//
- } //=== INITBITS();
- hold = 0;
- bits = 0; //===//
- } else if (state.head) {
- state.head.extra = null
- /*Z_NULL*/
- ;
- }
- state.mode = EXTRA;
- /* falls through */
- case EXTRA:
- if (state.flags & 0x0400) {
- copy = state.length;
- if (copy > have) {
- copy = have;
- }
- if (copy) {
- if (state.head) {
- len = state.head.extra_len - state.length;
- if (!state.head.extra) {
- // Use untyped array for more convenient processing later
- state.head.extra = new Array(state.head.extra_len);
- }
- utils.arraySet(state.head.extra, input, next, // extra field is limited to 65536 bytes
- // - no need for additional size check
- copy,
- /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/
- len); //zmemcpy(state.head.extra + len, next,
- // len + copy > state.head.extra_max ?
- // state.head.extra_max - len : copy);
- }
- if (state.flags & 0x0200) {
- state.check = crc32(state.check, input, copy, next);
- }
- have -= copy;
- next += copy;
- state.length -= copy;
- }
- if (state.length) {
- break inf_leave;
- }
- }
- state.length = 0;
- state.mode = NAME;
- /* falls through */
- case NAME:
- if (state.flags & 0x0800) {
- if (have === 0) {
- break inf_leave;
- }
- copy = 0;
- do {
- // TODO: 2 or 1 bytes?
- len = input[next + copy++];
- /* use constant limit because in js we should not preallocate memory */
- if (state.head && len && state.length < 65536
- /*state.head.name_max*/
- ) {
- state.head.name += String.fromCharCode(len);
- }
- } while (len && copy < have);
- if (state.flags & 0x0200) {
- state.check = crc32(state.check, input, copy, next);
- }
- have -= copy;
- next += copy;
- if (len) {
- break inf_leave;
- }
- } else if (state.head) {
- state.head.name = null;
- }
- state.length = 0;
- state.mode = COMMENT;
- /* falls through */
- case COMMENT:
- if (state.flags & 0x1000) {
- if (have === 0) {
- break inf_leave;
- }
- copy = 0;
- do {
- len = input[next + copy++];
- /* use constant limit because in js we should not preallocate memory */
- if (state.head && len && state.length < 65536
- /*state.head.comm_max*/
- ) {
- state.head.comment += String.fromCharCode(len);
- }
- } while (len && copy < have);
- if (state.flags & 0x0200) {
- state.check = crc32(state.check, input, copy, next);
- }
- have -= copy;
- next += copy;
- if (len) {
- break inf_leave;
- }
- } else if (state.head) {
- state.head.comment = null;
- }
- state.mode = HCRC;
- /* falls through */
- case HCRC:
- if (state.flags & 0x0200) {
- //=== NEEDBITS(16); */
- while (bits < 16) {
- if (have === 0) {
- break inf_leave;
- }
- have--;
- hold += input[next++] << bits;
- bits += 8;
- } //===//
- if (hold !== (state.check & 0xffff)) {
- strm.msg = 'header crc mismatch';
- state.mode = BAD;
- break;
- } //=== INITBITS();
- hold = 0;
- bits = 0; //===//
- }
- if (state.head) {
- state.head.hcrc = state.flags >> 9 & 1;
- state.head.done = true;
- }
- strm.adler = state.check = 0;
- state.mode = TYPE;
- break;
- case DICTID:
- //=== NEEDBITS(32); */
- while (bits < 32) {
- if (have === 0) {
- break inf_leave;
- }
- have--;
- hold += input[next++] << bits;
- bits += 8;
- } //===//
- strm.adler = state.check = zswap32(hold); //=== INITBITS();
- hold = 0;
- bits = 0; //===//
- state.mode = DICT;
- /* falls through */
- case DICT:
- if (state.havedict === 0) {
- //--- RESTORE() ---
- strm.next_out = put;
- strm.avail_out = left;
- strm.next_in = next;
- strm.avail_in = have;
- state.hold = hold;
- state.bits = bits; //---
- return Z_NEED_DICT;
- }
- strm.adler = state.check = 1
- /*adler32(0L, Z_NULL, 0)*/
- ;
- state.mode = TYPE;
- /* falls through */
- case TYPE:
- if (flush === Z_BLOCK || flush === Z_TREES) {
- break inf_leave;
- }
- /* falls through */
- case TYPEDO:
- if (state.last) {
- //--- BYTEBITS() ---//
- hold >>>= bits & 7;
- bits -= bits & 7; //---//
- state.mode = CHECK;
- break;
- } //=== NEEDBITS(3); */
- while (bits < 3) {
- if (have === 0) {
- break inf_leave;
- }
- have--;
- hold += input[next++] << bits;
- bits += 8;
- } //===//
- state.last = hold & 0x01
- /*BITS(1)*/
- ; //--- DROPBITS(1) ---//
- hold >>>= 1;
- bits -= 1; //---//
- switch (hold & 0x03) {
- /*BITS(2)*/
- case 0:
- /* stored block */
- //Tracev((stderr, "inflate: stored block%s\n",
- // state.last ? " (last)" : ""));
- state.mode = STORED;
- break;
- case 1:
- /* fixed block */
- fixedtables(state); //Tracev((stderr, "inflate: fixed codes block%s\n",
- // state.last ? " (last)" : ""));
- state.mode = LEN_;
- /* decode codes */
- if (flush === Z_TREES) {
- //--- DROPBITS(2) ---//
- hold >>>= 2;
- bits -= 2; //---//
- break inf_leave;
- }
- break;
- case 2:
- /* dynamic block */
- //Tracev((stderr, "inflate: dynamic codes block%s\n",
- // state.last ? " (last)" : ""));
- state.mode = TABLE;
- break;
- case 3:
- strm.msg = 'invalid block type';
- state.mode = BAD;
- } //--- DROPBITS(2) ---//
- hold >>>= 2;
- bits -= 2; //---//
- break;
- case STORED:
- //--- BYTEBITS() ---// /* go to byte boundary */
- hold >>>= bits & 7;
- bits -= bits & 7; //---//
- //=== NEEDBITS(32); */
- while (bits < 32) {
- if (have === 0) {
- break inf_leave;
- }
- have--;
- hold += input[next++] << bits;
- bits += 8;
- } //===//
- if ((hold & 0xffff) !== (hold >>> 16 ^ 0xffff)) {
- strm.msg = 'invalid stored block lengths';
- state.mode = BAD;
- break;
- }
- state.length = hold & 0xffff; //Tracev((stderr, "inflate: stored length %u\n",
- // state.length));
- //=== INITBITS();
- hold = 0;
- bits = 0; //===//
- state.mode = COPY_;
- if (flush === Z_TREES) {
- break inf_leave;
- }
- /* falls through */
- case COPY_:
- state.mode = COPY;
- /* falls through */
- case COPY:
- copy = state.length;
- if (copy) {
- if (copy > have) {
- copy = have;
- }
- if (copy > left) {
- copy = left;
- }
- if (copy === 0) {
- break inf_leave;
- } //--- zmemcpy(put, next, copy); ---
- utils.arraySet(output, input, next, copy, put); //---//
- have -= copy;
- next += copy;
- left -= copy;
- put += copy;
- state.length -= copy;
- break;
- } //Tracev((stderr, "inflate: stored end\n"));
- state.mode = TYPE;
- break;
- case TABLE:
- //=== NEEDBITS(14); */
- while (bits < 14) {
- if (have === 0) {
- break inf_leave;
- }
- have--;
- hold += input[next++] << bits;
- bits += 8;
- } //===//
- state.nlen = (hold & 0x1f) +
- /*BITS(5)*/
- 257; //--- DROPBITS(5) ---//
- hold >>>= 5;
- bits -= 5; //---//
- state.ndist = (hold & 0x1f) +
- /*BITS(5)*/
- 1; //--- DROPBITS(5) ---//
- hold >>>= 5;
- bits -= 5; //---//
- state.ncode = (hold & 0x0f) +
- /*BITS(4)*/
- 4; //--- DROPBITS(4) ---//
- hold >>>= 4;
- bits -= 4; //---//
- //#ifndef PKZIP_BUG_WORKAROUND
- if (state.nlen > 286 || state.ndist > 30) {
- strm.msg = 'too many length or distance symbols';
- state.mode = BAD;
- break;
- } //#endif
- //Tracev((stderr, "inflate: table sizes ok\n"));
- state.have = 0;
- state.mode = LENLENS;
- /* falls through */
- case LENLENS:
- while (state.have < state.ncode) {
- //=== NEEDBITS(3);
- while (bits < 3) {
- if (have === 0) {
- break inf_leave;
- }
- have--;
- hold += input[next++] << bits;
- bits += 8;
- } //===//
- state.lens[order[state.have++]] = hold & 0x07; //BITS(3);
- //--- DROPBITS(3) ---//
- hold >>>= 3;
- bits -= 3; //---//
- }
- while (state.have < 19) {
- state.lens[order[state.have++]] = 0;
- } // We have separate tables & no pointers. 2 commented lines below not needed.
- //state.next = state.codes;
- //state.lencode = state.next;
- // Switch to use dynamic table
- state.lencode = state.lendyn;
- state.lenbits = 7;
- opts = {
- bits: state.lenbits
- };
- ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);
- state.lenbits = opts.bits;
- if (ret) {
- strm.msg = 'invalid code lengths set';
- state.mode = BAD;
- break;
- } //Tracev((stderr, "inflate: code lengths ok\n"));
- state.have = 0;
- state.mode = CODELENS;
- /* falls through */
- case CODELENS:
- while (state.have < state.nlen + state.ndist) {
- for (;;) {
- here = state.lencode[hold & (1 << state.lenbits) - 1];
- /*BITS(state.lenbits)*/
- here_bits = here >>> 24;
- here_op = here >>> 16 & 0xff;
- here_val = here & 0xffff;
- if (here_bits <= bits) {
- break;
- } //--- PULLBYTE() ---//
- if (have === 0) {
- break inf_leave;
- }
- have--;
- hold += input[next++] << bits;
- bits += 8; //---//
- }
- if (here_val < 16) {
- //--- DROPBITS(here.bits) ---//
- hold >>>= here_bits;
- bits -= here_bits; //---//
- state.lens[state.have++] = here_val;
- } else {
- if (here_val === 16) {
- //=== NEEDBITS(here.bits + 2);
- n = here_bits + 2;
- while (bits < n) {
- if (have === 0) {
- break inf_leave;
- }
- have--;
- hold += input[next++] << bits;
- bits += 8;
- } //===//
- //--- DROPBITS(here.bits) ---//
- hold >>>= here_bits;
- bits -= here_bits; //---//
- if (state.have === 0) {
- strm.msg = 'invalid bit length repeat';
- state.mode = BAD;
- break;
- }
- len = state.lens[state.have - 1];
- copy = 3 + (hold & 0x03); //BITS(2);
- //--- DROPBITS(2) ---//
- hold >>>= 2;
- bits -= 2; //---//
- } else if (here_val === 17) {
- //=== NEEDBITS(here.bits + 3);
- n = here_bits + 3;
- while (bits < n) {
- if (have === 0) {
- break inf_leave;
- }
- have--;
- hold += input[next++] << bits;
- bits += 8;
- } //===//
- //--- DROPBITS(here.bits) ---//
- hold >>>= here_bits;
- bits -= here_bits; //---//
- len = 0;
- copy = 3 + (hold & 0x07); //BITS(3);
- //--- DROPBITS(3) ---//
- hold >>>= 3;
- bits -= 3; //---//
- } else {
- //=== NEEDBITS(here.bits + 7);
- n = here_bits + 7;
- while (bits < n) {
- if (have === 0) {
- break inf_leave;
- }
- have--;
- hold += input[next++] << bits;
- bits += 8;
- } //===//
- //--- DROPBITS(here.bits) ---//
- hold >>>= here_bits;
- bits -= here_bits; //---//
- len = 0;
- copy = 11 + (hold & 0x7f); //BITS(7);
- //--- DROPBITS(7) ---//
- hold >>>= 7;
- bits -= 7; //---//
- }
- if (state.have + copy > state.nlen + state.ndist) {
- strm.msg = 'invalid bit length repeat';
- state.mode = BAD;
- break;
- }
- while (copy--) {
- state.lens[state.have++] = len;
- }
- }
- }
- /* handle error breaks in while */
- if (state.mode === BAD) {
- break;
- }
- /* check for end-of-block code (better have one) */
- if (state.lens[256] === 0) {
- strm.msg = 'invalid code -- missing end-of-block';
- state.mode = BAD;
- break;
- }
- /* build code tables -- note: do not change the lenbits or distbits
- values here (9 and 6) without reading the comments in inftrees.h
- concerning the ENOUGH constants, which depend on those values */
- state.lenbits = 9;
- opts = {
- bits: state.lenbits
- };
- ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts); // We have separate tables & no pointers. 2 commented lines below not needed.
- // state.next_index = opts.table_index;
- state.lenbits = opts.bits; // state.lencode = state.next;
- if (ret) {
- strm.msg = 'invalid literal/lengths set';
- state.mode = BAD;
- break;
- }
- state.distbits = 6; //state.distcode.copy(state.codes);
- // Switch to use dynamic table
- state.distcode = state.distdyn;
- opts = {
- bits: state.distbits
- };
- ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts); // We have separate tables & no pointers. 2 commented lines below not needed.
- // state.next_index = opts.table_index;
- state.distbits = opts.bits; // state.distcode = state.next;
- if (ret) {
- strm.msg = 'invalid distances set';
- state.mode = BAD;
- break;
- } //Tracev((stderr, 'inflate: codes ok\n'));
- state.mode = LEN_;
- if (flush === Z_TREES) {
- break inf_leave;
- }
- /* falls through */
- case LEN_:
- state.mode = LEN;
- /* falls through */
- case LEN:
- if (have >= 6 && left >= 258) {
- //--- RESTORE() ---
- strm.next_out = put;
- strm.avail_out = left;
- strm.next_in = next;
- strm.avail_in = have;
- state.hold = hold;
- state.bits = bits; //---
- inflate_fast(strm, _out); //--- LOAD() ---
- put = strm.next_out;
- output = strm.output;
- left = strm.avail_out;
- next = strm.next_in;
- input = strm.input;
- have = strm.avail_in;
- hold = state.hold;
- bits = state.bits; //---
- if (state.mode === TYPE) {
- state.back = -1;
- }
- break;
- }
- state.back = 0;
- for (;;) {
- here = state.lencode[hold & (1 << state.lenbits) - 1];
- /*BITS(state.lenbits)*/
- here_bits = here >>> 24;
- here_op = here >>> 16 & 0xff;
- here_val = here & 0xffff;
- if (here_bits <= bits) {
- break;
- } //--- PULLBYTE() ---//
- if (have === 0) {
- break inf_leave;
- }
- have--;
- hold += input[next++] << bits;
- bits += 8; //---//
- }
- if (here_op && (here_op & 0xf0) === 0) {
- last_bits = here_bits;
- last_op = here_op;
- last_val = here_val;
- for (;;) {
- here = state.lencode[last_val + ((hold & (1 << last_bits + last_op) - 1) >>
- /*BITS(last.bits + last.op)*/
- last_bits)];
- here_bits = here >>> 24;
- here_op = here >>> 16 & 0xff;
- here_val = here & 0xffff;
- if (last_bits + here_bits <= bits) {
- break;
- } //--- PULLBYTE() ---//
- if (have === 0) {
- break inf_leave;
- }
- have--;
- hold += input[next++] << bits;
- bits += 8; //---//
- } //--- DROPBITS(last.bits) ---//
- hold >>>= last_bits;
- bits -= last_bits; //---//
- state.back += last_bits;
- } //--- DROPBITS(here.bits) ---//
- hold >>>= here_bits;
- bits -= here_bits; //---//
- state.back += here_bits;
- state.length = here_val;
- if (here_op === 0) {
- //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
- // "inflate: literal '%c'\n" :
- // "inflate: literal 0x%02x\n", here.val));
- state.mode = LIT;
- break;
- }
- if (here_op & 32) {
- //Tracevv((stderr, "inflate: end of block\n"));
- state.back = -1;
- state.mode = TYPE;
- break;
- }
- if (here_op & 64) {
- strm.msg = 'invalid literal/length code';
- state.mode = BAD;
- break;
- }
- state.extra = here_op & 15;
- state.mode = LENEXT;
- /* falls through */
- case LENEXT:
- if (state.extra) {
- //=== NEEDBITS(state.extra);
- n = state.extra;
- while (bits < n) {
- if (have === 0) {
- break inf_leave;
- }
- have--;
- hold += input[next++] << bits;
- bits += 8;
- } //===//
- state.length += hold & (1 << state.extra) - 1
- /*BITS(state.extra)*/
- ; //--- DROPBITS(state.extra) ---//
- hold >>>= state.extra;
- bits -= state.extra; //---//
- state.back += state.extra;
- } //Tracevv((stderr, "inflate: length %u\n", state.length));
- state.was = state.length;
- state.mode = DIST;
- /* falls through */
- case DIST:
- for (;;) {
- here = state.distcode[hold & (1 << state.distbits) - 1];
- /*BITS(state.distbits)*/
- here_bits = here >>> 24;
- here_op = here >>> 16 & 0xff;
- here_val = here & 0xffff;
- if (here_bits <= bits) {
- break;
- } //--- PULLBYTE() ---//
- if (have === 0) {
- break inf_leave;
- }
- have--;
- hold += input[next++] << bits;
- bits += 8; //---//
- }
- if ((here_op & 0xf0) === 0) {
- last_bits = here_bits;
- last_op = here_op;
- last_val = here_val;
- for (;;) {
- here = state.distcode[last_val + ((hold & (1 << last_bits + last_op) - 1) >>
- /*BITS(last.bits + last.op)*/
- last_bits)];
- here_bits = here >>> 24;
- here_op = here >>> 16 & 0xff;
- here_val = here & 0xffff;
- if (last_bits + here_bits <= bits) {
- break;
- } //--- PULLBYTE() ---//
- if (have === 0) {
- break inf_leave;
- }
- have--;
- hold += input[next++] << bits;
- bits += 8; //---//
- } //--- DROPBITS(last.bits) ---//
- hold >>>= last_bits;
- bits -= last_bits; //---//
- state.back += last_bits;
- } //--- DROPBITS(here.bits) ---//
- hold >>>= here_bits;
- bits -= here_bits; //---//
- state.back += here_bits;
- if (here_op & 64) {
- strm.msg = 'invalid distance code';
- state.mode = BAD;
- break;
- }
- state.offset = here_val;
- state.extra = here_op & 15;
- state.mode = DISTEXT;
- /* falls through */
- case DISTEXT:
- if (state.extra) {
- //=== NEEDBITS(state.extra);
- n = state.extra;
- while (bits < n) {
- if (have === 0) {
- break inf_leave;
- }
- have--;
- hold += input[next++] << bits;
- bits += 8;
- } //===//
- state.offset += hold & (1 << state.extra) - 1
- /*BITS(state.extra)*/
- ; //--- DROPBITS(state.extra) ---//
- hold >>>= state.extra;
- bits -= state.extra; //---//
- state.back += state.extra;
- } //#ifdef INFLATE_STRICT
- if (state.offset > state.dmax) {
- strm.msg = 'invalid distance too far back';
- state.mode = BAD;
- break;
- } //#endif
- //Tracevv((stderr, "inflate: distance %u\n", state.offset));
- state.mode = MATCH;
- /* falls through */
- case MATCH:
- if (left === 0) {
- break inf_leave;
- }
- copy = _out - left;
- if (state.offset > copy) {
- /* copy from window */
- copy = state.offset - copy;
- if (copy > state.whave) {
- if (state.sane) {
- strm.msg = 'invalid distance too far back';
- state.mode = BAD;
- break;
- } // (!) This block is disabled in zlib defaults,
- // don't enable it for binary compatibility
- //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
- // Trace((stderr, "inflate.c too far\n"));
- // copy -= state.whave;
- // if (copy > state.length) { copy = state.length; }
- // if (copy > left) { copy = left; }
- // left -= copy;
- // state.length -= copy;
- // do {
- // output[put++] = 0;
- // } while (--copy);
- // if (state.length === 0) { state.mode = LEN; }
- // break;
- //#endif
- }
- if (copy > state.wnext) {
- copy -= state.wnext;
- from = state.wsize - copy;
- } else {
- from = state.wnext - copy;
- }
- if (copy > state.length) {
- copy = state.length;
- }
- from_source = state.window;
- } else {
- /* copy from output */
- from_source = output;
- from = put - state.offset;
- copy = state.length;
- }
- if (copy > left) {
- copy = left;
- }
- left -= copy;
- state.length -= copy;
- do {
- output[put++] = from_source[from++];
- } while (--copy);
- if (state.length === 0) {
- state.mode = LEN;
- }
- break;
- case LIT:
- if (left === 0) {
- break inf_leave;
- }
- output[put++] = state.length;
- left--;
- state.mode = LEN;
- break;
- case CHECK:
- if (state.wrap) {
- //=== NEEDBITS(32);
- while (bits < 32) {
- if (have === 0) {
- break inf_leave;
- }
- have--; // Use '|' instead of '+' to make sure that result is signed
- hold |= input[next++] << bits;
- bits += 8;
- } //===//
- _out -= left;
- strm.total_out += _out;
- state.total += _out;
- if (_out) {
- strm.adler = state.check =
- /*UPDATE(state.check, put - _out, _out);*/
- state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out);
- }
- _out = left; // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too
- if ((state.flags ? hold : zswap32(hold)) !== state.check) {
- strm.msg = 'incorrect data check';
- state.mode = BAD;
- break;
- } //=== INITBITS();
- hold = 0;
- bits = 0; //===//
- //Tracev((stderr, "inflate: check matches trailer\n"));
- }
- state.mode = LENGTH;
- /* falls through */
- case LENGTH:
- if (state.wrap && state.flags) {
- //=== NEEDBITS(32);
- while (bits < 32) {
- if (have === 0) {
- break inf_leave;
- }
- have--;
- hold += input[next++] << bits;
- bits += 8;
- } //===//
- if (hold !== (state.total & 0xffffffff)) {
- strm.msg = 'incorrect length check';
- state.mode = BAD;
- break;
- } //=== INITBITS();
- hold = 0;
- bits = 0; //===//
- //Tracev((stderr, "inflate: length matches trailer\n"));
- }
- state.mode = DONE;
- /* falls through */
- case DONE:
- ret = Z_STREAM_END;
- break inf_leave;
- case BAD:
- ret = Z_DATA_ERROR;
- break inf_leave;
- case MEM:
- return Z_MEM_ERROR;
- case SYNC:
- /* falls through */
- default:
- return Z_STREAM_ERROR;
- }
- } // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave"
- /*
- Return from inflate(), updating the total counts and the check value.
- If there was no progress during the inflate() call, return a buffer
- error. Call updatewindow() to create and/or update the window state.
- Note: a memory error from inflate() is non-recoverable.
- */
- //--- RESTORE() ---
- strm.next_out = put;
- strm.avail_out = left;
- strm.next_in = next;
- strm.avail_in = have;
- state.hold = hold;
- state.bits = bits; //---
- if (state.wsize || _out !== strm.avail_out && state.mode < BAD && (state.mode < CHECK || flush !== Z_FINISH)) {
- if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {
- state.mode = MEM;
- return Z_MEM_ERROR;
- }
- }
- _in -= strm.avail_in;
- _out -= strm.avail_out;
- strm.total_in += _in;
- strm.total_out += _out;
- state.total += _out;
- if (state.wrap && _out) {
- strm.adler = state.check =
- /*UPDATE(state.check, strm.next_out - _out, _out);*/
- state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out);
- }
- strm.data_type = state.bits + (state.last ? 64 : 0) + (state.mode === TYPE ? 128 : 0) + (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);
- if ((_in === 0 && _out === 0 || flush === Z_FINISH) && ret === Z_OK) {
- ret = Z_BUF_ERROR;
- }
- return ret;
- }
- function inflateEnd(strm) {
- if (!strm || !strm.state
- /*|| strm->zfree == (free_func)0*/
- ) {
- return Z_STREAM_ERROR;
- }
- var state = strm.state;
- if (state.window) {
- state.window = null;
- }
- strm.state = null;
- return Z_OK;
- }
- function inflateGetHeader(strm, head) {
- var state;
- /* check state */
- if (!strm || !strm.state) {
- return Z_STREAM_ERROR;
- }
- state = strm.state;
- if ((state.wrap & 2) === 0) {
- return Z_STREAM_ERROR;
- }
- /* save header structure */
- state.head = head;
- head.done = false;
- return Z_OK;
- }
- function inflateSetDictionary(strm, dictionary) {
- var dictLength = dictionary.length;
- var state;
- var dictid;
- var ret;
- /* check state */
- if (!strm
- /* == Z_NULL */
- || !strm.state
- /* == Z_NULL */
- ) {
- return Z_STREAM_ERROR;
- }
- state = strm.state;
- if (state.wrap !== 0 && state.mode !== DICT) {
- return Z_STREAM_ERROR;
- }
- /* check for correct dictionary identifier */
- if (state.mode === DICT) {
- dictid = 1;
- /* adler32(0, null, 0)*/
- /* dictid = adler32(dictid, dictionary, dictLength); */
- dictid = adler32(dictid, dictionary, dictLength, 0);
- if (dictid !== state.check) {
- return Z_DATA_ERROR;
- }
- }
- /* copy dictionary to window using updatewindow(), which will amend the
- existing dictionary if appropriate */
- ret = updatewindow(strm, dictionary, dictLength, dictLength);
- if (ret) {
- state.mode = MEM;
- return Z_MEM_ERROR;
- }
- state.havedict = 1; // Tracev((stderr, "inflate: dictionary set\n"));
- return Z_OK;
- }
- exports.inflateReset = inflateReset;
- exports.inflateReset2 = inflateReset2;
- exports.inflateResetKeep = inflateResetKeep;
- exports.inflateInit = inflateInit;
- exports.inflateInit2 = inflateInit2;
- exports.inflate = inflate;
- exports.inflateEnd = inflateEnd;
- exports.inflateGetHeader = inflateGetHeader;
- exports.inflateSetDictionary = inflateSetDictionary;
- exports.inflateInfo = 'pako inflate (from Nodeca project)';
- /* Not implemented
- exports.inflateCopy = inflateCopy;
- exports.inflateGetDictionary = inflateGetDictionary;
- exports.inflateMark = inflateMark;
- exports.inflatePrime = inflatePrime;
- exports.inflateSync = inflateSync;
- exports.inflateSyncPoint = inflateSyncPoint;
- exports.inflateUndermine = inflateUndermine;
- */
- },{"../utils/common":333,"./adler32":335,"./crc32":337,"./inffast":340,"./inftrees":342}],342:[function(require,module,exports){
- 'use strict'; // (C) 1995-2013 Jean-loup Gailly and Mark Adler
- // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
- //
- // This software is provided 'as-is', without any express or implied
- // warranty. In no event will the authors be held liable for any damages
- // arising from the use of this software.
- //
- // Permission is granted to anyone to use this software for any purpose,
- // including commercial applications, and to alter it and redistribute it
- // freely, subject to the following restrictions:
- //
- // 1. The origin of this software must not be misrepresented; you must not
- // claim that you wrote the original software. If you use this software
- // in a product, an acknowledgment in the product documentation would be
- // appreciated but is not required.
- // 2. Altered source versions must be plainly marked as such, and must not be
- // misrepresented as being the original software.
- // 3. This notice may not be removed or altered from any source distribution.
- var utils = require('../utils/common');
- var MAXBITS = 15;
- var ENOUGH_LENS = 852;
- var ENOUGH_DISTS = 592; //var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);
- var CODES = 0;
- var LENS = 1;
- var DISTS = 2;
- var lbase = [
- /* Length codes 257..285 base */
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0];
- var lext = [
- /* Length codes 257..285 extra */
- 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78];
- var dbase = [
- /* Distance codes 0..29 base */
- 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0];
- var dext = [
- /* Distance codes 0..29 extra */
- 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 64, 64];
- module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) {
- var bits = opts.bits; //here = opts.here; /* table entry for duplication */
- var len = 0;
- /* a code's length in bits */
- var sym = 0;
- /* index of code symbols */
- var min = 0,
- max = 0;
- /* minimum and maximum code lengths */
- var root = 0;
- /* number of index bits for root table */
- var curr = 0;
- /* number of index bits for current table */
- var drop = 0;
- /* code bits to drop for sub-table */
- var left = 0;
- /* number of prefix codes available */
- var used = 0;
- /* code entries in table used */
- var huff = 0;
- /* Huffman code */
- var incr;
- /* for incrementing code, index */
- var fill;
- /* index for replicating entries */
- var low;
- /* low bits for current root entry */
- var mask;
- /* mask for low root bits */
- var next;
- /* next available space in table */
- var base = null;
- /* base value table to use */
- var base_index = 0; // var shoextra; /* extra bits table to use */
- var end;
- /* use base and extra for symbol > end */
- var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */
- var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */
- var extra = null;
- var extra_index = 0;
- var here_bits, here_op, here_val;
- /*
- Process a set of code lengths to create a canonical Huffman code. The
- code lengths are lens[0..codes-1]. Each length corresponds to the
- symbols 0..codes-1. The Huffman code is generated by first sorting the
- symbols by length from short to long, and retaining the symbol order
- for codes with equal lengths. Then the code starts with all zero bits
- for the first code of the shortest length, and the codes are integer
- increments for the same length, and zeros are appended as the length
- increases. For the deflate format, these bits are stored backwards
- from their more natural integer increment ordering, and so when the
- decoding tables are built in the large loop below, the integer codes
- are incremented backwards.
- This routine assumes, but does not check, that all of the entries in
- lens[] are in the range 0..MAXBITS. The caller must assure this.
- 1..MAXBITS is interpreted as that code length. zero means that that
- symbol does not occur in this code.
- The codes are sorted by computing a count of codes for each length,
- creating from that a table of starting indices for each length in the
- sorted table, and then entering the symbols in order in the sorted
- table. The sorted table is work[], with that space being provided by
- the caller.
- The length counts are used for other purposes as well, i.e. finding
- the minimum and maximum length codes, determining if there are any
- codes at all, checking for a valid set of lengths, and looking ahead
- at length counts to determine sub-table sizes when building the
- decoding tables.
- */
- /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
- for (len = 0; len <= MAXBITS; len++) {
- count[len] = 0;
- }
- for (sym = 0; sym < codes; sym++) {
- count[lens[lens_index + sym]]++;
- }
- /* bound code lengths, force root to be within code lengths */
- root = bits;
- for (max = MAXBITS; max >= 1; max--) {
- if (count[max] !== 0) {
- break;
- }
- }
- if (root > max) {
- root = max;
- }
- if (max === 0) {
- /* no symbols to code at all */
- //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */
- //table.bits[opts.table_index] = 1; //here.bits = (var char)1;
- //table.val[opts.table_index++] = 0; //here.val = (var short)0;
- table[table_index++] = 1 << 24 | 64 << 16 | 0; //table.op[opts.table_index] = 64;
- //table.bits[opts.table_index] = 1;
- //table.val[opts.table_index++] = 0;
- table[table_index++] = 1 << 24 | 64 << 16 | 0;
- opts.bits = 1;
- return 0;
- /* no symbols, but wait for decoding to report error */
- }
- for (min = 1; min < max; min++) {
- if (count[min] !== 0) {
- break;
- }
- }
- if (root < min) {
- root = min;
- }
- /* check for an over-subscribed or incomplete set of lengths */
- left = 1;
- for (len = 1; len <= MAXBITS; len++) {
- left <<= 1;
- left -= count[len];
- if (left < 0) {
- return -1;
- }
- /* over-subscribed */
- }
- if (left > 0 && (type === CODES || max !== 1)) {
- return -1;
- /* incomplete set */
- }
- /* generate offsets into symbol table for each length for sorting */
- offs[1] = 0;
- for (len = 1; len < MAXBITS; len++) {
- offs[len + 1] = offs[len] + count[len];
- }
- /* sort symbols by length, by symbol order within each length */
- for (sym = 0; sym < codes; sym++) {
- if (lens[lens_index + sym] !== 0) {
- work[offs[lens[lens_index + sym]]++] = sym;
- }
- }
- /*
- Create and fill in decoding tables. In this loop, the table being
- filled is at next and has curr index bits. The code being used is huff
- with length len. That code is converted to an index by dropping drop
- bits off of the bottom. For codes where len is less than drop + curr,
- those top drop + curr - len bits are incremented through all values to
- fill the table with replicated entries.
- root is the number of index bits for the root table. When len exceeds
- root, sub-tables are created pointed to by the root entry with an index
- of the low root bits of huff. This is saved in low to check for when a
- new sub-table should be started. drop is zero when the root table is
- being filled, and drop is root when sub-tables are being filled.
- When a new sub-table is needed, it is necessary to look ahead in the
- code lengths to determine what size sub-table is needed. The length
- counts are used for this, and so count[] is decremented as codes are
- entered in the tables.
- used keeps track of how many table entries have been allocated from the
- provided *table space. It is checked for LENS and DIST tables against
- the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
- the initial root table size constants. See the comments in inftrees.h
- for more information.
- sym increments through all symbols, and the loop terminates when
- all codes of length max, i.e. all codes, have been processed. This
- routine permits incomplete codes, so another loop after this one fills
- in the rest of the decoding tables with invalid code markers.
- */
- /* set up for code type */
- // poor man optimization - use if-else instead of switch,
- // to avoid deopts in old v8
- if (type === CODES) {
- base = extra = work;
- /* dummy value--not used */
- end = 19;
- } else if (type === LENS) {
- base = lbase;
- base_index -= 257;
- extra = lext;
- extra_index -= 257;
- end = 256;
- } else {
- /* DISTS */
- base = dbase;
- extra = dext;
- end = -1;
- }
- /* initialize opts for loop */
- huff = 0;
- /* starting code */
- sym = 0;
- /* starting code symbol */
- len = min;
- /* starting code length */
- next = table_index;
- /* current table to fill in */
- curr = root;
- /* current table index bits */
- drop = 0;
- /* current bits to drop from code for index */
- low = -1;
- /* trigger new sub-table when len > root */
- used = 1 << root;
- /* use root table entries */
- mask = used - 1;
- /* mask for comparing low */
- /* check available table space */
- if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) {
- return 1;
- }
- /* process all codes and make table entries */
- for (;;) {
- /* create table entry */
- here_bits = len - drop;
- if (work[sym] < end) {
- here_op = 0;
- here_val = work[sym];
- } else if (work[sym] > end) {
- here_op = extra[extra_index + work[sym]];
- here_val = base[base_index + work[sym]];
- } else {
- here_op = 32 + 64;
- /* end of block */
- here_val = 0;
- }
- /* replicate for those indices with low len bits equal to huff */
- incr = 1 << len - drop;
- fill = 1 << curr;
- min = fill;
- /* save offset to next table */
- do {
- fill -= incr;
- table[next + (huff >> drop) + fill] = here_bits << 24 | here_op << 16 | here_val | 0;
- } while (fill !== 0);
- /* backwards increment the len-bit code huff */
- incr = 1 << len - 1;
- while (huff & incr) {
- incr >>= 1;
- }
- if (incr !== 0) {
- huff &= incr - 1;
- huff += incr;
- } else {
- huff = 0;
- }
- /* go to next symbol, update count, len */
- sym++;
- if (--count[len] === 0) {
- if (len === max) {
- break;
- }
- len = lens[lens_index + work[sym]];
- }
- /* create new sub-table if needed */
- if (len > root && (huff & mask) !== low) {
- /* if first time, transition to sub-tables */
- if (drop === 0) {
- drop = root;
- }
- /* increment past last table */
- next += min;
- /* here min is 1 << curr */
- /* determine length of next table */
- curr = len - drop;
- left = 1 << curr;
- while (curr + drop < max) {
- left -= count[curr + drop];
- if (left <= 0) {
- break;
- }
- curr++;
- left <<= 1;
- }
- /* check for enough space */
- used += 1 << curr;
- if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) {
- return 1;
- }
- /* point entry in root table to sub-table */
- low = huff & mask;
- /*table.op[low] = curr;
- table.bits[low] = root;
- table.val[low] = next - opts.table_index;*/
- table[low] = root << 24 | curr << 16 | next - table_index | 0;
- }
- }
- /* fill in remaining table entry if code is incomplete (guaranteed to have
- at most one remaining entry, since if the code is incomplete, the
- maximum code length that was allowed to get this far is one bit) */
- if (huff !== 0) {
- //table.op[next + huff] = 64; /* invalid code marker */
- //table.bits[next + huff] = len - drop;
- //table.val[next + huff] = 0;
- table[next + huff] = len - drop << 24 | 64 << 16 | 0;
- }
- /* set return parameters */
- //opts.table_index += used;
- opts.bits = root;
- return 0;
- };
- },{"../utils/common":333}],343:[function(require,module,exports){
- 'use strict'; // (C) 1995-2013 Jean-loup Gailly and Mark Adler
- // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
- //
- // This software is provided 'as-is', without any express or implied
- // warranty. In no event will the authors be held liable for any damages
- // arising from the use of this software.
- //
- // Permission is granted to anyone to use this software for any purpose,
- // including commercial applications, and to alter it and redistribute it
- // freely, subject to the following restrictions:
- //
- // 1. The origin of this software must not be misrepresented; you must not
- // claim that you wrote the original software. If you use this software
- // in a product, an acknowledgment in the product documentation would be
- // appreciated but is not required.
- // 2. Altered source versions must be plainly marked as such, and must not be
- // misrepresented as being the original software.
- // 3. This notice may not be removed or altered from any source distribution.
- module.exports = {
- 2: 'need dictionary',
- /* Z_NEED_DICT 2 */
- 1: 'stream end',
- /* Z_STREAM_END 1 */
- 0: '',
- /* Z_OK 0 */
- '-1': 'file error',
- /* Z_ERRNO (-1) */
- '-2': 'stream error',
- /* Z_STREAM_ERROR (-2) */
- '-3': 'data error',
- /* Z_DATA_ERROR (-3) */
- '-4': 'insufficient memory',
- /* Z_MEM_ERROR (-4) */
- '-5': 'buffer error',
- /* Z_BUF_ERROR (-5) */
- '-6': 'incompatible version'
- /* Z_VERSION_ERROR (-6) */
- };
- },{}],344:[function(require,module,exports){
- 'use strict'; // (C) 1995-2013 Jean-loup Gailly and Mark Adler
- // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
- //
- // This software is provided 'as-is', without any express or implied
- // warranty. In no event will the authors be held liable for any damages
- // arising from the use of this software.
- //
- // Permission is granted to anyone to use this software for any purpose,
- // including commercial applications, and to alter it and redistribute it
- // freely, subject to the following restrictions:
- //
- // 1. The origin of this software must not be misrepresented; you must not
- // claim that you wrote the original software. If you use this software
- // in a product, an acknowledgment in the product documentation would be
- // appreciated but is not required.
- // 2. Altered source versions must be plainly marked as such, and must not be
- // misrepresented as being the original software.
- // 3. This notice may not be removed or altered from any source distribution.
- /* eslint-disable space-unary-ops */
- var utils = require('../utils/common');
- /* Public constants ==========================================================*/
- /* ===========================================================================*/
- //var Z_FILTERED = 1;
- //var Z_HUFFMAN_ONLY = 2;
- //var Z_RLE = 3;
- var Z_FIXED = 4; //var Z_DEFAULT_STRATEGY = 0;
- /* Possible values of the data_type field (though see inflate()) */
- var Z_BINARY = 0;
- var Z_TEXT = 1; //var Z_ASCII = 1; // = Z_TEXT
- var Z_UNKNOWN = 2;
- /*============================================================================*/
- function zero(buf) {
- var len = buf.length;
- while (--len >= 0) {
- buf[len] = 0;
- }
- } // From zutil.h
- var STORED_BLOCK = 0;
- var STATIC_TREES = 1;
- var DYN_TREES = 2;
- /* The three kinds of block type */
- var MIN_MATCH = 3;
- var MAX_MATCH = 258;
- /* The minimum and maximum match lengths */
- // From deflate.h
- /* ===========================================================================
- * Internal compression state.
- */
- var LENGTH_CODES = 29;
- /* number of length codes, not counting the special END_BLOCK code */
- var LITERALS = 256;
- /* number of literal bytes 0..255 */
- var L_CODES = LITERALS + 1 + LENGTH_CODES;
- /* number of Literal or Length codes, including the END_BLOCK code */
- var D_CODES = 30;
- /* number of distance codes */
- var BL_CODES = 19;
- /* number of codes used to transfer the bit lengths */
- var HEAP_SIZE = 2 * L_CODES + 1;
- /* maximum heap size */
- var MAX_BITS = 15;
- /* All codes must not exceed MAX_BITS bits */
- var Buf_size = 16;
- /* size of bit buffer in bi_buf */
- /* ===========================================================================
- * Constants
- */
- var MAX_BL_BITS = 7;
- /* Bit length codes must not exceed MAX_BL_BITS bits */
- var END_BLOCK = 256;
- /* end of block literal code */
- var REP_3_6 = 16;
- /* repeat previous bit length 3-6 times (2 bits of repeat count) */
- var REPZ_3_10 = 17;
- /* repeat a zero length 3-10 times (3 bits of repeat count) */
- var REPZ_11_138 = 18;
- /* repeat a zero length 11-138 times (7 bits of repeat count) */
- /* eslint-disable comma-spacing,array-bracket-spacing */
- var extra_lbits =
- /* extra bits for each length code */
- [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0];
- var extra_dbits =
- /* extra bits for each distance code */
- [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13];
- var extra_blbits =
- /* extra bits for each bit length code */
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7];
- var bl_order = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];
- /* eslint-enable comma-spacing,array-bracket-spacing */
- /* The lengths of the bit length codes are sent in order of decreasing
- * probability, to avoid transmitting the lengths for unused bit length codes.
- */
- /* ===========================================================================
- * Local data. These are initialized only once.
- */
- // We pre-fill arrays with 0 to avoid uninitialized gaps
- var DIST_CODE_LEN = 512;
- /* see definition of array dist_code below */
- // !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1
- var static_ltree = new Array((L_CODES + 2) * 2);
- zero(static_ltree);
- /* The static literal tree. Since the bit lengths are imposed, there is no
- * need for the L_CODES extra codes used during heap construction. However
- * The codes 286 and 287 are needed to build a canonical tree (see _tr_init
- * below).
- */
- var static_dtree = new Array(D_CODES * 2);
- zero(static_dtree);
- /* The static distance tree. (Actually a trivial tree since all codes use
- * 5 bits.)
- */
- var _dist_code = new Array(DIST_CODE_LEN);
- zero(_dist_code);
- /* Distance codes. The first 256 values correspond to the distances
- * 3 .. 258, the last 256 values correspond to the top 8 bits of
- * the 15 bit distances.
- */
- var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);
- zero(_length_code);
- /* length code for each normalized match length (0 == MIN_MATCH) */
- var base_length = new Array(LENGTH_CODES);
- zero(base_length);
- /* First normalized length for each code (0 = MIN_MATCH) */
- var base_dist = new Array(D_CODES);
- zero(base_dist);
- /* First normalized distance for each code (0 = distance of 1) */
- function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {
- this.static_tree = static_tree;
- /* static tree or NULL */
- this.extra_bits = extra_bits;
- /* extra bits for each code or NULL */
- this.extra_base = extra_base;
- /* base index for extra_bits */
- this.elems = elems;
- /* max number of elements in the tree */
- this.max_length = max_length;
- /* max bit length for the codes */
- // show if `static_tree` has data or dummy - needed for monomorphic objects
- this.has_stree = static_tree && static_tree.length;
- }
- var static_l_desc;
- var static_d_desc;
- var static_bl_desc;
- function TreeDesc(dyn_tree, stat_desc) {
- this.dyn_tree = dyn_tree;
- /* the dynamic tree */
- this.max_code = 0;
- /* largest code with non zero frequency */
- this.stat_desc = stat_desc;
- /* the corresponding static tree */
- }
- function d_code(dist) {
- return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];
- }
- /* ===========================================================================
- * Output a short LSB first on the stream.
- * IN assertion: there is enough room in pendingBuf.
- */
- function put_short(s, w) {
- // put_byte(s, (uch)((w) & 0xff));
- // put_byte(s, (uch)((ush)(w) >> 8));
- s.pending_buf[s.pending++] = w & 0xff;
- s.pending_buf[s.pending++] = w >>> 8 & 0xff;
- }
- /* ===========================================================================
- * Send a value on a given number of bits.
- * IN assertion: length <= 16 and value fits in length bits.
- */
- function send_bits(s, value, length) {
- if (s.bi_valid > Buf_size - length) {
- s.bi_buf |= value << s.bi_valid & 0xffff;
- put_short(s, s.bi_buf);
- s.bi_buf = value >> Buf_size - s.bi_valid;
- s.bi_valid += length - Buf_size;
- } else {
- s.bi_buf |= value << s.bi_valid & 0xffff;
- s.bi_valid += length;
- }
- }
- function send_code(s, c, tree) {
- send_bits(s, tree[c * 2]
- /*.Code*/
- , tree[c * 2 + 1]
- /*.Len*/
- );
- }
- /* ===========================================================================
- * Reverse the first len bits of a code, using straightforward code (a faster
- * method would use a table)
- * IN assertion: 1 <= len <= 15
- */
- function bi_reverse(code, len) {
- var res = 0;
- do {
- res |= code & 1;
- code >>>= 1;
- res <<= 1;
- } while (--len > 0);
- return res >>> 1;
- }
- /* ===========================================================================
- * Flush the bit buffer, keeping at most 7 bits in it.
- */
- function bi_flush(s) {
- if (s.bi_valid === 16) {
- put_short(s, s.bi_buf);
- s.bi_buf = 0;
- s.bi_valid = 0;
- } else if (s.bi_valid >= 8) {
- s.pending_buf[s.pending++] = s.bi_buf & 0xff;
- s.bi_buf >>= 8;
- s.bi_valid -= 8;
- }
- }
- /* ===========================================================================
- * Compute the optimal bit lengths for a tree and update the total bit length
- * for the current block.
- * IN assertion: the fields freq and dad are set, heap[heap_max] and
- * above are the tree nodes sorted by increasing frequency.
- * OUT assertions: the field len is set to the optimal bit length, the
- * array bl_count contains the frequencies for each bit length.
- * The length opt_len is updated; static_len is also updated if stree is
- * not null.
- */
- function gen_bitlen(s, desc) // deflate_state *s;
- // tree_desc *desc; /* the tree descriptor */
- {
- var tree = desc.dyn_tree;
- var max_code = desc.max_code;
- var stree = desc.stat_desc.static_tree;
- var has_stree = desc.stat_desc.has_stree;
- var extra = desc.stat_desc.extra_bits;
- var base = desc.stat_desc.extra_base;
- var max_length = desc.stat_desc.max_length;
- var h;
- /* heap index */
- var n, m;
- /* iterate over the tree elements */
- var bits;
- /* bit length */
- var xbits;
- /* extra bits */
- var f;
- /* frequency */
- var overflow = 0;
- /* number of elements with bit length too large */
- for (bits = 0; bits <= MAX_BITS; bits++) {
- s.bl_count[bits] = 0;
- }
- /* In a first pass, compute the optimal bit lengths (which may
- * overflow in the case of the bit length tree).
- */
- tree[s.heap[s.heap_max] * 2 + 1]
- /*.Len*/
- = 0;
- /* root of the heap */
- for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {
- n = s.heap[h];
- bits = tree[tree[n * 2 + 1]
- /*.Dad*/
- * 2 + 1]
- /*.Len*/
- + 1;
- if (bits > max_length) {
- bits = max_length;
- overflow++;
- }
- tree[n * 2 + 1]
- /*.Len*/
- = bits;
- /* We overwrite tree[n].Dad which is no longer needed */
- if (n > max_code) {
- continue;
- }
- /* not a leaf node */
- s.bl_count[bits]++;
- xbits = 0;
- if (n >= base) {
- xbits = extra[n - base];
- }
- f = tree[n * 2]
- /*.Freq*/
- ;
- s.opt_len += f * (bits + xbits);
- if (has_stree) {
- s.static_len += f * (stree[n * 2 + 1]
- /*.Len*/
- + xbits);
- }
- }
- if (overflow === 0) {
- return;
- } // Trace((stderr,"\nbit length overflow\n"));
- /* This happens for example on obj2 and pic of the Calgary corpus */
- /* Find the first bit length which could increase: */
- do {
- bits = max_length - 1;
- while (s.bl_count[bits] === 0) {
- bits--;
- }
- s.bl_count[bits]--;
- /* move one leaf down the tree */
- s.bl_count[bits + 1] += 2;
- /* move one overflow item as its brother */
- s.bl_count[max_length]--;
- /* The brother of the overflow item also moves one step up,
- * but this does not affect bl_count[max_length]
- */
- overflow -= 2;
- } while (overflow > 0);
- /* Now recompute all bit lengths, scanning in increasing frequency.
- * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
- * lengths instead of fixing only the wrong ones. This idea is taken
- * from 'ar' written by Haruhiko Okumura.)
- */
- for (bits = max_length; bits !== 0; bits--) {
- n = s.bl_count[bits];
- while (n !== 0) {
- m = s.heap[--h];
- if (m > max_code) {
- continue;
- }
- if (tree[m * 2 + 1]
- /*.Len*/
- !== bits) {
- // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
- s.opt_len += (bits - tree[m * 2 + 1]
- /*.Len*/
- ) * tree[m * 2]
- /*.Freq*/
- ;
- tree[m * 2 + 1]
- /*.Len*/
- = bits;
- }
- n--;
- }
- }
- }
- /* ===========================================================================
- * Generate the codes for a given tree and bit counts (which need not be
- * optimal).
- * IN assertion: the array bl_count contains the bit length statistics for
- * the given tree and the field len is set for all tree elements.
- * OUT assertion: the field code is set for all tree elements of non
- * zero code length.
- */
- function gen_codes(tree, max_code, bl_count) // ct_data *tree; /* the tree to decorate */
- // int max_code; /* largest code with non zero frequency */
- // ushf *bl_count; /* number of codes at each bit length */
- {
- var next_code = new Array(MAX_BITS + 1);
- /* next code value for each bit length */
- var code = 0;
- /* running code value */
- var bits;
- /* bit index */
- var n;
- /* code index */
- /* The distribution counts are first used to generate the code values
- * without bit reversal.
- */
- for (bits = 1; bits <= MAX_BITS; bits++) {
- next_code[bits] = code = code + bl_count[bits - 1] << 1;
- }
- /* Check that the bit counts in bl_count are consistent. The last code
- * must be all ones.
- */
- //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
- // "inconsistent bit counts");
- //Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
- for (n = 0; n <= max_code; n++) {
- var len = tree[n * 2 + 1]
- /*.Len*/
- ;
- if (len === 0) {
- continue;
- }
- /* Now reverse the bits */
- tree[n * 2]
- /*.Code*/
- = bi_reverse(next_code[len]++, len); //Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
- // n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
- }
- }
- /* ===========================================================================
- * Initialize the various 'constant' tables.
- */
- function tr_static_init() {
- var n;
- /* iterates over tree elements */
- var bits;
- /* bit counter */
- var length;
- /* length value */
- var code;
- /* code value */
- var dist;
- /* distance index */
- var bl_count = new Array(MAX_BITS + 1);
- /* number of codes at each bit length for an optimal tree */
- // do check in _tr_init()
- //if (static_init_done) return;
- /* For some embedded targets, global variables are not initialized: */
- /*#ifdef NO_INIT_GLOBAL_POINTERS
- static_l_desc.static_tree = static_ltree;
- static_l_desc.extra_bits = extra_lbits;
- static_d_desc.static_tree = static_dtree;
- static_d_desc.extra_bits = extra_dbits;
- static_bl_desc.extra_bits = extra_blbits;
- #endif*/
- /* Initialize the mapping length (0..255) -> length code (0..28) */
- length = 0;
- for (code = 0; code < LENGTH_CODES - 1; code++) {
- base_length[code] = length;
- for (n = 0; n < 1 << extra_lbits[code]; n++) {
- _length_code[length++] = code;
- }
- } //Assert (length == 256, "tr_static_init: length != 256");
- /* Note that the length 255 (match length 258) can be represented
- * in two different ways: code 284 + 5 bits or code 285, so we
- * overwrite length_code[255] to use the best encoding:
- */
- _length_code[length - 1] = code;
- /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
- dist = 0;
- for (code = 0; code < 16; code++) {
- base_dist[code] = dist;
- for (n = 0; n < 1 << extra_dbits[code]; n++) {
- _dist_code[dist++] = code;
- }
- } //Assert (dist == 256, "tr_static_init: dist != 256");
- dist >>= 7;
- /* from now on, all distances are divided by 128 */
- for (; code < D_CODES; code++) {
- base_dist[code] = dist << 7;
- for (n = 0; n < 1 << extra_dbits[code] - 7; n++) {
- _dist_code[256 + dist++] = code;
- }
- } //Assert (dist == 256, "tr_static_init: 256+dist != 512");
- /* Construct the codes of the static literal tree */
- for (bits = 0; bits <= MAX_BITS; bits++) {
- bl_count[bits] = 0;
- }
- n = 0;
- while (n <= 143) {
- static_ltree[n * 2 + 1]
- /*.Len*/
- = 8;
- n++;
- bl_count[8]++;
- }
- while (n <= 255) {
- static_ltree[n * 2 + 1]
- /*.Len*/
- = 9;
- n++;
- bl_count[9]++;
- }
- while (n <= 279) {
- static_ltree[n * 2 + 1]
- /*.Len*/
- = 7;
- n++;
- bl_count[7]++;
- }
- while (n <= 287) {
- static_ltree[n * 2 + 1]
- /*.Len*/
- = 8;
- n++;
- bl_count[8]++;
- }
- /* Codes 286 and 287 do not exist, but we must include them in the
- * tree construction to get a canonical Huffman tree (longest code
- * all ones)
- */
- gen_codes(static_ltree, L_CODES + 1, bl_count);
- /* The static distance tree is trivial: */
- for (n = 0; n < D_CODES; n++) {
- static_dtree[n * 2 + 1]
- /*.Len*/
- = 5;
- static_dtree[n * 2]
- /*.Code*/
- = bi_reverse(n, 5);
- } // Now data ready and we can init static trees
- static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);
- static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);
- static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS); //static_init_done = true;
- }
- /* ===========================================================================
- * Initialize a new block.
- */
- function init_block(s) {
- var n;
- /* iterates over tree elements */
- /* Initialize the trees. */
- for (n = 0; n < L_CODES; n++) {
- s.dyn_ltree[n * 2]
- /*.Freq*/
- = 0;
- }
- for (n = 0; n < D_CODES; n++) {
- s.dyn_dtree[n * 2]
- /*.Freq*/
- = 0;
- }
- for (n = 0; n < BL_CODES; n++) {
- s.bl_tree[n * 2]
- /*.Freq*/
- = 0;
- }
- s.dyn_ltree[END_BLOCK * 2]
- /*.Freq*/
- = 1;
- s.opt_len = s.static_len = 0;
- s.last_lit = s.matches = 0;
- }
- /* ===========================================================================
- * Flush the bit buffer and align the output on a byte boundary
- */
- function bi_windup(s) {
- if (s.bi_valid > 8) {
- put_short(s, s.bi_buf);
- } else if (s.bi_valid > 0) {
- //put_byte(s, (Byte)s->bi_buf);
- s.pending_buf[s.pending++] = s.bi_buf;
- }
- s.bi_buf = 0;
- s.bi_valid = 0;
- }
- /* ===========================================================================
- * Copy a stored block, storing first the length and its
- * one's complement if requested.
- */
- function copy_block(s, buf, len, header) //DeflateState *s;
- //charf *buf; /* the input data */
- //unsigned len; /* its length */
- //int header; /* true if block header must be written */
- {
- bi_windup(s);
- /* align on byte boundary */
- if (header) {
- put_short(s, len);
- put_short(s, ~len);
- } // while (len--) {
- // put_byte(s, *buf++);
- // }
- utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);
- s.pending += len;
- }
- /* ===========================================================================
- * Compares to subtrees, using the tree depth as tie breaker when
- * the subtrees have equal frequency. This minimizes the worst case length.
- */
- function smaller(tree, n, m, depth) {
- var _n2 = n * 2;
- var _m2 = m * 2;
- return tree[_n2]
- /*.Freq*/
- < tree[_m2]
- /*.Freq*/
- || tree[_n2]
- /*.Freq*/
- === tree[_m2]
- /*.Freq*/
- && depth[n] <= depth[m];
- }
- /* ===========================================================================
- * Restore the heap property by moving down the tree starting at node k,
- * exchanging a node with the smallest of its two sons if necessary, stopping
- * when the heap property is re-established (each father smaller than its
- * two sons).
- */
- function pqdownheap(s, tree, k) // deflate_state *s;
- // ct_data *tree; /* the tree to restore */
- // int k; /* node to move down */
- {
- var v = s.heap[k];
- var j = k << 1;
- /* left son of k */
- while (j <= s.heap_len) {
- /* Set j to the smallest of the two sons: */
- if (j < s.heap_len && smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {
- j++;
- }
- /* Exit if v is smaller than both sons */
- if (smaller(tree, v, s.heap[j], s.depth)) {
- break;
- }
- /* Exchange v with the smallest son */
- s.heap[k] = s.heap[j];
- k = j;
- /* And continue down the tree, setting j to the left son of k */
- j <<= 1;
- }
- s.heap[k] = v;
- } // inlined manually
- // var SMALLEST = 1;
- /* ===========================================================================
- * Send the block data compressed using the given Huffman trees
- */
- function compress_block(s, ltree, dtree) // deflate_state *s;
- // const ct_data *ltree; /* literal tree */
- // const ct_data *dtree; /* distance tree */
- {
- var dist;
- /* distance of matched string */
- var lc;
- /* match length or unmatched char (if dist == 0) */
- var lx = 0;
- /* running index in l_buf */
- var code;
- /* the code to send */
- var extra;
- /* number of extra bits to send */
- if (s.last_lit !== 0) {
- do {
- dist = s.pending_buf[s.d_buf + lx * 2] << 8 | s.pending_buf[s.d_buf + lx * 2 + 1];
- lc = s.pending_buf[s.l_buf + lx];
- lx++;
- if (dist === 0) {
- send_code(s, lc, ltree);
- /* send a literal byte */
- //Tracecv(isgraph(lc), (stderr," '%c' ", lc));
- } else {
- /* Here, lc is the match length - MIN_MATCH */
- code = _length_code[lc];
- send_code(s, code + LITERALS + 1, ltree);
- /* send the length code */
- extra = extra_lbits[code];
- if (extra !== 0) {
- lc -= base_length[code];
- send_bits(s, lc, extra);
- /* send the extra length bits */
- }
- dist--;
- /* dist is now the match distance - 1 */
- code = d_code(dist); //Assert (code < D_CODES, "bad d_code");
- send_code(s, code, dtree);
- /* send the distance code */
- extra = extra_dbits[code];
- if (extra !== 0) {
- dist -= base_dist[code];
- send_bits(s, dist, extra);
- /* send the extra distance bits */
- }
- }
- /* literal or match pair ? */
- /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
- //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
- // "pendingBuf overflow");
- } while (lx < s.last_lit);
- }
- send_code(s, END_BLOCK, ltree);
- }
- /* ===========================================================================
- * Construct one Huffman tree and assigns the code bit strings and lengths.
- * Update the total bit length for the current block.
- * IN assertion: the field freq is set for all tree elements.
- * OUT assertions: the fields len and code are set to the optimal bit length
- * and corresponding code. The length opt_len is updated; static_len is
- * also updated if stree is not null. The field max_code is set.
- */
- function build_tree(s, desc) // deflate_state *s;
- // tree_desc *desc; /* the tree descriptor */
- {
- var tree = desc.dyn_tree;
- var stree = desc.stat_desc.static_tree;
- var has_stree = desc.stat_desc.has_stree;
- var elems = desc.stat_desc.elems;
- var n, m;
- /* iterate over heap elements */
- var max_code = -1;
- /* largest code with non zero frequency */
- var node;
- /* new node being created */
- /* Construct the initial heap, with least frequent element in
- * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
- * heap[0] is not used.
- */
- s.heap_len = 0;
- s.heap_max = HEAP_SIZE;
- for (n = 0; n < elems; n++) {
- if (tree[n * 2]
- /*.Freq*/
- !== 0) {
- s.heap[++s.heap_len] = max_code = n;
- s.depth[n] = 0;
- } else {
- tree[n * 2 + 1]
- /*.Len*/
- = 0;
- }
- }
- /* The pkzip format requires that at least one distance code exists,
- * and that at least one bit should be sent even if there is only one
- * possible code. So to avoid special checks later on we force at least
- * two codes of non zero frequency.
- */
- while (s.heap_len < 2) {
- node = s.heap[++s.heap_len] = max_code < 2 ? ++max_code : 0;
- tree[node * 2]
- /*.Freq*/
- = 1;
- s.depth[node] = 0;
- s.opt_len--;
- if (has_stree) {
- s.static_len -= stree[node * 2 + 1]
- /*.Len*/
- ;
- }
- /* node is 0 or 1 so it does not have extra bits */
- }
- desc.max_code = max_code;
- /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
- * establish sub-heaps of increasing lengths:
- */
- for (n = s.heap_len >> 1
- /*int /2*/
- ; n >= 1; n--) {
- pqdownheap(s, tree, n);
- }
- /* Construct the Huffman tree by repeatedly combining the least two
- * frequent nodes.
- */
- node = elems;
- /* next internal node of the tree */
- do {
- //pqremove(s, tree, n); /* n = node of least frequency */
- /*** pqremove ***/
- n = s.heap[1
- /*SMALLEST*/
- ];
- s.heap[1
- /*SMALLEST*/
- ] = s.heap[s.heap_len--];
- pqdownheap(s, tree, 1
- /*SMALLEST*/
- );
- /***/
- m = s.heap[1
- /*SMALLEST*/
- ];
- /* m = node of next least frequency */
- s.heap[--s.heap_max] = n;
- /* keep the nodes sorted by frequency */
- s.heap[--s.heap_max] = m;
- /* Create a new node father of n and m */
- tree[node * 2]
- /*.Freq*/
- = tree[n * 2]
- /*.Freq*/
- + tree[m * 2]
- /*.Freq*/
- ;
- s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;
- tree[n * 2 + 1]
- /*.Dad*/
- = tree[m * 2 + 1]
- /*.Dad*/
- = node;
- /* and insert the new node in the heap */
- s.heap[1
- /*SMALLEST*/
- ] = node++;
- pqdownheap(s, tree, 1
- /*SMALLEST*/
- );
- } while (s.heap_len >= 2);
- s.heap[--s.heap_max] = s.heap[1
- /*SMALLEST*/
- ];
- /* At this point, the fields freq and dad are set. We can now
- * generate the bit lengths.
- */
- gen_bitlen(s, desc);
- /* The field len is now set, we can generate the bit codes */
- gen_codes(tree, max_code, s.bl_count);
- }
- /* ===========================================================================
- * Scan a literal or distance tree to determine the frequencies of the codes
- * in the bit length tree.
- */
- function scan_tree(s, tree, max_code) // deflate_state *s;
- // ct_data *tree; /* the tree to be scanned */
- // int max_code; /* and its largest code of non zero frequency */
- {
- var n;
- /* iterates over all tree elements */
- var prevlen = -1;
- /* last emitted length */
- var curlen;
- /* length of current code */
- var nextlen = tree[0 * 2 + 1]
- /*.Len*/
- ;
- /* length of next code */
- var count = 0;
- /* repeat count of the current code */
- var max_count = 7;
- /* max repeat count */
- var min_count = 4;
- /* min repeat count */
- if (nextlen === 0) {
- max_count = 138;
- min_count = 3;
- }
- tree[(max_code + 1) * 2 + 1]
- /*.Len*/
- = 0xffff;
- /* guard */
- for (n = 0; n <= max_code; n++) {
- curlen = nextlen;
- nextlen = tree[(n + 1) * 2 + 1]
- /*.Len*/
- ;
- if (++count < max_count && curlen === nextlen) {
- continue;
- } else if (count < min_count) {
- s.bl_tree[curlen * 2]
- /*.Freq*/
- += count;
- } else if (curlen !== 0) {
- if (curlen !== prevlen) {
- s.bl_tree[curlen * 2] /*.Freq*/++;
- }
- s.bl_tree[REP_3_6 * 2] /*.Freq*/++;
- } else if (count <= 10) {
- s.bl_tree[REPZ_3_10 * 2] /*.Freq*/++;
- } else {
- s.bl_tree[REPZ_11_138 * 2] /*.Freq*/++;
- }
- count = 0;
- prevlen = curlen;
- if (nextlen === 0) {
- max_count = 138;
- min_count = 3;
- } else if (curlen === nextlen) {
- max_count = 6;
- min_count = 3;
- } else {
- max_count = 7;
- min_count = 4;
- }
- }
- }
- /* ===========================================================================
- * Send a literal or distance tree in compressed form, using the codes in
- * bl_tree.
- */
- function send_tree(s, tree, max_code) // deflate_state *s;
- // ct_data *tree; /* the tree to be scanned */
- // int max_code; /* and its largest code of non zero frequency */
- {
- var n;
- /* iterates over all tree elements */
- var prevlen = -1;
- /* last emitted length */
- var curlen;
- /* length of current code */
- var nextlen = tree[0 * 2 + 1]
- /*.Len*/
- ;
- /* length of next code */
- var count = 0;
- /* repeat count of the current code */
- var max_count = 7;
- /* max repeat count */
- var min_count = 4;
- /* min repeat count */
- /* tree[max_code+1].Len = -1; */
- /* guard already set */
- if (nextlen === 0) {
- max_count = 138;
- min_count = 3;
- }
- for (n = 0; n <= max_code; n++) {
- curlen = nextlen;
- nextlen = tree[(n + 1) * 2 + 1]
- /*.Len*/
- ;
- if (++count < max_count && curlen === nextlen) {
- continue;
- } else if (count < min_count) {
- do {
- send_code(s, curlen, s.bl_tree);
- } while (--count !== 0);
- } else if (curlen !== 0) {
- if (curlen !== prevlen) {
- send_code(s, curlen, s.bl_tree);
- count--;
- } //Assert(count >= 3 && count <= 6, " 3_6?");
- send_code(s, REP_3_6, s.bl_tree);
- send_bits(s, count - 3, 2);
- } else if (count <= 10) {
- send_code(s, REPZ_3_10, s.bl_tree);
- send_bits(s, count - 3, 3);
- } else {
- send_code(s, REPZ_11_138, s.bl_tree);
- send_bits(s, count - 11, 7);
- }
- count = 0;
- prevlen = curlen;
- if (nextlen === 0) {
- max_count = 138;
- min_count = 3;
- } else if (curlen === nextlen) {
- max_count = 6;
- min_count = 3;
- } else {
- max_count = 7;
- min_count = 4;
- }
- }
- }
- /* ===========================================================================
- * Construct the Huffman tree for the bit lengths and return the index in
- * bl_order of the last bit length code to send.
- */
- function build_bl_tree(s) {
- var max_blindex;
- /* index of last bit length code of non zero freq */
- /* Determine the bit length frequencies for literal and distance trees */
- scan_tree(s, s.dyn_ltree, s.l_desc.max_code);
- scan_tree(s, s.dyn_dtree, s.d_desc.max_code);
- /* Build the bit length tree: */
- build_tree(s, s.bl_desc);
- /* opt_len now includes the length of the tree representations, except
- * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
- */
- /* Determine the number of bit length codes to send. The pkzip format
- * requires that at least 4 bit length codes be sent. (appnote.txt says
- * 3 but the actual value used is 4.)
- */
- for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {
- if (s.bl_tree[bl_order[max_blindex] * 2 + 1]
- /*.Len*/
- !== 0) {
- break;
- }
- }
- /* Update opt_len to include the bit length tree and counts */
- s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
- // s->opt_len, s->static_len));
- return max_blindex;
- }
- /* ===========================================================================
- * Send the header for a block using dynamic Huffman trees: the counts, the
- * lengths of the bit length codes, the literal tree and the distance tree.
- * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
- */
- function send_all_trees(s, lcodes, dcodes, blcodes) // deflate_state *s;
- // int lcodes, dcodes, blcodes; /* number of codes for each tree */
- {
- var rank;
- /* index in bl_order */
- //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
- //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
- // "too many codes");
- //Tracev((stderr, "\nbl counts: "));
- send_bits(s, lcodes - 257, 5);
- /* not +255 as stated in appnote.txt */
- send_bits(s, dcodes - 1, 5);
- send_bits(s, blcodes - 4, 4);
- /* not -3 as stated in appnote.txt */
- for (rank = 0; rank < blcodes; rank++) {
- //Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
- send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]
- /*.Len*/
- , 3);
- } //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));
- send_tree(s, s.dyn_ltree, lcodes - 1);
- /* literal tree */
- //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));
- send_tree(s, s.dyn_dtree, dcodes - 1);
- /* distance tree */
- //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
- }
- /* ===========================================================================
- * Check if the data type is TEXT or BINARY, using the following algorithm:
- * - TEXT if the two conditions below are satisfied:
- * a) There are no non-portable control characters belonging to the
- * "black list" (0..6, 14..25, 28..31).
- * b) There is at least one printable character belonging to the
- * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
- * - BINARY otherwise.
- * - The following partially-portable control characters form a
- * "gray list" that is ignored in this detection algorithm:
- * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).
- * IN assertion: the fields Freq of dyn_ltree are set.
- */
- function detect_data_type(s) {
- /* black_mask is the bit mask of black-listed bytes
- * set bits 0..6, 14..25, and 28..31
- * 0xf3ffc07f = binary 11110011111111111100000001111111
- */
- var black_mask = 0xf3ffc07f;
- var n;
- /* Check for non-textual ("black-listed") bytes. */
- for (n = 0; n <= 31; n++, black_mask >>>= 1) {
- if (black_mask & 1 && s.dyn_ltree[n * 2]
- /*.Freq*/
- !== 0) {
- return Z_BINARY;
- }
- }
- /* Check for textual ("white-listed") bytes. */
- if (s.dyn_ltree[9 * 2]
- /*.Freq*/
- !== 0 || s.dyn_ltree[10 * 2]
- /*.Freq*/
- !== 0 || s.dyn_ltree[13 * 2]
- /*.Freq*/
- !== 0) {
- return Z_TEXT;
- }
- for (n = 32; n < LITERALS; n++) {
- if (s.dyn_ltree[n * 2]
- /*.Freq*/
- !== 0) {
- return Z_TEXT;
- }
- }
- /* There are no "black-listed" or "white-listed" bytes:
- * this stream either is empty or has tolerated ("gray-listed") bytes only.
- */
- return Z_BINARY;
- }
- var static_init_done = false;
- /* ===========================================================================
- * Initialize the tree data structures for a new zlib stream.
- */
- function _tr_init(s) {
- if (!static_init_done) {
- tr_static_init();
- static_init_done = true;
- }
- s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);
- s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);
- s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);
- s.bi_buf = 0;
- s.bi_valid = 0;
- /* Initialize the first block of the first file: */
- init_block(s);
- }
- /* ===========================================================================
- * Send a stored block
- */
- function _tr_stored_block(s, buf, stored_len, last) //DeflateState *s;
- //charf *buf; /* input block */
- //ulg stored_len; /* length of input block */
- //int last; /* one if this is the last block for a file */
- {
- send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3);
- /* send block type */
- copy_block(s, buf, stored_len, true);
- /* with header */
- }
- /* ===========================================================================
- * Send one empty static block to give enough lookahead for inflate.
- * This takes 10 bits, of which 7 may remain in the bit buffer.
- */
- function _tr_align(s) {
- send_bits(s, STATIC_TREES << 1, 3);
- send_code(s, END_BLOCK, static_ltree);
- bi_flush(s);
- }
- /* ===========================================================================
- * Determine the best encoding for the current block: dynamic trees, static
- * trees or store, and output the encoded block to the zip file.
- */
- function _tr_flush_block(s, buf, stored_len, last) //DeflateState *s;
- //charf *buf; /* input block, or NULL if too old */
- //ulg stored_len; /* length of input block */
- //int last; /* one if this is the last block for a file */
- {
- var opt_lenb, static_lenb;
- /* opt_len and static_len in bytes */
- var max_blindex = 0;
- /* index of last bit length code of non zero freq */
- /* Build the Huffman trees unless a stored block is forced */
- if (s.level > 0) {
- /* Check if the file is binary or text */
- if (s.strm.data_type === Z_UNKNOWN) {
- s.strm.data_type = detect_data_type(s);
- }
- /* Construct the literal and distance trees */
- build_tree(s, s.l_desc); // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
- // s->static_len));
- build_tree(s, s.d_desc); // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
- // s->static_len));
- /* At this point, opt_len and static_len are the total bit lengths of
- * the compressed block data, excluding the tree representations.
- */
- /* Build the bit length tree for the above two trees, and get the index
- * in bl_order of the last bit length code to send.
- */
- max_blindex = build_bl_tree(s);
- /* Determine the best encoding. Compute the block lengths in bytes. */
- opt_lenb = s.opt_len + 3 + 7 >>> 3;
- static_lenb = s.static_len + 3 + 7 >>> 3; // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
- // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
- // s->last_lit));
- if (static_lenb <= opt_lenb) {
- opt_lenb = static_lenb;
- }
- } else {
- // Assert(buf != (char*)0, "lost buf");
- opt_lenb = static_lenb = stored_len + 5;
- /* force a stored block */
- }
- if (stored_len + 4 <= opt_lenb && buf !== -1) {
- /* 4: two words for the lengths */
- /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
- * Otherwise we can't have processed more than WSIZE input bytes since
- * the last block flush, because compression would have been
- * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
- * transform a block into a stored block.
- */
- _tr_stored_block(s, buf, stored_len, last);
- } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {
- send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);
- compress_block(s, static_ltree, static_dtree);
- } else {
- send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);
- send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);
- compress_block(s, s.dyn_ltree, s.dyn_dtree);
- } // Assert (s->compressed_len == s->bits_sent, "bad compressed size");
- /* The above check is made mod 2^32, for files larger than 512 MB
- * and uLong implemented on 32 bits.
- */
- init_block(s);
- if (last) {
- bi_windup(s);
- } // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
- // s->compressed_len-7*last));
- }
- /* ===========================================================================
- * Save the match info and tally the frequency counts. Return true if
- * the current block must be flushed.
- */
- function _tr_tally(s, dist, lc) // deflate_state *s;
- // unsigned dist; /* distance of matched string */
- // unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */
- {
- //var out_length, in_length, dcode;
- s.pending_buf[s.d_buf + s.last_lit * 2] = dist >>> 8 & 0xff;
- s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;
- s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;
- s.last_lit++;
- if (dist === 0) {
- /* lc is the unmatched char */
- s.dyn_ltree[lc * 2] /*.Freq*/++;
- } else {
- s.matches++;
- /* Here, lc is the match length - MIN_MATCH */
- dist--;
- /* dist = match distance - 1 */
- //Assert((ush)dist < (ush)MAX_DIST(s) &&
- // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
- // (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match");
- s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2] /*.Freq*/++;
- s.dyn_dtree[d_code(dist) * 2] /*.Freq*/++;
- } // (!) This block is disabled in zlib defaults,
- // don't enable it for binary compatibility
- //#ifdef TRUNCATE_BLOCK
- // /* Try to guess if it is profitable to stop the current block here */
- // if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {
- // /* Compute an upper bound for the compressed length */
- // out_length = s.last_lit*8;
- // in_length = s.strstart - s.block_start;
- //
- // for (dcode = 0; dcode < D_CODES; dcode++) {
- // out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);
- // }
- // out_length >>>= 3;
- // //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
- // // s->last_lit, in_length, out_length,
- // // 100L - out_length*100L/in_length));
- // if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {
- // return true;
- // }
- // }
- //#endif
- return s.last_lit === s.lit_bufsize - 1;
- /* We avoid equality with lit_bufsize because of wraparound at 64K
- * on 16 bit machines and because stored blocks are restricted to
- * 64K-1 bytes.
- */
- }
- exports._tr_init = _tr_init;
- exports._tr_stored_block = _tr_stored_block;
- exports._tr_flush_block = _tr_flush_block;
- exports._tr_tally = _tr_tally;
- exports._tr_align = _tr_align;
- },{"../utils/common":333}],345:[function(require,module,exports){
- 'use strict'; // (C) 1995-2013 Jean-loup Gailly and Mark Adler
- // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
- //
- // This software is provided 'as-is', without any express or implied
- // warranty. In no event will the authors be held liable for any damages
- // arising from the use of this software.
- //
- // Permission is granted to anyone to use this software for any purpose,
- // including commercial applications, and to alter it and redistribute it
- // freely, subject to the following restrictions:
- //
- // 1. The origin of this software must not be misrepresented; you must not
- // claim that you wrote the original software. If you use this software
- // in a product, an acknowledgment in the product documentation would be
- // appreciated but is not required.
- // 2. Altered source versions must be plainly marked as such, and must not be
- // misrepresented as being the original software.
- // 3. This notice may not be removed or altered from any source distribution.
- function ZStream() {
- /* next input byte */
- this.input = null; // JS specific, because we have no pointers
- this.next_in = 0;
- /* number of bytes available at input */
- this.avail_in = 0;
- /* total number of input bytes read so far */
- this.total_in = 0;
- /* next output byte should be put there */
- this.output = null; // JS specific, because we have no pointers
- this.next_out = 0;
- /* remaining free space at output */
- this.avail_out = 0;
- /* total number of bytes output so far */
- this.total_out = 0;
- /* last error message, NULL if no error */
- this.msg = ''
- /*Z_NULL*/
- ;
- /* not visible by applications */
- this.state = null;
- /* best guess about the data type: binary or text */
- this.data_type = 2
- /*Z_UNKNOWN*/
- ;
- /* adler32 value of the uncompressed data */
- this.adler = 0;
- }
- module.exports = ZStream;
- },{}],346:[function(require,module,exports){
- module.exports={"2.16.840.1.101.3.4.1.1": "aes-128-ecb",
- "2.16.840.1.101.3.4.1.2": "aes-128-cbc",
- "2.16.840.1.101.3.4.1.3": "aes-128-ofb",
- "2.16.840.1.101.3.4.1.4": "aes-128-cfb",
- "2.16.840.1.101.3.4.1.21": "aes-192-ecb",
- "2.16.840.1.101.3.4.1.22": "aes-192-cbc",
- "2.16.840.1.101.3.4.1.23": "aes-192-ofb",
- "2.16.840.1.101.3.4.1.24": "aes-192-cfb",
- "2.16.840.1.101.3.4.1.41": "aes-256-ecb",
- "2.16.840.1.101.3.4.1.42": "aes-256-cbc",
- "2.16.840.1.101.3.4.1.43": "aes-256-ofb",
- "2.16.840.1.101.3.4.1.44": "aes-256-cfb"
- }
- },{}],347:[function(require,module,exports){
- // from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js
- // Fedor, you are amazing.
- 'use strict';
- var asn1 = require('asn1.js');
- exports.certificate = require('./certificate');
- var RSAPrivateKey = asn1.define('RSAPrivateKey', function () {
- this.seq().obj(this.key('version').int(), this.key('modulus').int(), this.key('publicExponent').int(), this.key('privateExponent').int(), this.key('prime1').int(), this.key('prime2').int(), this.key('exponent1').int(), this.key('exponent2').int(), this.key('coefficient').int());
- });
- exports.RSAPrivateKey = RSAPrivateKey;
- var RSAPublicKey = asn1.define('RSAPublicKey', function () {
- this.seq().obj(this.key('modulus').int(), this.key('publicExponent').int());
- });
- exports.RSAPublicKey = RSAPublicKey;
- var PublicKey = asn1.define('SubjectPublicKeyInfo', function () {
- this.seq().obj(this.key('algorithm').use(AlgorithmIdentifier), this.key('subjectPublicKey').bitstr());
- });
- exports.PublicKey = PublicKey;
- var AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {
- this.seq().obj(this.key('algorithm').objid(), this.key('none').null_().optional(), this.key('curve').objid().optional(), this.key('params').seq().obj(this.key('p').int(), this.key('q').int(), this.key('g').int()).optional());
- });
- var PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {
- this.seq().obj(this.key('version').int(), this.key('algorithm').use(AlgorithmIdentifier), this.key('subjectPrivateKey').octstr());
- });
- exports.PrivateKey = PrivateKeyInfo;
- var EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {
- this.seq().obj(this.key('algorithm').seq().obj(this.key('id').objid(), this.key('decrypt').seq().obj(this.key('kde').seq().obj(this.key('id').objid(), this.key('kdeparams').seq().obj(this.key('salt').octstr(), this.key('iters').int())), this.key('cipher').seq().obj(this.key('algo').objid(), this.key('iv').octstr()))), this.key('subjectPrivateKey').octstr());
- });
- exports.EncryptedPrivateKey = EncryptedPrivateKeyInfo;
- var DSAPrivateKey = asn1.define('DSAPrivateKey', function () {
- this.seq().obj(this.key('version').int(), this.key('p').int(), this.key('q').int(), this.key('g').int(), this.key('pub_key').int(), this.key('priv_key').int());
- });
- exports.DSAPrivateKey = DSAPrivateKey;
- exports.DSAparam = asn1.define('DSAparam', function () {
- this.int();
- });
- var ECPrivateKey = asn1.define('ECPrivateKey', function () {
- this.seq().obj(this.key('version').int(), this.key('privateKey').octstr(), this.key('parameters').optional().explicit(0).use(ECParameters), this.key('publicKey').optional().explicit(1).bitstr());
- });
- exports.ECPrivateKey = ECPrivateKey;
- var ECParameters = asn1.define('ECParameters', function () {
- this.choice({
- namedCurve: this.objid()
- });
- });
- exports.signature = asn1.define('signature', function () {
- this.seq().obj(this.key('r').int(), this.key('s').int());
- });
- },{"./certificate":348,"asn1.js":167}],348:[function(require,module,exports){
- // from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js
- // thanks to @Rantanen
- 'use strict';
- var asn = require('asn1.js');
- var Time = asn.define('Time', function () {
- this.choice({
- utcTime: this.utctime(),
- generalTime: this.gentime()
- });
- });
- var AttributeTypeValue = asn.define('AttributeTypeValue', function () {
- this.seq().obj(this.key('type').objid(), this.key('value').any());
- });
- var AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {
- this.seq().obj(this.key('algorithm').objid(), this.key('parameters').optional(), this.key('curve').objid().optional());
- });
- var SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {
- this.seq().obj(this.key('algorithm').use(AlgorithmIdentifier), this.key('subjectPublicKey').bitstr());
- });
- var RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {
- this.setof(AttributeTypeValue);
- });
- var RDNSequence = asn.define('RDNSequence', function () {
- this.seqof(RelativeDistinguishedName);
- });
- var Name = asn.define('Name', function () {
- this.choice({
- rdnSequence: this.use(RDNSequence)
- });
- });
- var Validity = asn.define('Validity', function () {
- this.seq().obj(this.key('notBefore').use(Time), this.key('notAfter').use(Time));
- });
- var Extension = asn.define('Extension', function () {
- this.seq().obj(this.key('extnID').objid(), this.key('critical').bool().def(false), this.key('extnValue').octstr());
- });
- var TBSCertificate = asn.define('TBSCertificate', function () {
- this.seq().obj(this.key('version').explicit(0).int().optional(), this.key('serialNumber').int(), this.key('signature').use(AlgorithmIdentifier), this.key('issuer').use(Name), this.key('validity').use(Validity), this.key('subject').use(Name), this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo), this.key('issuerUniqueID').implicit(1).bitstr().optional(), this.key('subjectUniqueID').implicit(2).bitstr().optional(), this.key('extensions').explicit(3).seqof(Extension).optional());
- });
- var X509Certificate = asn.define('X509Certificate', function () {
- this.seq().obj(this.key('tbsCertificate').use(TBSCertificate), this.key('signatureAlgorithm').use(AlgorithmIdentifier), this.key('signatureValue').bitstr());
- });
- module.exports = X509Certificate;
- },{"asn1.js":167}],349:[function(require,module,exports){
- "use strict";
- // adapted from https://github.com/apatil/pemstrip
- var findProc = /Proc-Type: 4,ENCRYPTED[\n\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\n\r]+([0-9A-z\n\r+/=]+)[\n\r]+/m;
- var startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m;
- var fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\n\r+/=]+)-----END \1-----$/m;
- var evp = require('evp_bytestokey');
- var ciphers = require('browserify-aes');
- var Buffer = require('safe-buffer').Buffer;
- module.exports = function (okey, password) {
- var key = okey.toString();
- var match = key.match(findProc);
- var decrypted;
- if (!match) {
- var match2 = key.match(fullRegex);
- decrypted = Buffer.from(match2[2].replace(/[\r\n]/g, ''), 'base64');
- } else {
- var suite = 'aes' + match[1];
- var iv = Buffer.from(match[2], 'hex');
- var cipherText = Buffer.from(match[3].replace(/[\r\n]/g, ''), 'base64');
- var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key;
- var out = [];
- var cipher = ciphers.createDecipheriv(suite, cipherKey, iv);
- out.push(cipher.update(cipherText));
- out.push(cipher.final());
- decrypted = Buffer.concat(out);
- }
- var tag = key.match(startRegex)[1];
- return {
- tag: tag,
- data: decrypted
- };
- };
- },{"browserify-aes":188,"evp_bytestokey":259,"safe-buffer":384}],350:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- var asn1 = require('./asn1');
- var aesid = require('./aesid.json');
- var fixProc = require('./fixProc');
- var ciphers = require('browserify-aes');
- var compat = require('pbkdf2');
- var Buffer = require('safe-buffer').Buffer;
- module.exports = parseKeys;
- function parseKeys(buffer) {
- var password;
- if (_typeof(buffer) === 'object' && !Buffer.isBuffer(buffer)) {
- password = buffer.passphrase;
- buffer = buffer.key;
- }
- if (typeof buffer === 'string') {
- buffer = Buffer.from(buffer);
- }
- var stripped = fixProc(buffer, password);
- var type = stripped.tag;
- var data = stripped.data;
- var subtype, ndata;
- switch (type) {
- case 'CERTIFICATE':
- ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo;
- // falls through
- case 'PUBLIC KEY':
- if (!ndata) {
- ndata = asn1.PublicKey.decode(data, 'der');
- }
- subtype = ndata.algorithm.algorithm.join('.');
- switch (subtype) {
- case '1.2.840.113549.1.1.1':
- return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der');
- case '1.2.840.10045.2.1':
- ndata.subjectPrivateKey = ndata.subjectPublicKey;
- return {
- type: 'ec',
- data: ndata
- };
- case '1.2.840.10040.4.1':
- ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der');
- return {
- type: 'dsa',
- data: ndata.algorithm.params
- };
- default:
- throw new Error('unknown key id ' + subtype);
- }
- // throw new Error('unknown key type ' + type)
- case 'ENCRYPTED PRIVATE KEY':
- data = asn1.EncryptedPrivateKey.decode(data, 'der');
- data = decrypt(data, password);
- // falls through
- case 'PRIVATE KEY':
- ndata = asn1.PrivateKey.decode(data, 'der');
- subtype = ndata.algorithm.algorithm.join('.');
- switch (subtype) {
- case '1.2.840.113549.1.1.1':
- return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der');
- case '1.2.840.10045.2.1':
- return {
- curve: ndata.algorithm.curve,
- privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey
- };
- case '1.2.840.10040.4.1':
- ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der');
- return {
- type: 'dsa',
- params: ndata.algorithm.params
- };
- default:
- throw new Error('unknown key id ' + subtype);
- }
- // throw new Error('unknown key type ' + type)
- case 'RSA PUBLIC KEY':
- return asn1.RSAPublicKey.decode(data, 'der');
- case 'RSA PRIVATE KEY':
- return asn1.RSAPrivateKey.decode(data, 'der');
- case 'DSA PRIVATE KEY':
- return {
- type: 'dsa',
- params: asn1.DSAPrivateKey.decode(data, 'der')
- };
- case 'EC PRIVATE KEY':
- data = asn1.ECPrivateKey.decode(data, 'der');
- return {
- curve: data.parameters.value,
- privateKey: data.privateKey
- };
- default:
- throw new Error('unknown key type ' + type);
- }
- }
- parseKeys.signature = asn1.signature;
- function decrypt(data, password) {
- var salt = data.algorithm.decrypt.kde.kdeparams.salt;
- var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10);
- var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')];
- var iv = data.algorithm.decrypt.cipher.iv;
- var cipherText = data.subjectPrivateKey;
- var keylen = parseInt(algo.split('-')[1], 10) / 8;
- var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1');
- var cipher = ciphers.createDecipheriv(algo, key, iv);
- var out = [];
- out.push(cipher.update(cipherText));
- out.push(cipher.final());
- return Buffer.concat(out);
- }
- },{"./aesid.json":346,"./asn1":347,"./fixProc":349,"browserify-aes":188,"pbkdf2":351,"safe-buffer":384}],351:[function(require,module,exports){
- "use strict";
- exports.pbkdf2 = require('./lib/async');
- exports.pbkdf2Sync = require('./lib/sync');
- },{"./lib/async":352,"./lib/sync":355}],352:[function(require,module,exports){
- (function (process,global){
- "use strict";
- var Buffer = require('safe-buffer').Buffer;
- var checkParameters = require('./precondition');
- var defaultEncoding = require('./default-encoding');
- var sync = require('./sync');
- var toBuffer = require('./to-buffer');
- var ZERO_BUF;
- var subtle = global.crypto && global.crypto.subtle;
- var toBrowser = {
- sha: 'SHA-1',
- 'sha-1': 'SHA-1',
- sha1: 'SHA-1',
- sha256: 'SHA-256',
- 'sha-256': 'SHA-256',
- sha384: 'SHA-384',
- 'sha-384': 'SHA-384',
- 'sha-512': 'SHA-512',
- sha512: 'SHA-512'
- };
- var checks = [];
- function checkNative(algo) {
- if (global.process && !global.process.browser) {
- return Promise.resolve(false);
- }
- if (!subtle || !subtle.importKey || !subtle.deriveBits) {
- return Promise.resolve(false);
- }
- if (checks[algo] !== undefined) {
- return checks[algo];
- }
- ZERO_BUF = ZERO_BUF || Buffer.alloc(8);
- var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo).then(function () {
- return true;
- }).catch(function () {
- return false;
- });
- checks[algo] = prom;
- return prom;
- }
- function browserPbkdf2(password, salt, iterations, length, algo) {
- return subtle.importKey('raw', password, {
- name: 'PBKDF2'
- }, false, ['deriveBits']).then(function (key) {
- return subtle.deriveBits({
- name: 'PBKDF2',
- salt: salt,
- iterations: iterations,
- hash: {
- name: algo
- }
- }, key, length << 3);
- }).then(function (res) {
- return Buffer.from(res);
- });
- }
- function resolvePromise(promise, callback) {
- promise.then(function (out) {
- process.nextTick(function () {
- callback(null, out);
- });
- }, function (e) {
- process.nextTick(function () {
- callback(e);
- });
- });
- }
- module.exports = function (password, salt, iterations, keylen, digest, callback) {
- if (typeof digest === 'function') {
- callback = digest;
- digest = undefined;
- }
- digest = digest || 'sha1';
- var algo = toBrowser[digest.toLowerCase()];
- if (!algo || typeof global.Promise !== 'function') {
- return process.nextTick(function () {
- var out;
- try {
- out = sync(password, salt, iterations, keylen, digest);
- } catch (e) {
- return callback(e);
- }
- callback(null, out);
- });
- }
- checkParameters(iterations, keylen);
- password = toBuffer(password, defaultEncoding, 'Password');
- salt = toBuffer(salt, defaultEncoding, 'Salt');
- if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2');
- resolvePromise(checkNative(algo).then(function (resp) {
- if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo);
- return sync(password, salt, iterations, keylen, digest);
- }), callback);
- };
- }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{"./default-encoding":353,"./precondition":354,"./sync":355,"./to-buffer":356,"_process":358,"safe-buffer":384}],353:[function(require,module,exports){
- (function (process){
- "use strict";
- var defaultEncoding;
- /* istanbul ignore next */
- if (process.browser) {
- defaultEncoding = 'utf-8';
- } else if (process.version) {
- var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10);
- defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary';
- } else {
- defaultEncoding = 'utf-8';
- }
- module.exports = defaultEncoding;
- }).call(this,require('_process'))
- },{"_process":358}],354:[function(require,module,exports){
- "use strict";
- var MAX_ALLOC = Math.pow(2, 30) - 1; // default in iojs
- module.exports = function (iterations, keylen) {
- if (typeof iterations !== 'number') {
- throw new TypeError('Iterations not a number');
- }
- if (iterations < 0) {
- throw new TypeError('Bad iterations');
- }
- if (typeof keylen !== 'number') {
- throw new TypeError('Key length not a number');
- }
- if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) {
- /* eslint no-self-compare: 0 */
- throw new TypeError('Bad key length');
- }
- };
- },{}],355:[function(require,module,exports){
- "use strict";
- var md5 = require('create-hash/md5');
- var RIPEMD160 = require('ripemd160');
- var sha = require('sha.js');
- var Buffer = require('safe-buffer').Buffer;
- var checkParameters = require('./precondition');
- var defaultEncoding = require('./default-encoding');
- var toBuffer = require('./to-buffer');
- var ZEROS = Buffer.alloc(128);
- var sizes = {
- md5: 16,
- sha1: 20,
- sha224: 28,
- sha256: 32,
- sha384: 48,
- sha512: 64,
- rmd160: 20,
- ripemd160: 20
- };
- function Hmac(alg, key, saltLen) {
- var hash = getDigest(alg);
- var blocksize = alg === 'sha512' || alg === 'sha384' ? 128 : 64;
- if (key.length > blocksize) {
- key = hash(key);
- } else if (key.length < blocksize) {
- key = Buffer.concat([key, ZEROS], blocksize);
- }
- var ipad = Buffer.allocUnsafe(blocksize + sizes[alg]);
- var opad = Buffer.allocUnsafe(blocksize + sizes[alg]);
- for (var i = 0; i < blocksize; i++) {
- ipad[i] = key[i] ^ 0x36;
- opad[i] = key[i] ^ 0x5C;
- }
- var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4);
- ipad.copy(ipad1, 0, 0, blocksize);
- this.ipad1 = ipad1;
- this.ipad2 = ipad;
- this.opad = opad;
- this.alg = alg;
- this.blocksize = blocksize;
- this.hash = hash;
- this.size = sizes[alg];
- }
- Hmac.prototype.run = function (data, ipad) {
- data.copy(ipad, this.blocksize);
- var h = this.hash(ipad);
- h.copy(this.opad, this.blocksize);
- return this.hash(this.opad);
- };
- function getDigest(alg) {
- function shaFunc(data) {
- return sha(alg).update(data).digest();
- }
- function rmd160Func(data) {
- return new RIPEMD160().update(data).digest();
- }
- if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func;
- if (alg === 'md5') return md5;
- return shaFunc;
- }
- function pbkdf2(password, salt, iterations, keylen, digest) {
- checkParameters(iterations, keylen);
- password = toBuffer(password, defaultEncoding, 'Password');
- salt = toBuffer(salt, defaultEncoding, 'Salt');
- digest = digest || 'sha1';
- var hmac = new Hmac(digest, password, salt.length);
- var DK = Buffer.allocUnsafe(keylen);
- var block1 = Buffer.allocUnsafe(salt.length + 4);
- salt.copy(block1, 0, 0, salt.length);
- var destPos = 0;
- var hLen = sizes[digest];
- var l = Math.ceil(keylen / hLen);
- for (var i = 1; i <= l; i++) {
- block1.writeUInt32BE(i, salt.length);
- var T = hmac.run(block1, hmac.ipad1);
- var U = T;
- for (var j = 1; j < iterations; j++) {
- U = hmac.run(U, hmac.ipad2);
- for (var k = 0; k < hLen; k++) {
- T[k] ^= U[k];
- }
- }
- T.copy(DK, destPos);
- destPos += hLen;
- }
- return DK;
- }
- module.exports = pbkdf2;
- },{"./default-encoding":353,"./precondition":354,"./to-buffer":356,"create-hash/md5":223,"ripemd160":383,"safe-buffer":384,"sha.js":389}],356:[function(require,module,exports){
- "use strict";
- var Buffer = require('safe-buffer').Buffer;
- module.exports = function (thing, encoding, name) {
- if (Buffer.isBuffer(thing)) {
- return thing;
- } else if (typeof thing === 'string') {
- return Buffer.from(thing, encoding);
- } else if (ArrayBuffer.isView(thing)) {
- return Buffer.from(thing.buffer);
- } else {
- throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView');
- }
- };
- },{"safe-buffer":384}],357:[function(require,module,exports){
- (function (process){
- 'use strict';
- if (typeof process === 'undefined' || !process.version || process.version.indexOf('v0.') === 0 || process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
- module.exports = {
- nextTick: nextTick
- };
- } else {
- module.exports = process;
- }
- function nextTick(fn, arg1, arg2, arg3) {
- if (typeof fn !== 'function') {
- throw new TypeError('"callback" argument must be a function');
- }
- var len = arguments.length;
- var args, i;
- switch (len) {
- case 0:
- case 1:
- return process.nextTick(fn);
- case 2:
- return process.nextTick(function afterTickOne() {
- fn.call(null, arg1);
- });
- case 3:
- return process.nextTick(function afterTickTwo() {
- fn.call(null, arg1, arg2);
- });
- case 4:
- return process.nextTick(function afterTickThree() {
- fn.call(null, arg1, arg2, arg3);
- });
- default:
- args = new Array(len - 1);
- i = 0;
- while (i < args.length) {
- args[i++] = arguments[i];
- }
- return process.nextTick(function afterTick() {
- fn.apply(null, args);
- });
- }
- }
- }).call(this,require('_process'))
- },{"_process":358}],358:[function(require,module,exports){
- "use strict";
- // shim for using process in browser
- var process = module.exports = {}; // cached from whatever global is present so that test runners that stub it
- // don't break things. But we need to wrap it in a try catch in case it is
- // wrapped in strict mode code which doesn't define any globals. It's inside a
- // function because try/catches deoptimize in certain engines.
- var cachedSetTimeout;
- var cachedClearTimeout;
- function defaultSetTimout() {
- throw new Error('setTimeout has not been defined');
- }
- function defaultClearTimeout() {
- throw new Error('clearTimeout has not been defined');
- }
- (function () {
- try {
- if (typeof setTimeout === 'function') {
- cachedSetTimeout = setTimeout;
- } else {
- cachedSetTimeout = defaultSetTimout;
- }
- } catch (e) {
- cachedSetTimeout = defaultSetTimout;
- }
- try {
- if (typeof clearTimeout === 'function') {
- cachedClearTimeout = clearTimeout;
- } else {
- cachedClearTimeout = defaultClearTimeout;
- }
- } catch (e) {
- cachedClearTimeout = defaultClearTimeout;
- }
- })();
- function runTimeout(fun) {
- if (cachedSetTimeout === setTimeout) {
- //normal enviroments in sane situations
- return setTimeout(fun, 0);
- } // if setTimeout wasn't available but was latter defined
- if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
- cachedSetTimeout = setTimeout;
- return setTimeout(fun, 0);
- }
- try {
- // when when somebody has screwed with setTimeout but no I.E. maddness
- return cachedSetTimeout(fun, 0);
- } catch (e) {
- try {
- // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
- return cachedSetTimeout.call(null, fun, 0);
- } catch (e) {
- // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
- return cachedSetTimeout.call(this, fun, 0);
- }
- }
- }
- function runClearTimeout(marker) {
- if (cachedClearTimeout === clearTimeout) {
- //normal enviroments in sane situations
- return clearTimeout(marker);
- } // if clearTimeout wasn't available but was latter defined
- if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
- cachedClearTimeout = clearTimeout;
- return clearTimeout(marker);
- }
- try {
- // when when somebody has screwed with setTimeout but no I.E. maddness
- return cachedClearTimeout(marker);
- } catch (e) {
- try {
- // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
- return cachedClearTimeout.call(null, marker);
- } catch (e) {
- // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
- // Some versions of I.E. have different rules for clearTimeout vs setTimeout
- return cachedClearTimeout.call(this, marker);
- }
- }
- }
- var queue = [];
- var draining = false;
- var currentQueue;
- var queueIndex = -1;
- function cleanUpNextTick() {
- if (!draining || !currentQueue) {
- return;
- }
- draining = false;
- if (currentQueue.length) {
- queue = currentQueue.concat(queue);
- } else {
- queueIndex = -1;
- }
- if (queue.length) {
- drainQueue();
- }
- }
- function drainQueue() {
- if (draining) {
- return;
- }
- var timeout = runTimeout(cleanUpNextTick);
- draining = true;
- var len = queue.length;
- while (len) {
- currentQueue = queue;
- queue = [];
- while (++queueIndex < len) {
- if (currentQueue) {
- currentQueue[queueIndex].run();
- }
- }
- queueIndex = -1;
- len = queue.length;
- }
- currentQueue = null;
- draining = false;
- runClearTimeout(timeout);
- }
- process.nextTick = function (fun) {
- var args = new Array(arguments.length - 1);
- if (arguments.length > 1) {
- for (var i = 1; i < arguments.length; i++) {
- args[i - 1] = arguments[i];
- }
- }
- queue.push(new Item(fun, args));
- if (queue.length === 1 && !draining) {
- runTimeout(drainQueue);
- }
- }; // v8 likes predictible objects
- function Item(fun, array) {
- this.fun = fun;
- this.array = array;
- }
- Item.prototype.run = function () {
- this.fun.apply(null, this.array);
- };
- process.title = 'browser';
- process.browser = true;
- process.env = {};
- process.argv = [];
- process.version = ''; // empty string to avoid regexp issues
- process.versions = {};
- function noop() {}
- process.on = noop;
- process.addListener = noop;
- process.once = noop;
- process.off = noop;
- process.removeListener = noop;
- process.removeAllListeners = noop;
- process.emit = noop;
- process.prependListener = noop;
- process.prependOnceListener = noop;
- process.listeners = function (name) {
- return [];
- };
- process.binding = function (name) {
- throw new Error('process.binding is not supported');
- };
- process.cwd = function () {
- return '/';
- };
- process.chdir = function (dir) {
- throw new Error('process.chdir is not supported');
- };
- process.umask = function () {
- return 0;
- };
- },{}],359:[function(require,module,exports){
- "use strict";
- exports.publicEncrypt = require('./publicEncrypt');
- exports.privateDecrypt = require('./privateDecrypt');
- exports.privateEncrypt = function privateEncrypt(key, buf) {
- return exports.publicEncrypt(key, buf, true);
- };
- exports.publicDecrypt = function publicDecrypt(key, buf) {
- return exports.privateDecrypt(key, buf, true);
- };
- },{"./privateDecrypt":362,"./publicEncrypt":363}],360:[function(require,module,exports){
- "use strict";
- var createHash = require('create-hash');
- var Buffer = require('safe-buffer').Buffer;
- module.exports = function (seed, len) {
- var t = Buffer.alloc(0);
- var i = 0;
- var c;
- while (t.length < len) {
- c = i2ops(i++);
- t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()]);
- }
- return t.slice(0, len);
- };
- function i2ops(c) {
- var out = Buffer.allocUnsafe(4);
- out.writeUInt32BE(c, 0);
- return out;
- }
- },{"create-hash":222,"safe-buffer":384}],361:[function(require,module,exports){
- arguments[4][181][0].apply(exports,arguments)
- },{"buffer":185,"dup":181}],362:[function(require,module,exports){
- "use strict";
- var parseKeys = require('parse-asn1');
- var mgf = require('./mgf');
- var xor = require('./xor');
- var BN = require('bn.js');
- var crt = require('browserify-rsa');
- var createHash = require('create-hash');
- var withPublic = require('./withPublic');
- var Buffer = require('safe-buffer').Buffer;
- module.exports = function privateDecrypt(privateKey, enc, reverse) {
- var padding;
- if (privateKey.padding) {
- padding = privateKey.padding;
- } else if (reverse) {
- padding = 1;
- } else {
- padding = 4;
- }
- var key = parseKeys(privateKey);
- var k = key.modulus.byteLength();
- if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {
- throw new Error('decryption error');
- }
- var msg;
- if (reverse) {
- msg = withPublic(new BN(enc), key);
- } else {
- msg = crt(enc, key);
- }
- var zBuffer = Buffer.alloc(k - msg.length);
- msg = Buffer.concat([zBuffer, msg], k);
- if (padding === 4) {
- return oaep(key, msg);
- } else if (padding === 1) {
- return pkcs1(key, msg, reverse);
- } else if (padding === 3) {
- return msg;
- } else {
- throw new Error('unknown padding');
- }
- };
- function oaep(key, msg) {
- var k = key.modulus.byteLength();
- var iHash = createHash('sha1').update(Buffer.alloc(0)).digest();
- var hLen = iHash.length;
- if (msg[0] !== 0) {
- throw new Error('decryption error');
- }
- var maskedSeed = msg.slice(1, hLen + 1);
- var maskedDb = msg.slice(hLen + 1);
- var seed = xor(maskedSeed, mgf(maskedDb, hLen));
- var db = xor(maskedDb, mgf(seed, k - hLen - 1));
- if (compare(iHash, db.slice(0, hLen))) {
- throw new Error('decryption error');
- }
- var i = hLen;
- while (db[i] === 0) {
- i++;
- }
- if (db[i++] !== 1) {
- throw new Error('decryption error');
- }
- return db.slice(i);
- }
- function pkcs1(key, msg, reverse) {
- var p1 = msg.slice(0, 2);
- var i = 2;
- var status = 0;
- while (msg[i++] !== 0) {
- if (i >= msg.length) {
- status++;
- break;
- }
- }
- var ps = msg.slice(2, i - 1);
- if (p1.toString('hex') !== '0002' && !reverse || p1.toString('hex') !== '0001' && reverse) {
- status++;
- }
- if (ps.length < 8) {
- status++;
- }
- if (status) {
- throw new Error('decryption error');
- }
- return msg.slice(i);
- }
- function compare(a, b) {
- a = Buffer.from(a);
- b = Buffer.from(b);
- var dif = 0;
- var len = a.length;
- if (a.length !== b.length) {
- dif++;
- len = Math.min(a.length, b.length);
- }
- var i = -1;
- while (++i < len) {
- dif += a[i] ^ b[i];
- }
- return dif;
- }
- },{"./mgf":360,"./withPublic":364,"./xor":365,"bn.js":361,"browserify-rsa":206,"create-hash":222,"parse-asn1":350,"safe-buffer":384}],363:[function(require,module,exports){
- "use strict";
- var parseKeys = require('parse-asn1');
- var randomBytes = require('randombytes');
- var createHash = require('create-hash');
- var mgf = require('./mgf');
- var xor = require('./xor');
- var BN = require('bn.js');
- var withPublic = require('./withPublic');
- var crt = require('browserify-rsa');
- var Buffer = require('safe-buffer').Buffer;
- module.exports = function publicEncrypt(publicKey, msg, reverse) {
- var padding;
- if (publicKey.padding) {
- padding = publicKey.padding;
- } else if (reverse) {
- padding = 1;
- } else {
- padding = 4;
- }
- var key = parseKeys(publicKey);
- var paddedMsg;
- if (padding === 4) {
- paddedMsg = oaep(key, msg);
- } else if (padding === 1) {
- paddedMsg = pkcs1(key, msg, reverse);
- } else if (padding === 3) {
- paddedMsg = new BN(msg);
- if (paddedMsg.cmp(key.modulus) >= 0) {
- throw new Error('data too long for modulus');
- }
- } else {
- throw new Error('unknown padding');
- }
- if (reverse) {
- return crt(paddedMsg, key);
- } else {
- return withPublic(paddedMsg, key);
- }
- };
- function oaep(key, msg) {
- var k = key.modulus.byteLength();
- var mLen = msg.length;
- var iHash = createHash('sha1').update(Buffer.alloc(0)).digest();
- var hLen = iHash.length;
- var hLen2 = 2 * hLen;
- if (mLen > k - hLen2 - 2) {
- throw new Error('message too long');
- }
- var ps = Buffer.alloc(k - mLen - hLen2 - 2);
- var dblen = k - hLen - 1;
- var seed = randomBytes(hLen);
- var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen));
- var maskedSeed = xor(seed, mgf(maskedDb, hLen));
- return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k));
- }
- function pkcs1(key, msg, reverse) {
- var mLen = msg.length;
- var k = key.modulus.byteLength();
- if (mLen > k - 11) {
- throw new Error('message too long');
- }
- var ps;
- if (reverse) {
- ps = Buffer.alloc(k - mLen - 3, 0xff);
- } else {
- ps = nonZero(k - mLen - 3);
- }
- return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k));
- }
- function nonZero(len) {
- var out = Buffer.allocUnsafe(len);
- var i = 0;
- var cache = randomBytes(len * 2);
- var cur = 0;
- var num;
- while (i < len) {
- if (cur === cache.length) {
- cache = randomBytes(len * 2);
- cur = 0;
- }
- num = cache[cur++];
- if (num) {
- out[i++] = num;
- }
- }
- return out;
- }
- },{"./mgf":360,"./withPublic":364,"./xor":365,"bn.js":361,"browserify-rsa":206,"create-hash":222,"parse-asn1":350,"randombytes":366,"safe-buffer":384}],364:[function(require,module,exports){
- "use strict";
- var BN = require('bn.js');
- var Buffer = require('safe-buffer').Buffer;
- function withPublic(paddedMsg, key) {
- return Buffer.from(paddedMsg.toRed(BN.mont(key.modulus)).redPow(new BN(key.publicExponent)).fromRed().toArray());
- }
- module.exports = withPublic;
- },{"bn.js":361,"safe-buffer":384}],365:[function(require,module,exports){
- "use strict";
- module.exports = function xor(a, b) {
- var len = a.length;
- var i = -1;
- while (++i < len) {
- a[i] ^= b[i];
- }
- return a;
- };
- },{}],366:[function(require,module,exports){
- (function (process,global){
- 'use strict'; // limit of Crypto.getRandomValues()
- // https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues
- var MAX_BYTES = 65536; // Node supports requesting up to this number of bytes
- // https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48
- var MAX_UINT32 = 4294967295;
- function oldBrowser() {
- throw new Error('Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11');
- }
- var Buffer = require('safe-buffer').Buffer;
- var crypto = global.crypto || global.msCrypto;
- if (crypto && crypto.getRandomValues) {
- module.exports = randomBytes;
- } else {
- module.exports = oldBrowser;
- }
- function randomBytes(size, cb) {
- // phantomjs needs to throw
- if (size > MAX_UINT32) throw new RangeError('requested too many random bytes');
- var bytes = Buffer.allocUnsafe(size);
- if (size > 0) {
- // getRandomValues fails on IE if size == 0
- if (size > MAX_BYTES) {
- // this is the max bytes crypto.getRandomValues
- // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
- for (var generated = 0; generated < size; generated += MAX_BYTES) {
- // buffer.slice automatically checks if the end is past the end of
- // the buffer so we don't have to here
- crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES));
- }
- } else {
- crypto.getRandomValues(bytes);
- }
- }
- if (typeof cb === 'function') {
- return process.nextTick(function () {
- cb(null, bytes);
- });
- }
- return bytes;
- }
- }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{"_process":358,"safe-buffer":384}],367:[function(require,module,exports){
- (function (process,global){
- 'use strict';
- function oldBrowser() {
- throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11');
- }
- var safeBuffer = require('safe-buffer');
- var randombytes = require('randombytes');
- var Buffer = safeBuffer.Buffer;
- var kBufferMaxLength = safeBuffer.kMaxLength;
- var crypto = global.crypto || global.msCrypto;
- var kMaxUint32 = Math.pow(2, 32) - 1;
- function assertOffset(offset, length) {
- if (typeof offset !== 'number' || offset !== offset) {
- // eslint-disable-line no-self-compare
- throw new TypeError('offset must be a number');
- }
- if (offset > kMaxUint32 || offset < 0) {
- throw new TypeError('offset must be a uint32');
- }
- if (offset > kBufferMaxLength || offset > length) {
- throw new RangeError('offset out of range');
- }
- }
- function assertSize(size, offset, length) {
- if (typeof size !== 'number' || size !== size) {
- // eslint-disable-line no-self-compare
- throw new TypeError('size must be a number');
- }
- if (size > kMaxUint32 || size < 0) {
- throw new TypeError('size must be a uint32');
- }
- if (size + offset > length || size > kBufferMaxLength) {
- throw new RangeError('buffer too small');
- }
- }
- if (crypto && crypto.getRandomValues || !process.browser) {
- exports.randomFill = randomFill;
- exports.randomFillSync = randomFillSync;
- } else {
- exports.randomFill = oldBrowser;
- exports.randomFillSync = oldBrowser;
- }
- function randomFill(buf, offset, size, cb) {
- if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {
- throw new TypeError('"buf" argument must be a Buffer or Uint8Array');
- }
- if (typeof offset === 'function') {
- cb = offset;
- offset = 0;
- size = buf.length;
- } else if (typeof size === 'function') {
- cb = size;
- size = buf.length - offset;
- } else if (typeof cb !== 'function') {
- throw new TypeError('"cb" argument must be a function');
- }
- assertOffset(offset, buf.length);
- assertSize(size, offset, buf.length);
- return actualFill(buf, offset, size, cb);
- }
- function actualFill(buf, offset, size, cb) {
- if (process.browser) {
- var ourBuf = buf.buffer;
- var uint = new Uint8Array(ourBuf, offset, size);
- crypto.getRandomValues(uint);
- if (cb) {
- process.nextTick(function () {
- cb(null, buf);
- });
- return;
- }
- return buf;
- }
- if (cb) {
- randombytes(size, function (err, bytes) {
- if (err) {
- return cb(err);
- }
- bytes.copy(buf, offset);
- cb(null, buf);
- });
- return;
- }
- var bytes = randombytes(size);
- bytes.copy(buf, offset);
- return buf;
- }
- function randomFillSync(buf, offset, size) {
- if (typeof offset === 'undefined') {
- offset = 0;
- }
- if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {
- throw new TypeError('"buf" argument must be a Buffer or Uint8Array');
- }
- assertOffset(offset, buf.length);
- if (size === undefined) size = buf.length - offset;
- assertSize(size, offset, buf.length);
- return actualFill(buf, offset, size);
- }
- }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{"_process":358,"randombytes":366,"safe-buffer":384}],368:[function(require,module,exports){
- 'use strict';
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _inheritsLoose(subClass, superClass) {
- subClass.prototype = Object.create(superClass.prototype);
- subClass.prototype.constructor = subClass;
- subClass.__proto__ = superClass;
- }
- var codes = {};
- function createErrorType(code, message, Base) {
- if (!Base) {
- Base = Error;
- }
- function getMessage(arg1, arg2, arg3) {
- if (typeof message === 'string') {
- return message;
- } else {
- return message(arg1, arg2, arg3);
- }
- }
- var NodeError = /*#__PURE__*/function (_Base) {
- _inheritsLoose(NodeError, _Base);
- function NodeError(arg1, arg2, arg3) {
- return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;
- }
- return NodeError;
- }(Base);
- NodeError.prototype.name = Base.name;
- NodeError.prototype.code = code;
- codes[code] = NodeError;
- } // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js
- function oneOf(expected, thing) {
- if (Array.isArray(expected)) {
- var len = expected.length;
- expected = expected.map(function (i) {
- return String(i);
- });
- if (len > 2) {
- return "one of ".concat(thing, " ").concat(expected.slice(0, len - 1).join(', '), ", or ") + expected[len - 1];
- } else if (len === 2) {
- return "one of ".concat(thing, " ").concat(expected[0], " or ").concat(expected[1]);
- } else {
- return "of ".concat(thing, " ").concat(expected[0]);
- }
- } else {
- return "of ".concat(thing, " ").concat(String(expected));
- }
- } // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith
- function startsWith(str, search, pos) {
- return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;
- } // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith
- function endsWith(str, search, this_len) {
- if (this_len === undefined || this_len > str.length) {
- this_len = str.length;
- }
- return str.substring(this_len - search.length, this_len) === search;
- } // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes
- function includes(str, search, start) {
- if (typeof start !== 'number') {
- start = 0;
- }
- if (start + search.length > str.length) {
- return false;
- } else {
- return str.indexOf(search, start) !== -1;
- }
- }
- createErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {
- return 'The value "' + value + '" is invalid for option "' + name + '"';
- }, TypeError);
- createErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {
- // determiner: 'must be' or 'must not be'
- var determiner;
- if (typeof expected === 'string' && startsWith(expected, 'not ')) {
- determiner = 'must not be';
- expected = expected.replace(/^not /, '');
- } else {
- determiner = 'must be';
- }
- var msg;
- if (endsWith(name, ' argument')) {
- // For cases like 'first argument'
- msg = "The ".concat(name, " ").concat(determiner, " ").concat(oneOf(expected, 'type'));
- } else {
- var type = includes(name, '.') ? 'property' : 'argument';
- msg = "The \"".concat(name, "\" ").concat(type, " ").concat(determiner, " ").concat(oneOf(expected, 'type'));
- }
- msg += ". Received type ".concat(_typeof(actual));
- return msg;
- }, TypeError);
- createErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');
- createErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {
- return 'The ' + name + ' method is not implemented';
- });
- createErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');
- createErrorType('ERR_STREAM_DESTROYED', function (name) {
- return 'Cannot call ' + name + ' after a stream was destroyed';
- });
- createErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');
- createErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');
- createErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');
- createErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);
- createErrorType('ERR_UNKNOWN_ENCODING', function (arg) {
- return 'Unknown encoding: ' + arg;
- }, TypeError);
- createErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');
- module.exports.codes = codes;
- },{}],369:[function(require,module,exports){
- (function (process){
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- // a duplex stream is just a stream that is both readable and writable.
- // Since JS doesn't have multiple prototypal inheritance, this class
- // prototypally inherits from Readable, and then parasitically from
- // Writable.
- 'use strict';
- /*<replacement>*/
- var objectKeys = Object.keys || function (obj) {
- var keys = [];
- for (var key in obj) {
- keys.push(key);
- }
- return keys;
- };
- /*</replacement>*/
- module.exports = Duplex;
- var Readable = require('./_stream_readable');
- var Writable = require('./_stream_writable');
- require('inherits')(Duplex, Readable);
- {
- // Allow the keys array to be GC'ed.
- var keys = objectKeys(Writable.prototype);
- for (var v = 0; v < keys.length; v++) {
- var method = keys[v];
- if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
- }
- }
- function Duplex(options) {
- if (!(this instanceof Duplex)) return new Duplex(options);
- Readable.call(this, options);
- Writable.call(this, options);
- this.allowHalfOpen = true;
- if (options) {
- if (options.readable === false) this.readable = false;
- if (options.writable === false) this.writable = false;
- if (options.allowHalfOpen === false) {
- this.allowHalfOpen = false;
- this.once('end', onend);
- }
- }
- }
- Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', {
- // making it explicit this property is not enumerable
- // because otherwise some prototype manipulation in
- // userland will fail
- enumerable: false,
- get: function get() {
- return this._writableState.highWaterMark;
- }
- });
- Object.defineProperty(Duplex.prototype, 'writableBuffer', {
- // making it explicit this property is not enumerable
- // because otherwise some prototype manipulation in
- // userland will fail
- enumerable: false,
- get: function get() {
- return this._writableState && this._writableState.getBuffer();
- }
- });
- Object.defineProperty(Duplex.prototype, 'writableLength', {
- // making it explicit this property is not enumerable
- // because otherwise some prototype manipulation in
- // userland will fail
- enumerable: false,
- get: function get() {
- return this._writableState.length;
- }
- }); // the no-half-open enforcer
- function onend() {
- // If the writable side ended, then we're ok.
- if (this._writableState.ended) return; // no more data can be written.
- // But allow more writes to happen in this tick.
- process.nextTick(onEndNT, this);
- }
- function onEndNT(self) {
- self.end();
- }
- Object.defineProperty(Duplex.prototype, 'destroyed', {
- // making it explicit this property is not enumerable
- // because otherwise some prototype manipulation in
- // userland will fail
- enumerable: false,
- get: function get() {
- if (this._readableState === undefined || this._writableState === undefined) {
- return false;
- }
- return this._readableState.destroyed && this._writableState.destroyed;
- },
- set: function set(value) {
- // we ignore the value if the stream
- // has not been initialized yet
- if (this._readableState === undefined || this._writableState === undefined) {
- return;
- } // backward compatibility, the user is explicitly
- // managing destroyed
- this._readableState.destroyed = value;
- this._writableState.destroyed = value;
- }
- });
- }).call(this,require('_process'))
- },{"./_stream_readable":371,"./_stream_writable":373,"_process":358,"inherits":278}],370:[function(require,module,exports){
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- // a passthrough stream.
- // basically just the most minimal sort of Transform stream.
- // Every written chunk gets output as-is.
- 'use strict';
- module.exports = PassThrough;
- var Transform = require('./_stream_transform');
- require('inherits')(PassThrough, Transform);
- function PassThrough(options) {
- if (!(this instanceof PassThrough)) return new PassThrough(options);
- Transform.call(this, options);
- }
- PassThrough.prototype._transform = function (chunk, encoding, cb) {
- cb(null, chunk);
- };
- },{"./_stream_transform":372,"inherits":278}],371:[function(require,module,exports){
- (function (process,global){
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- 'use strict';
- module.exports = Readable;
- /*<replacement>*/
- var Duplex;
- /*</replacement>*/
- Readable.ReadableState = ReadableState;
- /*<replacement>*/
- var EE = require('events').EventEmitter;
- var EElistenerCount = function EElistenerCount(emitter, type) {
- return emitter.listeners(type).length;
- };
- /*</replacement>*/
- /*<replacement>*/
- var Stream = require('./internal/streams/stream');
- /*</replacement>*/
- var Buffer = require('buffer').Buffer;
- var OurUint8Array = global.Uint8Array || function () {};
- function _uint8ArrayToBuffer(chunk) {
- return Buffer.from(chunk);
- }
- function _isUint8Array(obj) {
- return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
- }
- /*<replacement>*/
- var debugUtil = require('util');
- var debug;
- if (debugUtil && debugUtil.debuglog) {
- debug = debugUtil.debuglog('stream');
- } else {
- debug = function debug() {};
- }
- /*</replacement>*/
- var BufferList = require('./internal/streams/buffer_list');
- var destroyImpl = require('./internal/streams/destroy');
- var _require = require('./internal/streams/state'),
- getHighWaterMark = _require.getHighWaterMark;
- var _require$codes = require('../errors').codes,
- ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,
- ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,
- ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
- ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.
- var StringDecoder;
- var createReadableStreamAsyncIterator;
- var from;
- require('inherits')(Readable, Stream);
- var errorOrDestroy = destroyImpl.errorOrDestroy;
- var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
- function prependListener(emitter, event, fn) {
- // Sadly this is not cacheable as some libraries bundle their own
- // event emitter implementation with them.
- if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any
- // userland ones. NEVER DO THIS. This is here only because this code needs
- // to continue to work with older versions of Node.js that do not include
- // the prependListener() method. The goal is to eventually remove this hack.
- if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
- }
- function ReadableState(options, stream, isDuplex) {
- Duplex = Duplex || require('./_stream_duplex');
- options = options || {}; // Duplex streams are both readable and writable, but share
- // the same options object.
- // However, some cases require setting options to different
- // values for the readable and the writable sides of the duplex stream.
- // These options can be provided separately as readableXXX and writableXXX.
- if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to
- // make all the buffer merging and length checks go away
- this.objectMode = !!options.objectMode;
- if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer
- // Note: 0 is a valid value, means "don't call _read preemptively ever"
- this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the
- // linked list can remove elements from the beginning faster than
- // array.shift()
- this.buffer = new BufferList();
- this.length = 0;
- this.pipes = null;
- this.pipesCount = 0;
- this.flowing = null;
- this.ended = false;
- this.endEmitted = false;
- this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted
- // immediately, or on a later tick. We set this to true at first, because
- // any actions that shouldn't happen until "later" should generally also
- // not happen before the first read call.
- this.sync = true; // whenever we return null, then we set a flag to say
- // that we're awaiting a 'readable' event emission.
- this.needReadable = false;
- this.emittedReadable = false;
- this.readableListening = false;
- this.resumeScheduled = false;
- this.paused = true; // Should close be emitted on destroy. Defaults to true.
- this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')
- this.autoDestroy = !!options.autoDestroy; // has it been destroyed
- this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string
- // encoding is 'binary' so we have to make this configurable.
- // Everything else in the universe uses 'utf8', though.
- this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s
- this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled
- this.readingMore = false;
- this.decoder = null;
- this.encoding = null;
- if (options.encoding) {
- if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
- this.decoder = new StringDecoder(options.encoding);
- this.encoding = options.encoding;
- }
- }
- function Readable(options) {
- Duplex = Duplex || require('./_stream_duplex');
- if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside
- // the ReadableState constructor, at least with V8 6.5
- var isDuplex = this instanceof Duplex;
- this._readableState = new ReadableState(options, this, isDuplex); // legacy
- this.readable = true;
- if (options) {
- if (typeof options.read === 'function') this._read = options.read;
- if (typeof options.destroy === 'function') this._destroy = options.destroy;
- }
- Stream.call(this);
- }
- Object.defineProperty(Readable.prototype, 'destroyed', {
- // making it explicit this property is not enumerable
- // because otherwise some prototype manipulation in
- // userland will fail
- enumerable: false,
- get: function get() {
- if (this._readableState === undefined) {
- return false;
- }
- return this._readableState.destroyed;
- },
- set: function set(value) {
- // we ignore the value if the stream
- // has not been initialized yet
- if (!this._readableState) {
- return;
- } // backward compatibility, the user is explicitly
- // managing destroyed
- this._readableState.destroyed = value;
- }
- });
- Readable.prototype.destroy = destroyImpl.destroy;
- Readable.prototype._undestroy = destroyImpl.undestroy;
- Readable.prototype._destroy = function (err, cb) {
- cb(err);
- }; // Manually shove something into the read() buffer.
- // This returns true if the highWaterMark has not been hit yet,
- // similar to how Writable.write() returns true if you should
- // write() some more.
- Readable.prototype.push = function (chunk, encoding) {
- var state = this._readableState;
- var skipChunkCheck;
- if (!state.objectMode) {
- if (typeof chunk === 'string') {
- encoding = encoding || state.defaultEncoding;
- if (encoding !== state.encoding) {
- chunk = Buffer.from(chunk, encoding);
- encoding = '';
- }
- skipChunkCheck = true;
- }
- } else {
- skipChunkCheck = true;
- }
- return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
- }; // Unshift should *always* be something directly out of read()
- Readable.prototype.unshift = function (chunk) {
- return readableAddChunk(this, chunk, null, true, false);
- };
- function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
- debug('readableAddChunk', chunk);
- var state = stream._readableState;
- if (chunk === null) {
- state.reading = false;
- onEofChunk(stream, state);
- } else {
- var er;
- if (!skipChunkCheck) er = chunkInvalid(state, chunk);
- if (er) {
- errorOrDestroy(stream, er);
- } else if (state.objectMode || chunk && chunk.length > 0) {
- if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
- chunk = _uint8ArrayToBuffer(chunk);
- }
- if (addToFront) {
- if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);
- } else if (state.ended) {
- errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());
- } else if (state.destroyed) {
- return false;
- } else {
- state.reading = false;
- if (state.decoder && !encoding) {
- chunk = state.decoder.write(chunk);
- if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
- } else {
- addChunk(stream, state, chunk, false);
- }
- }
- } else if (!addToFront) {
- state.reading = false;
- maybeReadMore(stream, state);
- }
- } // We can push more data if we are below the highWaterMark.
- // Also, if we have no data yet, we can stand some more bytes.
- // This is to work around cases where hwm=0, such as the repl.
- return !state.ended && (state.length < state.highWaterMark || state.length === 0);
- }
- function addChunk(stream, state, chunk, addToFront) {
- if (state.flowing && state.length === 0 && !state.sync) {
- state.awaitDrain = 0;
- stream.emit('data', chunk);
- } else {
- // update the buffer info.
- state.length += state.objectMode ? 1 : chunk.length;
- if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
- if (state.needReadable) emitReadable(stream);
- }
- maybeReadMore(stream, state);
- }
- function chunkInvalid(state, chunk) {
- var er;
- if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
- er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);
- }
- return er;
- }
- Readable.prototype.isPaused = function () {
- return this._readableState.flowing === false;
- }; // backwards compatibility.
- Readable.prototype.setEncoding = function (enc) {
- if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
- var decoder = new StringDecoder(enc);
- this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8
- this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:
- var p = this._readableState.buffer.head;
- var content = '';
- while (p !== null) {
- content += decoder.write(p.data);
- p = p.next;
- }
- this._readableState.buffer.clear();
- if (content !== '') this._readableState.buffer.push(content);
- this._readableState.length = content.length;
- return this;
- }; // Don't raise the hwm > 1GB
- var MAX_HWM = 0x40000000;
- function computeNewHighWaterMark(n) {
- if (n >= MAX_HWM) {
- // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.
- n = MAX_HWM;
- } else {
- // Get the next highest power of 2 to prevent increasing hwm excessively in
- // tiny amounts
- n--;
- n |= n >>> 1;
- n |= n >>> 2;
- n |= n >>> 4;
- n |= n >>> 8;
- n |= n >>> 16;
- n++;
- }
- return n;
- } // This function is designed to be inlinable, so please take care when making
- // changes to the function body.
- function howMuchToRead(n, state) {
- if (n <= 0 || state.length === 0 && state.ended) return 0;
- if (state.objectMode) return 1;
- if (n !== n) {
- // Only flow one buffer at a time
- if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
- } // If we're asking for more than the current hwm, then raise the hwm.
- if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
- if (n <= state.length) return n; // Don't have enough
- if (!state.ended) {
- state.needReadable = true;
- return 0;
- }
- return state.length;
- } // you can override either this method, or the async _read(n) below.
- Readable.prototype.read = function (n) {
- debug('read', n);
- n = parseInt(n, 10);
- var state = this._readableState;
- var nOrig = n;
- if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we
- // already have a bunch of data in the buffer, then just trigger
- // the 'readable' event and move on.
- if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {
- debug('read: emitReadable', state.length, state.ended);
- if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
- return null;
- }
- n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.
- if (n === 0 && state.ended) {
- if (state.length === 0) endReadable(this);
- return null;
- } // All the actual chunk generation logic needs to be
- // *below* the call to _read. The reason is that in certain
- // synthetic stream cases, such as passthrough streams, _read
- // may be a completely synchronous operation which may change
- // the state of the read buffer, providing enough data when
- // before there was *not* enough.
- //
- // So, the steps are:
- // 1. Figure out what the state of things will be after we do
- // a read from the buffer.
- //
- // 2. If that resulting state will trigger a _read, then call _read.
- // Note that this may be asynchronous, or synchronous. Yes, it is
- // deeply ugly to write APIs this way, but that still doesn't mean
- // that the Readable class should behave improperly, as streams are
- // designed to be sync/async agnostic.
- // Take note if the _read call is sync or async (ie, if the read call
- // has returned yet), so that we know whether or not it's safe to emit
- // 'readable' etc.
- //
- // 3. Actually pull the requested chunks out of the buffer and return.
- // if we need a readable event, then we need to do some reading.
- var doRead = state.needReadable;
- debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some
- if (state.length === 0 || state.length - n < state.highWaterMark) {
- doRead = true;
- debug('length less than watermark', doRead);
- } // however, if we've ended, then there's no point, and if we're already
- // reading, then it's unnecessary.
- if (state.ended || state.reading) {
- doRead = false;
- debug('reading or ended', doRead);
- } else if (doRead) {
- debug('do read');
- state.reading = true;
- state.sync = true; // if the length is currently zero, then we *need* a readable event.
- if (state.length === 0) state.needReadable = true; // call internal read method
- this._read(state.highWaterMark);
- state.sync = false; // If _read pushed data synchronously, then `reading` will be false,
- // and we need to re-evaluate how much data we can return to the user.
- if (!state.reading) n = howMuchToRead(nOrig, state);
- }
- var ret;
- if (n > 0) ret = fromList(n, state);else ret = null;
- if (ret === null) {
- state.needReadable = state.length <= state.highWaterMark;
- n = 0;
- } else {
- state.length -= n;
- state.awaitDrain = 0;
- }
- if (state.length === 0) {
- // If we have nothing in the buffer, then we want to know
- // as soon as we *do* get something into the buffer.
- if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.
- if (nOrig !== n && state.ended) endReadable(this);
- }
- if (ret !== null) this.emit('data', ret);
- return ret;
- };
- function onEofChunk(stream, state) {
- debug('onEofChunk');
- if (state.ended) return;
- if (state.decoder) {
- var chunk = state.decoder.end();
- if (chunk && chunk.length) {
- state.buffer.push(chunk);
- state.length += state.objectMode ? 1 : chunk.length;
- }
- }
- state.ended = true;
- if (state.sync) {
- // if we are sync, wait until next tick to emit the data.
- // Otherwise we risk emitting data in the flow()
- // the readable code triggers during a read() call
- emitReadable(stream);
- } else {
- // emit 'readable' now to make sure it gets picked up.
- state.needReadable = false;
- if (!state.emittedReadable) {
- state.emittedReadable = true;
- emitReadable_(stream);
- }
- }
- } // Don't emit readable right away in sync mode, because this can trigger
- // another read() call => stack overflow. This way, it might trigger
- // a nextTick recursion warning, but that's not so bad.
- function emitReadable(stream) {
- var state = stream._readableState;
- debug('emitReadable', state.needReadable, state.emittedReadable);
- state.needReadable = false;
- if (!state.emittedReadable) {
- debug('emitReadable', state.flowing);
- state.emittedReadable = true;
- process.nextTick(emitReadable_, stream);
- }
- }
- function emitReadable_(stream) {
- var state = stream._readableState;
- debug('emitReadable_', state.destroyed, state.length, state.ended);
- if (!state.destroyed && (state.length || state.ended)) {
- stream.emit('readable');
- state.emittedReadable = false;
- } // The stream needs another readable event if
- // 1. It is not flowing, as the flow mechanism will take
- // care of it.
- // 2. It is not ended.
- // 3. It is below the highWaterMark, so we can schedule
- // another readable later.
- state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;
- flow(stream);
- } // at this point, the user has presumably seen the 'readable' event,
- // and called read() to consume some data. that may have triggered
- // in turn another _read(n) call, in which case reading = true if
- // it's in progress.
- // However, if we're not ended, or reading, and the length < hwm,
- // then go ahead and try to read some more preemptively.
- function maybeReadMore(stream, state) {
- if (!state.readingMore) {
- state.readingMore = true;
- process.nextTick(maybeReadMore_, stream, state);
- }
- }
- function maybeReadMore_(stream, state) {
- // Attempt to read more data if we should.
- //
- // The conditions for reading more data are (one of):
- // - Not enough data buffered (state.length < state.highWaterMark). The loop
- // is responsible for filling the buffer with enough data if such data
- // is available. If highWaterMark is 0 and we are not in the flowing mode
- // we should _not_ attempt to buffer any extra data. We'll get more data
- // when the stream consumer calls read() instead.
- // - No data in the buffer, and the stream is in flowing mode. In this mode
- // the loop below is responsible for ensuring read() is called. Failing to
- // call read here would abort the flow and there's no other mechanism for
- // continuing the flow if the stream consumer has just subscribed to the
- // 'data' event.
- //
- // In addition to the above conditions to keep reading data, the following
- // conditions prevent the data from being read:
- // - The stream has ended (state.ended).
- // - There is already a pending 'read' operation (state.reading). This is a
- // case where the the stream has called the implementation defined _read()
- // method, but they are processing the call asynchronously and have _not_
- // called push() with new data. In this case we skip performing more
- // read()s. The execution ends in this method again after the _read() ends
- // up calling push() with more data.
- while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {
- var len = state.length;
- debug('maybeReadMore read 0');
- stream.read(0);
- if (len === state.length) // didn't get any data, stop spinning.
- break;
- }
- state.readingMore = false;
- } // abstract method. to be overridden in specific implementation classes.
- // call cb(er, data) where data is <= n in length.
- // for virtual (non-string, non-buffer) streams, "length" is somewhat
- // arbitrary, and perhaps not very meaningful.
- Readable.prototype._read = function (n) {
- errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));
- };
- Readable.prototype.pipe = function (dest, pipeOpts) {
- var src = this;
- var state = this._readableState;
- switch (state.pipesCount) {
- case 0:
- state.pipes = dest;
- break;
- case 1:
- state.pipes = [state.pipes, dest];
- break;
- default:
- state.pipes.push(dest);
- break;
- }
- state.pipesCount += 1;
- debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
- var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
- var endFn = doEnd ? onend : unpipe;
- if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);
- dest.on('unpipe', onunpipe);
- function onunpipe(readable, unpipeInfo) {
- debug('onunpipe');
- if (readable === src) {
- if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
- unpipeInfo.hasUnpiped = true;
- cleanup();
- }
- }
- }
- function onend() {
- debug('onend');
- dest.end();
- } // when the dest drains, it reduces the awaitDrain counter
- // on the source. This would be more elegant with a .once()
- // handler in flow(), but adding and removing repeatedly is
- // too slow.
- var ondrain = pipeOnDrain(src);
- dest.on('drain', ondrain);
- var cleanedUp = false;
- function cleanup() {
- debug('cleanup'); // cleanup event handlers once the pipe is broken
- dest.removeListener('close', onclose);
- dest.removeListener('finish', onfinish);
- dest.removeListener('drain', ondrain);
- dest.removeListener('error', onerror);
- dest.removeListener('unpipe', onunpipe);
- src.removeListener('end', onend);
- src.removeListener('end', unpipe);
- src.removeListener('data', ondata);
- cleanedUp = true; // if the reader is waiting for a drain event from this
- // specific writer, then it would cause it to never start
- // flowing again.
- // So, if this is awaiting a drain, then we just call it now.
- // If we don't know, then assume that we are waiting for one.
- if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
- }
- src.on('data', ondata);
- function ondata(chunk) {
- debug('ondata');
- var ret = dest.write(chunk);
- debug('dest.write', ret);
- if (ret === false) {
- // If the user unpiped during `dest.write()`, it is possible
- // to get stuck in a permanently paused state if that write
- // also returned false.
- // => Check whether `dest` is still a piping destination.
- if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
- debug('false write response, pause', state.awaitDrain);
- state.awaitDrain++;
- }
- src.pause();
- }
- } // if the dest has an error, then stop piping into it.
- // however, don't suppress the throwing behavior for this.
- function onerror(er) {
- debug('onerror', er);
- unpipe();
- dest.removeListener('error', onerror);
- if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);
- } // Make sure our error handler is attached before userland ones.
- prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.
- function onclose() {
- dest.removeListener('finish', onfinish);
- unpipe();
- }
- dest.once('close', onclose);
- function onfinish() {
- debug('onfinish');
- dest.removeListener('close', onclose);
- unpipe();
- }
- dest.once('finish', onfinish);
- function unpipe() {
- debug('unpipe');
- src.unpipe(dest);
- } // tell the dest that it's being piped to
- dest.emit('pipe', src); // start the flow if it hasn't been started already.
- if (!state.flowing) {
- debug('pipe resume');
- src.resume();
- }
- return dest;
- };
- function pipeOnDrain(src) {
- return function pipeOnDrainFunctionResult() {
- var state = src._readableState;
- debug('pipeOnDrain', state.awaitDrain);
- if (state.awaitDrain) state.awaitDrain--;
- if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
- state.flowing = true;
- flow(src);
- }
- };
- }
- Readable.prototype.unpipe = function (dest) {
- var state = this._readableState;
- var unpipeInfo = {
- hasUnpiped: false
- }; // if we're not piping anywhere, then do nothing.
- if (state.pipesCount === 0) return this; // just one destination. most common case.
- if (state.pipesCount === 1) {
- // passed in one, but it's not the right one.
- if (dest && dest !== state.pipes) return this;
- if (!dest) dest = state.pipes; // got a match.
- state.pipes = null;
- state.pipesCount = 0;
- state.flowing = false;
- if (dest) dest.emit('unpipe', this, unpipeInfo);
- return this;
- } // slow case. multiple pipe destinations.
- if (!dest) {
- // remove all.
- var dests = state.pipes;
- var len = state.pipesCount;
- state.pipes = null;
- state.pipesCount = 0;
- state.flowing = false;
- for (var i = 0; i < len; i++) {
- dests[i].emit('unpipe', this, {
- hasUnpiped: false
- });
- }
- return this;
- } // try to find the right one.
- var index = indexOf(state.pipes, dest);
- if (index === -1) return this;
- state.pipes.splice(index, 1);
- state.pipesCount -= 1;
- if (state.pipesCount === 1) state.pipes = state.pipes[0];
- dest.emit('unpipe', this, unpipeInfo);
- return this;
- }; // set up data events if they are asked for
- // Ensure readable listeners eventually get something
- Readable.prototype.on = function (ev, fn) {
- var res = Stream.prototype.on.call(this, ev, fn);
- var state = this._readableState;
- if (ev === 'data') {
- // update readableListening so that resume() may be a no-op
- // a few lines down. This is needed to support once('readable').
- state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused
- if (state.flowing !== false) this.resume();
- } else if (ev === 'readable') {
- if (!state.endEmitted && !state.readableListening) {
- state.readableListening = state.needReadable = true;
- state.flowing = false;
- state.emittedReadable = false;
- debug('on readable', state.length, state.reading);
- if (state.length) {
- emitReadable(this);
- } else if (!state.reading) {
- process.nextTick(nReadingNextTick, this);
- }
- }
- }
- return res;
- };
- Readable.prototype.addListener = Readable.prototype.on;
- Readable.prototype.removeListener = function (ev, fn) {
- var res = Stream.prototype.removeListener.call(this, ev, fn);
- if (ev === 'readable') {
- // We need to check if there is someone still listening to
- // readable and reset the state. However this needs to happen
- // after readable has been emitted but before I/O (nextTick) to
- // support once('readable', fn) cycles. This means that calling
- // resume within the same tick will have no
- // effect.
- process.nextTick(updateReadableListening, this);
- }
- return res;
- };
- Readable.prototype.removeAllListeners = function (ev) {
- var res = Stream.prototype.removeAllListeners.apply(this, arguments);
- if (ev === 'readable' || ev === undefined) {
- // We need to check if there is someone still listening to
- // readable and reset the state. However this needs to happen
- // after readable has been emitted but before I/O (nextTick) to
- // support once('readable', fn) cycles. This means that calling
- // resume within the same tick will have no
- // effect.
- process.nextTick(updateReadableListening, this);
- }
- return res;
- };
- function updateReadableListening(self) {
- var state = self._readableState;
- state.readableListening = self.listenerCount('readable') > 0;
- if (state.resumeScheduled && !state.paused) {
- // flowing needs to be set to true now, otherwise
- // the upcoming resume will not flow.
- state.flowing = true; // crude way to check if we should resume
- } else if (self.listenerCount('data') > 0) {
- self.resume();
- }
- }
- function nReadingNextTick(self) {
- debug('readable nexttick read 0');
- self.read(0);
- } // pause() and resume() are remnants of the legacy readable stream API
- // If the user uses them, then switch into old mode.
- Readable.prototype.resume = function () {
- var state = this._readableState;
- if (!state.flowing) {
- debug('resume'); // we flow only if there is no one listening
- // for readable, but we still have to call
- // resume()
- state.flowing = !state.readableListening;
- resume(this, state);
- }
- state.paused = false;
- return this;
- };
- function resume(stream, state) {
- if (!state.resumeScheduled) {
- state.resumeScheduled = true;
- process.nextTick(resume_, stream, state);
- }
- }
- function resume_(stream, state) {
- debug('resume', state.reading);
- if (!state.reading) {
- stream.read(0);
- }
- state.resumeScheduled = false;
- stream.emit('resume');
- flow(stream);
- if (state.flowing && !state.reading) stream.read(0);
- }
- Readable.prototype.pause = function () {
- debug('call pause flowing=%j', this._readableState.flowing);
- if (this._readableState.flowing !== false) {
- debug('pause');
- this._readableState.flowing = false;
- this.emit('pause');
- }
- this._readableState.paused = true;
- return this;
- };
- function flow(stream) {
- var state = stream._readableState;
- debug('flow', state.flowing);
- while (state.flowing && stream.read() !== null) {
- ;
- }
- } // wrap an old-style stream as the async data source.
- // This is *not* part of the readable stream interface.
- // It is an ugly unfortunate mess of history.
- Readable.prototype.wrap = function (stream) {
- var _this = this;
- var state = this._readableState;
- var paused = false;
- stream.on('end', function () {
- debug('wrapped end');
- if (state.decoder && !state.ended) {
- var chunk = state.decoder.end();
- if (chunk && chunk.length) _this.push(chunk);
- }
- _this.push(null);
- });
- stream.on('data', function (chunk) {
- debug('wrapped data');
- if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode
- if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
- var ret = _this.push(chunk);
- if (!ret) {
- paused = true;
- stream.pause();
- }
- }); // proxy all the other methods.
- // important when wrapping filters and duplexes.
- for (var i in stream) {
- if (this[i] === undefined && typeof stream[i] === 'function') {
- this[i] = function methodWrap(method) {
- return function methodWrapReturnFunction() {
- return stream[method].apply(stream, arguments);
- };
- }(i);
- }
- } // proxy certain important events.
- for (var n = 0; n < kProxyEvents.length; n++) {
- stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));
- } // when we try to consume some more bytes, simply unpause the
- // underlying stream.
- this._read = function (n) {
- debug('wrapped _read', n);
- if (paused) {
- paused = false;
- stream.resume();
- }
- };
- return this;
- };
- if (typeof Symbol === 'function') {
- Readable.prototype[Symbol.asyncIterator] = function () {
- if (createReadableStreamAsyncIterator === undefined) {
- createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');
- }
- return createReadableStreamAsyncIterator(this);
- };
- }
- Object.defineProperty(Readable.prototype, 'readableHighWaterMark', {
- // making it explicit this property is not enumerable
- // because otherwise some prototype manipulation in
- // userland will fail
- enumerable: false,
- get: function get() {
- return this._readableState.highWaterMark;
- }
- });
- Object.defineProperty(Readable.prototype, 'readableBuffer', {
- // making it explicit this property is not enumerable
- // because otherwise some prototype manipulation in
- // userland will fail
- enumerable: false,
- get: function get() {
- return this._readableState && this._readableState.buffer;
- }
- });
- Object.defineProperty(Readable.prototype, 'readableFlowing', {
- // making it explicit this property is not enumerable
- // because otherwise some prototype manipulation in
- // userland will fail
- enumerable: false,
- get: function get() {
- return this._readableState.flowing;
- },
- set: function set(state) {
- if (this._readableState) {
- this._readableState.flowing = state;
- }
- }
- }); // exposed for testing purposes only.
- Readable._fromList = fromList;
- Object.defineProperty(Readable.prototype, 'readableLength', {
- // making it explicit this property is not enumerable
- // because otherwise some prototype manipulation in
- // userland will fail
- enumerable: false,
- get: function get() {
- return this._readableState.length;
- }
- }); // Pluck off n bytes from an array of buffers.
- // Length is the combined lengths of all the buffers in the list.
- // This function is designed to be inlinable, so please take care when making
- // changes to the function body.
- function fromList(n, state) {
- // nothing buffered
- if (state.length === 0) return null;
- var ret;
- if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
- // read it all, truncate the list
- if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);
- state.buffer.clear();
- } else {
- // read part of list
- ret = state.buffer.consume(n, state.decoder);
- }
- return ret;
- }
- function endReadable(stream) {
- var state = stream._readableState;
- debug('endReadable', state.endEmitted);
- if (!state.endEmitted) {
- state.ended = true;
- process.nextTick(endReadableNT, state, stream);
- }
- }
- function endReadableNT(state, stream) {
- debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.
- if (!state.endEmitted && state.length === 0) {
- state.endEmitted = true;
- stream.readable = false;
- stream.emit('end');
- if (state.autoDestroy) {
- // In case of duplex streams we need a way to detect
- // if the writable side is ready for autoDestroy as well
- var wState = stream._writableState;
- if (!wState || wState.autoDestroy && wState.finished) {
- stream.destroy();
- }
- }
- }
- }
- if (typeof Symbol === 'function') {
- Readable.from = function (iterable, opts) {
- if (from === undefined) {
- from = require('./internal/streams/from');
- }
- return from(Readable, iterable, opts);
- };
- }
- function indexOf(xs, x) {
- for (var i = 0, l = xs.length; i < l; i++) {
- if (xs[i] === x) return i;
- }
- return -1;
- }
- }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{"../errors":368,"./_stream_duplex":369,"./internal/streams/async_iterator":374,"./internal/streams/buffer_list":375,"./internal/streams/destroy":376,"./internal/streams/from":378,"./internal/streams/state":380,"./internal/streams/stream":381,"_process":358,"buffer":216,"events":258,"inherits":278,"string_decoder/":410,"util":185}],372:[function(require,module,exports){
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- // a transform stream is a readable/writable stream where you do
- // something with the data. Sometimes it's called a "filter",
- // but that's not a great name for it, since that implies a thing where
- // some bits pass through, and others are simply ignored. (That would
- // be a valid example of a transform, of course.)
- //
- // While the output is causally related to the input, it's not a
- // necessarily symmetric or synchronous transformation. For example,
- // a zlib stream might take multiple plain-text writes(), and then
- // emit a single compressed chunk some time in the future.
- //
- // Here's how this works:
- //
- // The Transform stream has all the aspects of the readable and writable
- // stream classes. When you write(chunk), that calls _write(chunk,cb)
- // internally, and returns false if there's a lot of pending writes
- // buffered up. When you call read(), that calls _read(n) until
- // there's enough pending readable data buffered up.
- //
- // In a transform stream, the written data is placed in a buffer. When
- // _read(n) is called, it transforms the queued up data, calling the
- // buffered _write cb's as it consumes chunks. If consuming a single
- // written chunk would result in multiple output chunks, then the first
- // outputted bit calls the readcb, and subsequent chunks just go into
- // the read buffer, and will cause it to emit 'readable' if necessary.
- //
- // This way, back-pressure is actually determined by the reading side,
- // since _read has to be called to start processing a new chunk. However,
- // a pathological inflate type of transform can cause excessive buffering
- // here. For example, imagine a stream where every byte of input is
- // interpreted as an integer from 0-255, and then results in that many
- // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
- // 1kb of data being output. In this case, you could write a very small
- // amount of input, and end up with a very large amount of output. In
- // such a pathological inflating mechanism, there'd be no way to tell
- // the system to stop doing the transform. A single 4MB write could
- // cause the system to run out of memory.
- //
- // However, even in such a pathological case, only a single written chunk
- // would be consumed, and then the rest would wait (un-transformed) until
- // the results of the previous transformed chunk were consumed.
- 'use strict';
- module.exports = Transform;
- var _require$codes = require('../errors').codes,
- ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
- ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,
- ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,
- ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;
- var Duplex = require('./_stream_duplex');
- require('inherits')(Transform, Duplex);
- function afterTransform(er, data) {
- var ts = this._transformState;
- ts.transforming = false;
- var cb = ts.writecb;
- if (cb === null) {
- return this.emit('error', new ERR_MULTIPLE_CALLBACK());
- }
- ts.writechunk = null;
- ts.writecb = null;
- if (data != null) // single equals check for both `null` and `undefined`
- this.push(data);
- cb(er);
- var rs = this._readableState;
- rs.reading = false;
- if (rs.needReadable || rs.length < rs.highWaterMark) {
- this._read(rs.highWaterMark);
- }
- }
- function Transform(options) {
- if (!(this instanceof Transform)) return new Transform(options);
- Duplex.call(this, options);
- this._transformState = {
- afterTransform: afterTransform.bind(this),
- needTransform: false,
- transforming: false,
- writecb: null,
- writechunk: null,
- writeencoding: null
- }; // start out asking for a readable event once data is transformed.
- this._readableState.needReadable = true; // we have implemented the _read method, and done the other things
- // that Readable wants before the first _read call, so unset the
- // sync guard flag.
- this._readableState.sync = false;
- if (options) {
- if (typeof options.transform === 'function') this._transform = options.transform;
- if (typeof options.flush === 'function') this._flush = options.flush;
- } // When the writable side finishes, then flush out anything remaining.
- this.on('prefinish', prefinish);
- }
- function prefinish() {
- var _this = this;
- if (typeof this._flush === 'function' && !this._readableState.destroyed) {
- this._flush(function (er, data) {
- done(_this, er, data);
- });
- } else {
- done(this, null, null);
- }
- }
- Transform.prototype.push = function (chunk, encoding) {
- this._transformState.needTransform = false;
- return Duplex.prototype.push.call(this, chunk, encoding);
- }; // This is the part where you do stuff!
- // override this function in implementation classes.
- // 'chunk' is an input chunk.
- //
- // Call `push(newChunk)` to pass along transformed output
- // to the readable side. You may call 'push' zero or more times.
- //
- // Call `cb(err)` when you are done with this chunk. If you pass
- // an error, then that'll put the hurt on the whole operation. If you
- // never call cb(), then you'll never get another chunk.
- Transform.prototype._transform = function (chunk, encoding, cb) {
- cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));
- };
- Transform.prototype._write = function (chunk, encoding, cb) {
- var ts = this._transformState;
- ts.writecb = cb;
- ts.writechunk = chunk;
- ts.writeencoding = encoding;
- if (!ts.transforming) {
- var rs = this._readableState;
- if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
- }
- }; // Doesn't matter what the args are here.
- // _transform does all the work.
- // That we got here means that the readable side wants more data.
- Transform.prototype._read = function (n) {
- var ts = this._transformState;
- if (ts.writechunk !== null && !ts.transforming) {
- ts.transforming = true;
- this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
- } else {
- // mark that we need a transform, so that any data that comes in
- // will get processed, now that we've asked for it.
- ts.needTransform = true;
- }
- };
- Transform.prototype._destroy = function (err, cb) {
- Duplex.prototype._destroy.call(this, err, function (err2) {
- cb(err2);
- });
- };
- function done(stream, er, data) {
- if (er) return stream.emit('error', er);
- if (data != null) // single equals check for both `null` and `undefined`
- stream.push(data); // TODO(BridgeAR): Write a test for these two error cases
- // if there's nothing in the write buffer, then that means
- // that nothing more will ever be provided
- if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();
- if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();
- return stream.push(null);
- }
- },{"../errors":368,"./_stream_duplex":369,"inherits":278}],373:[function(require,module,exports){
- (function (process,global){
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- // A bit simpler than readable streams.
- // Implement an async ._write(chunk, encoding, cb), and it'll handle all
- // the drain event emission and buffering.
- 'use strict';
- module.exports = Writable;
- /* <replacement> */
- function WriteReq(chunk, encoding, cb) {
- this.chunk = chunk;
- this.encoding = encoding;
- this.callback = cb;
- this.next = null;
- } // It seems a linked list but it is not
- // there will be only 2 of these for each stream
- function CorkedRequest(state) {
- var _this = this;
- this.next = null;
- this.entry = null;
- this.finish = function () {
- onCorkedFinish(_this, state);
- };
- }
- /* </replacement> */
- /*<replacement>*/
- var Duplex;
- /*</replacement>*/
- Writable.WritableState = WritableState;
- /*<replacement>*/
- var internalUtil = {
- deprecate: require('util-deprecate')
- };
- /*</replacement>*/
- /*<replacement>*/
- var Stream = require('./internal/streams/stream');
- /*</replacement>*/
- var Buffer = require('buffer').Buffer;
- var OurUint8Array = global.Uint8Array || function () {};
- function _uint8ArrayToBuffer(chunk) {
- return Buffer.from(chunk);
- }
- function _isUint8Array(obj) {
- return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
- }
- var destroyImpl = require('./internal/streams/destroy');
- var _require = require('./internal/streams/state'),
- getHighWaterMark = _require.getHighWaterMark;
- var _require$codes = require('../errors').codes,
- ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,
- ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
- ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,
- ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,
- ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,
- ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,
- ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,
- ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;
- var errorOrDestroy = destroyImpl.errorOrDestroy;
- require('inherits')(Writable, Stream);
- function nop() {}
- function WritableState(options, stream, isDuplex) {
- Duplex = Duplex || require('./_stream_duplex');
- options = options || {}; // Duplex streams are both readable and writable, but share
- // the same options object.
- // However, some cases require setting options to different
- // values for the readable and the writable sides of the duplex stream,
- // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.
- if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream
- // contains buffers or objects.
- this.objectMode = !!options.objectMode;
- if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false
- // Note: 0 is a valid value, means that we always return false if
- // the entire buffer is not flushed immediately on write()
- this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called
- this.finalCalled = false; // drain event flag.
- this.needDrain = false; // at the start of calling end()
- this.ending = false; // when end() has been called, and returned
- this.ended = false; // when 'finish' is emitted
- this.finished = false; // has it been destroyed
- this.destroyed = false; // should we decode strings into buffers before passing to _write?
- // this is here so that some node-core streams can optimize string
- // handling at a lower level.
- var noDecode = options.decodeStrings === false;
- this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string
- // encoding is 'binary' so we have to make this configurable.
- // Everything else in the universe uses 'utf8', though.
- this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement
- // of how much we're waiting to get pushed to some underlying
- // socket or file.
- this.length = 0; // a flag to see when we're in the middle of a write.
- this.writing = false; // when true all writes will be buffered until .uncork() call
- this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,
- // or on a later tick. We set this to true at first, because any
- // actions that shouldn't happen until "later" should generally also
- // not happen before the first write call.
- this.sync = true; // a flag to know if we're processing previously buffered items, which
- // may call the _write() callback in the same tick, so that we don't
- // end up in an overlapped onwrite situation.
- this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)
- this.onwrite = function (er) {
- onwrite(stream, er);
- }; // the callback that the user supplies to write(chunk,encoding,cb)
- this.writecb = null; // the amount that is being written when _write is called.
- this.writelen = 0;
- this.bufferedRequest = null;
- this.lastBufferedRequest = null; // number of pending user-supplied write callbacks
- // this must be 0 before 'finish' can be emitted
- this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs
- // This is relevant for synchronous Transform streams
- this.prefinished = false; // True if the error was already emitted and should not be thrown again
- this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.
- this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')
- this.autoDestroy = !!options.autoDestroy; // count buffered requests
- this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always
- // one allocated and free to use, and we maintain at most two
- this.corkedRequestsFree = new CorkedRequest(this);
- }
- WritableState.prototype.getBuffer = function getBuffer() {
- var current = this.bufferedRequest;
- var out = [];
- while (current) {
- out.push(current);
- current = current.next;
- }
- return out;
- };
- (function () {
- try {
- Object.defineProperty(WritableState.prototype, 'buffer', {
- get: internalUtil.deprecate(function writableStateBufferGetter() {
- return this.getBuffer();
- }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
- });
- } catch (_) {}
- })(); // Test _writableState for inheritance to account for Duplex streams,
- // whose prototype chain only points to Readable.
- var realHasInstance;
- if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
- realHasInstance = Function.prototype[Symbol.hasInstance];
- Object.defineProperty(Writable, Symbol.hasInstance, {
- value: function value(object) {
- if (realHasInstance.call(this, object)) return true;
- if (this !== Writable) return false;
- return object && object._writableState instanceof WritableState;
- }
- });
- } else {
- realHasInstance = function realHasInstance(object) {
- return object instanceof this;
- };
- }
- function Writable(options) {
- Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.
- // `realHasInstance` is necessary because using plain `instanceof`
- // would return false, as no `_writableState` property is attached.
- // Trying to use the custom `instanceof` for Writable here will also break the
- // Node.js LazyTransform implementation, which has a non-trivial getter for
- // `_writableState` that would lead to infinite recursion.
- // Checking for a Stream.Duplex instance is faster here instead of inside
- // the WritableState constructor, at least with V8 6.5
- var isDuplex = this instanceof Duplex;
- if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);
- this._writableState = new WritableState(options, this, isDuplex); // legacy.
- this.writable = true;
- if (options) {
- if (typeof options.write === 'function') this._write = options.write;
- if (typeof options.writev === 'function') this._writev = options.writev;
- if (typeof options.destroy === 'function') this._destroy = options.destroy;
- if (typeof options.final === 'function') this._final = options.final;
- }
- Stream.call(this);
- } // Otherwise people can pipe Writable streams, which is just wrong.
- Writable.prototype.pipe = function () {
- errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());
- };
- function writeAfterEnd(stream, cb) {
- var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb
- errorOrDestroy(stream, er);
- process.nextTick(cb, er);
- } // Checks that a user-supplied chunk is valid, especially for the particular
- // mode the stream is in. Currently this means that `null` is never accepted
- // and undefined/non-string values are only allowed in object mode.
- function validChunk(stream, state, chunk, cb) {
- var er;
- if (chunk === null) {
- er = new ERR_STREAM_NULL_VALUES();
- } else if (typeof chunk !== 'string' && !state.objectMode) {
- er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);
- }
- if (er) {
- errorOrDestroy(stream, er);
- process.nextTick(cb, er);
- return false;
- }
- return true;
- }
- Writable.prototype.write = function (chunk, encoding, cb) {
- var state = this._writableState;
- var ret = false;
- var isBuf = !state.objectMode && _isUint8Array(chunk);
- if (isBuf && !Buffer.isBuffer(chunk)) {
- chunk = _uint8ArrayToBuffer(chunk);
- }
- if (typeof encoding === 'function') {
- cb = encoding;
- encoding = null;
- }
- if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
- if (typeof cb !== 'function') cb = nop;
- if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
- state.pendingcb++;
- ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
- }
- return ret;
- };
- Writable.prototype.cork = function () {
- this._writableState.corked++;
- };
- Writable.prototype.uncork = function () {
- var state = this._writableState;
- if (state.corked) {
- state.corked--;
- if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
- }
- };
- Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
- // node::ParseEncoding() requires lower case.
- if (typeof encoding === 'string') encoding = encoding.toLowerCase();
- if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);
- this._writableState.defaultEncoding = encoding;
- return this;
- };
- Object.defineProperty(Writable.prototype, 'writableBuffer', {
- // making it explicit this property is not enumerable
- // because otherwise some prototype manipulation in
- // userland will fail
- enumerable: false,
- get: function get() {
- return this._writableState && this._writableState.getBuffer();
- }
- });
- function decodeChunk(state, chunk, encoding) {
- if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
- chunk = Buffer.from(chunk, encoding);
- }
- return chunk;
- }
- Object.defineProperty(Writable.prototype, 'writableHighWaterMark', {
- // making it explicit this property is not enumerable
- // because otherwise some prototype manipulation in
- // userland will fail
- enumerable: false,
- get: function get() {
- return this._writableState.highWaterMark;
- }
- }); // if we're already writing something, then just put this
- // in the queue, and wait our turn. Otherwise, call _write
- // If we return false, then we need a drain event, so set that flag.
- function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
- if (!isBuf) {
- var newChunk = decodeChunk(state, chunk, encoding);
- if (chunk !== newChunk) {
- isBuf = true;
- encoding = 'buffer';
- chunk = newChunk;
- }
- }
- var len = state.objectMode ? 1 : chunk.length;
- state.length += len;
- var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.
- if (!ret) state.needDrain = true;
- if (state.writing || state.corked) {
- var last = state.lastBufferedRequest;
- state.lastBufferedRequest = {
- chunk: chunk,
- encoding: encoding,
- isBuf: isBuf,
- callback: cb,
- next: null
- };
- if (last) {
- last.next = state.lastBufferedRequest;
- } else {
- state.bufferedRequest = state.lastBufferedRequest;
- }
- state.bufferedRequestCount += 1;
- } else {
- doWrite(stream, state, false, len, chunk, encoding, cb);
- }
- return ret;
- }
- function doWrite(stream, state, writev, len, chunk, encoding, cb) {
- state.writelen = len;
- state.writecb = cb;
- state.writing = true;
- state.sync = true;
- if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
- state.sync = false;
- }
- function onwriteError(stream, state, sync, er, cb) {
- --state.pendingcb;
- if (sync) {
- // defer the callback if we are being called synchronously
- // to avoid piling up things on the stack
- process.nextTick(cb, er); // this can emit finish, and it will always happen
- // after error
- process.nextTick(finishMaybe, stream, state);
- stream._writableState.errorEmitted = true;
- errorOrDestroy(stream, er);
- } else {
- // the caller expect this to happen before if
- // it is async
- cb(er);
- stream._writableState.errorEmitted = true;
- errorOrDestroy(stream, er); // this can emit finish, but finish must
- // always follow error
- finishMaybe(stream, state);
- }
- }
- function onwriteStateUpdate(state) {
- state.writing = false;
- state.writecb = null;
- state.length -= state.writelen;
- state.writelen = 0;
- }
- function onwrite(stream, er) {
- var state = stream._writableState;
- var sync = state.sync;
- var cb = state.writecb;
- if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();
- onwriteStateUpdate(state);
- if (er) onwriteError(stream, state, sync, er, cb);else {
- // Check if we're actually ready to finish, but don't emit yet
- var finished = needFinish(state) || stream.destroyed;
- if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
- clearBuffer(stream, state);
- }
- if (sync) {
- process.nextTick(afterWrite, stream, state, finished, cb);
- } else {
- afterWrite(stream, state, finished, cb);
- }
- }
- }
- function afterWrite(stream, state, finished, cb) {
- if (!finished) onwriteDrain(stream, state);
- state.pendingcb--;
- cb();
- finishMaybe(stream, state);
- } // Must force callback to be called on nextTick, so that we don't
- // emit 'drain' before the write() consumer gets the 'false' return
- // value, and has a chance to attach a 'drain' listener.
- function onwriteDrain(stream, state) {
- if (state.length === 0 && state.needDrain) {
- state.needDrain = false;
- stream.emit('drain');
- }
- } // if there's something in the buffer waiting, then process it
- function clearBuffer(stream, state) {
- state.bufferProcessing = true;
- var entry = state.bufferedRequest;
- if (stream._writev && entry && entry.next) {
- // Fast case, write everything using _writev()
- var l = state.bufferedRequestCount;
- var buffer = new Array(l);
- var holder = state.corkedRequestsFree;
- holder.entry = entry;
- var count = 0;
- var allBuffers = true;
- while (entry) {
- buffer[count] = entry;
- if (!entry.isBuf) allBuffers = false;
- entry = entry.next;
- count += 1;
- }
- buffer.allBuffers = allBuffers;
- doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time
- // as the hot path ends with doWrite
- state.pendingcb++;
- state.lastBufferedRequest = null;
- if (holder.next) {
- state.corkedRequestsFree = holder.next;
- holder.next = null;
- } else {
- state.corkedRequestsFree = new CorkedRequest(state);
- }
- state.bufferedRequestCount = 0;
- } else {
- // Slow case, write chunks one-by-one
- while (entry) {
- var chunk = entry.chunk;
- var encoding = entry.encoding;
- var cb = entry.callback;
- var len = state.objectMode ? 1 : chunk.length;
- doWrite(stream, state, false, len, chunk, encoding, cb);
- entry = entry.next;
- state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then
- // it means that we need to wait until it does.
- // also, that means that the chunk and cb are currently
- // being processed, so move the buffer counter past them.
- if (state.writing) {
- break;
- }
- }
- if (entry === null) state.lastBufferedRequest = null;
- }
- state.bufferedRequest = entry;
- state.bufferProcessing = false;
- }
- Writable.prototype._write = function (chunk, encoding, cb) {
- cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));
- };
- Writable.prototype._writev = null;
- Writable.prototype.end = function (chunk, encoding, cb) {
- var state = this._writableState;
- if (typeof chunk === 'function') {
- cb = chunk;
- chunk = null;
- encoding = null;
- } else if (typeof encoding === 'function') {
- cb = encoding;
- encoding = null;
- }
- if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks
- if (state.corked) {
- state.corked = 1;
- this.uncork();
- } // ignore unnecessary end() calls.
- if (!state.ending) endWritable(this, state, cb);
- return this;
- };
- Object.defineProperty(Writable.prototype, 'writableLength', {
- // making it explicit this property is not enumerable
- // because otherwise some prototype manipulation in
- // userland will fail
- enumerable: false,
- get: function get() {
- return this._writableState.length;
- }
- });
- function needFinish(state) {
- return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
- }
- function callFinal(stream, state) {
- stream._final(function (err) {
- state.pendingcb--;
- if (err) {
- errorOrDestroy(stream, err);
- }
- state.prefinished = true;
- stream.emit('prefinish');
- finishMaybe(stream, state);
- });
- }
- function prefinish(stream, state) {
- if (!state.prefinished && !state.finalCalled) {
- if (typeof stream._final === 'function' && !state.destroyed) {
- state.pendingcb++;
- state.finalCalled = true;
- process.nextTick(callFinal, stream, state);
- } else {
- state.prefinished = true;
- stream.emit('prefinish');
- }
- }
- }
- function finishMaybe(stream, state) {
- var need = needFinish(state);
- if (need) {
- prefinish(stream, state);
- if (state.pendingcb === 0) {
- state.finished = true;
- stream.emit('finish');
- if (state.autoDestroy) {
- // In case of duplex streams we need a way to detect
- // if the readable side is ready for autoDestroy as well
- var rState = stream._readableState;
- if (!rState || rState.autoDestroy && rState.endEmitted) {
- stream.destroy();
- }
- }
- }
- }
- return need;
- }
- function endWritable(stream, state, cb) {
- state.ending = true;
- finishMaybe(stream, state);
- if (cb) {
- if (state.finished) process.nextTick(cb);else stream.once('finish', cb);
- }
- state.ended = true;
- stream.writable = false;
- }
- function onCorkedFinish(corkReq, state, err) {
- var entry = corkReq.entry;
- corkReq.entry = null;
- while (entry) {
- var cb = entry.callback;
- state.pendingcb--;
- cb(err);
- entry = entry.next;
- } // reuse the free corkReq.
- state.corkedRequestsFree.next = corkReq;
- }
- Object.defineProperty(Writable.prototype, 'destroyed', {
- // making it explicit this property is not enumerable
- // because otherwise some prototype manipulation in
- // userland will fail
- enumerable: false,
- get: function get() {
- if (this._writableState === undefined) {
- return false;
- }
- return this._writableState.destroyed;
- },
- set: function set(value) {
- // we ignore the value if the stream
- // has not been initialized yet
- if (!this._writableState) {
- return;
- } // backward compatibility, the user is explicitly
- // managing destroyed
- this._writableState.destroyed = value;
- }
- });
- Writable.prototype.destroy = destroyImpl.destroy;
- Writable.prototype._undestroy = destroyImpl.undestroy;
- Writable.prototype._destroy = function (err, cb) {
- cb(err);
- };
- }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{"../errors":368,"./_stream_duplex":369,"./internal/streams/destroy":376,"./internal/streams/state":380,"./internal/streams/stream":381,"_process":358,"buffer":216,"inherits":278,"util-deprecate":412}],374:[function(require,module,exports){
- (function (process){
- 'use strict';
- var _Object$setPrototypeO;
- function _defineProperty(obj, key, value) {
- if (key in obj) {
- Object.defineProperty(obj, key, {
- value: value,
- enumerable: true,
- configurable: true,
- writable: true
- });
- } else {
- obj[key] = value;
- }
- return obj;
- }
- var finished = require('./end-of-stream');
- var kLastResolve = Symbol('lastResolve');
- var kLastReject = Symbol('lastReject');
- var kError = Symbol('error');
- var kEnded = Symbol('ended');
- var kLastPromise = Symbol('lastPromise');
- var kHandlePromise = Symbol('handlePromise');
- var kStream = Symbol('stream');
- function createIterResult(value, done) {
- return {
- value: value,
- done: done
- };
- }
- function readAndResolve(iter) {
- var resolve = iter[kLastResolve];
- if (resolve !== null) {
- var data = iter[kStream].read(); // we defer if data is null
- // we can be expecting either 'end' or
- // 'error'
- if (data !== null) {
- iter[kLastPromise] = null;
- iter[kLastResolve] = null;
- iter[kLastReject] = null;
- resolve(createIterResult(data, false));
- }
- }
- }
- function onReadable(iter) {
- // we wait for the next tick, because it might
- // emit an error with process.nextTick
- process.nextTick(readAndResolve, iter);
- }
- function wrapForNext(lastPromise, iter) {
- return function (resolve, reject) {
- lastPromise.then(function () {
- if (iter[kEnded]) {
- resolve(createIterResult(undefined, true));
- return;
- }
- iter[kHandlePromise](resolve, reject);
- }, reject);
- };
- }
- var AsyncIteratorPrototype = Object.getPrototypeOf(function () {});
- var ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {
- get stream() {
- return this[kStream];
- },
- next: function next() {
- var _this = this; // if we have detected an error in the meanwhile
- // reject straight away
- var error = this[kError];
- if (error !== null) {
- return Promise.reject(error);
- }
- if (this[kEnded]) {
- return Promise.resolve(createIterResult(undefined, true));
- }
- if (this[kStream].destroyed) {
- // We need to defer via nextTick because if .destroy(err) is
- // called, the error will be emitted via nextTick, and
- // we cannot guarantee that there is no error lingering around
- // waiting to be emitted.
- return new Promise(function (resolve, reject) {
- process.nextTick(function () {
- if (_this[kError]) {
- reject(_this[kError]);
- } else {
- resolve(createIterResult(undefined, true));
- }
- });
- });
- } // if we have multiple next() calls
- // we will wait for the previous Promise to finish
- // this logic is optimized to support for await loops,
- // where next() is only called once at a time
- var lastPromise = this[kLastPromise];
- var promise;
- if (lastPromise) {
- promise = new Promise(wrapForNext(lastPromise, this));
- } else {
- // fast path needed to support multiple this.push()
- // without triggering the next() queue
- var data = this[kStream].read();
- if (data !== null) {
- return Promise.resolve(createIterResult(data, false));
- }
- promise = new Promise(this[kHandlePromise]);
- }
- this[kLastPromise] = promise;
- return promise;
- }
- }, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {
- return this;
- }), _defineProperty(_Object$setPrototypeO, "return", function _return() {
- var _this2 = this; // destroy(err, cb) is a private API
- // we can guarantee we have that here, because we control the
- // Readable class this is attached to
- return new Promise(function (resolve, reject) {
- _this2[kStream].destroy(null, function (err) {
- if (err) {
- reject(err);
- return;
- }
- resolve(createIterResult(undefined, true));
- });
- });
- }), _Object$setPrototypeO), AsyncIteratorPrototype);
- var createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {
- var _Object$create;
- var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {
- value: stream,
- writable: true
- }), _defineProperty(_Object$create, kLastResolve, {
- value: null,
- writable: true
- }), _defineProperty(_Object$create, kLastReject, {
- value: null,
- writable: true
- }), _defineProperty(_Object$create, kError, {
- value: null,
- writable: true
- }), _defineProperty(_Object$create, kEnded, {
- value: stream._readableState.endEmitted,
- writable: true
- }), _defineProperty(_Object$create, kHandlePromise, {
- value: function value(resolve, reject) {
- var data = iterator[kStream].read();
- if (data) {
- iterator[kLastPromise] = null;
- iterator[kLastResolve] = null;
- iterator[kLastReject] = null;
- resolve(createIterResult(data, false));
- } else {
- iterator[kLastResolve] = resolve;
- iterator[kLastReject] = reject;
- }
- },
- writable: true
- }), _Object$create));
- iterator[kLastPromise] = null;
- finished(stream, function (err) {
- if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {
- var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise
- // returned by next() and store the error
- if (reject !== null) {
- iterator[kLastPromise] = null;
- iterator[kLastResolve] = null;
- iterator[kLastReject] = null;
- reject(err);
- }
- iterator[kError] = err;
- return;
- }
- var resolve = iterator[kLastResolve];
- if (resolve !== null) {
- iterator[kLastPromise] = null;
- iterator[kLastResolve] = null;
- iterator[kLastReject] = null;
- resolve(createIterResult(undefined, true));
- }
- iterator[kEnded] = true;
- });
- stream.on('readable', onReadable.bind(null, iterator));
- return iterator;
- };
- module.exports = createReadableStreamAsyncIterator;
- }).call(this,require('_process'))
- },{"./end-of-stream":377,"_process":358}],375:[function(require,module,exports){
- 'use strict';
- function ownKeys(object, enumerableOnly) {
- var keys = Object.keys(object);
- if (Object.getOwnPropertySymbols) {
- var symbols = Object.getOwnPropertySymbols(object);
- if (enumerableOnly) symbols = symbols.filter(function (sym) {
- return Object.getOwnPropertyDescriptor(object, sym).enumerable;
- });
- keys.push.apply(keys, symbols);
- }
- return keys;
- }
- function _objectSpread(target) {
- for (var i = 1; i < arguments.length; i++) {
- var source = arguments[i] != null ? arguments[i] : {};
- if (i % 2) {
- ownKeys(Object(source), true).forEach(function (key) {
- _defineProperty(target, key, source[key]);
- });
- } else if (Object.getOwnPropertyDescriptors) {
- Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
- } else {
- ownKeys(Object(source)).forEach(function (key) {
- Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
- });
- }
- }
- return target;
- }
- function _defineProperty(obj, key, value) {
- if (key in obj) {
- Object.defineProperty(obj, key, {
- value: value,
- enumerable: true,
- configurable: true,
- writable: true
- });
- } else {
- obj[key] = value;
- }
- return obj;
- }
- function _classCallCheck(instance, Constructor) {
- if (!(instance instanceof Constructor)) {
- throw new TypeError("Cannot call a class as a function");
- }
- }
- function _defineProperties(target, props) {
- for (var i = 0; i < props.length; i++) {
- var descriptor = props[i];
- descriptor.enumerable = descriptor.enumerable || false;
- descriptor.configurable = true;
- if ("value" in descriptor) descriptor.writable = true;
- Object.defineProperty(target, descriptor.key, descriptor);
- }
- }
- function _createClass(Constructor, protoProps, staticProps) {
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
- if (staticProps) _defineProperties(Constructor, staticProps);
- return Constructor;
- }
- var _require = require('buffer'),
- Buffer = _require.Buffer;
- var _require2 = require('util'),
- inspect = _require2.inspect;
- var custom = inspect && inspect.custom || 'inspect';
- function copyBuffer(src, target, offset) {
- Buffer.prototype.copy.call(src, target, offset);
- }
- module.exports = /*#__PURE__*/function () {
- function BufferList() {
- _classCallCheck(this, BufferList);
- this.head = null;
- this.tail = null;
- this.length = 0;
- }
- _createClass(BufferList, [{
- key: "push",
- value: function push(v) {
- var entry = {
- data: v,
- next: null
- };
- if (this.length > 0) this.tail.next = entry;else this.head = entry;
- this.tail = entry;
- ++this.length;
- }
- }, {
- key: "unshift",
- value: function unshift(v) {
- var entry = {
- data: v,
- next: this.head
- };
- if (this.length === 0) this.tail = entry;
- this.head = entry;
- ++this.length;
- }
- }, {
- key: "shift",
- value: function shift() {
- if (this.length === 0) return;
- var ret = this.head.data;
- if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
- --this.length;
- return ret;
- }
- }, {
- key: "clear",
- value: function clear() {
- this.head = this.tail = null;
- this.length = 0;
- }
- }, {
- key: "join",
- value: function join(s) {
- if (this.length === 0) return '';
- var p = this.head;
- var ret = '' + p.data;
- while (p = p.next) {
- ret += s + p.data;
- }
- return ret;
- }
- }, {
- key: "concat",
- value: function concat(n) {
- if (this.length === 0) return Buffer.alloc(0);
- var ret = Buffer.allocUnsafe(n >>> 0);
- var p = this.head;
- var i = 0;
- while (p) {
- copyBuffer(p.data, ret, i);
- i += p.data.length;
- p = p.next;
- }
- return ret;
- } // Consumes a specified amount of bytes or characters from the buffered data.
- }, {
- key: "consume",
- value: function consume(n, hasStrings) {
- var ret;
- if (n < this.head.data.length) {
- // `slice` is the same for buffers and strings.
- ret = this.head.data.slice(0, n);
- this.head.data = this.head.data.slice(n);
- } else if (n === this.head.data.length) {
- // First chunk is a perfect match.
- ret = this.shift();
- } else {
- // Result spans more than one buffer.
- ret = hasStrings ? this._getString(n) : this._getBuffer(n);
- }
- return ret;
- }
- }, {
- key: "first",
- value: function first() {
- return this.head.data;
- } // Consumes a specified amount of characters from the buffered data.
- }, {
- key: "_getString",
- value: function _getString(n) {
- var p = this.head;
- var c = 1;
- var ret = p.data;
- n -= ret.length;
- while (p = p.next) {
- var str = p.data;
- var nb = n > str.length ? str.length : n;
- if (nb === str.length) ret += str;else ret += str.slice(0, n);
- n -= nb;
- if (n === 0) {
- if (nb === str.length) {
- ++c;
- if (p.next) this.head = p.next;else this.head = this.tail = null;
- } else {
- this.head = p;
- p.data = str.slice(nb);
- }
- break;
- }
- ++c;
- }
- this.length -= c;
- return ret;
- } // Consumes a specified amount of bytes from the buffered data.
- }, {
- key: "_getBuffer",
- value: function _getBuffer(n) {
- var ret = Buffer.allocUnsafe(n);
- var p = this.head;
- var c = 1;
- p.data.copy(ret);
- n -= p.data.length;
- while (p = p.next) {
- var buf = p.data;
- var nb = n > buf.length ? buf.length : n;
- buf.copy(ret, ret.length - n, 0, nb);
- n -= nb;
- if (n === 0) {
- if (nb === buf.length) {
- ++c;
- if (p.next) this.head = p.next;else this.head = this.tail = null;
- } else {
- this.head = p;
- p.data = buf.slice(nb);
- }
- break;
- }
- ++c;
- }
- this.length -= c;
- return ret;
- } // Make sure the linked list only shows the minimal necessary information.
- }, {
- key: custom,
- value: function value(_, options) {
- return inspect(this, _objectSpread({}, options, {
- // Only inspect one level.
- depth: 0,
- // It should not recurse.
- customInspect: false
- }));
- }
- }]);
- return BufferList;
- }();
- },{"buffer":216,"util":185}],376:[function(require,module,exports){
- (function (process){
- 'use strict'; // undocumented cb() API, needed for core, not for public API
- function destroy(err, cb) {
- var _this = this;
- var readableDestroyed = this._readableState && this._readableState.destroyed;
- var writableDestroyed = this._writableState && this._writableState.destroyed;
- if (readableDestroyed || writableDestroyed) {
- if (cb) {
- cb(err);
- } else if (err) {
- if (!this._writableState) {
- process.nextTick(emitErrorNT, this, err);
- } else if (!this._writableState.errorEmitted) {
- this._writableState.errorEmitted = true;
- process.nextTick(emitErrorNT, this, err);
- }
- }
- return this;
- } // we set destroyed to true before firing error callbacks in order
- // to make it re-entrance safe in case destroy() is called within callbacks
- if (this._readableState) {
- this._readableState.destroyed = true;
- } // if this is a duplex stream mark the writable part as destroyed as well
- if (this._writableState) {
- this._writableState.destroyed = true;
- }
- this._destroy(err || null, function (err) {
- if (!cb && err) {
- if (!_this._writableState) {
- process.nextTick(emitErrorAndCloseNT, _this, err);
- } else if (!_this._writableState.errorEmitted) {
- _this._writableState.errorEmitted = true;
- process.nextTick(emitErrorAndCloseNT, _this, err);
- } else {
- process.nextTick(emitCloseNT, _this);
- }
- } else if (cb) {
- process.nextTick(emitCloseNT, _this);
- cb(err);
- } else {
- process.nextTick(emitCloseNT, _this);
- }
- });
- return this;
- }
- function emitErrorAndCloseNT(self, err) {
- emitErrorNT(self, err);
- emitCloseNT(self);
- }
- function emitCloseNT(self) {
- if (self._writableState && !self._writableState.emitClose) return;
- if (self._readableState && !self._readableState.emitClose) return;
- self.emit('close');
- }
- function undestroy() {
- if (this._readableState) {
- this._readableState.destroyed = false;
- this._readableState.reading = false;
- this._readableState.ended = false;
- this._readableState.endEmitted = false;
- }
- if (this._writableState) {
- this._writableState.destroyed = false;
- this._writableState.ended = false;
- this._writableState.ending = false;
- this._writableState.finalCalled = false;
- this._writableState.prefinished = false;
- this._writableState.finished = false;
- this._writableState.errorEmitted = false;
- }
- }
- function emitErrorNT(self, err) {
- self.emit('error', err);
- }
- function errorOrDestroy(stream, err) {
- // We have tests that rely on errors being emitted
- // in the same tick, so changing this is semver major.
- // For now when you opt-in to autoDestroy we allow
- // the error to be emitted nextTick. In a future
- // semver major update we should change the default to this.
- var rState = stream._readableState;
- var wState = stream._writableState;
- if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);
- }
- module.exports = {
- destroy: destroy,
- undestroy: undestroy,
- errorOrDestroy: errorOrDestroy
- };
- }).call(this,require('_process'))
- },{"_process":358}],377:[function(require,module,exports){
- // Ported from https://github.com/mafintosh/end-of-stream with
- // permission from the author, Mathias Buus (@mafintosh).
- 'use strict';
- var ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;
- function once(callback) {
- var called = false;
- return function () {
- if (called) return;
- called = true;
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
- args[_key] = arguments[_key];
- }
- callback.apply(this, args);
- };
- }
- function noop() {}
- function isRequest(stream) {
- return stream.setHeader && typeof stream.abort === 'function';
- }
- function eos(stream, opts, callback) {
- if (typeof opts === 'function') return eos(stream, null, opts);
- if (!opts) opts = {};
- callback = once(callback || noop);
- var readable = opts.readable || opts.readable !== false && stream.readable;
- var writable = opts.writable || opts.writable !== false && stream.writable;
- var onlegacyfinish = function onlegacyfinish() {
- if (!stream.writable) onfinish();
- };
- var writableEnded = stream._writableState && stream._writableState.finished;
- var onfinish = function onfinish() {
- writable = false;
- writableEnded = true;
- if (!readable) callback.call(stream);
- };
- var readableEnded = stream._readableState && stream._readableState.endEmitted;
- var onend = function onend() {
- readable = false;
- readableEnded = true;
- if (!writable) callback.call(stream);
- };
- var onerror = function onerror(err) {
- callback.call(stream, err);
- };
- var onclose = function onclose() {
- var err;
- if (readable && !readableEnded) {
- if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();
- return callback.call(stream, err);
- }
- if (writable && !writableEnded) {
- if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();
- return callback.call(stream, err);
- }
- };
- var onrequest = function onrequest() {
- stream.req.on('finish', onfinish);
- };
- if (isRequest(stream)) {
- stream.on('complete', onfinish);
- stream.on('abort', onclose);
- if (stream.req) onrequest();else stream.on('request', onrequest);
- } else if (writable && !stream._writableState) {
- // legacy streams
- stream.on('end', onlegacyfinish);
- stream.on('close', onlegacyfinish);
- }
- stream.on('end', onend);
- stream.on('finish', onfinish);
- if (opts.error !== false) stream.on('error', onerror);
- stream.on('close', onclose);
- return function () {
- stream.removeListener('complete', onfinish);
- stream.removeListener('abort', onclose);
- stream.removeListener('request', onrequest);
- if (stream.req) stream.req.removeListener('finish', onfinish);
- stream.removeListener('end', onlegacyfinish);
- stream.removeListener('close', onlegacyfinish);
- stream.removeListener('finish', onfinish);
- stream.removeListener('end', onend);
- stream.removeListener('error', onerror);
- stream.removeListener('close', onclose);
- };
- }
- module.exports = eos;
- },{"../../../errors":368}],378:[function(require,module,exports){
- "use strict";
- module.exports = function () {
- throw new Error('Readable.from is not available in the browser');
- };
- },{}],379:[function(require,module,exports){
- // Ported from https://github.com/mafintosh/pump with
- // permission from the author, Mathias Buus (@mafintosh).
- 'use strict';
- var eos;
- function once(callback) {
- var called = false;
- return function () {
- if (called) return;
- called = true;
- callback.apply(void 0, arguments);
- };
- }
- var _require$codes = require('../../../errors').codes,
- ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,
- ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;
- function noop(err) {
- // Rethrow the error if it exists to avoid swallowing it
- if (err) throw err;
- }
- function isRequest(stream) {
- return stream.setHeader && typeof stream.abort === 'function';
- }
- function destroyer(stream, reading, writing, callback) {
- callback = once(callback);
- var closed = false;
- stream.on('close', function () {
- closed = true;
- });
- if (eos === undefined) eos = require('./end-of-stream');
- eos(stream, {
- readable: reading,
- writable: writing
- }, function (err) {
- if (err) return callback(err);
- closed = true;
- callback();
- });
- var destroyed = false;
- return function (err) {
- if (closed) return;
- if (destroyed) return;
- destroyed = true; // request.destroy just do .end - .abort is what we want
- if (isRequest(stream)) return stream.abort();
- if (typeof stream.destroy === 'function') return stream.destroy();
- callback(err || new ERR_STREAM_DESTROYED('pipe'));
- };
- }
- function call(fn) {
- fn();
- }
- function pipe(from, to) {
- return from.pipe(to);
- }
- function popCallback(streams) {
- if (!streams.length) return noop;
- if (typeof streams[streams.length - 1] !== 'function') return noop;
- return streams.pop();
- }
- function pipeline() {
- for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {
- streams[_key] = arguments[_key];
- }
- var callback = popCallback(streams);
- if (Array.isArray(streams[0])) streams = streams[0];
- if (streams.length < 2) {
- throw new ERR_MISSING_ARGS('streams');
- }
- var error;
- var destroys = streams.map(function (stream, i) {
- var reading = i < streams.length - 1;
- var writing = i > 0;
- return destroyer(stream, reading, writing, function (err) {
- if (!error) error = err;
- if (err) destroys.forEach(call);
- if (reading) return;
- destroys.forEach(call);
- callback(error);
- });
- });
- return streams.reduce(pipe);
- }
- module.exports = pipeline;
- },{"../../../errors":368,"./end-of-stream":377}],380:[function(require,module,exports){
- 'use strict';
- var ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;
- function highWaterMarkFrom(options, isDuplex, duplexKey) {
- return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;
- }
- function getHighWaterMark(state, options, duplexKey, isDuplex) {
- var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);
- if (hwm != null) {
- if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {
- var name = isDuplex ? duplexKey : 'highWaterMark';
- throw new ERR_INVALID_OPT_VALUE(name, hwm);
- }
- return Math.floor(hwm);
- } // Default value
- return state.objectMode ? 16 : 16 * 1024;
- }
- module.exports = {
- getHighWaterMark: getHighWaterMark
- };
- },{"../../../errors":368}],381:[function(require,module,exports){
- "use strict";
- module.exports = require('events').EventEmitter;
- },{"events":258}],382:[function(require,module,exports){
- "use strict";
- exports = module.exports = require('./lib/_stream_readable.js');
- exports.Stream = exports;
- exports.Readable = exports;
- exports.Writable = require('./lib/_stream_writable.js');
- exports.Duplex = require('./lib/_stream_duplex.js');
- exports.Transform = require('./lib/_stream_transform.js');
- exports.PassThrough = require('./lib/_stream_passthrough.js');
- exports.finished = require('./lib/internal/streams/end-of-stream.js');
- exports.pipeline = require('./lib/internal/streams/pipeline.js');
- },{"./lib/_stream_duplex.js":369,"./lib/_stream_passthrough.js":370,"./lib/_stream_readable.js":371,"./lib/_stream_transform.js":372,"./lib/_stream_writable.js":373,"./lib/internal/streams/end-of-stream.js":377,"./lib/internal/streams/pipeline.js":379}],383:[function(require,module,exports){
- 'use strict';
- var Buffer = require('buffer').Buffer;
- var inherits = require('inherits');
- var HashBase = require('hash-base');
- var ARRAY16 = new Array(16);
- var zl = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13];
- var zr = [5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11];
- var sl = [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6];
- var sr = [8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11];
- var hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e];
- var hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000];
- function RIPEMD160() {
- HashBase.call(this, 64); // state
- this._a = 0x67452301;
- this._b = 0xefcdab89;
- this._c = 0x98badcfe;
- this._d = 0x10325476;
- this._e = 0xc3d2e1f0;
- }
- inherits(RIPEMD160, HashBase);
- RIPEMD160.prototype._update = function () {
- var words = ARRAY16;
- for (var j = 0; j < 16; ++j) {
- words[j] = this._block.readInt32LE(j * 4);
- }
- var al = this._a | 0;
- var bl = this._b | 0;
- var cl = this._c | 0;
- var dl = this._d | 0;
- var el = this._e | 0;
- var ar = this._a | 0;
- var br = this._b | 0;
- var cr = this._c | 0;
- var dr = this._d | 0;
- var er = this._e | 0; // computation
- for (var i = 0; i < 80; i += 1) {
- var tl;
- var tr;
- if (i < 16) {
- tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i]);
- tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i]);
- } else if (i < 32) {
- tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i]);
- tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i]);
- } else if (i < 48) {
- tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i]);
- tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i]);
- } else if (i < 64) {
- tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i]);
- tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i]);
- } else {
- // if (i<80) {
- tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i]);
- tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i]);
- }
- al = el;
- el = dl;
- dl = rotl(cl, 10);
- cl = bl;
- bl = tl;
- ar = er;
- er = dr;
- dr = rotl(cr, 10);
- cr = br;
- br = tr;
- } // update state
- var t = this._b + cl + dr | 0;
- this._b = this._c + dl + er | 0;
- this._c = this._d + el + ar | 0;
- this._d = this._e + al + br | 0;
- this._e = this._a + bl + cr | 0;
- this._a = t;
- };
- RIPEMD160.prototype._digest = function () {
- // create padding and handle blocks
- this._block[this._blockOffset++] = 0x80;
- if (this._blockOffset > 56) {
- this._block.fill(0, this._blockOffset, 64);
- this._update();
- this._blockOffset = 0;
- }
- this._block.fill(0, this._blockOffset, 56);
- this._block.writeUInt32LE(this._length[0], 56);
- this._block.writeUInt32LE(this._length[1], 60);
- this._update(); // produce result
- var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20);
- buffer.writeInt32LE(this._a, 0);
- buffer.writeInt32LE(this._b, 4);
- buffer.writeInt32LE(this._c, 8);
- buffer.writeInt32LE(this._d, 12);
- buffer.writeInt32LE(this._e, 16);
- return buffer;
- };
- function rotl(x, n) {
- return x << n | x >>> 32 - n;
- }
- function fn1(a, b, c, d, e, m, k, s) {
- return rotl(a + (b ^ c ^ d) + m + k | 0, s) + e | 0;
- }
- function fn2(a, b, c, d, e, m, k, s) {
- return rotl(a + (b & c | ~b & d) + m + k | 0, s) + e | 0;
- }
- function fn3(a, b, c, d, e, m, k, s) {
- return rotl(a + ((b | ~c) ^ d) + m + k | 0, s) + e | 0;
- }
- function fn4(a, b, c, d, e, m, k, s) {
- return rotl(a + (b & d | c & ~d) + m + k | 0, s) + e | 0;
- }
- function fn5(a, b, c, d, e, m, k, s) {
- return rotl(a + (b ^ (c | ~d)) + m + k | 0, s) + e | 0;
- }
- module.exports = RIPEMD160;
- },{"buffer":216,"hash-base":261,"inherits":278}],384:[function(require,module,exports){
- "use strict";
- /* eslint-disable node/no-deprecated-api */
- var buffer = require('buffer');
- var Buffer = buffer.Buffer; // alternative to using Object.keys for old browsers
- function copyProps(src, dst) {
- for (var key in src) {
- dst[key] = src[key];
- }
- }
- if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
- module.exports = buffer;
- } else {
- // Copy properties from require('buffer')
- copyProps(buffer, exports);
- exports.Buffer = SafeBuffer;
- }
- function SafeBuffer(arg, encodingOrOffset, length) {
- return Buffer(arg, encodingOrOffset, length);
- } // Copy static methods from Buffer
- copyProps(Buffer, SafeBuffer);
- SafeBuffer.from = function (arg, encodingOrOffset, length) {
- if (typeof arg === 'number') {
- throw new TypeError('Argument must not be a number');
- }
- return Buffer(arg, encodingOrOffset, length);
- };
- SafeBuffer.alloc = function (size, fill, encoding) {
- if (typeof size !== 'number') {
- throw new TypeError('Argument must be a number');
- }
- var buf = Buffer(size);
- if (fill !== undefined) {
- if (typeof encoding === 'string') {
- buf.fill(fill, encoding);
- } else {
- buf.fill(fill);
- }
- } else {
- buf.fill(0);
- }
- return buf;
- };
- SafeBuffer.allocUnsafe = function (size) {
- if (typeof size !== 'number') {
- throw new TypeError('Argument must be a number');
- }
- return Buffer(size);
- };
- SafeBuffer.allocUnsafeSlow = function (size) {
- if (typeof size !== 'number') {
- throw new TypeError('Argument must be a number');
- }
- return buffer.SlowBuffer(size);
- };
- },{"buffer":216}],385:[function(require,module,exports){
- (function (process){
- /* eslint-disable node/no-deprecated-api */
- 'use strict';
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- var buffer = require('buffer');
- var Buffer = buffer.Buffer;
- var safer = {};
- var key;
- for (key in buffer) {
- if (!buffer.hasOwnProperty(key)) continue;
- if (key === 'SlowBuffer' || key === 'Buffer') continue;
- safer[key] = buffer[key];
- }
- var Safer = safer.Buffer = {};
- for (key in Buffer) {
- if (!Buffer.hasOwnProperty(key)) continue;
- if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue;
- Safer[key] = Buffer[key];
- }
- safer.Buffer.prototype = Buffer.prototype;
- if (!Safer.from || Safer.from === Uint8Array.from) {
- Safer.from = function (value, encodingOrOffset, length) {
- if (typeof value === 'number') {
- throw new TypeError('The "value" argument must not be of type number. Received type ' + _typeof(value));
- }
- if (value && typeof value.length === 'undefined') {
- throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + _typeof(value));
- }
- return Buffer(value, encodingOrOffset, length);
- };
- }
- if (!Safer.alloc) {
- Safer.alloc = function (size, fill, encoding) {
- if (typeof size !== 'number') {
- throw new TypeError('The "size" argument must be of type number. Received type ' + _typeof(size));
- }
- if (size < 0 || size >= 2 * (1 << 30)) {
- throw new RangeError('The value "' + size + '" is invalid for option "size"');
- }
- var buf = Buffer(size);
- if (!fill || fill.length === 0) {
- buf.fill(0);
- } else if (typeof encoding === 'string') {
- buf.fill(fill, encoding);
- } else {
- buf.fill(fill);
- }
- return buf;
- };
- }
- if (!safer.kStringMaxLength) {
- try {
- safer.kStringMaxLength = process.binding('buffer').kStringMaxLength;
- } catch (e) {// we can't determine kStringMaxLength in environments where process.binding
- // is unsupported, so let's not set it
- }
- }
- if (!safer.constants) {
- safer.constants = {
- MAX_LENGTH: safer.kMaxLength
- };
- if (safer.kStringMaxLength) {
- safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength;
- }
- }
- module.exports = safer;
- }).call(this,require('_process'))
- },{"_process":358,"buffer":216}],386:[function(require,module,exports){
- "use strict";
- function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
- function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
- function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
- function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var ed5 = require("xmlchars/xml/1.0/ed5");
- var ed2 = require("xmlchars/xml/1.1/ed2");
- var NSed3 = require("xmlchars/xmlns/1.0/ed3");
- var isS = ed5.isS;
- var isChar10 = ed5.isChar;
- var isNameStartChar = ed5.isNameStartChar;
- var isNameChar = ed5.isNameChar;
- var S_LIST = ed5.S_LIST;
- var NAME_RE = ed5.NAME_RE;
- var isChar11 = ed2.isChar;
- var isNCNameStartChar = NSed3.isNCNameStartChar;
- var isNCNameChar = NSed3.isNCNameChar;
- var NC_NAME_RE = NSed3.NC_NAME_RE;
- var XML_NAMESPACE = "http://www.w3.org/XML/1998/namespace";
- var XMLNS_NAMESPACE = "http://www.w3.org/2000/xmlns/";
- var rootNS = {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- __proto__: null,
- xml: XML_NAMESPACE,
- xmlns: XMLNS_NAMESPACE
- };
- var XML_ENTITIES = {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- __proto__: null,
- amp: "&",
- gt: ">",
- lt: "<",
- quot: "\"",
- apos: "'"
- }; // EOC: end-of-chunk
- var EOC = -1;
- var NL_LIKE = -2;
- var S_BEGIN = 0; // Initial state.
- var S_BEGIN_WHITESPACE = 1; // leading whitespace
- var S_DOCTYPE = 2; // <!DOCTYPE
- var S_DOCTYPE_QUOTE = 3; // <!DOCTYPE "//blah
- var S_DTD = 4; // <!DOCTYPE "//blah" [ ...
- var S_DTD_QUOTED = 5; // <!DOCTYPE "//blah" [ "foo
- var S_DTD_OPEN_WAKA = 6;
- var S_DTD_OPEN_WAKA_BANG = 7;
- var S_DTD_COMMENT = 8; // <!--
- var S_DTD_COMMENT_ENDING = 9; // <!-- blah -
- var S_DTD_COMMENT_ENDED = 10; // <!-- blah --
- var S_DTD_PI = 11; // <?
- var S_DTD_PI_ENDING = 12; // <?hi "there" ?
- var S_TEXT = 13; // general stuff
- var S_ENTITY = 14; // & and such
- var S_OPEN_WAKA = 15; // <
- var S_OPEN_WAKA_BANG = 16; // <!...
- var S_COMMENT = 17; // <!--
- var S_COMMENT_ENDING = 18; // <!-- blah -
- var S_COMMENT_ENDED = 19; // <!-- blah --
- var S_CDATA = 20; // <![CDATA[ something
- var S_CDATA_ENDING = 21; // ]
- var S_CDATA_ENDING_2 = 22; // ]]
- var S_PI_FIRST_CHAR = 23; // <?hi, first char
- var S_PI_REST = 24; // <?hi, rest of the name
- var S_PI_BODY = 25; // <?hi there
- var S_PI_ENDING = 26; // <?hi "there" ?
- var S_XML_DECL_NAME_START = 27; // <?xml
- var S_XML_DECL_NAME = 28; // <?xml foo
- var S_XML_DECL_EQ = 29; // <?xml foo=
- var S_XML_DECL_VALUE_START = 30; // <?xml foo=
- var S_XML_DECL_VALUE = 31; // <?xml foo="bar"
- var S_XML_DECL_SEPARATOR = 32; // <?xml foo="bar"
- var S_XML_DECL_ENDING = 33; // <?xml ... ?
- var S_OPEN_TAG = 34; // <strong
- var S_OPEN_TAG_SLASH = 35; // <strong /
- var S_ATTRIB = 36; // <a
- var S_ATTRIB_NAME = 37; // <a foo
- var S_ATTRIB_NAME_SAW_WHITE = 38; // <a foo _
- var S_ATTRIB_VALUE = 39; // <a foo=
- var S_ATTRIB_VALUE_QUOTED = 40; // <a foo="bar
- var S_ATTRIB_VALUE_CLOSED = 41; // <a foo="bar"
- var S_ATTRIB_VALUE_UNQUOTED = 42; // <a foo=bar
- var S_CLOSE_TAG = 43; // </a
- var S_CLOSE_TAG_SAW_WHITE = 44; // </a >
- var TAB = 9;
- var NL = 0xA;
- var CR = 0xD;
- var SPACE = 0x20;
- var BANG = 0x21;
- var DQUOTE = 0x22;
- var AMP = 0x26;
- var SQUOTE = 0x27;
- var MINUS = 0x2D;
- var FORWARD_SLASH = 0x2F;
- var SEMICOLON = 0x3B;
- var LESS = 0x3C;
- var EQUAL = 0x3D;
- var GREATER = 0x3E;
- var QUESTION = 0x3F;
- var OPEN_BRACKET = 0x5B;
- var CLOSE_BRACKET = 0x5D;
- var NEL = 0x85;
- var LS = 0x2028; // Line Separator
- var isQuote = function isQuote(c) {
- return c === DQUOTE || c === SQUOTE;
- };
- var QUOTES = [DQUOTE, SQUOTE];
- var DOCTYPE_TERMINATOR = [].concat(QUOTES, [OPEN_BRACKET, GREATER]);
- var DTD_TERMINATOR = [].concat(QUOTES, [LESS, CLOSE_BRACKET]);
- var XML_DECL_NAME_TERMINATOR = [EQUAL, QUESTION].concat(_toConsumableArray(S_LIST));
- var ATTRIB_VALUE_UNQUOTED_TERMINATOR = [].concat(_toConsumableArray(S_LIST), [GREATER, AMP, LESS]);
- function nsPairCheck(parser, prefix, uri) {
- switch (prefix) {
- case "xml":
- if (uri !== XML_NAMESPACE) {
- parser.fail("xml prefix must be bound to ".concat(XML_NAMESPACE, "."));
- }
- break;
- case "xmlns":
- if (uri !== XMLNS_NAMESPACE) {
- parser.fail("xmlns prefix must be bound to ".concat(XMLNS_NAMESPACE, "."));
- }
- break;
- default:
- }
- switch (uri) {
- case XMLNS_NAMESPACE:
- parser.fail(prefix === "" ? "the default namespace may not be set to ".concat(uri, ".") : "may not assign a prefix (even \"xmlns\") to the URI ".concat(XMLNS_NAMESPACE, "."));
- break;
- case XML_NAMESPACE:
- switch (prefix) {
- case "xml":
- // Assinging the XML namespace to "xml" is fine.
- break;
- case "":
- parser.fail("the default namespace may not be set to ".concat(uri, "."));
- break;
- default:
- parser.fail("may not assign the xml namespace to another prefix.");
- }
- break;
- default:
- }
- }
- function nsMappingCheck(parser, mapping) {
- for (var _i = 0, _Object$keys = Object.keys(mapping); _i < _Object$keys.length; _i++) {
- var local = _Object$keys[_i];
- nsPairCheck(parser, local, mapping[local]);
- }
- }
- var isNCName = function isNCName(name) {
- return NC_NAME_RE.test(name);
- };
- var isName = function isName(name) {
- return NAME_RE.test(name);
- };
- var FORBIDDEN_START = 0;
- var FORBIDDEN_BRACKET = 1;
- var FORBIDDEN_BRACKET_BRACKET = 2;
- /**
- * The list of supported events.
- */
- exports.EVENTS = ["xmldecl", "text", "processinginstruction", "doctype", "comment", "opentagstart", "attribute", "opentag", "closetag", "cdata", "error", "end", "ready"];
- var EVENT_NAME_TO_HANDLER_NAME = {
- xmldecl: "xmldeclHandler",
- text: "textHandler",
- processinginstruction: "piHandler",
- doctype: "doctypeHandler",
- comment: "commentHandler",
- opentagstart: "openTagStartHandler",
- attribute: "attributeHandler",
- opentag: "openTagHandler",
- closetag: "closeTagHandler",
- cdata: "cdataHandler",
- error: "errorHandler",
- end: "endHandler",
- ready: "readyHandler"
- };
- var SaxesParser = /*#__PURE__*/function () {
- /**
- * @param opt The parser options.
- */
- function SaxesParser(opt) {
- _classCallCheck(this, SaxesParser);
- this.opt = opt !== null && opt !== void 0 ? opt : {};
- this.fragmentOpt = !!this.opt.fragment;
- var xmlnsOpt = this.xmlnsOpt = !!this.opt.xmlns;
- this.trackPosition = this.opt.position !== false;
- this.fileName = this.opt.fileName;
- if (xmlnsOpt) {
- // This is the function we use to perform name checks on PIs and entities.
- // When namespaces are used, colons are not allowed in PI target names or
- // entity names. So the check depends on whether namespaces are used. See:
- //
- // https://www.w3.org/XML/xml-names-19990114-errata.html
- // NE08
- //
- this.nameStartCheck = isNCNameStartChar;
- this.nameCheck = isNCNameChar;
- this.isName = isNCName; // eslint-disable-next-line @typescript-eslint/unbound-method
- this.processAttribs = this.processAttribsNS; // eslint-disable-next-line @typescript-eslint/unbound-method
- this.pushAttrib = this.pushAttribNS; // eslint-disable-next-line @typescript-eslint/no-explicit-any
- this.ns = Object.assign({
- __proto__: null
- }, rootNS);
- var additional = this.opt.additionalNamespaces;
- if (additional != null) {
- nsMappingCheck(this, additional);
- Object.assign(this.ns, additional);
- }
- } else {
- this.nameStartCheck = isNameStartChar;
- this.nameCheck = isNameChar;
- this.isName = isName; // eslint-disable-next-line @typescript-eslint/unbound-method
- this.processAttribs = this.processAttribsPlain; // eslint-disable-next-line @typescript-eslint/unbound-method
- this.pushAttrib = this.pushAttribPlain;
- } //
- // The order of the members in this table needs to correspond to the state
- // numbers given to the states that correspond to the methods being recorded
- // here.
- //
- this.stateTable = [
- /* eslint-disable @typescript-eslint/unbound-method */
- this.sBegin, this.sBeginWhitespace, this.sDoctype, this.sDoctypeQuote, this.sDTD, this.sDTDQuoted, this.sDTDOpenWaka, this.sDTDOpenWakaBang, this.sDTDComment, this.sDTDCommentEnding, this.sDTDCommentEnded, this.sDTDPI, this.sDTDPIEnding, this.sText, this.sEntity, this.sOpenWaka, this.sOpenWakaBang, this.sComment, this.sCommentEnding, this.sCommentEnded, this.sCData, this.sCDataEnding, this.sCDataEnding2, this.sPIFirstChar, this.sPIRest, this.sPIBody, this.sPIEnding, this.sXMLDeclNameStart, this.sXMLDeclName, this.sXMLDeclEq, this.sXMLDeclValueStart, this.sXMLDeclValue, this.sXMLDeclSeparator, this.sXMLDeclEnding, this.sOpenTag, this.sOpenTagSlash, this.sAttrib, this.sAttribName, this.sAttribNameSawWhite, this.sAttribValue, this.sAttribValueQuoted, this.sAttribValueClosed, this.sAttribValueUnquoted, this.sCloseTag, this.sCloseTagSawWhite];
- this._init();
- }
- /**
- * Indicates whether or not the parser is closed. If ``true``, wait for
- * the ``ready`` event to write again.
- */
- _createClass(SaxesParser, [{
- key: "_init",
- value: function _init() {
- var _a;
- this.openWakaBang = "";
- this.text = "";
- this.name = "";
- this.piTarget = "";
- this.entity = "";
- this.q = null;
- this.tags = [];
- this.tag = null;
- this.topNS = null;
- this.chunk = "";
- this.chunkPosition = 0;
- this.i = 0;
- this.prevI = 0;
- this.carriedFromPrevious = undefined;
- this.forbiddenState = FORBIDDEN_START;
- this.attribList = []; // The logic is organized so as to minimize the need to check
- // this.opt.fragment while parsing.
- var fragmentOpt = this.fragmentOpt;
- this.state = fragmentOpt ? S_TEXT : S_BEGIN; // We want these to be all true if we are dealing with a fragment.
- this.reportedTextBeforeRoot = this.reportedTextAfterRoot = this.closedRoot = this.sawRoot = fragmentOpt; // An XML declaration is intially possible only when parsing whole
- // documents.
- this.xmlDeclPossible = !fragmentOpt;
- this.xmlDeclExpects = ["version"];
- this.entityReturnState = undefined;
- var defaultXMLVersion = this.opt.defaultXMLVersion;
- if (defaultXMLVersion === undefined) {
- if (this.opt.forceXMLVersion === true) {
- throw new Error("forceXMLVersion set but defaultXMLVersion is not set");
- }
- defaultXMLVersion = "1.0";
- }
- this.setXMLVersion(defaultXMLVersion);
- this.positionAtNewLine = 0;
- this.doctype = false;
- this._closed = false;
- this.xmlDecl = {
- version: undefined,
- encoding: undefined,
- standalone: undefined
- };
- this.line = 1;
- this.column = 0;
- this.ENTITIES = Object.create(XML_ENTITIES); // eslint-disable-next-line no-unused-expressions
- (_a = this.readyHandler) === null || _a === void 0 ? void 0 : _a.call(this);
- }
- /**
- * The stream position the parser is currently looking at. This field is
- * zero-based.
- *
- * This field is not based on counting Unicode characters but is to be
- * interpreted as a plain index into a JavaScript string.
- */
- }, {
- key: "on",
- /**
- * Set an event listener on an event. The parser supports one handler per
- * event type. If you try to set an event handler over an existing handler,
- * the old handler is silently overwritten.
- *
- * @param name The event to listen to.
- *
- * @param handler The handler to set.
- */
- value: function on(name, handler) {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- this[EVENT_NAME_TO_HANDLER_NAME[name]] = handler;
- }
- /**
- * Unset an event handler.
- *
- * @parma name The event to stop listening to.
- */
- }, {
- key: "off",
- value: function off(name) {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- this[EVENT_NAME_TO_HANDLER_NAME[name]] = undefined;
- }
- /**
- * Make an error object. The error object will have a message that contains
- * the ``fileName`` option passed at the creation of the parser. If position
- * tracking was turned on, it will also have line and column number
- * information.
- *
- * @param message The message describing the error to report.
- *
- * @returns An error object with a properly formatted message.
- */
- }, {
- key: "makeError",
- value: function makeError(message) {
- var _a;
- var msg = (_a = this.fileName) !== null && _a !== void 0 ? _a : "";
- if (this.trackPosition) {
- if (msg.length > 0) {
- msg += ":";
- }
- msg += "".concat(this.line, ":").concat(this.column);
- }
- if (msg.length > 0) {
- msg += ": ";
- }
- return new Error(msg + message);
- }
- /**
- * Report a parsing error. This method is made public so that client code may
- * check for issues that are outside the scope of this project and can report
- * errors.
- *
- * @param message The error to report.
- *
- * @returns this
- */
- }, {
- key: "fail",
- value: function fail(message) {
- var err = this.makeError(message);
- var handler = this.errorHandler;
- if (handler === undefined) {
- throw err;
- } else {
- handler(err);
- }
- return this;
- }
- /**
- * Write a XML data to the parser.
- *
- * @param chunk The XML data to write.
- *
- * @returns this
- */
- }, {
- key: "write",
- value: function write(chunk) {
- if (this.closed) {
- return this.fail("cannot write after close; assign an onready handler.");
- }
- var end = false;
- if (chunk === null) {
- // We cannot return immediately because carriedFromPrevious may need
- // processing.
- end = true;
- chunk = "";
- } else if (_typeof(chunk) === "object") {
- chunk = chunk.toString();
- } // We checked if performing a pre-decomposition of the string into an array
- // of single complete characters (``Array.from(chunk)``) would be faster
- // than the current repeated calls to ``charCodeAt``. As of August 2018, it
- // isn't. (There may be Node-specific code that would perform faster than
- // ``Array.from`` but don't want to be dependent on Node.)
- if (this.carriedFromPrevious !== undefined) {
- // The previous chunk had char we must carry over.
- chunk = "".concat(this.carriedFromPrevious).concat(chunk);
- this.carriedFromPrevious = undefined;
- }
- var limit = chunk.length;
- var lastCode = chunk.charCodeAt(limit - 1);
- if (!end && ( // A trailing CR or surrogate must be carried over to the next
- // chunk.
- lastCode === CR || lastCode >= 0xD800 && lastCode <= 0xDBFF)) {
- // The chunk ends with a character that must be carried over. We cannot
- // know how to handle it until we get the next chunk or the end of the
- // stream. So save it for later.
- this.carriedFromPrevious = chunk[limit - 1];
- limit--;
- chunk = chunk.slice(0, limit);
- }
- var stateTable = this.stateTable;
- this.chunk = chunk;
- this.i = 0;
- while (this.i < limit) {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- stateTable[this.state].call(this);
- }
- this.chunkPosition += limit;
- return end ? this.end() : this;
- }
- /**
- * Close the current stream. Perform final well-formedness checks and reset
- * the parser tstate.
- *
- * @returns this
- */
- }, {
- key: "close",
- value: function close() {
- return this.write(null);
- }
- /**
- * Get a single code point out of the current chunk. This updates the current
- * position if we do position tracking.
- *
- * This is the algorithm to use for XML 1.0.
- *
- * @returns The character read.
- */
- }, {
- key: "getCode10",
- value: function getCode10() {
- var chunk = this.chunk,
- i = this.i;
- this.prevI = i; // Yes, we do this instead of doing this.i++. Doing it this way, we do not
- // read this.i again, which is a bit faster.
- this.i = i + 1;
- if (i >= chunk.length) {
- return EOC;
- } // Using charCodeAt and handling the surrogates ourselves is faster
- // than using codePointAt.
- var code = chunk.charCodeAt(i);
- this.column++;
- if (code < 0xD800) {
- if (code >= SPACE || code === TAB) {
- return code;
- }
- switch (code) {
- case NL:
- this.line++;
- this.column = 0;
- this.positionAtNewLine = this.position;
- return NL;
- case CR:
- // We may get NaN if we read past the end of the chunk, which is fine.
- if (chunk.charCodeAt(i + 1) === NL) {
- // A \r\n sequence is converted to \n so we have to skip over the
- // next character. We already know it has a size of 1 so ++ is fine
- // here.
- this.i = i + 2;
- } // Otherwise, a \r is just converted to \n, so we don't have to skip
- // ahead.
- // In either case, \r becomes \n.
- this.line++;
- this.column = 0;
- this.positionAtNewLine = this.position;
- return NL_LIKE;
- default:
- // If we get here, then code < SPACE and it is not NL CR or TAB.
- this.fail("disallowed character.");
- return code;
- }
- }
- if (code > 0xDBFF) {
- // This is a specialized version of isChar10 that takes into account
- // that in this context code > 0xDBFF and code <= 0xFFFF. So it does not
- // test cases that don't need testing.
- if (!(code >= 0xE000 && code <= 0xFFFD)) {
- this.fail("disallowed character.");
- }
- return code;
- }
- var final = 0x10000 + (code - 0xD800) * 0x400 + (chunk.charCodeAt(i + 1) - 0xDC00);
- this.i = i + 2; // This is a specialized version of isChar10 that takes into account that in
- // this context necessarily final >= 0x10000.
- if (final > 0x10FFFF) {
- this.fail("disallowed character.");
- }
- return final;
- }
- /**
- * Get a single code point out of the current chunk. This updates the current
- * position if we do position tracking.
- *
- * This is the algorithm to use for XML 1.1.
- *
- * @returns {number} The character read.
- */
- }, {
- key: "getCode11",
- value: function getCode11() {
- var chunk = this.chunk,
- i = this.i;
- this.prevI = i; // Yes, we do this instead of doing this.i++. Doing it this way, we do not
- // read this.i again, which is a bit faster.
- this.i = i + 1;
- if (i >= chunk.length) {
- return EOC;
- } // Using charCodeAt and handling the surrogates ourselves is faster
- // than using codePointAt.
- var code = chunk.charCodeAt(i);
- this.column++;
- if (code < 0xD800) {
- if (code > 0x1F && code < 0x7F || code > 0x9F && code !== LS || code === TAB) {
- return code;
- }
- switch (code) {
- case NL:
- // 0xA
- this.line++;
- this.column = 0;
- this.positionAtNewLine = this.position;
- return NL;
- case CR:
- {
- // 0xD
- // We may get NaN if we read past the end of the chunk, which is
- // fine.
- var next = chunk.charCodeAt(i + 1);
- if (next === NL || next === NEL) {
- // A CR NL or CR NEL sequence is converted to NL so we have to skip
- // over the next character. We already know it has a size of 1.
- this.i = i + 2;
- } // Otherwise, a CR is just converted to NL, no skip.
- }
- /* yes, fall through */
- case NEL: // 0x85
- case LS:
- // Ox2028
- this.line++;
- this.column = 0;
- this.positionAtNewLine = this.position;
- return NL_LIKE;
- default:
- this.fail("disallowed character.");
- return code;
- }
- }
- if (code > 0xDBFF) {
- // This is a specialized version of isCharAndNotRestricted that takes into
- // account that in this context code > 0xDBFF and code <= 0xFFFF. So it
- // does not test cases that don't need testing.
- if (!(code >= 0xE000 && code <= 0xFFFD)) {
- this.fail("disallowed character.");
- }
- return code;
- }
- var final = 0x10000 + (code - 0xD800) * 0x400 + (chunk.charCodeAt(i + 1) - 0xDC00);
- this.i = i + 2; // This is a specialized version of isCharAndNotRestricted that takes into
- // account that in this context necessarily final >= 0x10000.
- if (final > 0x10FFFF) {
- this.fail("disallowed character.");
- }
- return final;
- }
- /**
- * Like ``getCode`` but with the return value normalized so that ``NL`` is
- * returned for ``NL_LIKE``.
- */
- }, {
- key: "getCodeNorm",
- value: function getCodeNorm() {
- var c = this.getCode();
- return c === NL_LIKE ? NL : c;
- }
- }, {
- key: "unget",
- value: function unget() {
- this.i = this.prevI;
- this.column--;
- }
- /**
- * Capture characters into a buffer until encountering one of a set of
- * characters.
- *
- * @param chars An array of codepoints. Encountering a character in the array
- * ends the capture. (``chars`` may safely contain ``NL``.)
- *
- * @return The character code that made the capture end, or ``EOC`` if we hit
- * the end of the chunk. The return value cannot be NL_LIKE: NL is returned
- * instead.
- */
- }, {
- key: "captureTo",
- value: function captureTo(chars) {
- var start = this.i;
- var chunk = this.chunk; // eslint-disable-next-line no-constant-condition
- while (true) {
- var c = this.getCode();
- var isNLLike = c === NL_LIKE;
- var final = isNLLike ? NL : c;
- if (final === EOC || chars.includes(final)) {
- this.text += chunk.slice(start, this.prevI);
- return final;
- }
- if (isNLLike) {
- this.text += "".concat(chunk.slice(start, this.prevI), "\n");
- start = this.i;
- }
- }
- }
- /**
- * Capture characters into a buffer until encountering a character.
- *
- * @param char The codepoint that ends the capture. **NOTE ``char`` MAY NOT
- * CONTAIN ``NL``.** Passing ``NL`` will result in buggy behavior.
- *
- * @return ``true`` if we ran into the character. Otherwise, we ran into the
- * end of the current chunk.
- */
- }, {
- key: "captureToChar",
- value: function captureToChar(char) {
- var start = this.i;
- var chunk = this.chunk; // eslint-disable-next-line no-constant-condition
- while (true) {
- var c = this.getCode();
- switch (c) {
- case NL_LIKE:
- this.text += "".concat(chunk.slice(start, this.prevI), "\n");
- start = this.i;
- c = NL;
- break;
- case EOC:
- this.text += chunk.slice(start);
- return false;
- default:
- }
- if (c === char) {
- this.text += chunk.slice(start, this.prevI);
- return true;
- }
- }
- }
- /**
- * Capture characters that satisfy ``isNameChar`` into the ``name`` field of
- * this parser.
- *
- * @return The character code that made the test fail, or ``EOC`` if we hit
- * the end of the chunk. The return value cannot be NL_LIKE: NL is returned
- * instead.
- */
- }, {
- key: "captureNameChars",
- value: function captureNameChars() {
- var chunk = this.chunk,
- start = this.i; // eslint-disable-next-line no-constant-condition
- while (true) {
- var c = this.getCode();
- if (c === EOC) {
- this.name += chunk.slice(start);
- return EOC;
- } // NL is not a name char so we don't have to test specifically for it.
- if (!isNameChar(c)) {
- this.name += chunk.slice(start, this.prevI);
- return c === NL_LIKE ? NL : c;
- }
- }
- }
- /**
- * Skip white spaces.
- *
- * @return The character that ended the skip, or ``EOC`` if we hit
- * the end of the chunk. The return value cannot be NL_LIKE: NL is returned
- * instead.
- */
- }, {
- key: "skipSpaces",
- value: function skipSpaces() {
- // eslint-disable-next-line no-constant-condition
- while (true) {
- var c = this.getCodeNorm();
- if (c === EOC || !isS(c)) {
- return c;
- }
- }
- }
- }, {
- key: "setXMLVersion",
- value: function setXMLVersion(version) {
- this.currentXMLVersion = version;
- /* eslint-disable @typescript-eslint/unbound-method */
- if (version === "1.0") {
- this.isChar = isChar10;
- this.getCode = this.getCode10;
- } else {
- this.isChar = isChar11;
- this.getCode = this.getCode11;
- }
- /* eslint-enable @typescript-eslint/unbound-method */
- } // STATE ENGINE METHODS
- // This needs to be a state separate from S_BEGIN_WHITESPACE because we want
- // to be sure never to come back to this state later.
- }, {
- key: "sBegin",
- value: function sBegin() {
- // We are essentially peeking at the first character of the chunk. Since
- // S_BEGIN can be in effect only when we start working on the first chunk,
- // the index at which we must look is necessarily 0. Note also that the
- // following test does not depend on decoding surrogates.
- // If the initial character is 0xFEFF, ignore it.
- if (this.chunk.charCodeAt(0) === 0xFEFF) {
- this.i++;
- this.column++;
- }
- this.state = S_BEGIN_WHITESPACE;
- }
- }, {
- key: "sBeginWhitespace",
- value: function sBeginWhitespace() {
- // We need to know whether we've encountered spaces or not because as soon
- // as we run into a space, an XML declaration is no longer possible. Rather
- // than slow down skipSpaces even in places where we don't care whether it
- // skipped anything or not, we check whether prevI is equal to the value of
- // i from before we skip spaces.
- var iBefore = this.i;
- var c = this.skipSpaces();
- if (this.prevI !== iBefore) {
- this.xmlDeclPossible = false;
- }
- switch (c) {
- case LESS:
- this.state = S_OPEN_WAKA; // We could naively call closeText but in this state, it is not normal
- // to have text be filled with any data.
- if (this.text.length !== 0) {
- throw new Error("no-empty text at start");
- }
- break;
- case EOC:
- break;
- default:
- this.unget();
- this.state = S_TEXT;
- this.xmlDeclPossible = false;
- }
- }
- }, {
- key: "sDoctype",
- value: function sDoctype() {
- var _a;
- var c = this.captureTo(DOCTYPE_TERMINATOR);
- switch (c) {
- case GREATER:
- {
- // eslint-disable-next-line no-unused-expressions
- (_a = this.doctypeHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.text);
- this.text = "";
- this.state = S_TEXT;
- this.doctype = true; // just remember that we saw it.
- break;
- }
- case EOC:
- break;
- default:
- this.text += String.fromCodePoint(c);
- if (c === OPEN_BRACKET) {
- this.state = S_DTD;
- } else if (isQuote(c)) {
- this.state = S_DOCTYPE_QUOTE;
- this.q = c;
- }
- }
- }
- }, {
- key: "sDoctypeQuote",
- value: function sDoctypeQuote() {
- var q = this.q;
- if (this.captureToChar(q)) {
- this.text += String.fromCodePoint(q);
- this.q = null;
- this.state = S_DOCTYPE;
- }
- }
- }, {
- key: "sDTD",
- value: function sDTD() {
- var c = this.captureTo(DTD_TERMINATOR);
- if (c === EOC) {
- return;
- }
- this.text += String.fromCodePoint(c);
- if (c === CLOSE_BRACKET) {
- this.state = S_DOCTYPE;
- } else if (c === LESS) {
- this.state = S_DTD_OPEN_WAKA;
- } else if (isQuote(c)) {
- this.state = S_DTD_QUOTED;
- this.q = c;
- }
- }
- }, {
- key: "sDTDQuoted",
- value: function sDTDQuoted() {
- var q = this.q;
- if (this.captureToChar(q)) {
- this.text += String.fromCodePoint(q);
- this.state = S_DTD;
- this.q = null;
- }
- }
- }, {
- key: "sDTDOpenWaka",
- value: function sDTDOpenWaka() {
- var c = this.getCodeNorm();
- this.text += String.fromCodePoint(c);
- switch (c) {
- case BANG:
- this.state = S_DTD_OPEN_WAKA_BANG;
- this.openWakaBang = "";
- break;
- case QUESTION:
- this.state = S_DTD_PI;
- break;
- default:
- this.state = S_DTD;
- }
- }
- }, {
- key: "sDTDOpenWakaBang",
- value: function sDTDOpenWakaBang() {
- var char = String.fromCodePoint(this.getCodeNorm());
- var owb = this.openWakaBang += char;
- this.text += char;
- if (owb !== "-") {
- this.state = owb === "--" ? S_DTD_COMMENT : S_DTD;
- this.openWakaBang = "";
- }
- }
- }, {
- key: "sDTDComment",
- value: function sDTDComment() {
- if (this.captureToChar(MINUS)) {
- this.text += "-";
- this.state = S_DTD_COMMENT_ENDING;
- }
- }
- }, {
- key: "sDTDCommentEnding",
- value: function sDTDCommentEnding() {
- var c = this.getCodeNorm();
- this.text += String.fromCodePoint(c);
- this.state = c === MINUS ? S_DTD_COMMENT_ENDED : S_DTD_COMMENT;
- }
- }, {
- key: "sDTDCommentEnded",
- value: function sDTDCommentEnded() {
- var c = this.getCodeNorm();
- this.text += String.fromCodePoint(c);
- if (c === GREATER) {
- this.state = S_DTD;
- } else {
- this.fail("malformed comment."); // <!-- blah -- bloo --> will be recorded as
- // a comment of " blah -- bloo "
- this.state = S_DTD_COMMENT;
- }
- }
- }, {
- key: "sDTDPI",
- value: function sDTDPI() {
- if (this.captureToChar(QUESTION)) {
- this.text += "?";
- this.state = S_DTD_PI_ENDING;
- }
- }
- }, {
- key: "sDTDPIEnding",
- value: function sDTDPIEnding() {
- var c = this.getCodeNorm();
- this.text += String.fromCodePoint(c);
- if (c === GREATER) {
- this.state = S_DTD;
- }
- }
- }, {
- key: "sText",
- value: function sText() {
- //
- // We did try a version of saxes where the S_TEXT state was split in two
- // states: one for text inside the root element, and one for text
- // outside. This was avoiding having to test this.tags.length to decide
- // what implementation to actually use.
- //
- // Peformance testing on gigabyte-size files did not show any advantage to
- // using the two states solution instead of the current one. Conversely, it
- // made the code a bit more complicated elsewhere. For instance, a comment
- // can appear before the root element so when a comment ended it was
- // necessary to determine whether to return to the S_TEXT state or to the
- // new text-outside-root state.
- //
- if (this.tags.length !== 0) {
- this.handleTextInRoot();
- } else {
- this.handleTextOutsideRoot();
- }
- }
- }, {
- key: "sEntity",
- value: function sEntity() {
- // This is essentially a specialized version of captureToChar(SEMICOLON...)
- var start = this.i;
- var chunk = this.chunk; // eslint-disable-next-line no-labels, no-restricted-syntax
- loop: // eslint-disable-next-line no-constant-condition
- while (true) {
- switch (this.getCode()) {
- case NL_LIKE:
- this.entity += "".concat(chunk.slice(start, this.prevI), "\n");
- start = this.i;
- break;
- case SEMICOLON:
- {
- var entityReturnState = this.entityReturnState;
- var entity = this.entity + chunk.slice(start, this.prevI);
- this.state = entityReturnState;
- var parsed = void 0;
- if (entity === "") {
- this.fail("empty entity name.");
- parsed = "&;";
- } else {
- parsed = this.parseEntity(entity);
- this.entity = "";
- }
- if (entityReturnState !== S_TEXT || this.textHandler !== undefined) {
- this.text += parsed;
- } // eslint-disable-next-line no-labels
- break loop;
- }
- case EOC:
- this.entity += chunk.slice(start); // eslint-disable-next-line no-labels
- break loop;
- default:
- }
- }
- }
- }, {
- key: "sOpenWaka",
- value: function sOpenWaka() {
- // Reminder: a state handler is called with at least one character
- // available in the current chunk. So the first call to get code inside of
- // a state handler cannot return ``EOC``. That's why we don't test
- // for it.
- var c = this.getCode(); // either a /, ?, !, or text is coming next.
- if (isNameStartChar(c)) {
- this.state = S_OPEN_TAG;
- this.unget();
- this.xmlDeclPossible = false;
- } else {
- switch (c) {
- case FORWARD_SLASH:
- this.state = S_CLOSE_TAG;
- this.xmlDeclPossible = false;
- break;
- case BANG:
- this.state = S_OPEN_WAKA_BANG;
- this.openWakaBang = "";
- this.xmlDeclPossible = false;
- break;
- case QUESTION:
- this.state = S_PI_FIRST_CHAR;
- break;
- default:
- this.fail("disallowed character in tag name");
- this.state = S_TEXT;
- this.xmlDeclPossible = false;
- }
- }
- }
- }, {
- key: "sOpenWakaBang",
- value: function sOpenWakaBang() {
- this.openWakaBang += String.fromCodePoint(this.getCodeNorm());
- switch (this.openWakaBang) {
- case "[CDATA[":
- if (!this.sawRoot && !this.reportedTextBeforeRoot) {
- this.fail("text data outside of root node.");
- this.reportedTextBeforeRoot = true;
- }
- if (this.closedRoot && !this.reportedTextAfterRoot) {
- this.fail("text data outside of root node.");
- this.reportedTextAfterRoot = true;
- }
- this.state = S_CDATA;
- this.openWakaBang = "";
- break;
- case "--":
- this.state = S_COMMENT;
- this.openWakaBang = "";
- break;
- case "DOCTYPE":
- this.state = S_DOCTYPE;
- if (this.doctype || this.sawRoot) {
- this.fail("inappropriately located doctype declaration.");
- }
- this.openWakaBang = "";
- break;
- default:
- // 7 happens to be the maximum length of the string that can possibly
- // match one of the cases above.
- if (this.openWakaBang.length >= 7) {
- this.fail("incorrect syntax.");
- }
- }
- }
- }, {
- key: "sComment",
- value: function sComment() {
- if (this.captureToChar(MINUS)) {
- this.state = S_COMMENT_ENDING;
- }
- }
- }, {
- key: "sCommentEnding",
- value: function sCommentEnding() {
- var _a;
- var c = this.getCodeNorm();
- if (c === MINUS) {
- this.state = S_COMMENT_ENDED; // eslint-disable-next-line no-unused-expressions
- (_a = this.commentHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.text);
- this.text = "";
- } else {
- this.text += "-".concat(String.fromCodePoint(c));
- this.state = S_COMMENT;
- }
- }
- }, {
- key: "sCommentEnded",
- value: function sCommentEnded() {
- var c = this.getCodeNorm();
- if (c !== GREATER) {
- this.fail("malformed comment."); // <!-- blah -- bloo --> will be recorded as
- // a comment of " blah -- bloo "
- this.text += "--".concat(String.fromCodePoint(c));
- this.state = S_COMMENT;
- } else {
- this.state = S_TEXT;
- }
- }
- }, {
- key: "sCData",
- value: function sCData() {
- if (this.captureToChar(CLOSE_BRACKET)) {
- this.state = S_CDATA_ENDING;
- }
- }
- }, {
- key: "sCDataEnding",
- value: function sCDataEnding() {
- var c = this.getCodeNorm();
- if (c === CLOSE_BRACKET) {
- this.state = S_CDATA_ENDING_2;
- } else {
- this.text += "]".concat(String.fromCodePoint(c));
- this.state = S_CDATA;
- }
- }
- }, {
- key: "sCDataEnding2",
- value: function sCDataEnding2() {
- var _a;
- var c = this.getCodeNorm();
- switch (c) {
- case GREATER:
- {
- // eslint-disable-next-line no-unused-expressions
- (_a = this.cdataHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.text);
- this.text = "";
- this.state = S_TEXT;
- break;
- }
- case CLOSE_BRACKET:
- this.text += "]";
- break;
- default:
- this.text += "]]".concat(String.fromCodePoint(c));
- this.state = S_CDATA;
- }
- } // We need this separate state to check the first character fo the pi target
- // with this.nameStartCheck which allows less characters than this.nameCheck.
- }, {
- key: "sPIFirstChar",
- value: function sPIFirstChar() {
- var c = this.getCodeNorm(); // This is first because in the case where the file is well-formed this is
- // the branch taken. We optimize for well-formedness.
- if (this.nameStartCheck(c)) {
- this.piTarget += String.fromCodePoint(c);
- this.state = S_PI_REST;
- } else if (c === QUESTION || isS(c)) {
- this.fail("processing instruction without a target.");
- this.state = c === QUESTION ? S_PI_ENDING : S_PI_BODY;
- } else {
- this.fail("disallowed character in processing instruction name.");
- this.piTarget += String.fromCodePoint(c);
- this.state = S_PI_REST;
- }
- }
- }, {
- key: "sPIRest",
- value: function sPIRest() {
- // Capture characters into a piTarget while ``this.nameCheck`` run on the
- // character read returns true.
- var chunk = this.chunk,
- start = this.i; // eslint-disable-next-line no-constant-condition
- while (true) {
- var c = this.getCodeNorm();
- if (c === EOC) {
- this.piTarget += chunk.slice(start);
- return;
- } // NL cannot satisfy this.nameCheck so we don't have to test specifically
- // for it.
- if (!this.nameCheck(c)) {
- this.piTarget += chunk.slice(start, this.prevI);
- var isQuestion = c === QUESTION;
- if (isQuestion || isS(c)) {
- if (this.piTarget === "xml") {
- if (!this.xmlDeclPossible) {
- this.fail("an XML declaration must be at the start of the document.");
- }
- this.state = isQuestion ? S_XML_DECL_ENDING : S_XML_DECL_NAME_START;
- } else {
- this.state = isQuestion ? S_PI_ENDING : S_PI_BODY;
- }
- } else {
- this.fail("disallowed character in processing instruction name.");
- this.piTarget += String.fromCodePoint(c);
- }
- break;
- }
- }
- }
- }, {
- key: "sPIBody",
- value: function sPIBody() {
- if (this.text.length === 0) {
- var c = this.getCodeNorm();
- if (c === QUESTION) {
- this.state = S_PI_ENDING;
- } else if (!isS(c)) {
- this.text = String.fromCodePoint(c);
- }
- } // The question mark character is not valid inside any of the XML
- // declaration name/value pairs.
- else if (this.captureToChar(QUESTION)) {
- this.state = S_PI_ENDING;
- }
- }
- }, {
- key: "sPIEnding",
- value: function sPIEnding() {
- var _a;
- var c = this.getCodeNorm();
- if (c === GREATER) {
- var piTarget = this.piTarget;
- if (piTarget.toLowerCase() === "xml") {
- this.fail("the XML declaration must appear at the start of the document.");
- } // eslint-disable-next-line no-unused-expressions
- (_a = this.piHandler) === null || _a === void 0 ? void 0 : _a.call(this, {
- target: piTarget,
- body: this.text
- });
- this.piTarget = this.text = "";
- this.state = S_TEXT;
- } else if (c === QUESTION) {
- // We ran into ?? as part of a processing instruction. We initially took
- // the first ? as a sign that the PI was ending, but it is not. So we have
- // to add it to the body but we take the new ? as a sign that the PI is
- // ending.
- this.text += "?";
- } else {
- this.text += "?".concat(String.fromCodePoint(c));
- this.state = S_PI_BODY;
- }
- this.xmlDeclPossible = false;
- }
- }, {
- key: "sXMLDeclNameStart",
- value: function sXMLDeclNameStart() {
- var c = this.skipSpaces(); // The question mark character is not valid inside any of the XML
- // declaration name/value pairs.
- if (c === QUESTION) {
- // It is valid to go to S_XML_DECL_ENDING from this state.
- this.state = S_XML_DECL_ENDING;
- return;
- }
- if (c !== EOC) {
- this.state = S_XML_DECL_NAME;
- this.name = String.fromCodePoint(c);
- }
- }
- }, {
- key: "sXMLDeclName",
- value: function sXMLDeclName() {
- var c = this.captureTo(XML_DECL_NAME_TERMINATOR); // The question mark character is not valid inside any of the XML
- // declaration name/value pairs.
- if (c === QUESTION) {
- this.state = S_XML_DECL_ENDING;
- this.name += this.text;
- this.text = "";
- this.fail("XML declaration is incomplete.");
- return;
- }
- if (!(isS(c) || c === EQUAL)) {
- return;
- }
- this.name += this.text;
- this.text = "";
- if (!this.xmlDeclExpects.includes(this.name)) {
- switch (this.name.length) {
- case 0:
- this.fail("did not expect any more name/value pairs.");
- break;
- case 1:
- this.fail("expected the name ".concat(this.xmlDeclExpects[0], "."));
- break;
- default:
- this.fail("expected one of ".concat(this.xmlDeclExpects.join(", ")));
- }
- }
- this.state = c === EQUAL ? S_XML_DECL_VALUE_START : S_XML_DECL_EQ;
- }
- }, {
- key: "sXMLDeclEq",
- value: function sXMLDeclEq() {
- var c = this.getCodeNorm(); // The question mark character is not valid inside any of the XML
- // declaration name/value pairs.
- if (c === QUESTION) {
- this.state = S_XML_DECL_ENDING;
- this.fail("XML declaration is incomplete.");
- return;
- }
- if (isS(c)) {
- return;
- }
- if (c !== EQUAL) {
- this.fail("value required.");
- }
- this.state = S_XML_DECL_VALUE_START;
- }
- }, {
- key: "sXMLDeclValueStart",
- value: function sXMLDeclValueStart() {
- var c = this.getCodeNorm(); // The question mark character is not valid inside any of the XML
- // declaration name/value pairs.
- if (c === QUESTION) {
- this.state = S_XML_DECL_ENDING;
- this.fail("XML declaration is incomplete.");
- return;
- }
- if (isS(c)) {
- return;
- }
- if (!isQuote(c)) {
- this.fail("value must be quoted.");
- this.q = SPACE;
- } else {
- this.q = c;
- }
- this.state = S_XML_DECL_VALUE;
- }
- }, {
- key: "sXMLDeclValue",
- value: function sXMLDeclValue() {
- var c = this.captureTo([this.q, QUESTION]); // The question mark character is not valid inside any of the XML
- // declaration name/value pairs.
- if (c === QUESTION) {
- this.state = S_XML_DECL_ENDING;
- this.text = "";
- this.fail("XML declaration is incomplete.");
- return;
- }
- if (c === EOC) {
- return;
- }
- var value = this.text;
- this.text = "";
- switch (this.name) {
- case "version":
- {
- this.xmlDeclExpects = ["encoding", "standalone"];
- var version = value;
- this.xmlDecl.version = version; // This is the test specified by XML 1.0 but it is fine for XML 1.1.
- if (!/^1\.[0-9]+$/.test(version)) {
- this.fail("version number must match /^1\\.[0-9]+$/.");
- } // When forceXMLVersion is set, the XML declaration is ignored.
- else if (!this.opt.forceXMLVersion) {
- this.setXMLVersion(version);
- }
- break;
- }
- case "encoding":
- if (!/^[A-Za-z][A-Za-z0-9._-]*$/.test(value)) {
- this.fail("encoding value must match \
- /^[A-Za-z0-9][A-Za-z0-9._-]*$/.");
- }
- this.xmlDeclExpects = ["standalone"];
- this.xmlDecl.encoding = value;
- break;
- case "standalone":
- if (value !== "yes" && value !== "no") {
- this.fail("standalone value must match \"yes\" or \"no\".");
- }
- this.xmlDeclExpects = [];
- this.xmlDecl.standalone = value;
- break;
- default: // We don't need to raise an error here since we've already raised one
- // when checking what name was expected.
- }
- this.name = "";
- this.state = S_XML_DECL_SEPARATOR;
- }
- }, {
- key: "sXMLDeclSeparator",
- value: function sXMLDeclSeparator() {
- var c = this.getCodeNorm(); // The question mark character is not valid inside any of the XML
- // declaration name/value pairs.
- if (c === QUESTION) {
- // It is valid to go to S_XML_DECL_ENDING from this state.
- this.state = S_XML_DECL_ENDING;
- return;
- }
- if (!isS(c)) {
- this.fail("whitespace required.");
- this.unget();
- }
- this.state = S_XML_DECL_NAME_START;
- }
- }, {
- key: "sXMLDeclEnding",
- value: function sXMLDeclEnding() {
- var _a;
- var c = this.getCodeNorm();
- if (c === GREATER) {
- if (this.piTarget !== "xml") {
- this.fail("processing instructions are not allowed before root.");
- } else if (this.name !== "version" && this.xmlDeclExpects.includes("version")) {
- this.fail("XML declaration must contain a version.");
- } // eslint-disable-next-line no-unused-expressions
- (_a = this.xmldeclHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.xmlDecl);
- this.name = "";
- this.piTarget = this.text = "";
- this.state = S_TEXT;
- } else {
- // We got here because the previous character was a ?, but the question
- // mark character is not valid inside any of the XML declaration
- // name/value pairs.
- this.fail("The character ? is disallowed anywhere in XML declarations.");
- }
- this.xmlDeclPossible = false;
- }
- }, {
- key: "sOpenTag",
- value: function sOpenTag() {
- var _a;
- var c = this.captureNameChars();
- if (c === EOC) {
- return;
- }
- var tag = this.tag = {
- name: this.name,
- attributes: Object.create(null)
- };
- this.name = "";
- if (this.xmlnsOpt) {
- this.topNS = tag.ns = Object.create(null);
- } // eslint-disable-next-line no-unused-expressions
- (_a = this.openTagStartHandler) === null || _a === void 0 ? void 0 : _a.call(this, tag);
- this.sawRoot = true;
- if (!this.fragmentOpt && this.closedRoot) {
- this.fail("documents may contain only one root.");
- }
- switch (c) {
- case GREATER:
- this.openTag();
- break;
- case FORWARD_SLASH:
- this.state = S_OPEN_TAG_SLASH;
- break;
- default:
- if (!isS(c)) {
- this.fail("disallowed character in tag name.");
- }
- this.state = S_ATTRIB;
- }
- }
- }, {
- key: "sOpenTagSlash",
- value: function sOpenTagSlash() {
- if (this.getCode() === GREATER) {
- this.openSelfClosingTag();
- } else {
- this.fail("forward-slash in opening tag not followed by >.");
- this.state = S_ATTRIB;
- }
- }
- }, {
- key: "sAttrib",
- value: function sAttrib() {
- var c = this.skipSpaces();
- if (c === EOC) {
- return;
- }
- if (isNameStartChar(c)) {
- this.unget();
- this.state = S_ATTRIB_NAME;
- } else if (c === GREATER) {
- this.openTag();
- } else if (c === FORWARD_SLASH) {
- this.state = S_OPEN_TAG_SLASH;
- } else {
- this.fail("disallowed character in attribute name.");
- }
- }
- }, {
- key: "sAttribName",
- value: function sAttribName() {
- var c = this.captureNameChars();
- if (c === EQUAL) {
- this.state = S_ATTRIB_VALUE;
- } else if (isS(c)) {
- this.state = S_ATTRIB_NAME_SAW_WHITE;
- } else if (c === GREATER) {
- this.fail("attribute without value.");
- this.pushAttrib(this.name, this.name);
- this.name = this.text = "";
- this.openTag();
- } else if (c !== EOC) {
- this.fail("disallowed character in attribute name.");
- }
- }
- }, {
- key: "sAttribNameSawWhite",
- value: function sAttribNameSawWhite() {
- var c = this.skipSpaces();
- switch (c) {
- case EOC:
- return;
- case EQUAL:
- this.state = S_ATTRIB_VALUE;
- break;
- default:
- this.fail("attribute without value."); // Should we do this???
- // this.tag.attributes[this.name] = "";
- this.text = "";
- this.name = "";
- if (c === GREATER) {
- this.openTag();
- } else if (isNameStartChar(c)) {
- this.unget();
- this.state = S_ATTRIB_NAME;
- } else {
- this.fail("disallowed character in attribute name.");
- this.state = S_ATTRIB;
- }
- }
- }
- }, {
- key: "sAttribValue",
- value: function sAttribValue() {
- var c = this.getCodeNorm();
- if (isQuote(c)) {
- this.q = c;
- this.state = S_ATTRIB_VALUE_QUOTED;
- } else if (!isS(c)) {
- this.fail("unquoted attribute value.");
- this.state = S_ATTRIB_VALUE_UNQUOTED;
- this.unget();
- }
- }
- }, {
- key: "sAttribValueQuoted",
- value: function sAttribValueQuoted() {
- // We deliberately do not use captureTo here. The specialized code we use
- // here is faster than using captureTo.
- var q = this.q,
- chunk = this.chunk;
- var start = this.i; // eslint-disable-next-line no-constant-condition
- while (true) {
- switch (this.getCode()) {
- case q:
- this.pushAttrib(this.name, this.text + chunk.slice(start, this.prevI));
- this.name = this.text = "";
- this.q = null;
- this.state = S_ATTRIB_VALUE_CLOSED;
- return;
- case AMP:
- this.text += chunk.slice(start, this.prevI);
- this.state = S_ENTITY;
- this.entityReturnState = S_ATTRIB_VALUE_QUOTED;
- return;
- case NL:
- case NL_LIKE:
- case TAB:
- this.text += "".concat(chunk.slice(start, this.prevI), " ");
- start = this.i;
- break;
- case LESS:
- this.text += chunk.slice(start, this.prevI);
- this.fail("disallowed character.");
- return;
- case EOC:
- this.text += chunk.slice(start);
- return;
- default:
- }
- }
- }
- }, {
- key: "sAttribValueClosed",
- value: function sAttribValueClosed() {
- var c = this.getCodeNorm();
- if (isS(c)) {
- this.state = S_ATTRIB;
- } else if (c === GREATER) {
- this.openTag();
- } else if (c === FORWARD_SLASH) {
- this.state = S_OPEN_TAG_SLASH;
- } else if (isNameStartChar(c)) {
- this.fail("no whitespace between attributes.");
- this.unget();
- this.state = S_ATTRIB_NAME;
- } else {
- this.fail("disallowed character in attribute name.");
- }
- }
- }, {
- key: "sAttribValueUnquoted",
- value: function sAttribValueUnquoted() {
- // We don't do anything regarding EOL or space handling for unquoted
- // attributes. We already have failed by the time we get here, and the
- // contract that saxes upholds states that upon failure, it is not safe to
- // rely on the data passed to event handlers (other than
- // ``onerror``). Passing "bad" data is not a problem.
- var c = this.captureTo(ATTRIB_VALUE_UNQUOTED_TERMINATOR);
- switch (c) {
- case AMP:
- this.state = S_ENTITY;
- this.entityReturnState = S_ATTRIB_VALUE_UNQUOTED;
- break;
- case LESS:
- this.fail("disallowed character.");
- break;
- case EOC:
- break;
- default:
- if (this.text.includes("]]>")) {
- this.fail("the string \"]]>\" is disallowed in char data.");
- }
- this.pushAttrib(this.name, this.text);
- this.name = this.text = "";
- if (c === GREATER) {
- this.openTag();
- } else {
- this.state = S_ATTRIB;
- }
- }
- }
- }, {
- key: "sCloseTag",
- value: function sCloseTag() {
- var c = this.captureNameChars();
- if (c === GREATER) {
- this.closeTag();
- } else if (isS(c)) {
- this.state = S_CLOSE_TAG_SAW_WHITE;
- } else if (c !== EOC) {
- this.fail("disallowed character in closing tag.");
- }
- }
- }, {
- key: "sCloseTagSawWhite",
- value: function sCloseTagSawWhite() {
- switch (this.skipSpaces()) {
- case GREATER:
- this.closeTag();
- break;
- case EOC:
- break;
- default:
- this.fail("disallowed character in closing tag.");
- }
- } // END OF STATE ENGINE METHODS
- }, {
- key: "handleTextInRoot",
- value: function handleTextInRoot() {
- // This is essentially a specialized version of captureTo which is optimized
- // for performing the ]]> check. A previous version of this code, checked
- // ``this.text`` for the presence of ]]>. It simplified the code but was
- // very costly when character data contained a lot of entities to be parsed.
- //
- // Since we are using a specialized loop, we also keep track of the presence
- // of ]]> in text data. The sequence ]]> is forbidden to appear as-is.
- //
- var start = this.i,
- forbiddenState = this.forbiddenState;
- var chunk = this.chunk,
- handler = this.textHandler; // eslint-disable-next-line no-labels, no-restricted-syntax
- scanLoop: // eslint-disable-next-line no-constant-condition
- while (true) {
- switch (this.getCode()) {
- case LESS:
- {
- this.state = S_OPEN_WAKA;
- if (handler !== undefined) {
- var text = this.text;
- var slice = chunk.slice(start, this.prevI);
- if (text.length !== 0) {
- handler(text + slice);
- this.text = "";
- } else if (slice.length !== 0) {
- handler(slice);
- }
- }
- forbiddenState = FORBIDDEN_START; // eslint-disable-next-line no-labels
- break scanLoop;
- }
- case AMP:
- this.state = S_ENTITY;
- this.entityReturnState = S_TEXT;
- if (handler !== undefined) {
- this.text += chunk.slice(start, this.prevI);
- }
- forbiddenState = FORBIDDEN_START; // eslint-disable-next-line no-labels
- break scanLoop;
- case CLOSE_BRACKET:
- switch (forbiddenState) {
- case FORBIDDEN_START:
- forbiddenState = FORBIDDEN_BRACKET;
- break;
- case FORBIDDEN_BRACKET:
- forbiddenState = FORBIDDEN_BRACKET_BRACKET;
- break;
- case FORBIDDEN_BRACKET_BRACKET:
- break;
- default:
- throw new Error("impossible state");
- }
- break;
- case GREATER:
- if (forbiddenState === FORBIDDEN_BRACKET_BRACKET) {
- this.fail("the string \"]]>\" is disallowed in char data.");
- }
- forbiddenState = FORBIDDEN_START;
- break;
- case NL_LIKE:
- if (handler !== undefined) {
- this.text += "".concat(chunk.slice(start, this.prevI), "\n");
- }
- start = this.i;
- forbiddenState = FORBIDDEN_START;
- break;
- case EOC:
- if (handler !== undefined) {
- this.text += chunk.slice(start);
- } // eslint-disable-next-line no-labels
- break scanLoop;
- default:
- forbiddenState = FORBIDDEN_START;
- }
- }
- this.forbiddenState = forbiddenState;
- }
- }, {
- key: "handleTextOutsideRoot",
- value: function handleTextOutsideRoot() {
- // This is essentially a specialized version of captureTo which is optimized
- // for a specialized task. We keep track of the presence of non-space
- // characters in the text since these are errors when appearing outside the
- // document root element.
- var start = this.i;
- var chunk = this.chunk,
- handler = this.textHandler;
- var nonSpace = false; // eslint-disable-next-line no-labels, no-restricted-syntax
- outRootLoop: // eslint-disable-next-line no-constant-condition
- while (true) {
- var code = this.getCode();
- switch (code) {
- case LESS:
- {
- this.state = S_OPEN_WAKA;
- if (handler !== undefined) {
- var text = this.text;
- var slice = chunk.slice(start, this.prevI);
- if (text.length !== 0) {
- handler(text + slice);
- this.text = "";
- } else if (slice.length !== 0) {
- handler(slice);
- }
- } // eslint-disable-next-line no-labels
- break outRootLoop;
- }
- case AMP:
- this.state = S_ENTITY;
- this.entityReturnState = S_TEXT;
- if (handler !== undefined) {
- this.text += chunk.slice(start, this.prevI);
- }
- nonSpace = true; // eslint-disable-next-line no-labels
- break outRootLoop;
- case NL_LIKE:
- if (handler !== undefined) {
- this.text += "".concat(chunk.slice(start, this.prevI), "\n");
- }
- start = this.i;
- break;
- case EOC:
- if (handler !== undefined) {
- this.text += chunk.slice(start);
- } // eslint-disable-next-line no-labels
- break outRootLoop;
- default:
- if (!isS(code)) {
- nonSpace = true;
- }
- }
- }
- if (!nonSpace) {
- return;
- } // We use the reportedTextBeforeRoot and reportedTextAfterRoot flags
- // to avoid reporting errors for every single character that is out of
- // place.
- if (!this.sawRoot && !this.reportedTextBeforeRoot) {
- this.fail("text data outside of root node.");
- this.reportedTextBeforeRoot = true;
- }
- if (this.closedRoot && !this.reportedTextAfterRoot) {
- this.fail("text data outside of root node.");
- this.reportedTextAfterRoot = true;
- }
- }
- }, {
- key: "pushAttribNS",
- value: function pushAttribNS(name, value) {
- var _a;
- var _this$qname = this.qname(name),
- prefix = _this$qname.prefix,
- local = _this$qname.local;
- var attr = {
- name: name,
- prefix: prefix,
- local: local,
- value: value
- };
- this.attribList.push(attr); // eslint-disable-next-line no-unused-expressions
- (_a = this.attributeHandler) === null || _a === void 0 ? void 0 : _a.call(this, attr);
- if (prefix === "xmlns") {
- var trimmed = value.trim();
- if (this.currentXMLVersion === "1.0" && trimmed === "") {
- this.fail("invalid attempt to undefine prefix in XML 1.0");
- }
- this.topNS[local] = trimmed;
- nsPairCheck(this, local, trimmed);
- } else if (name === "xmlns") {
- var _trimmed = value.trim();
- this.topNS[""] = _trimmed;
- nsPairCheck(this, "", _trimmed);
- }
- }
- }, {
- key: "pushAttribPlain",
- value: function pushAttribPlain(name, value) {
- var _a;
- var attr = {
- name: name,
- value: value
- };
- this.attribList.push(attr); // eslint-disable-next-line no-unused-expressions
- (_a = this.attributeHandler) === null || _a === void 0 ? void 0 : _a.call(this, attr);
- }
- /**
- * End parsing. This performs final well-formedness checks and resets the
- * parser to a clean state.
- *
- * @returns this
- */
- }, {
- key: "end",
- value: function end() {
- var _a, _b;
- if (!this.sawRoot) {
- this.fail("document must contain a root element.");
- }
- var tags = this.tags;
- while (tags.length > 0) {
- var tag = tags.pop();
- this.fail("unclosed tag: ".concat(tag.name));
- }
- if (this.state !== S_BEGIN && this.state !== S_TEXT) {
- this.fail("unexpected end.");
- }
- var text = this.text;
- if (text.length !== 0) {
- // eslint-disable-next-line no-unused-expressions
- (_a = this.textHandler) === null || _a === void 0 ? void 0 : _a.call(this, text);
- this.text = "";
- }
- this._closed = true; // eslint-disable-next-line no-unused-expressions
- (_b = this.endHandler) === null || _b === void 0 ? void 0 : _b.call(this);
- this._init();
- return this;
- }
- /**
- * Resolve a namespace prefix.
- *
- * @param prefix The prefix to resolve.
- *
- * @returns The namespace URI or ``undefined`` if the prefix is not defined.
- */
- }, {
- key: "resolve",
- value: function resolve(prefix) {
- var _a, _b;
- var uri = this.topNS[prefix];
- if (uri !== undefined) {
- return uri;
- }
- var tags = this.tags;
- for (var index = tags.length - 1; index >= 0; index--) {
- uri = tags[index].ns[prefix];
- if (uri !== undefined) {
- return uri;
- }
- }
- uri = this.ns[prefix];
- if (uri !== undefined) {
- return uri;
- }
- return (_b = (_a = this.opt).resolvePrefix) === null || _b === void 0 ? void 0 : _b.call(_a, prefix);
- }
- /**
- * Parse a qname into its prefix and local name parts.
- *
- * @param name The name to parse
- *
- * @returns
- */
- }, {
- key: "qname",
- value: function qname(name) {
- // This is faster than using name.split(":").
- var colon = name.indexOf(":");
- if (colon === -1) {
- return {
- prefix: "",
- local: name
- };
- }
- var local = name.slice(colon + 1);
- var prefix = name.slice(0, colon);
- if (prefix === "" || local === "" || local.includes(":")) {
- this.fail("malformed name: ".concat(name, "."));
- }
- return {
- prefix: prefix,
- local: local
- };
- }
- }, {
- key: "processAttribsNS",
- value: function processAttribsNS() {
- var _a;
- var attribList = this.attribList;
- var tag = this.tag;
- {
- // add namespace info to tag
- var _this$qname2 = this.qname(tag.name),
- prefix = _this$qname2.prefix,
- local = _this$qname2.local;
- tag.prefix = prefix;
- tag.local = local;
- var uri = tag.uri = (_a = this.resolve(prefix)) !== null && _a !== void 0 ? _a : "";
- if (prefix !== "") {
- if (prefix === "xmlns") {
- this.fail("tags may not have \"xmlns\" as prefix.");
- }
- if (uri === "") {
- this.fail("unbound namespace prefix: ".concat(JSON.stringify(prefix), "."));
- tag.uri = prefix;
- }
- }
- }
- if (attribList.length === 0) {
- return;
- }
- var attributes = tag.attributes;
- var seen = new Set(); // Note: do not apply default ns to attributes:
- // http://www.w3.org/TR/REC-xml-names/#defaulting
- var _iterator = _createForOfIteratorHelper(attribList),
- _step;
- try {
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
- var attr = _step.value;
- var name = attr.name,
- _prefix = attr.prefix,
- _local = attr.local;
- var _uri = void 0;
- var eqname = void 0;
- if (_prefix === "") {
- _uri = name === "xmlns" ? XMLNS_NAMESPACE : "";
- eqname = name;
- } else {
- _uri = this.resolve(_prefix); // if there's any attributes with an undefined namespace,
- // then fail on them now.
- if (_uri === undefined) {
- this.fail("unbound namespace prefix: ".concat(JSON.stringify(_prefix), "."));
- _uri = _prefix;
- }
- eqname = "{".concat(_uri, "}").concat(_local);
- }
- if (seen.has(eqname)) {
- this.fail("duplicate attribute: ".concat(eqname, "."));
- }
- seen.add(eqname);
- attr.uri = _uri;
- attributes[name] = attr;
- }
- } catch (err) {
- _iterator.e(err);
- } finally {
- _iterator.f();
- }
- this.attribList = [];
- }
- }, {
- key: "processAttribsPlain",
- value: function processAttribsPlain() {
- var attribList = this.attribList; // eslint-disable-next-line prefer-destructuring
- var attributes = this.tag.attributes;
- var _iterator2 = _createForOfIteratorHelper(attribList),
- _step2;
- try {
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
- var _step2$value = _step2.value,
- name = _step2$value.name,
- value = _step2$value.value;
- if (attributes[name] !== undefined) {
- this.fail("duplicate attribute: ".concat(name, "."));
- }
- attributes[name] = value;
- }
- } catch (err) {
- _iterator2.e(err);
- } finally {
- _iterator2.f();
- }
- this.attribList = [];
- }
- /**
- * Handle a complete open tag. This parser code calls this once it has seen
- * the whole tag. This method checks for well-formeness and then emits
- * ``onopentag``.
- */
- }, {
- key: "openTag",
- value: function openTag() {
- var _a;
- this.processAttribs();
- var tags = this.tags;
- var tag = this.tag;
- tag.isSelfClosing = false; // There cannot be any pending text here due to the onopentagstart that was
- // necessarily emitted before we get here. So we do not check text.
- // eslint-disable-next-line no-unused-expressions
- (_a = this.openTagHandler) === null || _a === void 0 ? void 0 : _a.call(this, tag);
- tags.push(tag);
- this.state = S_TEXT;
- this.name = "";
- }
- /**
- * Handle a complete self-closing tag. This parser code calls this once it has
- * seen the whole tag. This method checks for well-formeness and then emits
- * ``onopentag`` and ``onclosetag``.
- */
- }, {
- key: "openSelfClosingTag",
- value: function openSelfClosingTag() {
- var _a, _b, _c;
- this.processAttribs();
- var tags = this.tags;
- var tag = this.tag;
- tag.isSelfClosing = true; // There cannot be any pending text here due to the onopentagstart that was
- // necessarily emitted before we get here. So we do not check text.
- // eslint-disable-next-line no-unused-expressions
- (_a = this.openTagHandler) === null || _a === void 0 ? void 0 : _a.call(this, tag); // eslint-disable-next-line no-unused-expressions
- (_b = this.closeTagHandler) === null || _b === void 0 ? void 0 : _b.call(this, tag);
- var top = this.tag = (_c = tags[tags.length - 1]) !== null && _c !== void 0 ? _c : null;
- if (top === null) {
- this.closedRoot = true;
- }
- this.state = S_TEXT;
- this.name = "";
- }
- /**
- * Handle a complete close tag. This parser code calls this once it has seen
- * the whole tag. This method checks for well-formeness and then emits
- * ``onclosetag``.
- */
- }, {
- key: "closeTag",
- value: function closeTag() {
- var tags = this.tags,
- name = this.name; // Our state after this will be S_TEXT, no matter what, and we can clear
- // tagName now.
- this.state = S_TEXT;
- this.name = "";
- if (name === "") {
- this.fail("weird empty close tag.");
- this.text += "</>";
- return;
- }
- var handler = this.closeTagHandler;
- var l = tags.length;
- while (l-- > 0) {
- var tag = this.tag = tags.pop();
- this.topNS = tag.ns; // eslint-disable-next-line no-unused-expressions
- handler === null || handler === void 0 ? void 0 : handler(tag);
- if (tag.name === name) {
- break;
- }
- this.fail("unexpected close tag.");
- }
- if (l === 0) {
- this.closedRoot = true;
- } else if (l < 0) {
- this.fail("unmatched closing tag: ".concat(name, "."));
- this.text += "</".concat(name, ">");
- }
- }
- /**
- * Resolves an entity. Makes any necessary well-formedness checks.
- *
- * @param entity The entity to resolve.
- *
- * @returns The parsed entity.
- */
- }, {
- key: "parseEntity",
- value: function parseEntity(entity) {
- // startsWith would be significantly slower for this test.
- // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with
- if (entity[0] !== "#") {
- var defined = this.ENTITIES[entity];
- if (defined !== undefined) {
- return defined;
- }
- this.fail(this.isName(entity) ? "undefined entity." : "disallowed character in entity name.");
- return "&".concat(entity, ";");
- }
- var num = NaN;
- if (entity[1] === "x" && /^#x[0-9a-f]+$/i.test(entity)) {
- num = parseInt(entity.slice(2), 16);
- } else if (/^#[0-9]+$/.test(entity)) {
- num = parseInt(entity.slice(1), 10);
- } // The character reference is required to match the CHAR production.
- if (!this.isChar(num)) {
- this.fail("malformed character entity.");
- return "&".concat(entity, ";");
- }
- return String.fromCodePoint(num);
- }
- }, {
- key: "closed",
- get: function get() {
- return this._closed;
- }
- }, {
- key: "position",
- get: function get() {
- return this.chunkPosition + this.i;
- }
- /**
- * The column number of the next character to be read by the parser. *
- * This field is zero-based. (The first column in a line is 0.)
- *
- * This field reports the index at which the next character would be in the
- * line if the line were represented as a JavaScript string. Note that this
- * *can* be different to a count based on the number of *Unicode characters*
- * due to how JavaScript handles astral plane characters.
- *
- * See [[column]] for a number that corresponds to a count of Unicode
- * characters.
- */
- }, {
- key: "columnIndex",
- get: function get() {
- return this.position - this.positionAtNewLine;
- }
- }]);
- return SaxesParser;
- }();
- exports.SaxesParser = SaxesParser;
- },{"xmlchars/xml/1.0/ed5":431,"xmlchars/xml/1.1/ed2":432,"xmlchars/xmlns/1.0/ed3":433}],387:[function(require,module,exports){
- (function (setImmediate){
- 'use strict';
- module.exports = typeof setImmediate === 'function' ? setImmediate : function setImmediate() {
- var args = [].slice.apply(arguments);
- args.splice(1, 0, 0);
- setTimeout.apply(null, args);
- };
- }).call(this,require("timers").setImmediate)
- },{"timers":411}],388:[function(require,module,exports){
- "use strict";
- var Buffer = require('safe-buffer').Buffer; // prototype class for hash functions
- function Hash(blockSize, finalSize) {
- this._block = Buffer.alloc(blockSize);
- this._finalSize = finalSize;
- this._blockSize = blockSize;
- this._len = 0;
- }
- Hash.prototype.update = function (data, enc) {
- if (typeof data === 'string') {
- enc = enc || 'utf8';
- data = Buffer.from(data, enc);
- }
- var block = this._block;
- var blockSize = this._blockSize;
- var length = data.length;
- var accum = this._len;
- for (var offset = 0; offset < length;) {
- var assigned = accum % blockSize;
- var remainder = Math.min(length - offset, blockSize - assigned);
- for (var i = 0; i < remainder; i++) {
- block[assigned + i] = data[offset + i];
- }
- accum += remainder;
- offset += remainder;
- if (accum % blockSize === 0) {
- this._update(block);
- }
- }
- this._len += length;
- return this;
- };
- Hash.prototype.digest = function (enc) {
- var rem = this._len % this._blockSize;
- this._block[rem] = 0x80; // zero (rem + 1) trailing bits, where (rem + 1) is the smallest
- // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize
- this._block.fill(0, rem + 1);
- if (rem >= this._finalSize) {
- this._update(this._block);
- this._block.fill(0);
- }
- var bits = this._len * 8; // uint32
- if (bits <= 0xffffffff) {
- this._block.writeUInt32BE(bits, this._blockSize - 4); // uint64
- } else {
- var lowBits = (bits & 0xffffffff) >>> 0;
- var highBits = (bits - lowBits) / 0x100000000;
- this._block.writeUInt32BE(highBits, this._blockSize - 8);
- this._block.writeUInt32BE(lowBits, this._blockSize - 4);
- }
- this._update(this._block);
- var hash = this._hash();
- return enc ? hash.toString(enc) : hash;
- };
- Hash.prototype._update = function () {
- throw new Error('_update must be implemented by subclass');
- };
- module.exports = Hash;
- },{"safe-buffer":384}],389:[function(require,module,exports){
- "use strict";
- var _exports = module.exports = function SHA(algorithm) {
- algorithm = algorithm.toLowerCase();
- var Algorithm = _exports[algorithm];
- if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)');
- return new Algorithm();
- };
- _exports.sha = require('./sha');
- _exports.sha1 = require('./sha1');
- _exports.sha224 = require('./sha224');
- _exports.sha256 = require('./sha256');
- _exports.sha384 = require('./sha384');
- _exports.sha512 = require('./sha512');
- },{"./sha":390,"./sha1":391,"./sha224":392,"./sha256":393,"./sha384":394,"./sha512":395}],390:[function(require,module,exports){
- "use strict";
- /*
- * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
- * in FIPS PUB 180-1
- * This source code is derived from sha1.js of the same repository.
- * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
- * operation was added.
- */
- var inherits = require('inherits');
- var Hash = require('./hash');
- var Buffer = require('safe-buffer').Buffer;
- var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0];
- var W = new Array(80);
- function Sha() {
- this.init();
- this._w = W;
- Hash.call(this, 64, 56);
- }
- inherits(Sha, Hash);
- Sha.prototype.init = function () {
- this._a = 0x67452301;
- this._b = 0xefcdab89;
- this._c = 0x98badcfe;
- this._d = 0x10325476;
- this._e = 0xc3d2e1f0;
- return this;
- };
- function rotl5(num) {
- return num << 5 | num >>> 27;
- }
- function rotl30(num) {
- return num << 30 | num >>> 2;
- }
- function ft(s, b, c, d) {
- if (s === 0) return b & c | ~b & d;
- if (s === 2) return b & c | b & d | c & d;
- return b ^ c ^ d;
- }
- Sha.prototype._update = function (M) {
- var W = this._w;
- var a = this._a | 0;
- var b = this._b | 0;
- var c = this._c | 0;
- var d = this._d | 0;
- var e = this._e | 0;
- for (var i = 0; i < 16; ++i) {
- W[i] = M.readInt32BE(i * 4);
- }
- for (; i < 80; ++i) {
- W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];
- }
- for (var j = 0; j < 80; ++j) {
- var s = ~~(j / 20);
- var t = rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s] | 0;
- e = d;
- d = c;
- c = rotl30(b);
- b = a;
- a = t;
- }
- this._a = a + this._a | 0;
- this._b = b + this._b | 0;
- this._c = c + this._c | 0;
- this._d = d + this._d | 0;
- this._e = e + this._e | 0;
- };
- Sha.prototype._hash = function () {
- var H = Buffer.allocUnsafe(20);
- H.writeInt32BE(this._a | 0, 0);
- H.writeInt32BE(this._b | 0, 4);
- H.writeInt32BE(this._c | 0, 8);
- H.writeInt32BE(this._d | 0, 12);
- H.writeInt32BE(this._e | 0, 16);
- return H;
- };
- module.exports = Sha;
- },{"./hash":388,"inherits":278,"safe-buffer":384}],391:[function(require,module,exports){
- "use strict";
- /*
- * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
- * in FIPS PUB 180-1
- * Version 2.1a Copyright Paul Johnston 2000 - 2002.
- * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
- * Distributed under the BSD License
- * See http://pajhome.org.uk/crypt/md5 for details.
- */
- var inherits = require('inherits');
- var Hash = require('./hash');
- var Buffer = require('safe-buffer').Buffer;
- var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0];
- var W = new Array(80);
- function Sha1() {
- this.init();
- this._w = W;
- Hash.call(this, 64, 56);
- }
- inherits(Sha1, Hash);
- Sha1.prototype.init = function () {
- this._a = 0x67452301;
- this._b = 0xefcdab89;
- this._c = 0x98badcfe;
- this._d = 0x10325476;
- this._e = 0xc3d2e1f0;
- return this;
- };
- function rotl1(num) {
- return num << 1 | num >>> 31;
- }
- function rotl5(num) {
- return num << 5 | num >>> 27;
- }
- function rotl30(num) {
- return num << 30 | num >>> 2;
- }
- function ft(s, b, c, d) {
- if (s === 0) return b & c | ~b & d;
- if (s === 2) return b & c | b & d | c & d;
- return b ^ c ^ d;
- }
- Sha1.prototype._update = function (M) {
- var W = this._w;
- var a = this._a | 0;
- var b = this._b | 0;
- var c = this._c | 0;
- var d = this._d | 0;
- var e = this._e | 0;
- for (var i = 0; i < 16; ++i) {
- W[i] = M.readInt32BE(i * 4);
- }
- for (; i < 80; ++i) {
- W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]);
- }
- for (var j = 0; j < 80; ++j) {
- var s = ~~(j / 20);
- var t = rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s] | 0;
- e = d;
- d = c;
- c = rotl30(b);
- b = a;
- a = t;
- }
- this._a = a + this._a | 0;
- this._b = b + this._b | 0;
- this._c = c + this._c | 0;
- this._d = d + this._d | 0;
- this._e = e + this._e | 0;
- };
- Sha1.prototype._hash = function () {
- var H = Buffer.allocUnsafe(20);
- H.writeInt32BE(this._a | 0, 0);
- H.writeInt32BE(this._b | 0, 4);
- H.writeInt32BE(this._c | 0, 8);
- H.writeInt32BE(this._d | 0, 12);
- H.writeInt32BE(this._e | 0, 16);
- return H;
- };
- module.exports = Sha1;
- },{"./hash":388,"inherits":278,"safe-buffer":384}],392:[function(require,module,exports){
- "use strict";
- /**
- * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
- * in FIPS 180-2
- * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
- * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
- *
- */
- var inherits = require('inherits');
- var Sha256 = require('./sha256');
- var Hash = require('./hash');
- var Buffer = require('safe-buffer').Buffer;
- var W = new Array(64);
- function Sha224() {
- this.init();
- this._w = W; // new Array(64)
- Hash.call(this, 64, 56);
- }
- inherits(Sha224, Sha256);
- Sha224.prototype.init = function () {
- this._a = 0xc1059ed8;
- this._b = 0x367cd507;
- this._c = 0x3070dd17;
- this._d = 0xf70e5939;
- this._e = 0xffc00b31;
- this._f = 0x68581511;
- this._g = 0x64f98fa7;
- this._h = 0xbefa4fa4;
- return this;
- };
- Sha224.prototype._hash = function () {
- var H = Buffer.allocUnsafe(28);
- H.writeInt32BE(this._a, 0);
- H.writeInt32BE(this._b, 4);
- H.writeInt32BE(this._c, 8);
- H.writeInt32BE(this._d, 12);
- H.writeInt32BE(this._e, 16);
- H.writeInt32BE(this._f, 20);
- H.writeInt32BE(this._g, 24);
- return H;
- };
- module.exports = Sha224;
- },{"./hash":388,"./sha256":393,"inherits":278,"safe-buffer":384}],393:[function(require,module,exports){
- "use strict";
- /**
- * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
- * in FIPS 180-2
- * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
- * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
- *
- */
- var inherits = require('inherits');
- var Hash = require('./hash');
- var Buffer = require('safe-buffer').Buffer;
- var K = [0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2];
- var W = new Array(64);
- function Sha256() {
- this.init();
- this._w = W; // new Array(64)
- Hash.call(this, 64, 56);
- }
- inherits(Sha256, Hash);
- Sha256.prototype.init = function () {
- this._a = 0x6a09e667;
- this._b = 0xbb67ae85;
- this._c = 0x3c6ef372;
- this._d = 0xa54ff53a;
- this._e = 0x510e527f;
- this._f = 0x9b05688c;
- this._g = 0x1f83d9ab;
- this._h = 0x5be0cd19;
- return this;
- };
- function ch(x, y, z) {
- return z ^ x & (y ^ z);
- }
- function maj(x, y, z) {
- return x & y | z & (x | y);
- }
- function sigma0(x) {
- return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10);
- }
- function sigma1(x) {
- return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7);
- }
- function gamma0(x) {
- return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ x >>> 3;
- }
- function gamma1(x) {
- return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ x >>> 10;
- }
- Sha256.prototype._update = function (M) {
- var W = this._w;
- var a = this._a | 0;
- var b = this._b | 0;
- var c = this._c | 0;
- var d = this._d | 0;
- var e = this._e | 0;
- var f = this._f | 0;
- var g = this._g | 0;
- var h = this._h | 0;
- for (var i = 0; i < 16; ++i) {
- W[i] = M.readInt32BE(i * 4);
- }
- for (; i < 64; ++i) {
- W[i] = gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16] | 0;
- }
- for (var j = 0; j < 64; ++j) {
- var T1 = h + sigma1(e) + ch(e, f, g) + K[j] + W[j] | 0;
- var T2 = sigma0(a) + maj(a, b, c) | 0;
- h = g;
- g = f;
- f = e;
- e = d + T1 | 0;
- d = c;
- c = b;
- b = a;
- a = T1 + T2 | 0;
- }
- this._a = a + this._a | 0;
- this._b = b + this._b | 0;
- this._c = c + this._c | 0;
- this._d = d + this._d | 0;
- this._e = e + this._e | 0;
- this._f = f + this._f | 0;
- this._g = g + this._g | 0;
- this._h = h + this._h | 0;
- };
- Sha256.prototype._hash = function () {
- var H = Buffer.allocUnsafe(32);
- H.writeInt32BE(this._a, 0);
- H.writeInt32BE(this._b, 4);
- H.writeInt32BE(this._c, 8);
- H.writeInt32BE(this._d, 12);
- H.writeInt32BE(this._e, 16);
- H.writeInt32BE(this._f, 20);
- H.writeInt32BE(this._g, 24);
- H.writeInt32BE(this._h, 28);
- return H;
- };
- module.exports = Sha256;
- },{"./hash":388,"inherits":278,"safe-buffer":384}],394:[function(require,module,exports){
- "use strict";
- var inherits = require('inherits');
- var SHA512 = require('./sha512');
- var Hash = require('./hash');
- var Buffer = require('safe-buffer').Buffer;
- var W = new Array(160);
- function Sha384() {
- this.init();
- this._w = W;
- Hash.call(this, 128, 112);
- }
- inherits(Sha384, SHA512);
- Sha384.prototype.init = function () {
- this._ah = 0xcbbb9d5d;
- this._bh = 0x629a292a;
- this._ch = 0x9159015a;
- this._dh = 0x152fecd8;
- this._eh = 0x67332667;
- this._fh = 0x8eb44a87;
- this._gh = 0xdb0c2e0d;
- this._hh = 0x47b5481d;
- this._al = 0xc1059ed8;
- this._bl = 0x367cd507;
- this._cl = 0x3070dd17;
- this._dl = 0xf70e5939;
- this._el = 0xffc00b31;
- this._fl = 0x68581511;
- this._gl = 0x64f98fa7;
- this._hl = 0xbefa4fa4;
- return this;
- };
- Sha384.prototype._hash = function () {
- var H = Buffer.allocUnsafe(48);
- function writeInt64BE(h, l, offset) {
- H.writeInt32BE(h, offset);
- H.writeInt32BE(l, offset + 4);
- }
- writeInt64BE(this._ah, this._al, 0);
- writeInt64BE(this._bh, this._bl, 8);
- writeInt64BE(this._ch, this._cl, 16);
- writeInt64BE(this._dh, this._dl, 24);
- writeInt64BE(this._eh, this._el, 32);
- writeInt64BE(this._fh, this._fl, 40);
- return H;
- };
- module.exports = Sha384;
- },{"./hash":388,"./sha512":395,"inherits":278,"safe-buffer":384}],395:[function(require,module,exports){
- "use strict";
- var inherits = require('inherits');
- var Hash = require('./hash');
- var Buffer = require('safe-buffer').Buffer;
- var K = [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817];
- var W = new Array(160);
- function Sha512() {
- this.init();
- this._w = W;
- Hash.call(this, 128, 112);
- }
- inherits(Sha512, Hash);
- Sha512.prototype.init = function () {
- this._ah = 0x6a09e667;
- this._bh = 0xbb67ae85;
- this._ch = 0x3c6ef372;
- this._dh = 0xa54ff53a;
- this._eh = 0x510e527f;
- this._fh = 0x9b05688c;
- this._gh = 0x1f83d9ab;
- this._hh = 0x5be0cd19;
- this._al = 0xf3bcc908;
- this._bl = 0x84caa73b;
- this._cl = 0xfe94f82b;
- this._dl = 0x5f1d36f1;
- this._el = 0xade682d1;
- this._fl = 0x2b3e6c1f;
- this._gl = 0xfb41bd6b;
- this._hl = 0x137e2179;
- return this;
- };
- function Ch(x, y, z) {
- return z ^ x & (y ^ z);
- }
- function maj(x, y, z) {
- return x & y | z & (x | y);
- }
- function sigma0(x, xl) {
- return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25);
- }
- function sigma1(x, xl) {
- return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23);
- }
- function Gamma0(x, xl) {
- return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ x >>> 7;
- }
- function Gamma0l(x, xl) {
- return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25);
- }
- function Gamma1(x, xl) {
- return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ x >>> 6;
- }
- function Gamma1l(x, xl) {
- return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26);
- }
- function getCarry(a, b) {
- return a >>> 0 < b >>> 0 ? 1 : 0;
- }
- Sha512.prototype._update = function (M) {
- var W = this._w;
- var ah = this._ah | 0;
- var bh = this._bh | 0;
- var ch = this._ch | 0;
- var dh = this._dh | 0;
- var eh = this._eh | 0;
- var fh = this._fh | 0;
- var gh = this._gh | 0;
- var hh = this._hh | 0;
- var al = this._al | 0;
- var bl = this._bl | 0;
- var cl = this._cl | 0;
- var dl = this._dl | 0;
- var el = this._el | 0;
- var fl = this._fl | 0;
- var gl = this._gl | 0;
- var hl = this._hl | 0;
- for (var i = 0; i < 32; i += 2) {
- W[i] = M.readInt32BE(i * 4);
- W[i + 1] = M.readInt32BE(i * 4 + 4);
- }
- for (; i < 160; i += 2) {
- var xh = W[i - 15 * 2];
- var xl = W[i - 15 * 2 + 1];
- var gamma0 = Gamma0(xh, xl);
- var gamma0l = Gamma0l(xl, xh);
- xh = W[i - 2 * 2];
- xl = W[i - 2 * 2 + 1];
- var gamma1 = Gamma1(xh, xl);
- var gamma1l = Gamma1l(xl, xh); // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
- var Wi7h = W[i - 7 * 2];
- var Wi7l = W[i - 7 * 2 + 1];
- var Wi16h = W[i - 16 * 2];
- var Wi16l = W[i - 16 * 2 + 1];
- var Wil = gamma0l + Wi7l | 0;
- var Wih = gamma0 + Wi7h + getCarry(Wil, gamma0l) | 0;
- Wil = Wil + gamma1l | 0;
- Wih = Wih + gamma1 + getCarry(Wil, gamma1l) | 0;
- Wil = Wil + Wi16l | 0;
- Wih = Wih + Wi16h + getCarry(Wil, Wi16l) | 0;
- W[i] = Wih;
- W[i + 1] = Wil;
- }
- for (var j = 0; j < 160; j += 2) {
- Wih = W[j];
- Wil = W[j + 1];
- var majh = maj(ah, bh, ch);
- var majl = maj(al, bl, cl);
- var sigma0h = sigma0(ah, al);
- var sigma0l = sigma0(al, ah);
- var sigma1h = sigma1(eh, el);
- var sigma1l = sigma1(el, eh); // t1 = h + sigma1 + ch + K[j] + W[j]
- var Kih = K[j];
- var Kil = K[j + 1];
- var chh = Ch(eh, fh, gh);
- var chl = Ch(el, fl, gl);
- var t1l = hl + sigma1l | 0;
- var t1h = hh + sigma1h + getCarry(t1l, hl) | 0;
- t1l = t1l + chl | 0;
- t1h = t1h + chh + getCarry(t1l, chl) | 0;
- t1l = t1l + Kil | 0;
- t1h = t1h + Kih + getCarry(t1l, Kil) | 0;
- t1l = t1l + Wil | 0;
- t1h = t1h + Wih + getCarry(t1l, Wil) | 0; // t2 = sigma0 + maj
- var t2l = sigma0l + majl | 0;
- var t2h = sigma0h + majh + getCarry(t2l, sigma0l) | 0;
- hh = gh;
- hl = gl;
- gh = fh;
- gl = fl;
- fh = eh;
- fl = el;
- el = dl + t1l | 0;
- eh = dh + t1h + getCarry(el, dl) | 0;
- dh = ch;
- dl = cl;
- ch = bh;
- cl = bl;
- bh = ah;
- bl = al;
- al = t1l + t2l | 0;
- ah = t1h + t2h + getCarry(al, t1l) | 0;
- }
- this._al = this._al + al | 0;
- this._bl = this._bl + bl | 0;
- this._cl = this._cl + cl | 0;
- this._dl = this._dl + dl | 0;
- this._el = this._el + el | 0;
- this._fl = this._fl + fl | 0;
- this._gl = this._gl + gl | 0;
- this._hl = this._hl + hl | 0;
- this._ah = this._ah + ah + getCarry(this._al, al) | 0;
- this._bh = this._bh + bh + getCarry(this._bl, bl) | 0;
- this._ch = this._ch + ch + getCarry(this._cl, cl) | 0;
- this._dh = this._dh + dh + getCarry(this._dl, dl) | 0;
- this._eh = this._eh + eh + getCarry(this._el, el) | 0;
- this._fh = this._fh + fh + getCarry(this._fl, fl) | 0;
- this._gh = this._gh + gh + getCarry(this._gl, gl) | 0;
- this._hh = this._hh + hh + getCarry(this._hl, hl) | 0;
- };
- Sha512.prototype._hash = function () {
- var H = Buffer.allocUnsafe(64);
- function writeInt64BE(h, l, offset) {
- H.writeInt32BE(h, offset);
- H.writeInt32BE(l, offset + 4);
- }
- writeInt64BE(this._ah, this._al, 0);
- writeInt64BE(this._bh, this._bl, 8);
- writeInt64BE(this._ch, this._cl, 16);
- writeInt64BE(this._dh, this._dl, 24);
- writeInt64BE(this._eh, this._el, 32);
- writeInt64BE(this._fh, this._fl, 40);
- writeInt64BE(this._gh, this._gl, 48);
- writeInt64BE(this._hh, this._hl, 56);
- return H;
- };
- module.exports = Sha512;
- },{"./hash":388,"inherits":278,"safe-buffer":384}],396:[function(require,module,exports){
- "use strict";
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- module.exports = Stream;
- var EE = require('events').EventEmitter;
- var inherits = require('inherits');
- inherits(Stream, EE);
- Stream.Readable = require('readable-stream/readable.js');
- Stream.Writable = require('readable-stream/writable.js');
- Stream.Duplex = require('readable-stream/duplex.js');
- Stream.Transform = require('readable-stream/transform.js');
- Stream.PassThrough = require('readable-stream/passthrough.js'); // Backwards-compat with node 0.4.x
- Stream.Stream = Stream; // old-style streams. Note that the pipe method (the only relevant
- // part of this class) is overridden in the Readable class.
- function Stream() {
- EE.call(this);
- }
- Stream.prototype.pipe = function (dest, options) {
- var source = this;
- function ondata(chunk) {
- if (dest.writable) {
- if (false === dest.write(chunk) && source.pause) {
- source.pause();
- }
- }
- }
- source.on('data', ondata);
- function ondrain() {
- if (source.readable && source.resume) {
- source.resume();
- }
- }
- dest.on('drain', ondrain); // If the 'end' option is not supplied, dest.end() will be called when
- // source gets the 'end' or 'close' events. Only dest.end() once.
- if (!dest._isStdio && (!options || options.end !== false)) {
- source.on('end', onend);
- source.on('close', onclose);
- }
- var didOnEnd = false;
- function onend() {
- if (didOnEnd) return;
- didOnEnd = true;
- dest.end();
- }
- function onclose() {
- if (didOnEnd) return;
- didOnEnd = true;
- if (typeof dest.destroy === 'function') dest.destroy();
- } // don't leave dangling pipes when there are errors.
- function onerror(er) {
- cleanup();
- if (EE.listenerCount(this, 'error') === 0) {
- throw er; // Unhandled stream error in pipe.
- }
- }
- source.on('error', onerror);
- dest.on('error', onerror); // remove all the event listeners that were added.
- function cleanup() {
- source.removeListener('data', ondata);
- dest.removeListener('drain', ondrain);
- source.removeListener('end', onend);
- source.removeListener('close', onclose);
- source.removeListener('error', onerror);
- dest.removeListener('error', onerror);
- source.removeListener('end', cleanup);
- source.removeListener('close', cleanup);
- dest.removeListener('close', cleanup);
- }
- source.on('end', cleanup);
- source.on('close', cleanup);
- dest.on('close', cleanup);
- dest.emit('pipe', source); // Allow for unix-like usage: A.pipe(B).pipe(C)
- return dest;
- };
- },{"events":258,"inherits":278,"readable-stream/duplex.js":397,"readable-stream/passthrough.js":406,"readable-stream/readable.js":407,"readable-stream/transform.js":408,"readable-stream/writable.js":409}],397:[function(require,module,exports){
- "use strict";
- module.exports = require('./lib/_stream_duplex.js');
- },{"./lib/_stream_duplex.js":398}],398:[function(require,module,exports){
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- // a duplex stream is just a stream that is both readable and writable.
- // Since JS doesn't have multiple prototypal inheritance, this class
- // prototypally inherits from Readable, and then parasitically from
- // Writable.
- 'use strict';
- /*<replacement>*/
- var pna = require('process-nextick-args');
- /*</replacement>*/
- /*<replacement>*/
- var objectKeys = Object.keys || function (obj) {
- var keys = [];
- for (var key in obj) {
- keys.push(key);
- }
- return keys;
- };
- /*</replacement>*/
- module.exports = Duplex;
- /*<replacement>*/
- var util = Object.create(require('core-util-is'));
- util.inherits = require('inherits');
- /*</replacement>*/
- var Readable = require('./_stream_readable');
- var Writable = require('./_stream_writable');
- util.inherits(Duplex, Readable);
- {
- // avoid scope creep, the keys array can then be collected
- var keys = objectKeys(Writable.prototype);
- for (var v = 0; v < keys.length; v++) {
- var method = keys[v];
- if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
- }
- }
- function Duplex(options) {
- if (!(this instanceof Duplex)) return new Duplex(options);
- Readable.call(this, options);
- Writable.call(this, options);
- if (options && options.readable === false) this.readable = false;
- if (options && options.writable === false) this.writable = false;
- this.allowHalfOpen = true;
- if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
- this.once('end', onend);
- }
- Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', {
- // making it explicit this property is not enumerable
- // because otherwise some prototype manipulation in
- // userland will fail
- enumerable: false,
- get: function get() {
- return this._writableState.highWaterMark;
- }
- }); // the no-half-open enforcer
- function onend() {
- // if we allow half-open state, or if the writable side ended,
- // then we're ok.
- if (this.allowHalfOpen || this._writableState.ended) return; // no more data can be written.
- // But allow more writes to happen in this tick.
- pna.nextTick(onEndNT, this);
- }
- function onEndNT(self) {
- self.end();
- }
- Object.defineProperty(Duplex.prototype, 'destroyed', {
- get: function get() {
- if (this._readableState === undefined || this._writableState === undefined) {
- return false;
- }
- return this._readableState.destroyed && this._writableState.destroyed;
- },
- set: function set(value) {
- // we ignore the value if the stream
- // has not been initialized yet
- if (this._readableState === undefined || this._writableState === undefined) {
- return;
- } // backward compatibility, the user is explicitly
- // managing destroyed
- this._readableState.destroyed = value;
- this._writableState.destroyed = value;
- }
- });
- Duplex.prototype._destroy = function (err, cb) {
- this.push(null);
- this.end();
- pna.nextTick(cb, err);
- };
- },{"./_stream_readable":400,"./_stream_writable":402,"core-util-is":219,"inherits":278,"process-nextick-args":357}],399:[function(require,module,exports){
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- // a passthrough stream.
- // basically just the most minimal sort of Transform stream.
- // Every written chunk gets output as-is.
- 'use strict';
- module.exports = PassThrough;
- var Transform = require('./_stream_transform');
- /*<replacement>*/
- var util = Object.create(require('core-util-is'));
- util.inherits = require('inherits');
- /*</replacement>*/
- util.inherits(PassThrough, Transform);
- function PassThrough(options) {
- if (!(this instanceof PassThrough)) return new PassThrough(options);
- Transform.call(this, options);
- }
- PassThrough.prototype._transform = function (chunk, encoding, cb) {
- cb(null, chunk);
- };
- },{"./_stream_transform":401,"core-util-is":219,"inherits":278}],400:[function(require,module,exports){
- (function (process,global){
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- 'use strict';
- /*<replacement>*/
- var pna = require('process-nextick-args');
- /*</replacement>*/
- module.exports = Readable;
- /*<replacement>*/
- var isArray = require('isarray');
- /*</replacement>*/
- /*<replacement>*/
- var Duplex;
- /*</replacement>*/
- Readable.ReadableState = ReadableState;
- /*<replacement>*/
- var EE = require('events').EventEmitter;
- var EElistenerCount = function EElistenerCount(emitter, type) {
- return emitter.listeners(type).length;
- };
- /*</replacement>*/
- /*<replacement>*/
- var Stream = require('./internal/streams/stream');
- /*</replacement>*/
- /*<replacement>*/
- var Buffer = require('safe-buffer').Buffer;
- var OurUint8Array = global.Uint8Array || function () {};
- function _uint8ArrayToBuffer(chunk) {
- return Buffer.from(chunk);
- }
- function _isUint8Array(obj) {
- return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
- }
- /*</replacement>*/
- /*<replacement>*/
- var util = Object.create(require('core-util-is'));
- util.inherits = require('inherits');
- /*</replacement>*/
- /*<replacement>*/
- var debugUtil = require('util');
- var debug = void 0;
- if (debugUtil && debugUtil.debuglog) {
- debug = debugUtil.debuglog('stream');
- } else {
- debug = function debug() {};
- }
- /*</replacement>*/
- var BufferList = require('./internal/streams/BufferList');
- var destroyImpl = require('./internal/streams/destroy');
- var StringDecoder;
- util.inherits(Readable, Stream);
- var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
- function prependListener(emitter, event, fn) {
- // Sadly this is not cacheable as some libraries bundle their own
- // event emitter implementation with them.
- if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any
- // userland ones. NEVER DO THIS. This is here only because this code needs
- // to continue to work with older versions of Node.js that do not include
- // the prependListener() method. The goal is to eventually remove this hack.
- if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
- }
- function ReadableState(options, stream) {
- Duplex = Duplex || require('./_stream_duplex');
- options = options || {}; // Duplex streams are both readable and writable, but share
- // the same options object.
- // However, some cases require setting options to different
- // values for the readable and the writable sides of the duplex stream.
- // These options can be provided separately as readableXXX and writableXXX.
- var isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to
- // make all the buffer merging and length checks go away
- this.objectMode = !!options.objectMode;
- if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer
- // Note: 0 is a valid value, means "don't call _read preemptively ever"
- var hwm = options.highWaterMark;
- var readableHwm = options.readableHighWaterMark;
- var defaultHwm = this.objectMode ? 16 : 16 * 1024;
- if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm; // cast to ints.
- this.highWaterMark = Math.floor(this.highWaterMark); // A linked list is used to store data chunks instead of an array because the
- // linked list can remove elements from the beginning faster than
- // array.shift()
- this.buffer = new BufferList();
- this.length = 0;
- this.pipes = null;
- this.pipesCount = 0;
- this.flowing = null;
- this.ended = false;
- this.endEmitted = false;
- this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted
- // immediately, or on a later tick. We set this to true at first, because
- // any actions that shouldn't happen until "later" should generally also
- // not happen before the first read call.
- this.sync = true; // whenever we return null, then we set a flag to say
- // that we're awaiting a 'readable' event emission.
- this.needReadable = false;
- this.emittedReadable = false;
- this.readableListening = false;
- this.resumeScheduled = false; // has it been destroyed
- this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string
- // encoding is 'binary' so we have to make this configurable.
- // Everything else in the universe uses 'utf8', though.
- this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s
- this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled
- this.readingMore = false;
- this.decoder = null;
- this.encoding = null;
- if (options.encoding) {
- if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
- this.decoder = new StringDecoder(options.encoding);
- this.encoding = options.encoding;
- }
- }
- function Readable(options) {
- Duplex = Duplex || require('./_stream_duplex');
- if (!(this instanceof Readable)) return new Readable(options);
- this._readableState = new ReadableState(options, this); // legacy
- this.readable = true;
- if (options) {
- if (typeof options.read === 'function') this._read = options.read;
- if (typeof options.destroy === 'function') this._destroy = options.destroy;
- }
- Stream.call(this);
- }
- Object.defineProperty(Readable.prototype, 'destroyed', {
- get: function get() {
- if (this._readableState === undefined) {
- return false;
- }
- return this._readableState.destroyed;
- },
- set: function set(value) {
- // we ignore the value if the stream
- // has not been initialized yet
- if (!this._readableState) {
- return;
- } // backward compatibility, the user is explicitly
- // managing destroyed
- this._readableState.destroyed = value;
- }
- });
- Readable.prototype.destroy = destroyImpl.destroy;
- Readable.prototype._undestroy = destroyImpl.undestroy;
- Readable.prototype._destroy = function (err, cb) {
- this.push(null);
- cb(err);
- }; // Manually shove something into the read() buffer.
- // This returns true if the highWaterMark has not been hit yet,
- // similar to how Writable.write() returns true if you should
- // write() some more.
- Readable.prototype.push = function (chunk, encoding) {
- var state = this._readableState;
- var skipChunkCheck;
- if (!state.objectMode) {
- if (typeof chunk === 'string') {
- encoding = encoding || state.defaultEncoding;
- if (encoding !== state.encoding) {
- chunk = Buffer.from(chunk, encoding);
- encoding = '';
- }
- skipChunkCheck = true;
- }
- } else {
- skipChunkCheck = true;
- }
- return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
- }; // Unshift should *always* be something directly out of read()
- Readable.prototype.unshift = function (chunk) {
- return readableAddChunk(this, chunk, null, true, false);
- };
- function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
- var state = stream._readableState;
- if (chunk === null) {
- state.reading = false;
- onEofChunk(stream, state);
- } else {
- var er;
- if (!skipChunkCheck) er = chunkInvalid(state, chunk);
- if (er) {
- stream.emit('error', er);
- } else if (state.objectMode || chunk && chunk.length > 0) {
- if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
- chunk = _uint8ArrayToBuffer(chunk);
- }
- if (addToFront) {
- if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);
- } else if (state.ended) {
- stream.emit('error', new Error('stream.push() after EOF'));
- } else {
- state.reading = false;
- if (state.decoder && !encoding) {
- chunk = state.decoder.write(chunk);
- if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
- } else {
- addChunk(stream, state, chunk, false);
- }
- }
- } else if (!addToFront) {
- state.reading = false;
- }
- }
- return needMoreData(state);
- }
- function addChunk(stream, state, chunk, addToFront) {
- if (state.flowing && state.length === 0 && !state.sync) {
- stream.emit('data', chunk);
- stream.read(0);
- } else {
- // update the buffer info.
- state.length += state.objectMode ? 1 : chunk.length;
- if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
- if (state.needReadable) emitReadable(stream);
- }
- maybeReadMore(stream, state);
- }
- function chunkInvalid(state, chunk) {
- var er;
- if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
- er = new TypeError('Invalid non-string/buffer chunk');
- }
- return er;
- } // if it's past the high water mark, we can push in some more.
- // Also, if we have no data yet, we can stand some
- // more bytes. This is to work around cases where hwm=0,
- // such as the repl. Also, if the push() triggered a
- // readable event, and the user called read(largeNumber) such that
- // needReadable was set, then we ought to push more, so that another
- // 'readable' event will be triggered.
- function needMoreData(state) {
- return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
- }
- Readable.prototype.isPaused = function () {
- return this._readableState.flowing === false;
- }; // backwards compatibility.
- Readable.prototype.setEncoding = function (enc) {
- if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
- this._readableState.decoder = new StringDecoder(enc);
- this._readableState.encoding = enc;
- return this;
- }; // Don't raise the hwm > 8MB
- var MAX_HWM = 0x800000;
- function computeNewHighWaterMark(n) {
- if (n >= MAX_HWM) {
- n = MAX_HWM;
- } else {
- // Get the next highest power of 2 to prevent increasing hwm excessively in
- // tiny amounts
- n--;
- n |= n >>> 1;
- n |= n >>> 2;
- n |= n >>> 4;
- n |= n >>> 8;
- n |= n >>> 16;
- n++;
- }
- return n;
- } // This function is designed to be inlinable, so please take care when making
- // changes to the function body.
- function howMuchToRead(n, state) {
- if (n <= 0 || state.length === 0 && state.ended) return 0;
- if (state.objectMode) return 1;
- if (n !== n) {
- // Only flow one buffer at a time
- if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
- } // If we're asking for more than the current hwm, then raise the hwm.
- if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
- if (n <= state.length) return n; // Don't have enough
- if (!state.ended) {
- state.needReadable = true;
- return 0;
- }
- return state.length;
- } // you can override either this method, or the async _read(n) below.
- Readable.prototype.read = function (n) {
- debug('read', n);
- n = parseInt(n, 10);
- var state = this._readableState;
- var nOrig = n;
- if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we
- // already have a bunch of data in the buffer, then just trigger
- // the 'readable' event and move on.
- if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
- debug('read: emitReadable', state.length, state.ended);
- if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
- return null;
- }
- n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.
- if (n === 0 && state.ended) {
- if (state.length === 0) endReadable(this);
- return null;
- } // All the actual chunk generation logic needs to be
- // *below* the call to _read. The reason is that in certain
- // synthetic stream cases, such as passthrough streams, _read
- // may be a completely synchronous operation which may change
- // the state of the read buffer, providing enough data when
- // before there was *not* enough.
- //
- // So, the steps are:
- // 1. Figure out what the state of things will be after we do
- // a read from the buffer.
- //
- // 2. If that resulting state will trigger a _read, then call _read.
- // Note that this may be asynchronous, or synchronous. Yes, it is
- // deeply ugly to write APIs this way, but that still doesn't mean
- // that the Readable class should behave improperly, as streams are
- // designed to be sync/async agnostic.
- // Take note if the _read call is sync or async (ie, if the read call
- // has returned yet), so that we know whether or not it's safe to emit
- // 'readable' etc.
- //
- // 3. Actually pull the requested chunks out of the buffer and return.
- // if we need a readable event, then we need to do some reading.
- var doRead = state.needReadable;
- debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some
- if (state.length === 0 || state.length - n < state.highWaterMark) {
- doRead = true;
- debug('length less than watermark', doRead);
- } // however, if we've ended, then there's no point, and if we're already
- // reading, then it's unnecessary.
- if (state.ended || state.reading) {
- doRead = false;
- debug('reading or ended', doRead);
- } else if (doRead) {
- debug('do read');
- state.reading = true;
- state.sync = true; // if the length is currently zero, then we *need* a readable event.
- if (state.length === 0) state.needReadable = true; // call internal read method
- this._read(state.highWaterMark);
- state.sync = false; // If _read pushed data synchronously, then `reading` will be false,
- // and we need to re-evaluate how much data we can return to the user.
- if (!state.reading) n = howMuchToRead(nOrig, state);
- }
- var ret;
- if (n > 0) ret = fromList(n, state);else ret = null;
- if (ret === null) {
- state.needReadable = true;
- n = 0;
- } else {
- state.length -= n;
- }
- if (state.length === 0) {
- // If we have nothing in the buffer, then we want to know
- // as soon as we *do* get something into the buffer.
- if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.
- if (nOrig !== n && state.ended) endReadable(this);
- }
- if (ret !== null) this.emit('data', ret);
- return ret;
- };
- function onEofChunk(stream, state) {
- if (state.ended) return;
- if (state.decoder) {
- var chunk = state.decoder.end();
- if (chunk && chunk.length) {
- state.buffer.push(chunk);
- state.length += state.objectMode ? 1 : chunk.length;
- }
- }
- state.ended = true; // emit 'readable' now to make sure it gets picked up.
- emitReadable(stream);
- } // Don't emit readable right away in sync mode, because this can trigger
- // another read() call => stack overflow. This way, it might trigger
- // a nextTick recursion warning, but that's not so bad.
- function emitReadable(stream) {
- var state = stream._readableState;
- state.needReadable = false;
- if (!state.emittedReadable) {
- debug('emitReadable', state.flowing);
- state.emittedReadable = true;
- if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);
- }
- }
- function emitReadable_(stream) {
- debug('emit readable');
- stream.emit('readable');
- flow(stream);
- } // at this point, the user has presumably seen the 'readable' event,
- // and called read() to consume some data. that may have triggered
- // in turn another _read(n) call, in which case reading = true if
- // it's in progress.
- // However, if we're not ended, or reading, and the length < hwm,
- // then go ahead and try to read some more preemptively.
- function maybeReadMore(stream, state) {
- if (!state.readingMore) {
- state.readingMore = true;
- pna.nextTick(maybeReadMore_, stream, state);
- }
- }
- function maybeReadMore_(stream, state) {
- var len = state.length;
- while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
- debug('maybeReadMore read 0');
- stream.read(0);
- if (len === state.length) // didn't get any data, stop spinning.
- break;else len = state.length;
- }
- state.readingMore = false;
- } // abstract method. to be overridden in specific implementation classes.
- // call cb(er, data) where data is <= n in length.
- // for virtual (non-string, non-buffer) streams, "length" is somewhat
- // arbitrary, and perhaps not very meaningful.
- Readable.prototype._read = function (n) {
- this.emit('error', new Error('_read() is not implemented'));
- };
- Readable.prototype.pipe = function (dest, pipeOpts) {
- var src = this;
- var state = this._readableState;
- switch (state.pipesCount) {
- case 0:
- state.pipes = dest;
- break;
- case 1:
- state.pipes = [state.pipes, dest];
- break;
- default:
- state.pipes.push(dest);
- break;
- }
- state.pipesCount += 1;
- debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
- var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
- var endFn = doEnd ? onend : unpipe;
- if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);
- dest.on('unpipe', onunpipe);
- function onunpipe(readable, unpipeInfo) {
- debug('onunpipe');
- if (readable === src) {
- if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
- unpipeInfo.hasUnpiped = true;
- cleanup();
- }
- }
- }
- function onend() {
- debug('onend');
- dest.end();
- } // when the dest drains, it reduces the awaitDrain counter
- // on the source. This would be more elegant with a .once()
- // handler in flow(), but adding and removing repeatedly is
- // too slow.
- var ondrain = pipeOnDrain(src);
- dest.on('drain', ondrain);
- var cleanedUp = false;
- function cleanup() {
- debug('cleanup'); // cleanup event handlers once the pipe is broken
- dest.removeListener('close', onclose);
- dest.removeListener('finish', onfinish);
- dest.removeListener('drain', ondrain);
- dest.removeListener('error', onerror);
- dest.removeListener('unpipe', onunpipe);
- src.removeListener('end', onend);
- src.removeListener('end', unpipe);
- src.removeListener('data', ondata);
- cleanedUp = true; // if the reader is waiting for a drain event from this
- // specific writer, then it would cause it to never start
- // flowing again.
- // So, if this is awaiting a drain, then we just call it now.
- // If we don't know, then assume that we are waiting for one.
- if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
- } // If the user pushes more data while we're writing to dest then we'll end up
- // in ondata again. However, we only want to increase awaitDrain once because
- // dest will only emit one 'drain' event for the multiple writes.
- // => Introduce a guard on increasing awaitDrain.
- var increasedAwaitDrain = false;
- src.on('data', ondata);
- function ondata(chunk) {
- debug('ondata');
- increasedAwaitDrain = false;
- var ret = dest.write(chunk);
- if (false === ret && !increasedAwaitDrain) {
- // If the user unpiped during `dest.write()`, it is possible
- // to get stuck in a permanently paused state if that write
- // also returned false.
- // => Check whether `dest` is still a piping destination.
- if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
- debug('false write response, pause', src._readableState.awaitDrain);
- src._readableState.awaitDrain++;
- increasedAwaitDrain = true;
- }
- src.pause();
- }
- } // if the dest has an error, then stop piping into it.
- // however, don't suppress the throwing behavior for this.
- function onerror(er) {
- debug('onerror', er);
- unpipe();
- dest.removeListener('error', onerror);
- if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
- } // Make sure our error handler is attached before userland ones.
- prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.
- function onclose() {
- dest.removeListener('finish', onfinish);
- unpipe();
- }
- dest.once('close', onclose);
- function onfinish() {
- debug('onfinish');
- dest.removeListener('close', onclose);
- unpipe();
- }
- dest.once('finish', onfinish);
- function unpipe() {
- debug('unpipe');
- src.unpipe(dest);
- } // tell the dest that it's being piped to
- dest.emit('pipe', src); // start the flow if it hasn't been started already.
- if (!state.flowing) {
- debug('pipe resume');
- src.resume();
- }
- return dest;
- };
- function pipeOnDrain(src) {
- return function () {
- var state = src._readableState;
- debug('pipeOnDrain', state.awaitDrain);
- if (state.awaitDrain) state.awaitDrain--;
- if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
- state.flowing = true;
- flow(src);
- }
- };
- }
- Readable.prototype.unpipe = function (dest) {
- var state = this._readableState;
- var unpipeInfo = {
- hasUnpiped: false
- }; // if we're not piping anywhere, then do nothing.
- if (state.pipesCount === 0) return this; // just one destination. most common case.
- if (state.pipesCount === 1) {
- // passed in one, but it's not the right one.
- if (dest && dest !== state.pipes) return this;
- if (!dest) dest = state.pipes; // got a match.
- state.pipes = null;
- state.pipesCount = 0;
- state.flowing = false;
- if (dest) dest.emit('unpipe', this, unpipeInfo);
- return this;
- } // slow case. multiple pipe destinations.
- if (!dest) {
- // remove all.
- var dests = state.pipes;
- var len = state.pipesCount;
- state.pipes = null;
- state.pipesCount = 0;
- state.flowing = false;
- for (var i = 0; i < len; i++) {
- dests[i].emit('unpipe', this, unpipeInfo);
- }
- return this;
- } // try to find the right one.
- var index = indexOf(state.pipes, dest);
- if (index === -1) return this;
- state.pipes.splice(index, 1);
- state.pipesCount -= 1;
- if (state.pipesCount === 1) state.pipes = state.pipes[0];
- dest.emit('unpipe', this, unpipeInfo);
- return this;
- }; // set up data events if they are asked for
- // Ensure readable listeners eventually get something
- Readable.prototype.on = function (ev, fn) {
- var res = Stream.prototype.on.call(this, ev, fn);
- if (ev === 'data') {
- // Start flowing on next tick if stream isn't explicitly paused
- if (this._readableState.flowing !== false) this.resume();
- } else if (ev === 'readable') {
- var state = this._readableState;
- if (!state.endEmitted && !state.readableListening) {
- state.readableListening = state.needReadable = true;
- state.emittedReadable = false;
- if (!state.reading) {
- pna.nextTick(nReadingNextTick, this);
- } else if (state.length) {
- emitReadable(this);
- }
- }
- }
- return res;
- };
- Readable.prototype.addListener = Readable.prototype.on;
- function nReadingNextTick(self) {
- debug('readable nexttick read 0');
- self.read(0);
- } // pause() and resume() are remnants of the legacy readable stream API
- // If the user uses them, then switch into old mode.
- Readable.prototype.resume = function () {
- var state = this._readableState;
- if (!state.flowing) {
- debug('resume');
- state.flowing = true;
- resume(this, state);
- }
- return this;
- };
- function resume(stream, state) {
- if (!state.resumeScheduled) {
- state.resumeScheduled = true;
- pna.nextTick(resume_, stream, state);
- }
- }
- function resume_(stream, state) {
- if (!state.reading) {
- debug('resume read 0');
- stream.read(0);
- }
- state.resumeScheduled = false;
- state.awaitDrain = 0;
- stream.emit('resume');
- flow(stream);
- if (state.flowing && !state.reading) stream.read(0);
- }
- Readable.prototype.pause = function () {
- debug('call pause flowing=%j', this._readableState.flowing);
- if (false !== this._readableState.flowing) {
- debug('pause');
- this._readableState.flowing = false;
- this.emit('pause');
- }
- return this;
- };
- function flow(stream) {
- var state = stream._readableState;
- debug('flow', state.flowing);
- while (state.flowing && stream.read() !== null) {}
- } // wrap an old-style stream as the async data source.
- // This is *not* part of the readable stream interface.
- // It is an ugly unfortunate mess of history.
- Readable.prototype.wrap = function (stream) {
- var _this = this;
- var state = this._readableState;
- var paused = false;
- stream.on('end', function () {
- debug('wrapped end');
- if (state.decoder && !state.ended) {
- var chunk = state.decoder.end();
- if (chunk && chunk.length) _this.push(chunk);
- }
- _this.push(null);
- });
- stream.on('data', function (chunk) {
- debug('wrapped data');
- if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode
- if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
- var ret = _this.push(chunk);
- if (!ret) {
- paused = true;
- stream.pause();
- }
- }); // proxy all the other methods.
- // important when wrapping filters and duplexes.
- for (var i in stream) {
- if (this[i] === undefined && typeof stream[i] === 'function') {
- this[i] = function (method) {
- return function () {
- return stream[method].apply(stream, arguments);
- };
- }(i);
- }
- } // proxy certain important events.
- for (var n = 0; n < kProxyEvents.length; n++) {
- stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));
- } // when we try to consume some more bytes, simply unpause the
- // underlying stream.
- this._read = function (n) {
- debug('wrapped _read', n);
- if (paused) {
- paused = false;
- stream.resume();
- }
- };
- return this;
- };
- Object.defineProperty(Readable.prototype, 'readableHighWaterMark', {
- // making it explicit this property is not enumerable
- // because otherwise some prototype manipulation in
- // userland will fail
- enumerable: false,
- get: function get() {
- return this._readableState.highWaterMark;
- }
- }); // exposed for testing purposes only.
- Readable._fromList = fromList; // Pluck off n bytes from an array of buffers.
- // Length is the combined lengths of all the buffers in the list.
- // This function is designed to be inlinable, so please take care when making
- // changes to the function body.
- function fromList(n, state) {
- // nothing buffered
- if (state.length === 0) return null;
- var ret;
- if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
- // read it all, truncate the list
- if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
- state.buffer.clear();
- } else {
- // read part of list
- ret = fromListPartial(n, state.buffer, state.decoder);
- }
- return ret;
- } // Extracts only enough buffered data to satisfy the amount requested.
- // This function is designed to be inlinable, so please take care when making
- // changes to the function body.
- function fromListPartial(n, list, hasStrings) {
- var ret;
- if (n < list.head.data.length) {
- // slice is the same for buffers and strings
- ret = list.head.data.slice(0, n);
- list.head.data = list.head.data.slice(n);
- } else if (n === list.head.data.length) {
- // first chunk is a perfect match
- ret = list.shift();
- } else {
- // result spans more than one buffer
- ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
- }
- return ret;
- } // Copies a specified amount of characters from the list of buffered data
- // chunks.
- // This function is designed to be inlinable, so please take care when making
- // changes to the function body.
- function copyFromBufferString(n, list) {
- var p = list.head;
- var c = 1;
- var ret = p.data;
- n -= ret.length;
- while (p = p.next) {
- var str = p.data;
- var nb = n > str.length ? str.length : n;
- if (nb === str.length) ret += str;else ret += str.slice(0, n);
- n -= nb;
- if (n === 0) {
- if (nb === str.length) {
- ++c;
- if (p.next) list.head = p.next;else list.head = list.tail = null;
- } else {
- list.head = p;
- p.data = str.slice(nb);
- }
- break;
- }
- ++c;
- }
- list.length -= c;
- return ret;
- } // Copies a specified amount of bytes from the list of buffered data chunks.
- // This function is designed to be inlinable, so please take care when making
- // changes to the function body.
- function copyFromBuffer(n, list) {
- var ret = Buffer.allocUnsafe(n);
- var p = list.head;
- var c = 1;
- p.data.copy(ret);
- n -= p.data.length;
- while (p = p.next) {
- var buf = p.data;
- var nb = n > buf.length ? buf.length : n;
- buf.copy(ret, ret.length - n, 0, nb);
- n -= nb;
- if (n === 0) {
- if (nb === buf.length) {
- ++c;
- if (p.next) list.head = p.next;else list.head = list.tail = null;
- } else {
- list.head = p;
- p.data = buf.slice(nb);
- }
- break;
- }
- ++c;
- }
- list.length -= c;
- return ret;
- }
- function endReadable(stream) {
- var state = stream._readableState; // If we get here before consuming all the bytes, then that is a
- // bug in node. Should never happen.
- if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
- if (!state.endEmitted) {
- state.ended = true;
- pna.nextTick(endReadableNT, state, stream);
- }
- }
- function endReadableNT(state, stream) {
- // Check that we didn't get one last unshift.
- if (!state.endEmitted && state.length === 0) {
- state.endEmitted = true;
- stream.readable = false;
- stream.emit('end');
- }
- }
- function indexOf(xs, x) {
- for (var i = 0, l = xs.length; i < l; i++) {
- if (xs[i] === x) return i;
- }
- return -1;
- }
- }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{"./_stream_duplex":398,"./internal/streams/BufferList":403,"./internal/streams/destroy":404,"./internal/streams/stream":405,"_process":358,"core-util-is":219,"events":258,"inherits":278,"isarray":280,"process-nextick-args":357,"safe-buffer":384,"string_decoder/":410,"util":185}],401:[function(require,module,exports){
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- // a transform stream is a readable/writable stream where you do
- // something with the data. Sometimes it's called a "filter",
- // but that's not a great name for it, since that implies a thing where
- // some bits pass through, and others are simply ignored. (That would
- // be a valid example of a transform, of course.)
- //
- // While the output is causally related to the input, it's not a
- // necessarily symmetric or synchronous transformation. For example,
- // a zlib stream might take multiple plain-text writes(), and then
- // emit a single compressed chunk some time in the future.
- //
- // Here's how this works:
- //
- // The Transform stream has all the aspects of the readable and writable
- // stream classes. When you write(chunk), that calls _write(chunk,cb)
- // internally, and returns false if there's a lot of pending writes
- // buffered up. When you call read(), that calls _read(n) until
- // there's enough pending readable data buffered up.
- //
- // In a transform stream, the written data is placed in a buffer. When
- // _read(n) is called, it transforms the queued up data, calling the
- // buffered _write cb's as it consumes chunks. If consuming a single
- // written chunk would result in multiple output chunks, then the first
- // outputted bit calls the readcb, and subsequent chunks just go into
- // the read buffer, and will cause it to emit 'readable' if necessary.
- //
- // This way, back-pressure is actually determined by the reading side,
- // since _read has to be called to start processing a new chunk. However,
- // a pathological inflate type of transform can cause excessive buffering
- // here. For example, imagine a stream where every byte of input is
- // interpreted as an integer from 0-255, and then results in that many
- // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
- // 1kb of data being output. In this case, you could write a very small
- // amount of input, and end up with a very large amount of output. In
- // such a pathological inflating mechanism, there'd be no way to tell
- // the system to stop doing the transform. A single 4MB write could
- // cause the system to run out of memory.
- //
- // However, even in such a pathological case, only a single written chunk
- // would be consumed, and then the rest would wait (un-transformed) until
- // the results of the previous transformed chunk were consumed.
- 'use strict';
- module.exports = Transform;
- var Duplex = require('./_stream_duplex');
- /*<replacement>*/
- var util = Object.create(require('core-util-is'));
- util.inherits = require('inherits');
- /*</replacement>*/
- util.inherits(Transform, Duplex);
- function afterTransform(er, data) {
- var ts = this._transformState;
- ts.transforming = false;
- var cb = ts.writecb;
- if (!cb) {
- return this.emit('error', new Error('write callback called multiple times'));
- }
- ts.writechunk = null;
- ts.writecb = null;
- if (data != null) // single equals check for both `null` and `undefined`
- this.push(data);
- cb(er);
- var rs = this._readableState;
- rs.reading = false;
- if (rs.needReadable || rs.length < rs.highWaterMark) {
- this._read(rs.highWaterMark);
- }
- }
- function Transform(options) {
- if (!(this instanceof Transform)) return new Transform(options);
- Duplex.call(this, options);
- this._transformState = {
- afterTransform: afterTransform.bind(this),
- needTransform: false,
- transforming: false,
- writecb: null,
- writechunk: null,
- writeencoding: null
- }; // start out asking for a readable event once data is transformed.
- this._readableState.needReadable = true; // we have implemented the _read method, and done the other things
- // that Readable wants before the first _read call, so unset the
- // sync guard flag.
- this._readableState.sync = false;
- if (options) {
- if (typeof options.transform === 'function') this._transform = options.transform;
- if (typeof options.flush === 'function') this._flush = options.flush;
- } // When the writable side finishes, then flush out anything remaining.
- this.on('prefinish', prefinish);
- }
- function prefinish() {
- var _this = this;
- if (typeof this._flush === 'function') {
- this._flush(function (er, data) {
- done(_this, er, data);
- });
- } else {
- done(this, null, null);
- }
- }
- Transform.prototype.push = function (chunk, encoding) {
- this._transformState.needTransform = false;
- return Duplex.prototype.push.call(this, chunk, encoding);
- }; // This is the part where you do stuff!
- // override this function in implementation classes.
- // 'chunk' is an input chunk.
- //
- // Call `push(newChunk)` to pass along transformed output
- // to the readable side. You may call 'push' zero or more times.
- //
- // Call `cb(err)` when you are done with this chunk. If you pass
- // an error, then that'll put the hurt on the whole operation. If you
- // never call cb(), then you'll never get another chunk.
- Transform.prototype._transform = function (chunk, encoding, cb) {
- throw new Error('_transform() is not implemented');
- };
- Transform.prototype._write = function (chunk, encoding, cb) {
- var ts = this._transformState;
- ts.writecb = cb;
- ts.writechunk = chunk;
- ts.writeencoding = encoding;
- if (!ts.transforming) {
- var rs = this._readableState;
- if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
- }
- }; // Doesn't matter what the args are here.
- // _transform does all the work.
- // That we got here means that the readable side wants more data.
- Transform.prototype._read = function (n) {
- var ts = this._transformState;
- if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
- ts.transforming = true;
- this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
- } else {
- // mark that we need a transform, so that any data that comes in
- // will get processed, now that we've asked for it.
- ts.needTransform = true;
- }
- };
- Transform.prototype._destroy = function (err, cb) {
- var _this2 = this;
- Duplex.prototype._destroy.call(this, err, function (err2) {
- cb(err2);
- _this2.emit('close');
- });
- };
- function done(stream, er, data) {
- if (er) return stream.emit('error', er);
- if (data != null) // single equals check for both `null` and `undefined`
- stream.push(data); // if there's nothing in the write buffer, then that means
- // that nothing more will ever be provided
- if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');
- if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');
- return stream.push(null);
- }
- },{"./_stream_duplex":398,"core-util-is":219,"inherits":278}],402:[function(require,module,exports){
- (function (process,global,setImmediate){
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- // A bit simpler than readable streams.
- // Implement an async ._write(chunk, encoding, cb), and it'll handle all
- // the drain event emission and buffering.
- 'use strict';
- /*<replacement>*/
- var pna = require('process-nextick-args');
- /*</replacement>*/
- module.exports = Writable;
- /* <replacement> */
- function WriteReq(chunk, encoding, cb) {
- this.chunk = chunk;
- this.encoding = encoding;
- this.callback = cb;
- this.next = null;
- } // It seems a linked list but it is not
- // there will be only 2 of these for each stream
- function CorkedRequest(state) {
- var _this = this;
- this.next = null;
- this.entry = null;
- this.finish = function () {
- onCorkedFinish(_this, state);
- };
- }
- /* </replacement> */
- /*<replacement>*/
- var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;
- /*</replacement>*/
- /*<replacement>*/
- var Duplex;
- /*</replacement>*/
- Writable.WritableState = WritableState;
- /*<replacement>*/
- var util = Object.create(require('core-util-is'));
- util.inherits = require('inherits');
- /*</replacement>*/
- /*<replacement>*/
- var internalUtil = {
- deprecate: require('util-deprecate')
- };
- /*</replacement>*/
- /*<replacement>*/
- var Stream = require('./internal/streams/stream');
- /*</replacement>*/
- /*<replacement>*/
- var Buffer = require('safe-buffer').Buffer;
- var OurUint8Array = global.Uint8Array || function () {};
- function _uint8ArrayToBuffer(chunk) {
- return Buffer.from(chunk);
- }
- function _isUint8Array(obj) {
- return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
- }
- /*</replacement>*/
- var destroyImpl = require('./internal/streams/destroy');
- util.inherits(Writable, Stream);
- function nop() {}
- function WritableState(options, stream) {
- Duplex = Duplex || require('./_stream_duplex');
- options = options || {}; // Duplex streams are both readable and writable, but share
- // the same options object.
- // However, some cases require setting options to different
- // values for the readable and the writable sides of the duplex stream.
- // These options can be provided separately as readableXXX and writableXXX.
- var isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream
- // contains buffers or objects.
- this.objectMode = !!options.objectMode;
- if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false
- // Note: 0 is a valid value, means that we always return false if
- // the entire buffer is not flushed immediately on write()
- var hwm = options.highWaterMark;
- var writableHwm = options.writableHighWaterMark;
- var defaultHwm = this.objectMode ? 16 : 16 * 1024;
- if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm; // cast to ints.
- this.highWaterMark = Math.floor(this.highWaterMark); // if _final has been called
- this.finalCalled = false; // drain event flag.
- this.needDrain = false; // at the start of calling end()
- this.ending = false; // when end() has been called, and returned
- this.ended = false; // when 'finish' is emitted
- this.finished = false; // has it been destroyed
- this.destroyed = false; // should we decode strings into buffers before passing to _write?
- // this is here so that some node-core streams can optimize string
- // handling at a lower level.
- var noDecode = options.decodeStrings === false;
- this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string
- // encoding is 'binary' so we have to make this configurable.
- // Everything else in the universe uses 'utf8', though.
- this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement
- // of how much we're waiting to get pushed to some underlying
- // socket or file.
- this.length = 0; // a flag to see when we're in the middle of a write.
- this.writing = false; // when true all writes will be buffered until .uncork() call
- this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,
- // or on a later tick. We set this to true at first, because any
- // actions that shouldn't happen until "later" should generally also
- // not happen before the first write call.
- this.sync = true; // a flag to know if we're processing previously buffered items, which
- // may call the _write() callback in the same tick, so that we don't
- // end up in an overlapped onwrite situation.
- this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)
- this.onwrite = function (er) {
- onwrite(stream, er);
- }; // the callback that the user supplies to write(chunk,encoding,cb)
- this.writecb = null; // the amount that is being written when _write is called.
- this.writelen = 0;
- this.bufferedRequest = null;
- this.lastBufferedRequest = null; // number of pending user-supplied write callbacks
- // this must be 0 before 'finish' can be emitted
- this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs
- // This is relevant for synchronous Transform streams
- this.prefinished = false; // True if the error was already emitted and should not be thrown again
- this.errorEmitted = false; // count buffered requests
- this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always
- // one allocated and free to use, and we maintain at most two
- this.corkedRequestsFree = new CorkedRequest(this);
- }
- WritableState.prototype.getBuffer = function getBuffer() {
- var current = this.bufferedRequest;
- var out = [];
- while (current) {
- out.push(current);
- current = current.next;
- }
- return out;
- };
- (function () {
- try {
- Object.defineProperty(WritableState.prototype, 'buffer', {
- get: internalUtil.deprecate(function () {
- return this.getBuffer();
- }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
- });
- } catch (_) {}
- })(); // Test _writableState for inheritance to account for Duplex streams,
- // whose prototype chain only points to Readable.
- var realHasInstance;
- if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
- realHasInstance = Function.prototype[Symbol.hasInstance];
- Object.defineProperty(Writable, Symbol.hasInstance, {
- value: function value(object) {
- if (realHasInstance.call(this, object)) return true;
- if (this !== Writable) return false;
- return object && object._writableState instanceof WritableState;
- }
- });
- } else {
- realHasInstance = function realHasInstance(object) {
- return object instanceof this;
- };
- }
- function Writable(options) {
- Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.
- // `realHasInstance` is necessary because using plain `instanceof`
- // would return false, as no `_writableState` property is attached.
- // Trying to use the custom `instanceof` for Writable here will also break the
- // Node.js LazyTransform implementation, which has a non-trivial getter for
- // `_writableState` that would lead to infinite recursion.
- if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
- return new Writable(options);
- }
- this._writableState = new WritableState(options, this); // legacy.
- this.writable = true;
- if (options) {
- if (typeof options.write === 'function') this._write = options.write;
- if (typeof options.writev === 'function') this._writev = options.writev;
- if (typeof options.destroy === 'function') this._destroy = options.destroy;
- if (typeof options.final === 'function') this._final = options.final;
- }
- Stream.call(this);
- } // Otherwise people can pipe Writable streams, which is just wrong.
- Writable.prototype.pipe = function () {
- this.emit('error', new Error('Cannot pipe, not readable'));
- };
- function writeAfterEnd(stream, cb) {
- var er = new Error('write after end'); // TODO: defer error events consistently everywhere, not just the cb
- stream.emit('error', er);
- pna.nextTick(cb, er);
- } // Checks that a user-supplied chunk is valid, especially for the particular
- // mode the stream is in. Currently this means that `null` is never accepted
- // and undefined/non-string values are only allowed in object mode.
- function validChunk(stream, state, chunk, cb) {
- var valid = true;
- var er = false;
- if (chunk === null) {
- er = new TypeError('May not write null values to stream');
- } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
- er = new TypeError('Invalid non-string/buffer chunk');
- }
- if (er) {
- stream.emit('error', er);
- pna.nextTick(cb, er);
- valid = false;
- }
- return valid;
- }
- Writable.prototype.write = function (chunk, encoding, cb) {
- var state = this._writableState;
- var ret = false;
- var isBuf = !state.objectMode && _isUint8Array(chunk);
- if (isBuf && !Buffer.isBuffer(chunk)) {
- chunk = _uint8ArrayToBuffer(chunk);
- }
- if (typeof encoding === 'function') {
- cb = encoding;
- encoding = null;
- }
- if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
- if (typeof cb !== 'function') cb = nop;
- if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
- state.pendingcb++;
- ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
- }
- return ret;
- };
- Writable.prototype.cork = function () {
- var state = this._writableState;
- state.corked++;
- };
- Writable.prototype.uncork = function () {
- var state = this._writableState;
- if (state.corked) {
- state.corked--;
- if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
- }
- };
- Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
- // node::ParseEncoding() requires lower case.
- if (typeof encoding === 'string') encoding = encoding.toLowerCase();
- if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
- this._writableState.defaultEncoding = encoding;
- return this;
- };
- function decodeChunk(state, chunk, encoding) {
- if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
- chunk = Buffer.from(chunk, encoding);
- }
- return chunk;
- }
- Object.defineProperty(Writable.prototype, 'writableHighWaterMark', {
- // making it explicit this property is not enumerable
- // because otherwise some prototype manipulation in
- // userland will fail
- enumerable: false,
- get: function get() {
- return this._writableState.highWaterMark;
- }
- }); // if we're already writing something, then just put this
- // in the queue, and wait our turn. Otherwise, call _write
- // If we return false, then we need a drain event, so set that flag.
- function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
- if (!isBuf) {
- var newChunk = decodeChunk(state, chunk, encoding);
- if (chunk !== newChunk) {
- isBuf = true;
- encoding = 'buffer';
- chunk = newChunk;
- }
- }
- var len = state.objectMode ? 1 : chunk.length;
- state.length += len;
- var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.
- if (!ret) state.needDrain = true;
- if (state.writing || state.corked) {
- var last = state.lastBufferedRequest;
- state.lastBufferedRequest = {
- chunk: chunk,
- encoding: encoding,
- isBuf: isBuf,
- callback: cb,
- next: null
- };
- if (last) {
- last.next = state.lastBufferedRequest;
- } else {
- state.bufferedRequest = state.lastBufferedRequest;
- }
- state.bufferedRequestCount += 1;
- } else {
- doWrite(stream, state, false, len, chunk, encoding, cb);
- }
- return ret;
- }
- function doWrite(stream, state, writev, len, chunk, encoding, cb) {
- state.writelen = len;
- state.writecb = cb;
- state.writing = true;
- state.sync = true;
- if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
- state.sync = false;
- }
- function onwriteError(stream, state, sync, er, cb) {
- --state.pendingcb;
- if (sync) {
- // defer the callback if we are being called synchronously
- // to avoid piling up things on the stack
- pna.nextTick(cb, er); // this can emit finish, and it will always happen
- // after error
- pna.nextTick(finishMaybe, stream, state);
- stream._writableState.errorEmitted = true;
- stream.emit('error', er);
- } else {
- // the caller expect this to happen before if
- // it is async
- cb(er);
- stream._writableState.errorEmitted = true;
- stream.emit('error', er); // this can emit finish, but finish must
- // always follow error
- finishMaybe(stream, state);
- }
- }
- function onwriteStateUpdate(state) {
- state.writing = false;
- state.writecb = null;
- state.length -= state.writelen;
- state.writelen = 0;
- }
- function onwrite(stream, er) {
- var state = stream._writableState;
- var sync = state.sync;
- var cb = state.writecb;
- onwriteStateUpdate(state);
- if (er) onwriteError(stream, state, sync, er, cb);else {
- // Check if we're actually ready to finish, but don't emit yet
- var finished = needFinish(state);
- if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
- clearBuffer(stream, state);
- }
- if (sync) {
- /*<replacement>*/
- asyncWrite(afterWrite, stream, state, finished, cb);
- /*</replacement>*/
- } else {
- afterWrite(stream, state, finished, cb);
- }
- }
- }
- function afterWrite(stream, state, finished, cb) {
- if (!finished) onwriteDrain(stream, state);
- state.pendingcb--;
- cb();
- finishMaybe(stream, state);
- } // Must force callback to be called on nextTick, so that we don't
- // emit 'drain' before the write() consumer gets the 'false' return
- // value, and has a chance to attach a 'drain' listener.
- function onwriteDrain(stream, state) {
- if (state.length === 0 && state.needDrain) {
- state.needDrain = false;
- stream.emit('drain');
- }
- } // if there's something in the buffer waiting, then process it
- function clearBuffer(stream, state) {
- state.bufferProcessing = true;
- var entry = state.bufferedRequest;
- if (stream._writev && entry && entry.next) {
- // Fast case, write everything using _writev()
- var l = state.bufferedRequestCount;
- var buffer = new Array(l);
- var holder = state.corkedRequestsFree;
- holder.entry = entry;
- var count = 0;
- var allBuffers = true;
- while (entry) {
- buffer[count] = entry;
- if (!entry.isBuf) allBuffers = false;
- entry = entry.next;
- count += 1;
- }
- buffer.allBuffers = allBuffers;
- doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time
- // as the hot path ends with doWrite
- state.pendingcb++;
- state.lastBufferedRequest = null;
- if (holder.next) {
- state.corkedRequestsFree = holder.next;
- holder.next = null;
- } else {
- state.corkedRequestsFree = new CorkedRequest(state);
- }
- state.bufferedRequestCount = 0;
- } else {
- // Slow case, write chunks one-by-one
- while (entry) {
- var chunk = entry.chunk;
- var encoding = entry.encoding;
- var cb = entry.callback;
- var len = state.objectMode ? 1 : chunk.length;
- doWrite(stream, state, false, len, chunk, encoding, cb);
- entry = entry.next;
- state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then
- // it means that we need to wait until it does.
- // also, that means that the chunk and cb are currently
- // being processed, so move the buffer counter past them.
- if (state.writing) {
- break;
- }
- }
- if (entry === null) state.lastBufferedRequest = null;
- }
- state.bufferedRequest = entry;
- state.bufferProcessing = false;
- }
- Writable.prototype._write = function (chunk, encoding, cb) {
- cb(new Error('_write() is not implemented'));
- };
- Writable.prototype._writev = null;
- Writable.prototype.end = function (chunk, encoding, cb) {
- var state = this._writableState;
- if (typeof chunk === 'function') {
- cb = chunk;
- chunk = null;
- encoding = null;
- } else if (typeof encoding === 'function') {
- cb = encoding;
- encoding = null;
- }
- if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks
- if (state.corked) {
- state.corked = 1;
- this.uncork();
- } // ignore unnecessary end() calls.
- if (!state.ending && !state.finished) endWritable(this, state, cb);
- };
- function needFinish(state) {
- return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
- }
- function callFinal(stream, state) {
- stream._final(function (err) {
- state.pendingcb--;
- if (err) {
- stream.emit('error', err);
- }
- state.prefinished = true;
- stream.emit('prefinish');
- finishMaybe(stream, state);
- });
- }
- function prefinish(stream, state) {
- if (!state.prefinished && !state.finalCalled) {
- if (typeof stream._final === 'function') {
- state.pendingcb++;
- state.finalCalled = true;
- pna.nextTick(callFinal, stream, state);
- } else {
- state.prefinished = true;
- stream.emit('prefinish');
- }
- }
- }
- function finishMaybe(stream, state) {
- var need = needFinish(state);
- if (need) {
- prefinish(stream, state);
- if (state.pendingcb === 0) {
- state.finished = true;
- stream.emit('finish');
- }
- }
- return need;
- }
- function endWritable(stream, state, cb) {
- state.ending = true;
- finishMaybe(stream, state);
- if (cb) {
- if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);
- }
- state.ended = true;
- stream.writable = false;
- }
- function onCorkedFinish(corkReq, state, err) {
- var entry = corkReq.entry;
- corkReq.entry = null;
- while (entry) {
- var cb = entry.callback;
- state.pendingcb--;
- cb(err);
- entry = entry.next;
- }
- if (state.corkedRequestsFree) {
- state.corkedRequestsFree.next = corkReq;
- } else {
- state.corkedRequestsFree = corkReq;
- }
- }
- Object.defineProperty(Writable.prototype, 'destroyed', {
- get: function get() {
- if (this._writableState === undefined) {
- return false;
- }
- return this._writableState.destroyed;
- },
- set: function set(value) {
- // we ignore the value if the stream
- // has not been initialized yet
- if (!this._writableState) {
- return;
- } // backward compatibility, the user is explicitly
- // managing destroyed
- this._writableState.destroyed = value;
- }
- });
- Writable.prototype.destroy = destroyImpl.destroy;
- Writable.prototype._undestroy = destroyImpl.undestroy;
- Writable.prototype._destroy = function (err, cb) {
- this.end();
- cb(err);
- };
- }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("timers").setImmediate)
- },{"./_stream_duplex":398,"./internal/streams/destroy":404,"./internal/streams/stream":405,"_process":358,"core-util-is":219,"inherits":278,"process-nextick-args":357,"safe-buffer":384,"timers":411,"util-deprecate":412}],403:[function(require,module,exports){
- 'use strict';
- function _classCallCheck(instance, Constructor) {
- if (!(instance instanceof Constructor)) {
- throw new TypeError("Cannot call a class as a function");
- }
- }
- var Buffer = require('safe-buffer').Buffer;
- var util = require('util');
- function copyBuffer(src, target, offset) {
- src.copy(target, offset);
- }
- module.exports = function () {
- function BufferList() {
- _classCallCheck(this, BufferList);
- this.head = null;
- this.tail = null;
- this.length = 0;
- }
- BufferList.prototype.push = function push(v) {
- var entry = {
- data: v,
- next: null
- };
- if (this.length > 0) this.tail.next = entry;else this.head = entry;
- this.tail = entry;
- ++this.length;
- };
- BufferList.prototype.unshift = function unshift(v) {
- var entry = {
- data: v,
- next: this.head
- };
- if (this.length === 0) this.tail = entry;
- this.head = entry;
- ++this.length;
- };
- BufferList.prototype.shift = function shift() {
- if (this.length === 0) return;
- var ret = this.head.data;
- if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
- --this.length;
- return ret;
- };
- BufferList.prototype.clear = function clear() {
- this.head = this.tail = null;
- this.length = 0;
- };
- BufferList.prototype.join = function join(s) {
- if (this.length === 0) return '';
- var p = this.head;
- var ret = '' + p.data;
- while (p = p.next) {
- ret += s + p.data;
- }
- return ret;
- };
- BufferList.prototype.concat = function concat(n) {
- if (this.length === 0) return Buffer.alloc(0);
- if (this.length === 1) return this.head.data;
- var ret = Buffer.allocUnsafe(n >>> 0);
- var p = this.head;
- var i = 0;
- while (p) {
- copyBuffer(p.data, ret, i);
- i += p.data.length;
- p = p.next;
- }
- return ret;
- };
- return BufferList;
- }();
- if (util && util.inspect && util.inspect.custom) {
- module.exports.prototype[util.inspect.custom] = function () {
- var obj = util.inspect({
- length: this.length
- });
- return this.constructor.name + ' ' + obj;
- };
- }
- },{"safe-buffer":384,"util":185}],404:[function(require,module,exports){
- 'use strict';
- /*<replacement>*/
- var pna = require('process-nextick-args');
- /*</replacement>*/
- // undocumented cb() API, needed for core, not for public API
- function destroy(err, cb) {
- var _this = this;
- var readableDestroyed = this._readableState && this._readableState.destroyed;
- var writableDestroyed = this._writableState && this._writableState.destroyed;
- if (readableDestroyed || writableDestroyed) {
- if (cb) {
- cb(err);
- } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {
- pna.nextTick(emitErrorNT, this, err);
- }
- return this;
- } // we set destroyed to true before firing error callbacks in order
- // to make it re-entrance safe in case destroy() is called within callbacks
- if (this._readableState) {
- this._readableState.destroyed = true;
- } // if this is a duplex stream mark the writable part as destroyed as well
- if (this._writableState) {
- this._writableState.destroyed = true;
- }
- this._destroy(err || null, function (err) {
- if (!cb && err) {
- pna.nextTick(emitErrorNT, _this, err);
- if (_this._writableState) {
- _this._writableState.errorEmitted = true;
- }
- } else if (cb) {
- cb(err);
- }
- });
- return this;
- }
- function undestroy() {
- if (this._readableState) {
- this._readableState.destroyed = false;
- this._readableState.reading = false;
- this._readableState.ended = false;
- this._readableState.endEmitted = false;
- }
- if (this._writableState) {
- this._writableState.destroyed = false;
- this._writableState.ended = false;
- this._writableState.ending = false;
- this._writableState.finished = false;
- this._writableState.errorEmitted = false;
- }
- }
- function emitErrorNT(self, err) {
- self.emit('error', err);
- }
- module.exports = {
- destroy: destroy,
- undestroy: undestroy
- };
- },{"process-nextick-args":357}],405:[function(require,module,exports){
- arguments[4][381][0].apply(exports,arguments)
- },{"dup":381,"events":258}],406:[function(require,module,exports){
- "use strict";
- module.exports = require('./readable').PassThrough;
- },{"./readable":407}],407:[function(require,module,exports){
- "use strict";
- exports = module.exports = require('./lib/_stream_readable.js');
- exports.Stream = exports;
- exports.Readable = exports;
- exports.Writable = require('./lib/_stream_writable.js');
- exports.Duplex = require('./lib/_stream_duplex.js');
- exports.Transform = require('./lib/_stream_transform.js');
- exports.PassThrough = require('./lib/_stream_passthrough.js');
- },{"./lib/_stream_duplex.js":398,"./lib/_stream_passthrough.js":399,"./lib/_stream_readable.js":400,"./lib/_stream_transform.js":401,"./lib/_stream_writable.js":402}],408:[function(require,module,exports){
- "use strict";
- module.exports = require('./readable').Transform;
- },{"./readable":407}],409:[function(require,module,exports){
- "use strict";
- module.exports = require('./lib/_stream_writable.js');
- },{"./lib/_stream_writable.js":402}],410:[function(require,module,exports){
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- 'use strict';
- /*<replacement>*/
- var Buffer = require('safe-buffer').Buffer;
- /*</replacement>*/
- var isEncoding = Buffer.isEncoding || function (encoding) {
- encoding = '' + encoding;
- switch (encoding && encoding.toLowerCase()) {
- case 'hex':
- case 'utf8':
- case 'utf-8':
- case 'ascii':
- case 'binary':
- case 'base64':
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- case 'raw':
- return true;
- default:
- return false;
- }
- };
- function _normalizeEncoding(enc) {
- if (!enc) return 'utf8';
- var retried;
- while (true) {
- switch (enc) {
- case 'utf8':
- case 'utf-8':
- return 'utf8';
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return 'utf16le';
- case 'latin1':
- case 'binary':
- return 'latin1';
- case 'base64':
- case 'ascii':
- case 'hex':
- return enc;
- default:
- if (retried) return; // undefined
- enc = ('' + enc).toLowerCase();
- retried = true;
- }
- }
- }
- ; // Do not cache `Buffer.isEncoding` when checking encoding names as some
- // modules monkey-patch it to support additional encodings
- function normalizeEncoding(enc) {
- var nenc = _normalizeEncoding(enc);
- if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
- return nenc || enc;
- } // StringDecoder provides an interface for efficiently splitting a series of
- // buffers into a series of JS strings without breaking apart multi-byte
- // characters.
- exports.StringDecoder = StringDecoder;
- function StringDecoder(encoding) {
- this.encoding = normalizeEncoding(encoding);
- var nb;
- switch (this.encoding) {
- case 'utf16le':
- this.text = utf16Text;
- this.end = utf16End;
- nb = 4;
- break;
- case 'utf8':
- this.fillLast = utf8FillLast;
- nb = 4;
- break;
- case 'base64':
- this.text = base64Text;
- this.end = base64End;
- nb = 3;
- break;
- default:
- this.write = simpleWrite;
- this.end = simpleEnd;
- return;
- }
- this.lastNeed = 0;
- this.lastTotal = 0;
- this.lastChar = Buffer.allocUnsafe(nb);
- }
- StringDecoder.prototype.write = function (buf) {
- if (buf.length === 0) return '';
- var r;
- var i;
- if (this.lastNeed) {
- r = this.fillLast(buf);
- if (r === undefined) return '';
- i = this.lastNeed;
- this.lastNeed = 0;
- } else {
- i = 0;
- }
- if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
- return r || '';
- };
- StringDecoder.prototype.end = utf8End; // Returns only complete characters in a Buffer
- StringDecoder.prototype.text = utf8Text; // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
- StringDecoder.prototype.fillLast = function (buf) {
- if (this.lastNeed <= buf.length) {
- buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
- return this.lastChar.toString(this.encoding, 0, this.lastTotal);
- }
- buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
- this.lastNeed -= buf.length;
- }; // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
- // continuation byte. If an invalid byte is detected, -2 is returned.
- function utf8CheckByte(byte) {
- if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
- return byte >> 6 === 0x02 ? -1 : -2;
- } // Checks at most 3 bytes at the end of a Buffer in order to detect an
- // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
- // needed to complete the UTF-8 character (if applicable) are returned.
- function utf8CheckIncomplete(self, buf, i) {
- var j = buf.length - 1;
- if (j < i) return 0;
- var nb = utf8CheckByte(buf[j]);
- if (nb >= 0) {
- if (nb > 0) self.lastNeed = nb - 1;
- return nb;
- }
- if (--j < i || nb === -2) return 0;
- nb = utf8CheckByte(buf[j]);
- if (nb >= 0) {
- if (nb > 0) self.lastNeed = nb - 2;
- return nb;
- }
- if (--j < i || nb === -2) return 0;
- nb = utf8CheckByte(buf[j]);
- if (nb >= 0) {
- if (nb > 0) {
- if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
- }
- return nb;
- }
- return 0;
- } // Validates as many continuation bytes for a multi-byte UTF-8 character as
- // needed or are available. If we see a non-continuation byte where we expect
- // one, we "replace" the validated continuation bytes we've seen so far with
- // a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding
- // behavior. The continuation byte check is included three times in the case
- // where all of the continuation bytes for a character exist in the same buffer.
- // It is also done this way as a slight performance increase instead of using a
- // loop.
- function utf8CheckExtraBytes(self, buf, p) {
- if ((buf[0] & 0xC0) !== 0x80) {
- self.lastNeed = 0;
- return "\uFFFD";
- }
- if (self.lastNeed > 1 && buf.length > 1) {
- if ((buf[1] & 0xC0) !== 0x80) {
- self.lastNeed = 1;
- return "\uFFFD";
- }
- if (self.lastNeed > 2 && buf.length > 2) {
- if ((buf[2] & 0xC0) !== 0x80) {
- self.lastNeed = 2;
- return "\uFFFD";
- }
- }
- }
- } // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
- function utf8FillLast(buf) {
- var p = this.lastTotal - this.lastNeed;
- var r = utf8CheckExtraBytes(this, buf, p);
- if (r !== undefined) return r;
- if (this.lastNeed <= buf.length) {
- buf.copy(this.lastChar, p, 0, this.lastNeed);
- return this.lastChar.toString(this.encoding, 0, this.lastTotal);
- }
- buf.copy(this.lastChar, p, 0, buf.length);
- this.lastNeed -= buf.length;
- } // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
- // partial character, the character's bytes are buffered until the required
- // number of bytes are available.
- function utf8Text(buf, i) {
- var total = utf8CheckIncomplete(this, buf, i);
- if (!this.lastNeed) return buf.toString('utf8', i);
- this.lastTotal = total;
- var end = buf.length - (total - this.lastNeed);
- buf.copy(this.lastChar, 0, end);
- return buf.toString('utf8', i, end);
- } // For UTF-8, a replacement character is added when ending on a partial
- // character.
- function utf8End(buf) {
- var r = buf && buf.length ? this.write(buf) : '';
- if (this.lastNeed) return r + "\uFFFD";
- return r;
- } // UTF-16LE typically needs two bytes per character, but even if we have an even
- // number of bytes available, we need to check if we end on a leading/high
- // surrogate. In that case, we need to wait for the next two bytes in order to
- // decode the last character properly.
- function utf16Text(buf, i) {
- if ((buf.length - i) % 2 === 0) {
- var r = buf.toString('utf16le', i);
- if (r) {
- var c = r.charCodeAt(r.length - 1);
- if (c >= 0xD800 && c <= 0xDBFF) {
- this.lastNeed = 2;
- this.lastTotal = 4;
- this.lastChar[0] = buf[buf.length - 2];
- this.lastChar[1] = buf[buf.length - 1];
- return r.slice(0, -1);
- }
- }
- return r;
- }
- this.lastNeed = 1;
- this.lastTotal = 2;
- this.lastChar[0] = buf[buf.length - 1];
- return buf.toString('utf16le', i, buf.length - 1);
- } // For UTF-16LE we do not explicitly append special replacement characters if we
- // end on a partial character, we simply let v8 handle that.
- function utf16End(buf) {
- var r = buf && buf.length ? this.write(buf) : '';
- if (this.lastNeed) {
- var end = this.lastTotal - this.lastNeed;
- return r + this.lastChar.toString('utf16le', 0, end);
- }
- return r;
- }
- function base64Text(buf, i) {
- var n = (buf.length - i) % 3;
- if (n === 0) return buf.toString('base64', i);
- this.lastNeed = 3 - n;
- this.lastTotal = 3;
- if (n === 1) {
- this.lastChar[0] = buf[buf.length - 1];
- } else {
- this.lastChar[0] = buf[buf.length - 2];
- this.lastChar[1] = buf[buf.length - 1];
- }
- return buf.toString('base64', i, buf.length - n);
- }
- function base64End(buf) {
- var r = buf && buf.length ? this.write(buf) : '';
- if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
- return r;
- } // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
- function simpleWrite(buf) {
- return buf.toString(this.encoding);
- }
- function simpleEnd(buf) {
- return buf && buf.length ? this.write(buf) : '';
- }
- },{"safe-buffer":384}],411:[function(require,module,exports){
- (function (setImmediate,clearImmediate){
- "use strict";
- var nextTick = require('process/browser.js').nextTick;
- var apply = Function.prototype.apply;
- var slice = Array.prototype.slice;
- var immediateIds = {};
- var nextImmediateId = 0; // DOM APIs, for completeness
- exports.setTimeout = function () {
- return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);
- };
- exports.setInterval = function () {
- return new Timeout(apply.call(setInterval, window, arguments), clearInterval);
- };
- exports.clearTimeout = exports.clearInterval = function (timeout) {
- timeout.close();
- };
- function Timeout(id, clearFn) {
- this._id = id;
- this._clearFn = clearFn;
- }
- Timeout.prototype.unref = Timeout.prototype.ref = function () {};
- Timeout.prototype.close = function () {
- this._clearFn.call(window, this._id);
- }; // Does not start the time, just sets up the members needed.
- exports.enroll = function (item, msecs) {
- clearTimeout(item._idleTimeoutId);
- item._idleTimeout = msecs;
- };
- exports.unenroll = function (item) {
- clearTimeout(item._idleTimeoutId);
- item._idleTimeout = -1;
- };
- exports._unrefActive = exports.active = function (item) {
- clearTimeout(item._idleTimeoutId);
- var msecs = item._idleTimeout;
- if (msecs >= 0) {
- item._idleTimeoutId = setTimeout(function onTimeout() {
- if (item._onTimeout) item._onTimeout();
- }, msecs);
- }
- }; // That's not how node.js implements it but the exposed api is the same.
- exports.setImmediate = typeof setImmediate === "function" ? setImmediate : function (fn) {
- var id = nextImmediateId++;
- var args = arguments.length < 2 ? false : slice.call(arguments, 1);
- immediateIds[id] = true;
- nextTick(function onNextTick() {
- if (immediateIds[id]) {
- // fn.call() is faster so we optimize for the common use-case
- // @see http://jsperf.com/call-apply-segu
- if (args) {
- fn.apply(null, args);
- } else {
- fn.call(null);
- } // Prevent ids from leaking
- exports.clearImmediate(id);
- }
- });
- return id;
- };
- exports.clearImmediate = typeof clearImmediate === "function" ? clearImmediate : function (id) {
- delete immediateIds[id];
- };
- }).call(this,require("timers").setImmediate,require("timers").clearImmediate)
- },{"process/browser.js":358,"timers":411}],412:[function(require,module,exports){
- (function (global){
- "use strict";
- /**
- * Module exports.
- */
- module.exports = deprecate;
- /**
- * Mark that a method should not be used.
- * Returns a modified function which warns once by default.
- *
- * If `localStorage.noDeprecation = true` is set, then it is a no-op.
- *
- * If `localStorage.throwDeprecation = true` is set, then deprecated functions
- * will throw an Error when invoked.
- *
- * If `localStorage.traceDeprecation = true` is set, then deprecated functions
- * will invoke `console.trace()` instead of `console.error()`.
- *
- * @param {Function} fn - the function to deprecate
- * @param {String} msg - the string to print to the console when `fn` is invoked
- * @returns {Function} a new "deprecated" version of `fn`
- * @api public
- */
- function deprecate(fn, msg) {
- if (config('noDeprecation')) {
- return fn;
- }
- var warned = false;
- function deprecated() {
- if (!warned) {
- if (config('throwDeprecation')) {
- throw new Error(msg);
- } else if (config('traceDeprecation')) {
- console.trace(msg);
- } else {
- console.warn(msg);
- }
- warned = true;
- }
- return fn.apply(this, arguments);
- }
- return deprecated;
- }
- /**
- * Checks `localStorage` for boolean values for the given `name`.
- *
- * @param {String} name
- * @returns {Boolean}
- * @api private
- */
- function config(name) {
- // accessing global.localStorage can trigger a DOMException in sandboxed iframes
- try {
- if (!global.localStorage) return false;
- } catch (_) {
- return false;
- }
- var val = global.localStorage[name];
- if (null == val) return false;
- return String(val).toLowerCase() === 'true';
- }
- }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{}],413:[function(require,module,exports){
- "use strict";
- if (typeof Object.create === 'function') {
- // implementation from standard node.js 'util' module
- module.exports = function inherits(ctor, superCtor) {
- ctor.super_ = superCtor;
- ctor.prototype = Object.create(superCtor.prototype, {
- constructor: {
- value: ctor,
- enumerable: false,
- writable: true,
- configurable: true
- }
- });
- };
- } else {
- // old school shim for old browsers
- module.exports = function inherits(ctor, superCtor) {
- ctor.super_ = superCtor;
- var TempCtor = function TempCtor() {};
- TempCtor.prototype = superCtor.prototype;
- ctor.prototype = new TempCtor();
- ctor.prototype.constructor = ctor;
- };
- }
- },{}],414:[function(require,module,exports){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- module.exports = function isBuffer(arg) {
- return arg && _typeof(arg) === 'object' && typeof arg.copy === 'function' && typeof arg.fill === 'function' && typeof arg.readUInt8 === 'function';
- };
- },{}],415:[function(require,module,exports){
- (function (process,global){
- "use strict";
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- var formatRegExp = /%[sdj%]/g;
- exports.format = function (f) {
- if (!isString(f)) {
- var objects = [];
- for (var i = 0; i < arguments.length; i++) {
- objects.push(inspect(arguments[i]));
- }
- return objects.join(' ');
- }
- var i = 1;
- var args = arguments;
- var len = args.length;
- var str = String(f).replace(formatRegExp, function (x) {
- if (x === '%%') return '%';
- if (i >= len) return x;
- switch (x) {
- case '%s':
- return String(args[i++]);
- case '%d':
- return Number(args[i++]);
- case '%j':
- try {
- return JSON.stringify(args[i++]);
- } catch (_) {
- return '[Circular]';
- }
- default:
- return x;
- }
- });
- for (var x = args[i]; i < len; x = args[++i]) {
- if (isNull(x) || !isObject(x)) {
- str += ' ' + x;
- } else {
- str += ' ' + inspect(x);
- }
- }
- return str;
- }; // Mark that a method should not be used.
- // Returns a modified function which warns once by default.
- // If --no-deprecation is set, then it is a no-op.
- exports.deprecate = function (fn, msg) {
- // Allow for deprecating things in the process of starting up.
- if (isUndefined(global.process)) {
- return function () {
- return exports.deprecate(fn, msg).apply(this, arguments);
- };
- }
- if (process.noDeprecation === true) {
- return fn;
- }
- var warned = false;
- function deprecated() {
- if (!warned) {
- if (process.throwDeprecation) {
- throw new Error(msg);
- } else if (process.traceDeprecation) {
- console.trace(msg);
- } else {
- console.error(msg);
- }
- warned = true;
- }
- return fn.apply(this, arguments);
- }
- return deprecated;
- };
- var debugs = {};
- var debugEnviron;
- exports.debuglog = function (set) {
- if (isUndefined(debugEnviron)) debugEnviron = process.env.NODE_DEBUG || '';
- set = set.toUpperCase();
- if (!debugs[set]) {
- if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
- var pid = process.pid;
- debugs[set] = function () {
- var msg = exports.format.apply(exports, arguments);
- console.error('%s %d: %s', set, pid, msg);
- };
- } else {
- debugs[set] = function () {};
- }
- }
- return debugs[set];
- };
- /**
- * Echos the value of a value. Trys to print the value out
- * in the best way possible given the different types.
- *
- * @param {Object} obj The object to print out.
- * @param {Object} opts Optional options object that alters the output.
- */
- /* legacy: obj, showHidden, depth, colors*/
- function inspect(obj, opts) {
- // default options
- var ctx = {
- seen: [],
- stylize: stylizeNoColor
- }; // legacy...
- if (arguments.length >= 3) ctx.depth = arguments[2];
- if (arguments.length >= 4) ctx.colors = arguments[3];
- if (isBoolean(opts)) {
- // legacy...
- ctx.showHidden = opts;
- } else if (opts) {
- // got an "options" object
- exports._extend(ctx, opts);
- } // set default options
- if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
- if (isUndefined(ctx.depth)) ctx.depth = 2;
- if (isUndefined(ctx.colors)) ctx.colors = false;
- if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
- if (ctx.colors) ctx.stylize = stylizeWithColor;
- return formatValue(ctx, obj, ctx.depth);
- }
- exports.inspect = inspect; // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
- inspect.colors = {
- 'bold': [1, 22],
- 'italic': [3, 23],
- 'underline': [4, 24],
- 'inverse': [7, 27],
- 'white': [37, 39],
- 'grey': [90, 39],
- 'black': [30, 39],
- 'blue': [34, 39],
- 'cyan': [36, 39],
- 'green': [32, 39],
- 'magenta': [35, 39],
- 'red': [31, 39],
- 'yellow': [33, 39]
- }; // Don't use 'blue' not visible on cmd.exe
- inspect.styles = {
- 'special': 'cyan',
- 'number': 'yellow',
- 'boolean': 'yellow',
- 'undefined': 'grey',
- 'null': 'bold',
- 'string': 'green',
- 'date': 'magenta',
- // "name": intentionally not styling
- 'regexp': 'red'
- };
- function stylizeWithColor(str, styleType) {
- var style = inspect.styles[styleType];
- if (style) {
- return "\x1B[" + inspect.colors[style][0] + 'm' + str + "\x1B[" + inspect.colors[style][1] + 'm';
- } else {
- return str;
- }
- }
- function stylizeNoColor(str, styleType) {
- return str;
- }
- function arrayToHash(array) {
- var hash = {};
- array.forEach(function (val, idx) {
- hash[val] = true;
- });
- return hash;
- }
- function formatValue(ctx, value, recurseTimes) {
- // Provide a hook for user-specified inspect functions.
- // Check that value is an object with an inspect function on it
- if (ctx.customInspect && value && isFunction(value.inspect) && // Filter out the util module, it's inspect function is special
- value.inspect !== exports.inspect && // Also filter out any prototype objects using the circular check.
- !(value.constructor && value.constructor.prototype === value)) {
- var ret = value.inspect(recurseTimes, ctx);
- if (!isString(ret)) {
- ret = formatValue(ctx, ret, recurseTimes);
- }
- return ret;
- } // Primitive types cannot have properties
- var primitive = formatPrimitive(ctx, value);
- if (primitive) {
- return primitive;
- } // Look up the keys of the object.
- var keys = Object.keys(value);
- var visibleKeys = arrayToHash(keys);
- if (ctx.showHidden) {
- keys = Object.getOwnPropertyNames(value);
- } // IE doesn't make error fields non-enumerable
- // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
- if (isError(value) && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
- return formatError(value);
- } // Some type of object without properties can be shortcutted.
- if (keys.length === 0) {
- if (isFunction(value)) {
- var name = value.name ? ': ' + value.name : '';
- return ctx.stylize('[Function' + name + ']', 'special');
- }
- if (isRegExp(value)) {
- return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
- }
- if (isDate(value)) {
- return ctx.stylize(Date.prototype.toString.call(value), 'date');
- }
- if (isError(value)) {
- return formatError(value);
- }
- }
- var base = '',
- array = false,
- braces = ['{', '}']; // Make Array say that they are Array
- if (isArray(value)) {
- array = true;
- braces = ['[', ']'];
- } // Make functions say that they are functions
- if (isFunction(value)) {
- var n = value.name ? ': ' + value.name : '';
- base = ' [Function' + n + ']';
- } // Make RegExps say that they are RegExps
- if (isRegExp(value)) {
- base = ' ' + RegExp.prototype.toString.call(value);
- } // Make dates with properties first say the date
- if (isDate(value)) {
- base = ' ' + Date.prototype.toUTCString.call(value);
- } // Make error with message first say the error
- if (isError(value)) {
- base = ' ' + formatError(value);
- }
- if (keys.length === 0 && (!array || value.length == 0)) {
- return braces[0] + base + braces[1];
- }
- if (recurseTimes < 0) {
- if (isRegExp(value)) {
- return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
- } else {
- return ctx.stylize('[Object]', 'special');
- }
- }
- ctx.seen.push(value);
- var output;
- if (array) {
- output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
- } else {
- output = keys.map(function (key) {
- return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
- });
- }
- ctx.seen.pop();
- return reduceToSingleString(output, base, braces);
- }
- function formatPrimitive(ctx, value) {
- if (isUndefined(value)) return ctx.stylize('undefined', 'undefined');
- if (isString(value)) {
- var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '').replace(/'/g, "\\'").replace(/\\"/g, '"') + '\'';
- return ctx.stylize(simple, 'string');
- }
- if (isNumber(value)) return ctx.stylize('' + value, 'number');
- if (isBoolean(value)) return ctx.stylize('' + value, 'boolean'); // For some reason typeof null is "object", so special case here.
- if (isNull(value)) return ctx.stylize('null', 'null');
- }
- function formatError(value) {
- return '[' + Error.prototype.toString.call(value) + ']';
- }
- function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
- var output = [];
- for (var i = 0, l = value.length; i < l; ++i) {
- if (hasOwnProperty(value, String(i))) {
- output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, String(i), true));
- } else {
- output.push('');
- }
- }
- keys.forEach(function (key) {
- if (!key.match(/^\d+$/)) {
- output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, key, true));
- }
- });
- return output;
- }
- function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
- var name, str, desc;
- desc = Object.getOwnPropertyDescriptor(value, key) || {
- value: value[key]
- };
- if (desc.get) {
- if (desc.set) {
- str = ctx.stylize('[Getter/Setter]', 'special');
- } else {
- str = ctx.stylize('[Getter]', 'special');
- }
- } else {
- if (desc.set) {
- str = ctx.stylize('[Setter]', 'special');
- }
- }
- if (!hasOwnProperty(visibleKeys, key)) {
- name = '[' + key + ']';
- }
- if (!str) {
- if (ctx.seen.indexOf(desc.value) < 0) {
- if (isNull(recurseTimes)) {
- str = formatValue(ctx, desc.value, null);
- } else {
- str = formatValue(ctx, desc.value, recurseTimes - 1);
- }
- if (str.indexOf('\n') > -1) {
- if (array) {
- str = str.split('\n').map(function (line) {
- return ' ' + line;
- }).join('\n').substr(2);
- } else {
- str = '\n' + str.split('\n').map(function (line) {
- return ' ' + line;
- }).join('\n');
- }
- }
- } else {
- str = ctx.stylize('[Circular]', 'special');
- }
- }
- if (isUndefined(name)) {
- if (array && key.match(/^\d+$/)) {
- return str;
- }
- name = JSON.stringify('' + key);
- if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
- name = name.substr(1, name.length - 2);
- name = ctx.stylize(name, 'name');
- } else {
- name = name.replace(/'/g, "\\'").replace(/\\"/g, '"').replace(/(^"|"$)/g, "'");
- name = ctx.stylize(name, 'string');
- }
- }
- return name + ': ' + str;
- }
- function reduceToSingleString(output, base, braces) {
- var numLinesEst = 0;
- var length = output.reduce(function (prev, cur) {
- numLinesEst++;
- if (cur.indexOf('\n') >= 0) numLinesEst++;
- return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
- }, 0);
- if (length > 60) {
- return braces[0] + (base === '' ? '' : base + '\n ') + ' ' + output.join(',\n ') + ' ' + braces[1];
- }
- return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
- } // NOTE: These type checking functions intentionally don't use `instanceof`
- // because it is fragile and can be easily faked with `Object.create()`.
- function isArray(ar) {
- return Array.isArray(ar);
- }
- exports.isArray = isArray;
- function isBoolean(arg) {
- return typeof arg === 'boolean';
- }
- exports.isBoolean = isBoolean;
- function isNull(arg) {
- return arg === null;
- }
- exports.isNull = isNull;
- function isNullOrUndefined(arg) {
- return arg == null;
- }
- exports.isNullOrUndefined = isNullOrUndefined;
- function isNumber(arg) {
- return typeof arg === 'number';
- }
- exports.isNumber = isNumber;
- function isString(arg) {
- return typeof arg === 'string';
- }
- exports.isString = isString;
- function isSymbol(arg) {
- return _typeof(arg) === 'symbol';
- }
- exports.isSymbol = isSymbol;
- function isUndefined(arg) {
- return arg === void 0;
- }
- exports.isUndefined = isUndefined;
- function isRegExp(re) {
- return isObject(re) && objectToString(re) === '[object RegExp]';
- }
- exports.isRegExp = isRegExp;
- function isObject(arg) {
- return _typeof(arg) === 'object' && arg !== null;
- }
- exports.isObject = isObject;
- function isDate(d) {
- return isObject(d) && objectToString(d) === '[object Date]';
- }
- exports.isDate = isDate;
- function isError(e) {
- return isObject(e) && (objectToString(e) === '[object Error]' || e instanceof Error);
- }
- exports.isError = isError;
- function isFunction(arg) {
- return typeof arg === 'function';
- }
- exports.isFunction = isFunction;
- function isPrimitive(arg) {
- return arg === null || typeof arg === 'boolean' || typeof arg === 'number' || typeof arg === 'string' || _typeof(arg) === 'symbol' || // ES6 symbol
- typeof arg === 'undefined';
- }
- exports.isPrimitive = isPrimitive;
- exports.isBuffer = require('./support/isBuffer');
- function objectToString(o) {
- return Object.prototype.toString.call(o);
- }
- function pad(n) {
- return n < 10 ? '0' + n.toString(10) : n.toString(10);
- }
- var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; // 26 Feb 16:19:34
- function timestamp() {
- var d = new Date();
- var time = [pad(d.getHours()), pad(d.getMinutes()), pad(d.getSeconds())].join(':');
- return [d.getDate(), months[d.getMonth()], time].join(' ');
- } // log is just a thin wrapper to console.log that prepends a timestamp
- exports.log = function () {
- console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
- };
- /**
- * Inherit the prototype methods from one constructor into another.
- *
- * The Function.prototype.inherits from lang.js rewritten as a standalone
- * function (not on Function.prototype). NOTE: If this file is to be loaded
- * during bootstrapping this function needs to be rewritten using some native
- * functions as prototype setup using normal JavaScript does not work as
- * expected during bootstrapping (see mirror.js in r114903).
- *
- * @param {function} ctor Constructor function which needs to inherit the
- * prototype.
- * @param {function} superCtor Constructor function to inherit prototype from.
- */
- exports.inherits = require('inherits');
- exports._extend = function (origin, add) {
- // Don't do anything if add isn't an object
- if (!add || !isObject(add)) return origin;
- var keys = Object.keys(add);
- var i = keys.length;
- while (i--) {
- origin[keys[i]] = add[keys[i]];
- }
- return origin;
- };
- function hasOwnProperty(obj, prop) {
- return Object.prototype.hasOwnProperty.call(obj, prop);
- }
- }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{"./support/isBuffer":414,"_process":358,"inherits":413}],416:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- Object.defineProperty(exports, "v1", {
- enumerable: true,
- get: function get() {
- return _v.default;
- }
- });
- Object.defineProperty(exports, "v3", {
- enumerable: true,
- get: function get() {
- return _v2.default;
- }
- });
- Object.defineProperty(exports, "v4", {
- enumerable: true,
- get: function get() {
- return _v3.default;
- }
- });
- Object.defineProperty(exports, "v5", {
- enumerable: true,
- get: function get() {
- return _v4.default;
- }
- });
- Object.defineProperty(exports, "NIL", {
- enumerable: true,
- get: function get() {
- return _nil.default;
- }
- });
- Object.defineProperty(exports, "version", {
- enumerable: true,
- get: function get() {
- return _version.default;
- }
- });
- Object.defineProperty(exports, "validate", {
- enumerable: true,
- get: function get() {
- return _validate.default;
- }
- });
- Object.defineProperty(exports, "stringify", {
- enumerable: true,
- get: function get() {
- return _stringify.default;
- }
- });
- Object.defineProperty(exports, "parse", {
- enumerable: true,
- get: function get() {
- return _parse.default;
- }
- });
- var _v = _interopRequireDefault(require("./v1.js"));
- var _v2 = _interopRequireDefault(require("./v3.js"));
- var _v3 = _interopRequireDefault(require("./v4.js"));
- var _v4 = _interopRequireDefault(require("./v5.js"));
- var _nil = _interopRequireDefault(require("./nil.js"));
- var _version = _interopRequireDefault(require("./version.js"));
- var _validate = _interopRequireDefault(require("./validate.js"));
- var _stringify = _interopRequireDefault(require("./stringify.js"));
- var _parse = _interopRequireDefault(require("./parse.js"));
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : {
- default: obj
- };
- }
- },{"./nil.js":418,"./parse.js":419,"./stringify.js":423,"./v1.js":424,"./v3.js":425,"./v4.js":427,"./v5.js":428,"./validate.js":429,"./version.js":430}],417:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = void 0;
- /*
- * Browser-compatible JavaScript MD5
- *
- * Modification of JavaScript MD5
- * https://github.com/blueimp/JavaScript-MD5
- *
- * Copyright 2011, Sebastian Tschan
- * https://blueimp.net
- *
- * Licensed under the MIT license:
- * https://opensource.org/licenses/MIT
- *
- * Based on
- * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
- * Digest Algorithm, as defined in RFC 1321.
- * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
- * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
- * Distributed under the BSD License
- * See http://pajhome.org.uk/crypt/md5 for more info.
- */
- function md5(bytes) {
- if (typeof bytes === 'string') {
- var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape
- bytes = new Uint8Array(msg.length);
- for (var i = 0; i < msg.length; ++i) {
- bytes[i] = msg.charCodeAt(i);
- }
- }
- return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));
- }
- /*
- * Convert an array of little-endian words to an array of bytes
- */
- function md5ToHexEncodedArray(input) {
- var output = [];
- var length32 = input.length * 32;
- var hexTab = '0123456789abcdef';
- for (var i = 0; i < length32; i += 8) {
- var x = input[i >> 5] >>> i % 32 & 0xff;
- var hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);
- output.push(hex);
- }
- return output;
- }
- /**
- * Calculate output length with padding and bit length
- */
- function getOutputLength(inputLength8) {
- return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;
- }
- /*
- * Calculate the MD5 of an array of little-endian words, and a bit length.
- */
- function wordsToMd5(x, len) {
- /* append padding */
- x[len >> 5] |= 0x80 << len % 32;
- x[getOutputLength(len) - 1] = len;
- var a = 1732584193;
- var b = -271733879;
- var c = -1732584194;
- var d = 271733878;
- for (var i = 0; i < x.length; i += 16) {
- var olda = a;
- var oldb = b;
- var oldc = c;
- var oldd = d;
- a = md5ff(a, b, c, d, x[i], 7, -680876936);
- d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
- c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
- b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
- a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
- d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
- c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
- b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
- a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
- d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
- c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
- b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
- a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
- d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
- c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
- b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
- a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
- d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
- c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
- b = md5gg(b, c, d, a, x[i], 20, -373897302);
- a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
- d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
- c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
- b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
- a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
- d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
- c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
- b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
- a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
- d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
- c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
- b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
- a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
- d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
- c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
- b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
- a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
- d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
- c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
- b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
- a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
- d = md5hh(d, a, b, c, x[i], 11, -358537222);
- c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
- b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
- a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
- d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
- c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
- b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
- a = md5ii(a, b, c, d, x[i], 6, -198630844);
- d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
- c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
- b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
- a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
- d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
- c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
- b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
- a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
- d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
- c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
- b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
- a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
- d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
- c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
- b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
- a = safeAdd(a, olda);
- b = safeAdd(b, oldb);
- c = safeAdd(c, oldc);
- d = safeAdd(d, oldd);
- }
- return [a, b, c, d];
- }
- /*
- * Convert an array bytes to an array of little-endian words
- * Characters >255 have their high-byte silently ignored.
- */
- function bytesToWords(input) {
- if (input.length === 0) {
- return [];
- }
- var length8 = input.length * 8;
- var output = new Uint32Array(getOutputLength(length8));
- for (var i = 0; i < length8; i += 8) {
- output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;
- }
- return output;
- }
- /*
- * Add integers, wrapping at 2^32. This uses 16-bit operations internally
- * to work around bugs in some JS interpreters.
- */
- function safeAdd(x, y) {
- var lsw = (x & 0xffff) + (y & 0xffff);
- var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
- return msw << 16 | lsw & 0xffff;
- }
- /*
- * Bitwise rotate a 32-bit number to the left.
- */
- function bitRotateLeft(num, cnt) {
- return num << cnt | num >>> 32 - cnt;
- }
- /*
- * These functions implement the four basic operations the algorithm uses.
- */
- function md5cmn(q, a, b, x, s, t) {
- return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
- }
- function md5ff(a, b, c, d, x, s, t) {
- return md5cmn(b & c | ~b & d, a, b, x, s, t);
- }
- function md5gg(a, b, c, d, x, s, t) {
- return md5cmn(b & d | c & ~d, a, b, x, s, t);
- }
- function md5hh(a, b, c, d, x, s, t) {
- return md5cmn(b ^ c ^ d, a, b, x, s, t);
- }
- function md5ii(a, b, c, d, x, s, t) {
- return md5cmn(c ^ (b | ~d), a, b, x, s, t);
- }
- var _default = md5;
- exports.default = _default;
- },{}],418:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = void 0;
- var _default = '00000000-0000-0000-0000-000000000000';
- exports.default = _default;
- },{}],419:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = void 0;
- var _validate = _interopRequireDefault(require("./validate.js"));
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : {
- default: obj
- };
- }
- function parse(uuid) {
- if (!(0, _validate.default)(uuid)) {
- throw TypeError('Invalid UUID');
- }
- var v;
- var arr = new Uint8Array(16); // Parse ########-....-....-....-............
- arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;
- arr[1] = v >>> 16 & 0xff;
- arr[2] = v >>> 8 & 0xff;
- arr[3] = v & 0xff; // Parse ........-####-....-....-............
- arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;
- arr[5] = v & 0xff; // Parse ........-....-####-....-............
- arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;
- arr[7] = v & 0xff; // Parse ........-....-....-####-............
- arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;
- arr[9] = v & 0xff; // Parse ........-....-....-....-############
- // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes)
- arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;
- arr[11] = v / 0x100000000 & 0xff;
- arr[12] = v >>> 24 & 0xff;
- arr[13] = v >>> 16 & 0xff;
- arr[14] = v >>> 8 & 0xff;
- arr[15] = v & 0xff;
- return arr;
- }
- var _default = parse;
- exports.default = _default;
- },{"./validate.js":429}],420:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = void 0;
- var _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;
- exports.default = _default;
- },{}],421:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = rng; // Unique ID creation requires a high quality random # generator. In the browser we therefore
- // require the crypto API and do not support built-in fallback to lower quality random number
- // generators (like Math.random()).
- // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also,
- // find the complete implementation of crypto (msCrypto) on IE11.
- var getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);
- var rnds8 = new Uint8Array(16);
- function rng() {
- if (!getRandomValues) {
- throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');
- }
- return getRandomValues(rnds8);
- }
- },{}],422:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = void 0; // Adapted from Chris Veness' SHA1 code at
- // http://www.movable-type.co.uk/scripts/sha1.html
- function f(s, x, y, z) {
- switch (s) {
- case 0:
- return x & y ^ ~x & z;
- case 1:
- return x ^ y ^ z;
- case 2:
- return x & y ^ x & z ^ y & z;
- case 3:
- return x ^ y ^ z;
- }
- }
- function ROTL(x, n) {
- return x << n | x >>> 32 - n;
- }
- function sha1(bytes) {
- var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];
- var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];
- if (typeof bytes === 'string') {
- var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape
- bytes = [];
- for (var i = 0; i < msg.length; ++i) {
- bytes.push(msg.charCodeAt(i));
- }
- } else if (!Array.isArray(bytes)) {
- // Convert Array-like to Array
- bytes = Array.prototype.slice.call(bytes);
- }
- bytes.push(0x80);
- var l = bytes.length / 4 + 2;
- var N = Math.ceil(l / 16);
- var M = new Array(N);
- for (var _i = 0; _i < N; ++_i) {
- var arr = new Uint32Array(16);
- for (var j = 0; j < 16; ++j) {
- arr[j] = bytes[_i * 64 + j * 4] << 24 | bytes[_i * 64 + j * 4 + 1] << 16 | bytes[_i * 64 + j * 4 + 2] << 8 | bytes[_i * 64 + j * 4 + 3];
- }
- M[_i] = arr;
- }
- M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);
- M[N - 1][14] = Math.floor(M[N - 1][14]);
- M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;
- for (var _i2 = 0; _i2 < N; ++_i2) {
- var W = new Uint32Array(80);
- for (var t = 0; t < 16; ++t) {
- W[t] = M[_i2][t];
- }
- for (var _t = 16; _t < 80; ++_t) {
- W[_t] = ROTL(W[_t - 3] ^ W[_t - 8] ^ W[_t - 14] ^ W[_t - 16], 1);
- }
- var a = H[0];
- var b = H[1];
- var c = H[2];
- var d = H[3];
- var e = H[4];
- for (var _t2 = 0; _t2 < 80; ++_t2) {
- var s = Math.floor(_t2 / 20);
- var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[_t2] >>> 0;
- e = d;
- d = c;
- c = ROTL(b, 30) >>> 0;
- b = a;
- a = T;
- }
- H[0] = H[0] + a >>> 0;
- H[1] = H[1] + b >>> 0;
- H[2] = H[2] + c >>> 0;
- H[3] = H[3] + d >>> 0;
- H[4] = H[4] + e >>> 0;
- }
- return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];
- }
- var _default = sha1;
- exports.default = _default;
- },{}],423:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = void 0;
- var _validate = _interopRequireDefault(require("./validate.js"));
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : {
- default: obj
- };
- }
- /**
- * Convert array of 16 byte values to UUID string format of the form:
- * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
- */
- var byteToHex = [];
- for (var i = 0; i < 256; ++i) {
- byteToHex.push((i + 0x100).toString(16).substr(1));
- }
- function stringify(arr) {
- var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
- // Note: Be careful editing this code! It's been tuned for performance
- // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
- var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one
- // of the following:
- // - One or more input array values don't map to a hex octet (leading to
- // "undefined" in the uuid)
- // - Invalid input values for the RFC `version` or `variant` fields
- if (!(0, _validate.default)(uuid)) {
- throw TypeError('Stringified UUID is invalid');
- }
- return uuid;
- }
- var _default = stringify;
- exports.default = _default;
- },{"./validate.js":429}],424:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = void 0;
- var _rng = _interopRequireDefault(require("./rng.js"));
- var _stringify = _interopRequireDefault(require("./stringify.js"));
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : {
- default: obj
- };
- } // **`v1()` - Generate time-based UUID**
- //
- // Inspired by https://github.com/LiosK/UUID.js
- // and http://docs.python.org/library/uuid.html
- var _nodeId;
- var _clockseq; // Previous uuid creation time
- var _lastMSecs = 0;
- var _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details
- function v1(options, buf, offset) {
- var i = buf && offset || 0;
- var b = buf || new Array(16);
- options = options || {};
- var node = options.node || _nodeId;
- var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not
- // specified. We do this lazily to minimize issues related to insufficient
- // system entropy. See #189
- if (node == null || clockseq == null) {
- var seedBytes = options.random || (options.rng || _rng.default)();
- if (node == null) {
- // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
- node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];
- }
- if (clockseq == null) {
- // Per 4.2.2, randomize (14 bit) clockseq
- clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;
- }
- } // UUID timestamps are 100 nano-second units since the Gregorian epoch,
- // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so
- // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
- // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
- var msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock
- // cycle to simulate higher resolution clock
- var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)
- var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression
- if (dt < 0 && options.clockseq === undefined) {
- clockseq = clockseq + 1 & 0x3fff;
- } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
- // time interval
- if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {
- nsecs = 0;
- } // Per 4.2.1.2 Throw error if too many uuids are requested
- if (nsecs >= 10000) {
- throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");
- }
- _lastMSecs = msecs;
- _lastNSecs = nsecs;
- _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch
- msecs += 12219292800000; // `time_low`
- var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
- b[i++] = tl >>> 24 & 0xff;
- b[i++] = tl >>> 16 & 0xff;
- b[i++] = tl >>> 8 & 0xff;
- b[i++] = tl & 0xff; // `time_mid`
- var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;
- b[i++] = tmh >>> 8 & 0xff;
- b[i++] = tmh & 0xff; // `time_high_and_version`
- b[i++] = tmh >>> 24 & 0xf | 0x10; // include version
- b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
- b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`
- b[i++] = clockseq & 0xff; // `node`
- for (var n = 0; n < 6; ++n) {
- b[i + n] = node[n];
- }
- return buf || (0, _stringify.default)(b);
- }
- var _default = v1;
- exports.default = _default;
- },{"./rng.js":421,"./stringify.js":423}],425:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = void 0;
- var _v = _interopRequireDefault(require("./v35.js"));
- var _md = _interopRequireDefault(require("./md5.js"));
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : {
- default: obj
- };
- }
- var v3 = (0, _v.default)('v3', 0x30, _md.default);
- var _default = v3;
- exports.default = _default;
- },{"./md5.js":417,"./v35.js":426}],426:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = _default;
- exports.URL = exports.DNS = void 0;
- var _stringify = _interopRequireDefault(require("./stringify.js"));
- var _parse = _interopRequireDefault(require("./parse.js"));
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : {
- default: obj
- };
- }
- function stringToBytes(str) {
- str = unescape(encodeURIComponent(str)); // UTF8 escape
- var bytes = [];
- for (var i = 0; i < str.length; ++i) {
- bytes.push(str.charCodeAt(i));
- }
- return bytes;
- }
- var DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';
- exports.DNS = DNS;
- var URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';
- exports.URL = URL;
- function _default(name, version, hashfunc) {
- function generateUUID(value, namespace, buf, offset) {
- if (typeof value === 'string') {
- value = stringToBytes(value);
- }
- if (typeof namespace === 'string') {
- namespace = (0, _parse.default)(namespace);
- }
- if (namespace.length !== 16) {
- throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');
- } // Compute hash of namespace and value, Per 4.3
- // Future: Use spread syntax when supported on all platforms, e.g. `bytes =
- // hashfunc([...namespace, ... value])`
- var bytes = new Uint8Array(16 + value.length);
- bytes.set(namespace);
- bytes.set(value, namespace.length);
- bytes = hashfunc(bytes);
- bytes[6] = bytes[6] & 0x0f | version;
- bytes[8] = bytes[8] & 0x3f | 0x80;
- if (buf) {
- offset = offset || 0;
- for (var i = 0; i < 16; ++i) {
- buf[offset + i] = bytes[i];
- }
- return buf;
- }
- return (0, _stringify.default)(bytes);
- } // Function#name is not settable on some platforms (#270)
- try {
- generateUUID.name = name; // eslint-disable-next-line no-empty
- } catch (err) {} // For CommonJS default export support
- generateUUID.DNS = DNS;
- generateUUID.URL = URL;
- return generateUUID;
- }
- },{"./parse.js":419,"./stringify.js":423}],427:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = void 0;
- var _rng = _interopRequireDefault(require("./rng.js"));
- var _stringify = _interopRequireDefault(require("./stringify.js"));
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : {
- default: obj
- };
- }
- function v4(options, buf, offset) {
- options = options || {};
- var rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
- rnds[6] = rnds[6] & 0x0f | 0x40;
- rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided
- if (buf) {
- offset = offset || 0;
- for (var i = 0; i < 16; ++i) {
- buf[offset + i] = rnds[i];
- }
- return buf;
- }
- return (0, _stringify.default)(rnds);
- }
- var _default = v4;
- exports.default = _default;
- },{"./rng.js":421,"./stringify.js":423}],428:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = void 0;
- var _v = _interopRequireDefault(require("./v35.js"));
- var _sha = _interopRequireDefault(require("./sha1.js"));
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : {
- default: obj
- };
- }
- var v5 = (0, _v.default)('v5', 0x50, _sha.default);
- var _default = v5;
- exports.default = _default;
- },{"./sha1.js":422,"./v35.js":426}],429:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = void 0;
- var _regex = _interopRequireDefault(require("./regex.js"));
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : {
- default: obj
- };
- }
- function validate(uuid) {
- return typeof uuid === 'string' && _regex.default.test(uuid);
- }
- var _default = validate;
- exports.default = _default;
- },{"./regex.js":420}],430:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = void 0;
- var _validate = _interopRequireDefault(require("./validate.js"));
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : {
- default: obj
- };
- }
- function version(uuid) {
- if (!(0, _validate.default)(uuid)) {
- throw TypeError('Invalid UUID');
- }
- return parseInt(uuid.substr(14, 1), 16);
- }
- var _default = version;
- exports.default = _default;
- },{"./validate.js":429}],431:[function(require,module,exports){
- "use strict";
- /**
- * Character classes and associated utilities for the 5th edition of XML 1.0.
- *
- * @author Louis-Dominique Dubeau
- * @license MIT
- * @copyright Louis-Dominique Dubeau
- */
- Object.defineProperty(exports, "__esModule", {
- value: true
- }); //
- // Fragments.
- //
- exports.CHAR = "\t\n\r -\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF";
- exports.S = " \t\r\n"; // tslint:disable-next-line:max-line-length
- exports.NAME_START_CHAR = ":A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\uD800\uDC00-\uDB7F\uDFFF";
- exports.NAME_CHAR = "-" + exports.NAME_START_CHAR + ".0-9\xB7\u0300-\u036F\u203F-\u2040"; //
- // Regular expressions.
- //
- exports.CHAR_RE = new RegExp("^[" + exports.CHAR + "]$", "u");
- exports.S_RE = new RegExp("^[" + exports.S + "]+$", "u");
- exports.NAME_START_CHAR_RE = new RegExp("^[" + exports.NAME_START_CHAR + "]$", "u");
- exports.NAME_CHAR_RE = new RegExp("^[" + exports.NAME_CHAR + "]$", "u");
- exports.NAME_RE = new RegExp("^[" + exports.NAME_START_CHAR + "][" + exports.NAME_CHAR + "]*$", "u");
- exports.NMTOKEN_RE = new RegExp("^[" + exports.NAME_CHAR + "]+$", "u");
- var TAB = 9;
- var NL = 0xA;
- var CR = 0xD;
- var SPACE = 0x20; //
- // Lists.
- //
- /** All characters in the ``S`` production. */
- exports.S_LIST = [SPACE, NL, CR, TAB];
- /**
- * Determines whether a codepoint matches the ``CHAR`` production.
- *
- * @param c The code point.
- *
- * @returns ``true`` if the codepoint matches ``CHAR``.
- */
- function isChar(c) {
- return c >= SPACE && c <= 0xD7FF || c === NL || c === CR || c === TAB || c >= 0xE000 && c <= 0xFFFD || c >= 0x10000 && c <= 0x10FFFF;
- }
- exports.isChar = isChar;
- /**
- * Determines whether a codepoint matches the ``S`` (space) production.
- *
- * @param c The code point.
- *
- * @returns ``true`` if the codepoint matches ``S``.
- */
- function isS(c) {
- return c === SPACE || c === NL || c === CR || c === TAB;
- }
- exports.isS = isS;
- /**
- * Determines whether a codepoint matches the ``NAME_START_CHAR`` production.
- *
- * @param c The code point.
- *
- * @returns ``true`` if the codepoint matches ``NAME_START_CHAR``.
- */
- function isNameStartChar(c) {
- return c >= 0x41 && c <= 0x5A || c >= 0x61 && c <= 0x7A || c === 0x3A || c === 0x5F || c === 0x200C || c === 0x200D || c >= 0xC0 && c <= 0xD6 || c >= 0xD8 && c <= 0xF6 || c >= 0x00F8 && c <= 0x02FF || c >= 0x0370 && c <= 0x037D || c >= 0x037F && c <= 0x1FFF || c >= 0x2070 && c <= 0x218F || c >= 0x2C00 && c <= 0x2FEF || c >= 0x3001 && c <= 0xD7FF || c >= 0xF900 && c <= 0xFDCF || c >= 0xFDF0 && c <= 0xFFFD || c >= 0x10000 && c <= 0xEFFFF;
- }
- exports.isNameStartChar = isNameStartChar;
- /**
- * Determines whether a codepoint matches the ``NAME_CHAR`` production.
- *
- * @param c The code point.
- *
- * @returns ``true`` if the codepoint matches ``NAME_CHAR``.
- */
- function isNameChar(c) {
- return isNameStartChar(c) || c >= 0x30 && c <= 0x39 || c === 0x2D || c === 0x2E || c === 0xB7 || c >= 0x0300 && c <= 0x036F || c >= 0x203F && c <= 0x2040;
- }
- exports.isNameChar = isNameChar;
- },{}],432:[function(require,module,exports){
- "use strict";
- /**
- * Character classes and associated utilities for the 2nd edition of XML 1.1.
- *
- * @author Louis-Dominique Dubeau
- * @license MIT
- * @copyright Louis-Dominique Dubeau
- */
- Object.defineProperty(exports, "__esModule", {
- value: true
- }); //
- // Fragments.
- //
- exports.CHAR = "\x01-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF";
- exports.RESTRICTED_CHAR = "\x01-\b\x0B\f\x0E-\x1F\x7F-\x84\x86-\x9F";
- exports.S = " \t\r\n"; // tslint:disable-next-line:max-line-length
- exports.NAME_START_CHAR = ":A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\uD800\uDC00-\uDB7F\uDFFF";
- exports.NAME_CHAR = "-" + exports.NAME_START_CHAR + ".0-9\xB7\u0300-\u036F\u203F-\u2040"; //
- // Regular expressions.
- //
- exports.CHAR_RE = new RegExp("^[" + exports.CHAR + "]$", "u");
- exports.RESTRICTED_CHAR_RE = new RegExp("^[" + exports.RESTRICTED_CHAR + "]$", "u");
- exports.S_RE = new RegExp("^[" + exports.S + "]+$", "u");
- exports.NAME_START_CHAR_RE = new RegExp("^[" + exports.NAME_START_CHAR + "]$", "u");
- exports.NAME_CHAR_RE = new RegExp("^[" + exports.NAME_CHAR + "]$", "u");
- exports.NAME_RE = new RegExp("^[" + exports.NAME_START_CHAR + "][" + exports.NAME_CHAR + "]*$", "u");
- exports.NMTOKEN_RE = new RegExp("^[" + exports.NAME_CHAR + "]+$", "u");
- var TAB = 9;
- var NL = 0xA;
- var CR = 0xD;
- var SPACE = 0x20; //
- // Lists.
- //
- /** All characters in the ``S`` production. */
- exports.S_LIST = [SPACE, NL, CR, TAB];
- /**
- * Determines whether a codepoint matches the ``CHAR`` production.
- *
- * @param c The code point.
- *
- * @returns ``true`` if the codepoint matches ``CHAR``.
- */
- function isChar(c) {
- return c >= 0x0001 && c <= 0xD7FF || c >= 0xE000 && c <= 0xFFFD || c >= 0x10000 && c <= 0x10FFFF;
- }
- exports.isChar = isChar;
- /**
- * Determines whether a codepoint matches the ``RESTRICTED_CHAR`` production.
- *
- * @param c The code point.
- *
- * @returns ``true`` if the codepoint matches ``RESTRICTED_CHAR``.
- */
- function isRestrictedChar(c) {
- return c >= 0x1 && c <= 0x8 || c === 0xB || c === 0xC || c >= 0xE && c <= 0x1F || c >= 0x7F && c <= 0x84 || c >= 0x86 && c <= 0x9F;
- }
- exports.isRestrictedChar = isRestrictedChar;
- /**
- * Determines whether a codepoint matches the ``CHAR`` production and does not
- * match the ``RESTRICTED_CHAR`` production. ``isCharAndNotRestricted(x)`` is
- * equivalent to ``isChar(x) && !isRestrictedChar(x)``. This function is faster
- * than running the two-call equivalent.
- *
- * @param c The code point.
- *
- * @returns ``true`` if the codepoint matches ``CHAR`` and does not match
- * ``RESTRICTED_CHAR``.
- */
- function isCharAndNotRestricted(c) {
- return c === 0x9 || c === 0xA || c === 0xD || c > 0x1F && c < 0x7F || c === 0x85 || c > 0x9F && c <= 0xD7FF || c >= 0xE000 && c <= 0xFFFD || c >= 0x10000 && c <= 0x10FFFF;
- }
- exports.isCharAndNotRestricted = isCharAndNotRestricted;
- /**
- * Determines whether a codepoint matches the ``S`` (space) production.
- *
- * @param c The code point.
- *
- * @returns ``true`` if the codepoint matches ``S``.
- */
- function isS(c) {
- return c === SPACE || c === NL || c === CR || c === TAB;
- }
- exports.isS = isS;
- /**
- * Determines whether a codepoint matches the ``NAME_START_CHAR`` production.
- *
- * @param c The code point.
- *
- * @returns ``true`` if the codepoint matches ``NAME_START_CHAR``.
- */
- // tslint:disable-next-line:cyclomatic-complexity
- function isNameStartChar(c) {
- return c >= 0x41 && c <= 0x5A || c >= 0x61 && c <= 0x7A || c === 0x3A || c === 0x5F || c === 0x200C || c === 0x200D || c >= 0xC0 && c <= 0xD6 || c >= 0xD8 && c <= 0xF6 || c >= 0x00F8 && c <= 0x02FF || c >= 0x0370 && c <= 0x037D || c >= 0x037F && c <= 0x1FFF || c >= 0x2070 && c <= 0x218F || c >= 0x2C00 && c <= 0x2FEF || c >= 0x3001 && c <= 0xD7FF || c >= 0xF900 && c <= 0xFDCF || c >= 0xFDF0 && c <= 0xFFFD || c >= 0x10000 && c <= 0xEFFFF;
- }
- exports.isNameStartChar = isNameStartChar;
- /**
- * Determines whether a codepoint matches the ``NAME_CHAR`` production.
- *
- * @param c The code point.
- *
- * @returns ``true`` if the codepoint matches ``NAME_CHAR``.
- */
- function isNameChar(c) {
- return isNameStartChar(c) || c >= 0x30 && c <= 0x39 || c === 0x2D || c === 0x2E || c === 0xB7 || c >= 0x0300 && c <= 0x036F || c >= 0x203F && c <= 0x2040;
- }
- exports.isNameChar = isNameChar;
- },{}],433:[function(require,module,exports){
- "use strict";
- /**
- * Character class utilities for XML NS 1.0 edition 3.
- *
- * @author Louis-Dominique Dubeau
- * @license MIT
- * @copyright Louis-Dominique Dubeau
- */
- Object.defineProperty(exports, "__esModule", {
- value: true
- }); //
- // Fragments.
- //
- // tslint:disable-next-line:max-line-length
- exports.NC_NAME_START_CHAR = "A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\uD800\uDC00-\uDB7F\uDFFF";
- exports.NC_NAME_CHAR = "-" + exports.NC_NAME_START_CHAR + ".0-9\xB7\u0300-\u036F\u203F-\u2040"; //
- // Regular expressions.
- //
- exports.NC_NAME_START_CHAR_RE = new RegExp("^[" + exports.NC_NAME_START_CHAR + "]$", "u");
- exports.NC_NAME_CHAR_RE = new RegExp("^[" + exports.NC_NAME_CHAR + "]$", "u");
- exports.NC_NAME_RE = new RegExp("^[" + exports.NC_NAME_START_CHAR + "][" + exports.NC_NAME_CHAR + "]*$", "u");
- /**
- * Determines whether a codepoint matches [[NC_NAME_START_CHAR]].
- *
- * @param c The code point.
- *
- * @returns ``true`` if the codepoint matches.
- */
- // tslint:disable-next-line:cyclomatic-complexity
- function isNCNameStartChar(c) {
- return c >= 0x41 && c <= 0x5A || c === 0x5F || c >= 0x61 && c <= 0x7A || c >= 0xC0 && c <= 0xD6 || c >= 0xD8 && c <= 0xF6 || c >= 0x00F8 && c <= 0x02FF || c >= 0x0370 && c <= 0x037D || c >= 0x037F && c <= 0x1FFF || c >= 0x200C && c <= 0x200D || c >= 0x2070 && c <= 0x218F || c >= 0x2C00 && c <= 0x2FEF || c >= 0x3001 && c <= 0xD7FF || c >= 0xF900 && c <= 0xFDCF || c >= 0xFDF0 && c <= 0xFFFD || c >= 0x10000 && c <= 0xEFFFF;
- }
- exports.isNCNameStartChar = isNCNameStartChar;
- /**
- * Determines whether a codepoint matches [[NC_NAME_CHAR]].
- *
- * @param c The code point.
- *
- * @returns ``true`` if the codepoint matches.
- */
- function isNCNameChar(c) {
- return isNCNameStartChar(c) || c === 0x2D || c === 0x2E || c >= 0x30 && c <= 0x39 || c === 0x00B7 || c >= 0x0300 && c <= 0x036F || c >= 0x203F && c <= 0x2040;
- }
- exports.isNCNameChar = isNCNameChar;
- },{}]},{},[15])(15)
- });
- //# sourceMappingURL=exceljs.bare.js.map
|