123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525185261852718528185291853018531185321853318534185351853618537185381853918540185411854218543185441854518546185471854818549185501855118552185531855418555185561855718558185591856018561185621856318564185651856618567185681856918570185711857218573185741857518576185771857818579185801858118582185831858418585185861858718588185891859018591185921859318594185951859618597185981859918600186011860218603186041860518606186071860818609186101861118612186131861418615186161861718618186191862018621186221862318624186251862618627186281862918630186311863218633186341863518636186371863818639186401864118642186431864418645186461864718648186491865018651186521865318654186551865618657186581865918660186611866218663186641866518666186671866818669186701867118672186731867418675186761867718678186791868018681186821868318684186851868618687186881868918690186911869218693186941869518696186971869818699187001870118702187031870418705187061870718708187091871018711187121871318714187151871618717187181871918720187211872218723187241872518726187271872818729187301873118732187331873418735187361873718738187391874018741187421874318744187451874618747187481874918750187511875218753187541875518756187571875818759187601876118762187631876418765187661876718768187691877018771187721877318774187751877618777187781877918780187811878218783187841878518786187871878818789187901879118792187931879418795187961879718798187991880018801188021880318804188051880618807188081880918810188111881218813188141881518816188171881818819188201882118822188231882418825188261882718828188291883018831188321883318834188351883618837188381883918840188411884218843188441884518846188471884818849188501885118852188531885418855188561885718858188591886018861188621886318864188651886618867188681886918870188711887218873188741887518876188771887818879188801888118882188831888418885188861888718888188891889018891188921889318894188951889618897188981889918900189011890218903189041890518906189071890818909189101891118912189131891418915189161891718918189191892018921189221892318924189251892618927189281892918930189311893218933189341893518936189371893818939189401894118942189431894418945189461894718948189491895018951189521895318954189551895618957189581895918960189611896218963189641896518966189671896818969189701897118972189731897418975189761897718978189791898018981189821898318984189851898618987189881898918990189911899218993189941899518996189971899818999190001900119002190031900419005190061900719008190091901019011190121901319014190151901619017190181901919020190211902219023190241902519026190271902819029190301903119032190331903419035190361903719038190391904019041190421904319044190451904619047190481904919050190511905219053190541905519056190571905819059190601906119062190631906419065190661906719068190691907019071190721907319074190751907619077190781907919080190811908219083190841908519086190871908819089190901909119092190931909419095190961909719098190991910019101191021910319104191051910619107191081910919110191111911219113191141911519116191171911819119191201912119122191231912419125191261912719128191291913019131191321913319134191351913619137191381913919140191411914219143191441914519146191471914819149191501915119152191531915419155191561915719158191591916019161191621916319164191651916619167191681916919170191711917219173191741917519176191771917819179191801918119182191831918419185191861918719188191891919019191191921919319194191951919619197191981919919200192011920219203192041920519206192071920819209192101921119212192131921419215192161921719218192191922019221192221922319224192251922619227192281922919230192311923219233192341923519236192371923819239192401924119242192431924419245192461924719248192491925019251192521925319254192551925619257192581925919260192611926219263192641926519266192671926819269192701927119272192731927419275192761927719278192791928019281192821928319284192851928619287192881928919290192911929219293192941929519296192971929819299193001930119302193031930419305193061930719308193091931019311193121931319314193151931619317193181931919320193211932219323193241932519326193271932819329193301933119332193331933419335193361933719338193391934019341193421934319344193451934619347193481934919350193511935219353193541935519356193571935819359193601936119362193631936419365193661936719368193691937019371193721937319374193751937619377193781937919380193811938219383193841938519386193871938819389193901939119392193931939419395193961939719398193991940019401194021940319404194051940619407194081940919410194111941219413194141941519416194171941819419194201942119422194231942419425194261942719428194291943019431194321943319434194351943619437194381943919440194411944219443194441944519446194471944819449194501945119452194531945419455194561945719458194591946019461194621946319464194651946619467194681946919470194711947219473194741947519476194771947819479194801948119482194831948419485194861948719488194891949019491194921949319494194951949619497194981949919500195011950219503195041950519506195071950819509195101951119512195131951419515195161951719518195191952019521195221952319524195251952619527195281952919530195311953219533195341953519536195371953819539195401954119542195431954419545195461954719548195491955019551195521955319554195551955619557195581955919560195611956219563195641956519566195671956819569195701957119572195731957419575195761957719578195791958019581195821958319584195851958619587195881958919590195911959219593195941959519596195971959819599196001960119602196031960419605196061960719608196091961019611196121961319614196151961619617196181961919620196211962219623196241962519626196271962819629196301963119632196331963419635196361963719638196391964019641196421964319644196451964619647196481964919650196511965219653196541965519656196571965819659196601966119662196631966419665196661966719668196691967019671196721967319674196751967619677196781967919680196811968219683196841968519686196871968819689196901969119692196931969419695196961969719698196991970019701197021970319704197051970619707197081970919710197111971219713197141971519716197171971819719197201972119722197231972419725197261972719728197291973019731197321973319734197351973619737197381973919740197411974219743197441974519746197471974819749197501975119752197531975419755197561975719758197591976019761197621976319764197651976619767197681976919770197711977219773197741977519776197771977819779197801978119782197831978419785197861978719788197891979019791197921979319794197951979619797197981979919800198011980219803198041980519806198071980819809198101981119812198131981419815198161981719818198191982019821198221982319824198251982619827198281982919830198311983219833198341983519836198371983819839198401984119842198431984419845198461984719848198491985019851198521985319854198551985619857198581985919860198611986219863198641986519866198671986819869198701987119872198731987419875198761987719878198791988019881198821988319884198851988619887198881988919890198911989219893198941989519896198971989819899199001990119902199031990419905199061990719908199091991019911199121991319914199151991619917199181991919920199211992219923199241992519926199271992819929199301993119932199331993419935199361993719938199391994019941199421994319944199451994619947199481994919950199511995219953199541995519956199571995819959199601996119962199631996419965199661996719968199691997019971199721997319974199751997619977199781997919980199811998219983199841998519986199871998819989199901999119992199931999419995199961999719998199992000020001200022000320004200052000620007200082000920010200112001220013200142001520016200172001820019200202002120022200232002420025200262002720028200292003020031200322003320034200352003620037200382003920040200412004220043200442004520046200472004820049200502005120052200532005420055200562005720058200592006020061200622006320064200652006620067200682006920070200712007220073200742007520076200772007820079200802008120082200832008420085200862008720088200892009020091200922009320094200952009620097200982009920100201012010220103201042010520106201072010820109201102011120112201132011420115201162011720118201192012020121201222012320124201252012620127201282012920130201312013220133201342013520136201372013820139201402014120142201432014420145201462014720148201492015020151201522015320154201552015620157201582015920160201612016220163201642016520166201672016820169201702017120172201732017420175201762017720178201792018020181201822018320184201852018620187201882018920190201912019220193201942019520196201972019820199202002020120202202032020420205202062020720208202092021020211202122021320214202152021620217202182021920220202212022220223202242022520226202272022820229202302023120232202332023420235202362023720238202392024020241202422024320244202452024620247202482024920250202512025220253202542025520256202572025820259202602026120262202632026420265202662026720268202692027020271202722027320274202752027620277202782027920280202812028220283202842028520286202872028820289202902029120292202932029420295202962029720298202992030020301203022030320304203052030620307203082030920310203112031220313203142031520316203172031820319203202032120322203232032420325203262032720328203292033020331203322033320334203352033620337203382033920340203412034220343203442034520346203472034820349203502035120352203532035420355203562035720358203592036020361203622036320364203652036620367203682036920370203712037220373203742037520376203772037820379203802038120382203832038420385203862038720388203892039020391203922039320394203952039620397203982039920400204012040220403204042040520406204072040820409204102041120412204132041420415204162041720418204192042020421204222042320424204252042620427204282042920430204312043220433204342043520436204372043820439204402044120442204432044420445204462044720448204492045020451204522045320454204552045620457204582045920460204612046220463204642046520466204672046820469204702047120472204732047420475204762047720478204792048020481204822048320484204852048620487204882048920490204912049220493204942049520496204972049820499205002050120502205032050420505205062050720508205092051020511205122051320514205152051620517205182051920520205212052220523205242052520526205272052820529205302053120532205332053420535205362053720538205392054020541205422054320544205452054620547205482054920550205512055220553205542055520556205572055820559205602056120562205632056420565205662056720568205692057020571205722057320574205752057620577205782057920580205812058220583205842058520586205872058820589205902059120592205932059420595205962059720598205992060020601206022060320604206052060620607206082060920610206112061220613206142061520616206172061820619206202062120622206232062420625206262062720628206292063020631206322063320634206352063620637206382063920640206412064220643206442064520646206472064820649206502065120652206532065420655206562065720658206592066020661206622066320664206652066620667206682066920670206712067220673206742067520676206772067820679206802068120682206832068420685206862068720688206892069020691206922069320694206952069620697206982069920700207012070220703207042070520706207072070820709207102071120712207132071420715207162071720718207192072020721207222072320724207252072620727207282072920730207312073220733207342073520736207372073820739207402074120742207432074420745207462074720748207492075020751207522075320754207552075620757207582075920760207612076220763207642076520766207672076820769207702077120772207732077420775207762077720778207792078020781207822078320784207852078620787207882078920790207912079220793207942079520796207972079820799208002080120802208032080420805208062080720808208092081020811208122081320814208152081620817208182081920820208212082220823208242082520826208272082820829208302083120832208332083420835208362083720838208392084020841208422084320844208452084620847208482084920850208512085220853208542085520856208572085820859208602086120862208632086420865208662086720868208692087020871208722087320874208752087620877208782087920880208812088220883208842088520886208872088820889208902089120892208932089420895208962089720898208992090020901209022090320904209052090620907209082090920910209112091220913209142091520916209172091820919209202092120922209232092420925209262092720928209292093020931209322093320934209352093620937209382093920940209412094220943209442094520946209472094820949209502095120952209532095420955209562095720958209592096020961209622096320964209652096620967209682096920970209712097220973209742097520976209772097820979209802098120982209832098420985209862098720988209892099020991209922099320994209952099620997209982099921000210012100221003210042100521006210072100821009210102101121012210132101421015210162101721018210192102021021210222102321024210252102621027210282102921030210312103221033210342103521036210372103821039210402104121042210432104421045210462104721048210492105021051210522105321054210552105621057210582105921060210612106221063210642106521066210672106821069210702107121072210732107421075210762107721078210792108021081210822108321084210852108621087210882108921090210912109221093210942109521096210972109821099211002110121102211032110421105211062110721108211092111021111211122111321114211152111621117211182111921120211212112221123211242112521126211272112821129211302113121132211332113421135211362113721138211392114021141211422114321144211452114621147211482114921150211512115221153211542115521156211572115821159211602116121162211632116421165211662116721168211692117021171211722117321174211752117621177211782117921180211812118221183211842118521186211872118821189211902119121192211932119421195211962119721198211992120021201212022120321204212052120621207212082120921210212112121221213212142121521216212172121821219212202122121222212232122421225212262122721228212292123021231212322123321234212352123621237212382123921240212412124221243212442124521246212472124821249212502125121252212532125421255212562125721258212592126021261212622126321264212652126621267212682126921270212712127221273212742127521276212772127821279212802128121282212832128421285212862128721288212892129021291212922129321294212952129621297212982129921300213012130221303213042130521306213072130821309213102131121312213132131421315213162131721318213192132021321213222132321324213252132621327213282132921330213312133221333213342133521336213372133821339213402134121342213432134421345213462134721348213492135021351213522135321354213552135621357213582135921360213612136221363213642136521366213672136821369213702137121372213732137421375213762137721378213792138021381213822138321384213852138621387213882138921390213912139221393213942139521396213972139821399214002140121402214032140421405214062140721408214092141021411214122141321414214152141621417214182141921420214212142221423214242142521426214272142821429214302143121432214332143421435214362143721438214392144021441214422144321444214452144621447214482144921450214512145221453214542145521456214572145821459214602146121462214632146421465214662146721468214692147021471214722147321474214752147621477214782147921480214812148221483214842148521486214872148821489214902149121492214932149421495214962149721498214992150021501215022150321504215052150621507215082150921510215112151221513215142151521516215172151821519215202152121522215232152421525215262152721528215292153021531215322153321534215352153621537215382153921540215412154221543215442154521546215472154821549215502155121552215532155421555215562155721558215592156021561215622156321564215652156621567215682156921570215712157221573215742157521576215772157821579215802158121582215832158421585215862158721588215892159021591215922159321594215952159621597215982159921600216012160221603216042160521606216072160821609216102161121612216132161421615216162161721618216192162021621216222162321624216252162621627216282162921630216312163221633216342163521636216372163821639216402164121642216432164421645216462164721648216492165021651216522165321654216552165621657216582165921660216612166221663216642166521666216672166821669216702167121672216732167421675216762167721678216792168021681216822168321684216852168621687216882168921690216912169221693216942169521696216972169821699217002170121702217032170421705217062170721708217092171021711217122171321714217152171621717217182171921720217212172221723217242172521726217272172821729217302173121732217332173421735217362173721738217392174021741217422174321744217452174621747217482174921750217512175221753217542175521756217572175821759217602176121762217632176421765217662176721768217692177021771217722177321774217752177621777217782177921780217812178221783217842178521786217872178821789217902179121792217932179421795217962179721798217992180021801218022180321804218052180621807218082180921810218112181221813218142181521816218172181821819218202182121822218232182421825218262182721828218292183021831218322183321834218352183621837218382183921840218412184221843218442184521846218472184821849218502185121852218532185421855218562185721858218592186021861218622186321864218652186621867218682186921870218712187221873218742187521876218772187821879218802188121882218832188421885218862188721888218892189021891218922189321894218952189621897218982189921900219012190221903219042190521906219072190821909219102191121912219132191421915219162191721918219192192021921219222192321924219252192621927219282192921930219312193221933219342193521936219372193821939219402194121942219432194421945219462194721948219492195021951219522195321954219552195621957219582195921960219612196221963219642196521966219672196821969219702197121972219732197421975219762197721978219792198021981219822198321984219852198621987219882198921990219912199221993219942199521996219972199821999220002200122002220032200422005220062200722008220092201022011220122201322014220152201622017220182201922020220212202222023220242202522026220272202822029220302203122032220332203422035220362203722038220392204022041220422204322044220452204622047220482204922050220512205222053220542205522056220572205822059220602206122062220632206422065220662206722068220692207022071220722207322074220752207622077220782207922080220812208222083220842208522086220872208822089220902209122092220932209422095220962209722098220992210022101221022210322104221052210622107221082210922110221112211222113221142211522116221172211822119221202212122122221232212422125221262212722128221292213022131221322213322134221352213622137221382213922140221412214222143221442214522146221472214822149221502215122152221532215422155221562215722158221592216022161221622216322164221652216622167221682216922170221712217222173221742217522176221772217822179221802218122182221832218422185221862218722188221892219022191221922219322194221952219622197221982219922200222012220222203222042220522206222072220822209222102221122212222132221422215222162221722218222192222022221222222222322224222252222622227222282222922230222312223222233222342223522236222372223822239222402224122242222432224422245222462224722248222492225022251222522225322254222552225622257222582225922260222612226222263222642226522266222672226822269222702227122272222732227422275222762227722278222792228022281222822228322284222852228622287222882228922290222912229222293222942229522296222972229822299223002230122302223032230422305223062230722308223092231022311223122231322314223152231622317223182231922320223212232222323223242232522326223272232822329223302233122332223332233422335223362233722338223392234022341223422234322344223452234622347223482234922350223512235222353223542235522356223572235822359223602236122362223632236422365223662236722368223692237022371223722237322374223752237622377223782237922380223812238222383223842238522386223872238822389223902239122392223932239422395223962239722398223992240022401224022240322404224052240622407224082240922410224112241222413224142241522416224172241822419224202242122422224232242422425224262242722428224292243022431224322243322434224352243622437224382243922440224412244222443224442244522446224472244822449224502245122452224532245422455224562245722458224592246022461224622246322464224652246622467224682246922470224712247222473224742247522476224772247822479224802248122482224832248422485224862248722488224892249022491224922249322494224952249622497224982249922500225012250222503225042250522506225072250822509225102251122512225132251422515225162251722518225192252022521225222252322524225252252622527225282252922530225312253222533225342253522536225372253822539225402254122542225432254422545225462254722548225492255022551225522255322554225552255622557225582255922560225612256222563225642256522566225672256822569225702257122572225732257422575225762257722578225792258022581225822258322584225852258622587225882258922590225912259222593225942259522596225972259822599226002260122602226032260422605226062260722608226092261022611226122261322614226152261622617226182261922620226212262222623226242262522626226272262822629226302263122632226332263422635226362263722638226392264022641226422264322644226452264622647226482264922650226512265222653226542265522656226572265822659226602266122662226632266422665226662266722668226692267022671226722267322674226752267622677226782267922680226812268222683226842268522686226872268822689226902269122692226932269422695226962269722698226992270022701227022270322704227052270622707227082270922710227112271222713227142271522716227172271822719227202272122722227232272422725227262272722728227292273022731227322273322734227352273622737227382273922740227412274222743227442274522746227472274822749227502275122752227532275422755227562275722758227592276022761227622276322764227652276622767227682276922770227712277222773227742277522776227772277822779227802278122782227832278422785227862278722788227892279022791227922279322794227952279622797227982279922800228012280222803228042280522806228072280822809228102281122812228132281422815228162281722818228192282022821228222282322824228252282622827228282282922830228312283222833228342283522836228372283822839228402284122842228432284422845228462284722848228492285022851228522285322854228552285622857228582285922860228612286222863228642286522866228672286822869228702287122872228732287422875228762287722878228792288022881228822288322884228852288622887228882288922890228912289222893228942289522896228972289822899229002290122902229032290422905229062290722908229092291022911229122291322914229152291622917229182291922920229212292222923229242292522926229272292822929229302293122932229332293422935229362293722938229392294022941229422294322944229452294622947229482294922950229512295222953229542295522956229572295822959229602296122962229632296422965229662296722968229692297022971229722297322974229752297622977229782297922980229812298222983229842298522986229872298822989229902299122992229932299422995229962299722998229992300023001230022300323004230052300623007230082300923010230112301223013230142301523016230172301823019230202302123022230232302423025230262302723028230292303023031230322303323034230352303623037230382303923040230412304223043230442304523046230472304823049230502305123052230532305423055230562305723058230592306023061230622306323064230652306623067230682306923070230712307223073230742307523076230772307823079230802308123082230832308423085230862308723088230892309023091230922309323094230952309623097230982309923100231012310223103231042310523106231072310823109231102311123112231132311423115231162311723118231192312023121231222312323124231252312623127231282312923130231312313223133231342313523136231372313823139231402314123142231432314423145231462314723148231492315023151231522315323154231552315623157231582315923160231612316223163231642316523166231672316823169231702317123172231732317423175231762317723178231792318023181231822318323184231852318623187231882318923190231912319223193231942319523196231972319823199232002320123202232032320423205232062320723208232092321023211232122321323214232152321623217232182321923220232212322223223232242322523226232272322823229232302323123232232332323423235232362323723238232392324023241232422324323244232452324623247232482324923250232512325223253232542325523256232572325823259232602326123262232632326423265232662326723268232692327023271232722327323274232752327623277232782327923280232812328223283232842328523286232872328823289232902329123292232932329423295232962329723298232992330023301233022330323304233052330623307233082330923310233112331223313233142331523316233172331823319233202332123322233232332423325233262332723328233292333023331233322333323334233352333623337233382333923340233412334223343233442334523346233472334823349233502335123352233532335423355233562335723358233592336023361233622336323364233652336623367233682336923370233712337223373233742337523376233772337823379233802338123382233832338423385233862338723388233892339023391233922339323394233952339623397233982339923400234012340223403234042340523406234072340823409234102341123412234132341423415234162341723418234192342023421234222342323424234252342623427234282342923430234312343223433234342343523436234372343823439234402344123442234432344423445234462344723448234492345023451234522345323454234552345623457234582345923460234612346223463234642346523466234672346823469234702347123472234732347423475234762347723478234792348023481234822348323484234852348623487234882348923490234912349223493234942349523496234972349823499235002350123502235032350423505235062350723508235092351023511235122351323514235152351623517235182351923520235212352223523235242352523526235272352823529235302353123532235332353423535235362353723538235392354023541235422354323544235452354623547235482354923550235512355223553235542355523556235572355823559235602356123562235632356423565235662356723568235692357023571235722357323574235752357623577235782357923580235812358223583235842358523586235872358823589235902359123592235932359423595235962359723598235992360023601236022360323604236052360623607236082360923610236112361223613236142361523616236172361823619236202362123622236232362423625236262362723628236292363023631236322363323634236352363623637236382363923640236412364223643236442364523646236472364823649236502365123652236532365423655236562365723658236592366023661236622366323664236652366623667236682366923670236712367223673236742367523676236772367823679236802368123682236832368423685236862368723688236892369023691236922369323694236952369623697236982369923700237012370223703237042370523706237072370823709237102371123712237132371423715237162371723718237192372023721237222372323724237252372623727237282372923730237312373223733237342373523736237372373823739237402374123742237432374423745237462374723748237492375023751237522375323754237552375623757237582375923760237612376223763237642376523766237672376823769237702377123772237732377423775237762377723778237792378023781237822378323784237852378623787237882378923790237912379223793237942379523796237972379823799238002380123802238032380423805238062380723808238092381023811238122381323814238152381623817238182381923820238212382223823238242382523826238272382823829238302383123832238332383423835238362383723838238392384023841238422384323844238452384623847238482384923850238512385223853238542385523856238572385823859238602386123862238632386423865238662386723868238692387023871238722387323874238752387623877238782387923880238812388223883238842388523886238872388823889238902389123892238932389423895238962389723898238992390023901239022390323904239052390623907239082390923910239112391223913239142391523916239172391823919239202392123922239232392423925239262392723928239292393023931239322393323934239352393623937239382393923940239412394223943239442394523946239472394823949239502395123952239532395423955239562395723958239592396023961239622396323964239652396623967239682396923970239712397223973239742397523976239772397823979239802398123982239832398423985239862398723988239892399023991239922399323994239952399623997239982399924000240012400224003240042400524006240072400824009240102401124012240132401424015240162401724018240192402024021240222402324024240252402624027240282402924030240312403224033240342403524036240372403824039240402404124042240432404424045240462404724048240492405024051240522405324054240552405624057240582405924060240612406224063240642406524066240672406824069240702407124072240732407424075240762407724078240792408024081240822408324084240852408624087240882408924090240912409224093240942409524096240972409824099241002410124102241032410424105241062410724108241092411024111241122411324114241152411624117241182411924120241212412224123241242412524126241272412824129241302413124132241332413424135241362413724138241392414024141241422414324144241452414624147241482414924150241512415224153241542415524156241572415824159241602416124162241632416424165241662416724168241692417024171241722417324174241752417624177241782417924180241812418224183241842418524186241872418824189241902419124192241932419424195241962419724198241992420024201242022420324204242052420624207242082420924210242112421224213242142421524216242172421824219242202422124222242232422424225242262422724228242292423024231242322423324234242352423624237242382423924240242412424224243242442424524246242472424824249242502425124252242532425424255242562425724258242592426024261242622426324264242652426624267242682426924270242712427224273242742427524276242772427824279242802428124282242832428424285242862428724288242892429024291242922429324294242952429624297242982429924300243012430224303243042430524306243072430824309243102431124312243132431424315243162431724318243192432024321243222432324324243252432624327243282432924330243312433224333243342433524336243372433824339243402434124342243432434424345243462434724348243492435024351243522435324354243552435624357243582435924360243612436224363243642436524366243672436824369243702437124372243732437424375243762437724378243792438024381243822438324384243852438624387243882438924390243912439224393243942439524396243972439824399244002440124402244032440424405244062440724408244092441024411244122441324414244152441624417244182441924420244212442224423244242442524426244272442824429244302443124432244332443424435244362443724438244392444024441244422444324444244452444624447244482444924450244512445224453244542445524456244572445824459244602446124462244632446424465244662446724468244692447024471244722447324474244752447624477244782447924480244812448224483244842448524486244872448824489244902449124492244932449424495244962449724498244992450024501245022450324504245052450624507245082450924510245112451224513245142451524516245172451824519245202452124522245232452424525245262452724528245292453024531245322453324534245352453624537245382453924540245412454224543245442454524546245472454824549245502455124552245532455424555245562455724558245592456024561245622456324564245652456624567245682456924570245712457224573245742457524576245772457824579245802458124582245832458424585245862458724588245892459024591245922459324594245952459624597245982459924600246012460224603246042460524606246072460824609246102461124612246132461424615246162461724618246192462024621246222462324624246252462624627246282462924630246312463224633246342463524636246372463824639246402464124642246432464424645246462464724648246492465024651246522465324654246552465624657246582465924660246612466224663246642466524666246672466824669246702467124672246732467424675246762467724678246792468024681246822468324684246852468624687246882468924690246912469224693246942469524696246972469824699247002470124702247032470424705247062470724708247092471024711247122471324714247152471624717247182471924720247212472224723247242472524726247272472824729247302473124732247332473424735247362473724738247392474024741247422474324744247452474624747247482474924750247512475224753247542475524756247572475824759247602476124762247632476424765247662476724768247692477024771247722477324774247752477624777247782477924780247812478224783247842478524786247872478824789247902479124792247932479424795247962479724798247992480024801248022480324804248052480624807248082480924810248112481224813248142481524816248172481824819248202482124822248232482424825248262482724828248292483024831248322483324834248352483624837248382483924840248412484224843248442484524846248472484824849248502485124852248532485424855248562485724858248592486024861248622486324864248652486624867248682486924870248712487224873248742487524876248772487824879248802488124882248832488424885248862488724888248892489024891248922489324894248952489624897248982489924900249012490224903249042490524906249072490824909249102491124912249132491424915249162491724918249192492024921249222492324924249252492624927249282492924930249312493224933249342493524936249372493824939249402494124942249432494424945249462494724948249492495024951249522495324954249552495624957249582495924960249612496224963249642496524966249672496824969249702497124972249732497424975249762497724978249792498024981249822498324984249852498624987249882498924990249912499224993249942499524996249972499824999250002500125002250032500425005250062500725008250092501025011250122501325014250152501625017250182501925020250212502225023250242502525026250272502825029250302503125032250332503425035250362503725038250392504025041250422504325044250452504625047250482504925050250512505225053250542505525056250572505825059250602506125062250632506425065250662506725068250692507025071250722507325074250752507625077250782507925080250812508225083250842508525086250872508825089250902509125092250932509425095250962509725098250992510025101251022510325104251052510625107251082510925110251112511225113251142511525116251172511825119251202512125122251232512425125251262512725128251292513025131251322513325134251352513625137251382513925140251412514225143251442514525146251472514825149251502515125152251532515425155251562515725158251592516025161251622516325164251652516625167251682516925170251712517225173251742517525176251772517825179251802518125182251832518425185251862518725188251892519025191251922519325194251952519625197251982519925200252012520225203252042520525206252072520825209252102521125212252132521425215252162521725218252192522025221252222522325224252252522625227252282522925230252312523225233252342523525236252372523825239252402524125242252432524425245252462524725248252492525025251252522525325254252552525625257252582525925260252612526225263252642526525266252672526825269252702527125272252732527425275252762527725278252792528025281252822528325284252852528625287252882528925290252912529225293252942529525296252972529825299253002530125302253032530425305253062530725308253092531025311253122531325314253152531625317253182531925320253212532225323253242532525326253272532825329253302533125332253332533425335253362533725338253392534025341253422534325344253452534625347253482534925350253512535225353253542535525356253572535825359253602536125362253632536425365253662536725368253692537025371253722537325374253752537625377253782537925380253812538225383253842538525386253872538825389253902539125392253932539425395253962539725398253992540025401254022540325404254052540625407254082540925410254112541225413254142541525416254172541825419254202542125422254232542425425254262542725428254292543025431254322543325434254352543625437254382543925440254412544225443254442544525446254472544825449254502545125452254532545425455254562545725458254592546025461254622546325464254652546625467254682546925470254712547225473254742547525476254772547825479254802548125482254832548425485254862548725488254892549025491254922549325494254952549625497254982549925500255012550225503255042550525506255072550825509255102551125512255132551425515255162551725518255192552025521255222552325524255252552625527255282552925530255312553225533255342553525536255372553825539255402554125542255432554425545255462554725548255492555025551255522555325554255552555625557255582555925560255612556225563255642556525566255672556825569255702557125572255732557425575255762557725578255792558025581255822558325584255852558625587255882558925590255912559225593255942559525596255972559825599256002560125602256032560425605256062560725608256092561025611256122561325614256152561625617256182561925620256212562225623256242562525626256272562825629256302563125632256332563425635256362563725638256392564025641256422564325644256452564625647256482564925650256512565225653256542565525656256572565825659256602566125662256632566425665256662566725668256692567025671256722567325674256752567625677256782567925680256812568225683256842568525686256872568825689256902569125692256932569425695256962569725698256992570025701257022570325704257052570625707257082570925710257112571225713257142571525716257172571825719257202572125722257232572425725257262572725728257292573025731257322573325734257352573625737257382573925740257412574225743257442574525746257472574825749257502575125752257532575425755257562575725758257592576025761257622576325764257652576625767257682576925770257712577225773257742577525776257772577825779257802578125782257832578425785257862578725788257892579025791257922579325794257952579625797257982579925800258012580225803258042580525806258072580825809258102581125812258132581425815258162581725818258192582025821258222582325824258252582625827258282582925830258312583225833258342583525836258372583825839258402584125842258432584425845258462584725848258492585025851258522585325854258552585625857258582585925860258612586225863258642586525866258672586825869258702587125872258732587425875258762587725878258792588025881258822588325884258852588625887258882588925890258912589225893258942589525896258972589825899259002590125902259032590425905259062590725908259092591025911259122591325914259152591625917259182591925920259212592225923259242592525926259272592825929259302593125932259332593425935259362593725938259392594025941259422594325944259452594625947259482594925950259512595225953259542595525956259572595825959259602596125962259632596425965259662596725968259692597025971259722597325974259752597625977259782597925980259812598225983259842598525986259872598825989259902599125992259932599425995259962599725998259992600026001260022600326004260052600626007260082600926010260112601226013260142601526016260172601826019260202602126022260232602426025260262602726028260292603026031260322603326034260352603626037260382603926040260412604226043260442604526046260472604826049260502605126052260532605426055260562605726058260592606026061260622606326064260652606626067260682606926070260712607226073260742607526076260772607826079260802608126082260832608426085260862608726088260892609026091260922609326094260952609626097260982609926100261012610226103261042610526106261072610826109261102611126112261132611426115261162611726118261192612026121261222612326124261252612626127261282612926130261312613226133261342613526136261372613826139261402614126142261432614426145261462614726148261492615026151261522615326154261552615626157261582615926160261612616226163261642616526166261672616826169261702617126172261732617426175261762617726178261792618026181261822618326184261852618626187261882618926190261912619226193261942619526196261972619826199262002620126202262032620426205262062620726208262092621026211262122621326214262152621626217262182621926220262212622226223262242622526226262272622826229262302623126232262332623426235262362623726238262392624026241262422624326244262452624626247262482624926250262512625226253262542625526256262572625826259262602626126262262632626426265262662626726268262692627026271262722627326274262752627626277262782627926280262812628226283262842628526286262872628826289262902629126292262932629426295262962629726298262992630026301263022630326304263052630626307263082630926310263112631226313263142631526316263172631826319263202632126322263232632426325263262632726328263292633026331263322633326334263352633626337263382633926340263412634226343263442634526346263472634826349263502635126352263532635426355263562635726358263592636026361263622636326364263652636626367263682636926370263712637226373263742637526376263772637826379263802638126382263832638426385263862638726388263892639026391263922639326394263952639626397263982639926400264012640226403264042640526406264072640826409264102641126412264132641426415264162641726418264192642026421264222642326424264252642626427264282642926430264312643226433264342643526436264372643826439264402644126442264432644426445264462644726448264492645026451264522645326454264552645626457264582645926460264612646226463264642646526466264672646826469264702647126472264732647426475264762647726478264792648026481264822648326484264852648626487264882648926490264912649226493264942649526496264972649826499265002650126502265032650426505265062650726508265092651026511265122651326514265152651626517265182651926520265212652226523265242652526526265272652826529265302653126532265332653426535265362653726538265392654026541265422654326544265452654626547265482654926550265512655226553265542655526556265572655826559265602656126562265632656426565265662656726568265692657026571265722657326574265752657626577265782657926580265812658226583265842658526586265872658826589265902659126592265932659426595265962659726598265992660026601266022660326604266052660626607266082660926610266112661226613266142661526616266172661826619266202662126622266232662426625266262662726628266292663026631266322663326634266352663626637266382663926640266412664226643266442664526646266472664826649266502665126652266532665426655266562665726658266592666026661266622666326664266652666626667266682666926670266712667226673266742667526676266772667826679266802668126682266832668426685266862668726688266892669026691266922669326694266952669626697266982669926700267012670226703267042670526706267072670826709267102671126712267132671426715267162671726718267192672026721267222672326724267252672626727267282672926730267312673226733267342673526736267372673826739267402674126742267432674426745267462674726748267492675026751267522675326754267552675626757267582675926760267612676226763267642676526766267672676826769267702677126772267732677426775267762677726778267792678026781267822678326784267852678626787267882678926790267912679226793267942679526796267972679826799268002680126802268032680426805268062680726808268092681026811268122681326814268152681626817268182681926820268212682226823268242682526826268272682826829268302683126832268332683426835268362683726838268392684026841268422684326844268452684626847268482684926850268512685226853268542685526856268572685826859268602686126862268632686426865268662686726868268692687026871268722687326874268752687626877268782687926880268812688226883268842688526886268872688826889268902689126892268932689426895268962689726898268992690026901269022690326904269052690626907269082690926910269112691226913269142691526916269172691826919269202692126922269232692426925269262692726928269292693026931269322693326934269352693626937269382693926940269412694226943269442694526946269472694826949269502695126952269532695426955269562695726958269592696026961269622696326964269652696626967269682696926970269712697226973269742697526976269772697826979269802698126982269832698426985269862698726988269892699026991269922699326994269952699626997269982699927000270012700227003270042700527006270072700827009270102701127012270132701427015270162701727018270192702027021270222702327024270252702627027270282702927030270312703227033270342703527036270372703827039270402704127042270432704427045270462704727048270492705027051270522705327054270552705627057270582705927060270612706227063270642706527066270672706827069270702707127072270732707427075270762707727078270792708027081270822708327084270852708627087270882708927090270912709227093270942709527096270972709827099271002710127102271032710427105271062710727108271092711027111271122711327114271152711627117271182711927120271212712227123271242712527126271272712827129271302713127132271332713427135271362713727138271392714027141271422714327144271452714627147271482714927150271512715227153271542715527156271572715827159271602716127162271632716427165271662716727168271692717027171271722717327174271752717627177271782717927180271812718227183271842718527186271872718827189271902719127192271932719427195271962719727198271992720027201272022720327204272052720627207272082720927210272112721227213272142721527216272172721827219272202722127222272232722427225272262722727228272292723027231272322723327234272352723627237272382723927240272412724227243272442724527246272472724827249272502725127252272532725427255272562725727258272592726027261272622726327264272652726627267272682726927270272712727227273272742727527276272772727827279272802728127282272832728427285272862728727288272892729027291272922729327294272952729627297272982729927300273012730227303273042730527306273072730827309273102731127312273132731427315273162731727318273192732027321273222732327324273252732627327273282732927330273312733227333273342733527336273372733827339273402734127342273432734427345273462734727348273492735027351273522735327354273552735627357273582735927360273612736227363273642736527366273672736827369273702737127372273732737427375273762737727378273792738027381273822738327384273852738627387273882738927390273912739227393273942739527396273972739827399274002740127402274032740427405274062740727408274092741027411274122741327414274152741627417274182741927420274212742227423274242742527426274272742827429274302743127432274332743427435274362743727438274392744027441274422744327444274452744627447274482744927450274512745227453274542745527456274572745827459274602746127462274632746427465274662746727468274692747027471274722747327474274752747627477274782747927480274812748227483274842748527486274872748827489274902749127492274932749427495274962749727498274992750027501275022750327504275052750627507275082750927510275112751227513275142751527516275172751827519275202752127522275232752427525275262752727528275292753027531275322753327534275352753627537275382753927540275412754227543275442754527546275472754827549275502755127552275532755427555275562755727558275592756027561275622756327564275652756627567275682756927570275712757227573275742757527576275772757827579275802758127582275832758427585275862758727588275892759027591275922759327594275952759627597275982759927600276012760227603276042760527606276072760827609276102761127612276132761427615276162761727618276192762027621276222762327624276252762627627276282762927630276312763227633276342763527636276372763827639276402764127642276432764427645276462764727648276492765027651276522765327654276552765627657276582765927660276612766227663276642766527666276672766827669276702767127672276732767427675276762767727678276792768027681276822768327684276852768627687276882768927690276912769227693276942769527696276972769827699277002770127702277032770427705277062770727708277092771027711277122771327714277152771627717277182771927720277212772227723277242772527726277272772827729277302773127732277332773427735277362773727738277392774027741277422774327744277452774627747277482774927750277512775227753277542775527756277572775827759277602776127762277632776427765277662776727768277692777027771277722777327774277752777627777277782777927780277812778227783277842778527786277872778827789277902779127792277932779427795277962779727798277992780027801278022780327804278052780627807278082780927810278112781227813278142781527816278172781827819278202782127822278232782427825278262782727828278292783027831278322783327834278352783627837278382783927840278412784227843278442784527846278472784827849278502785127852278532785427855278562785727858278592786027861278622786327864278652786627867278682786927870278712787227873278742787527876278772787827879278802788127882278832788427885278862788727888278892789027891278922789327894278952789627897278982789927900279012790227903279042790527906279072790827909279102791127912279132791427915279162791727918279192792027921279222792327924279252792627927279282792927930279312793227933279342793527936279372793827939279402794127942279432794427945279462794727948279492795027951279522795327954279552795627957279582795927960279612796227963279642796527966279672796827969279702797127972279732797427975279762797727978279792798027981279822798327984279852798627987279882798927990279912799227993279942799527996279972799827999280002800128002280032800428005280062800728008280092801028011280122801328014280152801628017280182801928020280212802228023280242802528026280272802828029280302803128032280332803428035280362803728038280392804028041280422804328044280452804628047280482804928050280512805228053280542805528056280572805828059280602806128062280632806428065280662806728068280692807028071280722807328074280752807628077280782807928080280812808228083280842808528086280872808828089280902809128092280932809428095280962809728098280992810028101281022810328104281052810628107281082810928110281112811228113281142811528116281172811828119281202812128122281232812428125281262812728128281292813028131281322813328134281352813628137281382813928140281412814228143281442814528146281472814828149281502815128152281532815428155281562815728158281592816028161281622816328164281652816628167281682816928170281712817228173281742817528176281772817828179281802818128182281832818428185281862818728188281892819028191281922819328194281952819628197281982819928200282012820228203282042820528206282072820828209282102821128212282132821428215282162821728218282192822028221282222822328224282252822628227282282822928230282312823228233282342823528236282372823828239282402824128242282432824428245282462824728248282492825028251282522825328254282552825628257282582825928260282612826228263282642826528266282672826828269282702827128272282732827428275282762827728278282792828028281282822828328284282852828628287282882828928290282912829228293282942829528296282972829828299283002830128302283032830428305283062830728308283092831028311283122831328314283152831628317283182831928320283212832228323283242832528326283272832828329283302833128332283332833428335283362833728338283392834028341283422834328344283452834628347283482834928350283512835228353283542835528356283572835828359283602836128362283632836428365283662836728368283692837028371283722837328374283752837628377283782837928380283812838228383283842838528386283872838828389283902839128392283932839428395283962839728398283992840028401284022840328404284052840628407284082840928410284112841228413284142841528416284172841828419284202842128422284232842428425284262842728428284292843028431284322843328434284352843628437284382843928440284412844228443284442844528446284472844828449284502845128452284532845428455284562845728458284592846028461284622846328464284652846628467284682846928470284712847228473284742847528476284772847828479284802848128482284832848428485284862848728488284892849028491284922849328494284952849628497284982849928500285012850228503285042850528506285072850828509285102851128512285132851428515285162851728518285192852028521285222852328524285252852628527285282852928530285312853228533285342853528536285372853828539285402854128542285432854428545285462854728548285492855028551285522855328554285552855628557285582855928560285612856228563285642856528566285672856828569285702857128572285732857428575285762857728578285792858028581285822858328584285852858628587285882858928590285912859228593285942859528596285972859828599286002860128602286032860428605286062860728608286092861028611286122861328614286152861628617286182861928620286212862228623286242862528626286272862828629286302863128632286332863428635286362863728638286392864028641286422864328644286452864628647286482864928650286512865228653286542865528656286572865828659286602866128662286632866428665286662866728668286692867028671286722867328674286752867628677286782867928680286812868228683286842868528686286872868828689286902869128692286932869428695286962869728698286992870028701287022870328704287052870628707287082870928710287112871228713287142871528716287172871828719287202872128722287232872428725287262872728728287292873028731287322873328734287352873628737287382873928740287412874228743287442874528746287472874828749287502875128752287532875428755287562875728758287592876028761287622876328764287652876628767287682876928770287712877228773287742877528776287772877828779287802878128782287832878428785287862878728788287892879028791287922879328794287952879628797287982879928800288012880228803288042880528806288072880828809288102881128812288132881428815288162881728818288192882028821288222882328824288252882628827288282882928830288312883228833288342883528836288372883828839288402884128842288432884428845288462884728848288492885028851288522885328854288552885628857288582885928860288612886228863288642886528866288672886828869288702887128872288732887428875288762887728878288792888028881288822888328884288852888628887288882888928890288912889228893288942889528896288972889828899289002890128902289032890428905289062890728908289092891028911289122891328914289152891628917289182891928920289212892228923289242892528926289272892828929289302893128932289332893428935289362893728938289392894028941289422894328944289452894628947289482894928950289512895228953289542895528956289572895828959289602896128962289632896428965289662896728968289692897028971289722897328974289752897628977289782897928980289812898228983289842898528986289872898828989289902899128992289932899428995289962899728998289992900029001290022900329004290052900629007290082900929010290112901229013290142901529016290172901829019290202902129022290232902429025290262902729028290292903029031290322903329034290352903629037290382903929040290412904229043290442904529046290472904829049290502905129052290532905429055290562905729058290592906029061290622906329064290652906629067290682906929070290712907229073290742907529076290772907829079290802908129082290832908429085290862908729088290892909029091290922909329094290952909629097290982909929100291012910229103291042910529106291072910829109291102911129112291132911429115291162911729118291192912029121291222912329124291252912629127291282912929130291312913229133291342913529136291372913829139291402914129142291432914429145291462914729148291492915029151291522915329154291552915629157291582915929160291612916229163291642916529166291672916829169291702917129172291732917429175291762917729178291792918029181291822918329184291852918629187291882918929190291912919229193291942919529196291972919829199292002920129202292032920429205292062920729208292092921029211292122921329214292152921629217292182921929220292212922229223292242922529226292272922829229292302923129232292332923429235292362923729238292392924029241292422924329244292452924629247292482924929250292512925229253292542925529256292572925829259292602926129262292632926429265292662926729268292692927029271292722927329274292752927629277292782927929280292812928229283292842928529286292872928829289292902929129292292932929429295292962929729298292992930029301293022930329304293052930629307293082930929310293112931229313293142931529316293172931829319293202932129322293232932429325293262932729328293292933029331293322933329334293352933629337293382933929340293412934229343293442934529346293472934829349293502935129352293532935429355293562935729358293592936029361293622936329364293652936629367293682936929370293712937229373293742937529376293772937829379293802938129382293832938429385293862938729388293892939029391293922939329394293952939629397293982939929400294012940229403294042940529406294072940829409294102941129412294132941429415294162941729418294192942029421294222942329424294252942629427294282942929430294312943229433294342943529436294372943829439294402944129442294432944429445294462944729448294492945029451294522945329454294552945629457294582945929460294612946229463294642946529466294672946829469294702947129472294732947429475294762947729478294792948029481294822948329484294852948629487294882948929490294912949229493294942949529496294972949829499295002950129502295032950429505295062950729508295092951029511295122951329514295152951629517295182951929520295212952229523295242952529526295272952829529295302953129532295332953429535295362953729538295392954029541295422954329544295452954629547295482954929550295512955229553295542955529556295572955829559295602956129562295632956429565295662956729568295692957029571295722957329574295752957629577295782957929580295812958229583295842958529586295872958829589295902959129592295932959429595295962959729598295992960029601296022960329604296052960629607296082960929610296112961229613296142961529616296172961829619296202962129622296232962429625296262962729628296292963029631296322963329634296352963629637296382963929640296412964229643296442964529646296472964829649296502965129652296532965429655296562965729658296592966029661296622966329664296652966629667296682966929670296712967229673296742967529676296772967829679296802968129682296832968429685296862968729688296892969029691296922969329694296952969629697296982969929700297012970229703297042970529706297072970829709297102971129712297132971429715297162971729718297192972029721297222972329724297252972629727297282972929730297312973229733297342973529736297372973829739297402974129742297432974429745297462974729748297492975029751297522975329754297552975629757297582975929760297612976229763297642976529766297672976829769297702977129772297732977429775297762977729778297792978029781297822978329784297852978629787297882978929790297912979229793297942979529796297972979829799298002980129802298032980429805298062980729808298092981029811298122981329814298152981629817298182981929820298212982229823298242982529826298272982829829298302983129832298332983429835298362983729838298392984029841298422984329844298452984629847298482984929850298512985229853298542985529856298572985829859298602986129862298632986429865298662986729868298692987029871298722987329874298752987629877298782987929880298812988229883298842988529886298872988829889298902989129892298932989429895298962989729898298992990029901299022990329904299052990629907299082990929910299112991229913299142991529916299172991829919299202992129922299232992429925299262992729928299292993029931299322993329934299352993629937299382993929940299412994229943299442994529946299472994829949299502995129952299532995429955299562995729958299592996029961299622996329964299652996629967299682996929970299712997229973299742997529976299772997829979299802998129982299832998429985299862998729988299892999029991299922999329994299952999629997299982999930000300013000230003300043000530006300073000830009300103001130012300133001430015300163001730018300193002030021300223002330024300253002630027300283002930030300313003230033300343003530036300373003830039300403004130042300433004430045300463004730048300493005030051300523005330054300553005630057300583005930060300613006230063300643006530066300673006830069300703007130072300733007430075300763007730078300793008030081300823008330084300853008630087300883008930090300913009230093300943009530096300973009830099301003010130102301033010430105301063010730108301093011030111301123011330114301153011630117301183011930120301213012230123301243012530126301273012830129301303013130132301333013430135301363013730138301393014030141301423014330144301453014630147301483014930150301513015230153301543015530156301573015830159301603016130162301633016430165301663016730168301693017030171301723017330174301753017630177301783017930180301813018230183301843018530186301873018830189301903019130192301933019430195301963019730198301993020030201302023020330204302053020630207302083020930210302113021230213302143021530216302173021830219302203022130222302233022430225302263022730228302293023030231302323023330234302353023630237302383023930240302413024230243302443024530246302473024830249302503025130252302533025430255302563025730258302593026030261302623026330264302653026630267302683026930270302713027230273302743027530276302773027830279302803028130282302833028430285302863028730288302893029030291302923029330294302953029630297302983029930300303013030230303303043030530306303073030830309303103031130312303133031430315303163031730318303193032030321303223032330324303253032630327303283032930330303313033230333303343033530336303373033830339303403034130342303433034430345303463034730348303493035030351303523035330354303553035630357303583035930360303613036230363303643036530366303673036830369303703037130372303733037430375303763037730378303793038030381303823038330384303853038630387303883038930390303913039230393303943039530396303973039830399304003040130402304033040430405304063040730408304093041030411304123041330414304153041630417304183041930420304213042230423304243042530426304273042830429304303043130432304333043430435304363043730438304393044030441304423044330444304453044630447304483044930450304513045230453304543045530456304573045830459304603046130462304633046430465304663046730468304693047030471304723047330474304753047630477304783047930480304813048230483304843048530486304873048830489304903049130492304933049430495304963049730498304993050030501305023050330504305053050630507305083050930510305113051230513305143051530516305173051830519305203052130522305233052430525305263052730528305293053030531305323053330534305353053630537305383053930540305413054230543305443054530546305473054830549305503055130552305533055430555305563055730558305593056030561305623056330564305653056630567305683056930570305713057230573305743057530576305773057830579305803058130582305833058430585305863058730588305893059030591305923059330594305953059630597305983059930600306013060230603306043060530606306073060830609306103061130612306133061430615306163061730618306193062030621306223062330624306253062630627306283062930630306313063230633306343063530636306373063830639306403064130642306433064430645306463064730648306493065030651306523065330654306553065630657306583065930660306613066230663306643066530666306673066830669306703067130672306733067430675306763067730678306793068030681306823068330684306853068630687306883068930690306913069230693306943069530696306973069830699307003070130702307033070430705307063070730708307093071030711307123071330714307153071630717307183071930720307213072230723307243072530726307273072830729307303073130732307333073430735307363073730738307393074030741307423074330744307453074630747307483074930750307513075230753307543075530756307573075830759307603076130762307633076430765307663076730768307693077030771307723077330774307753077630777307783077930780307813078230783307843078530786307873078830789307903079130792307933079430795307963079730798307993080030801308023080330804308053080630807308083080930810308113081230813308143081530816308173081830819308203082130822308233082430825308263082730828308293083030831308323083330834308353083630837308383083930840308413084230843308443084530846308473084830849308503085130852308533085430855308563085730858308593086030861308623086330864308653086630867308683086930870308713087230873308743087530876308773087830879308803088130882308833088430885308863088730888308893089030891308923089330894308953089630897308983089930900309013090230903309043090530906309073090830909309103091130912309133091430915309163091730918309193092030921309223092330924309253092630927309283092930930309313093230933309343093530936309373093830939309403094130942309433094430945309463094730948309493095030951309523095330954309553095630957309583095930960309613096230963309643096530966309673096830969309703097130972309733097430975309763097730978309793098030981309823098330984309853098630987309883098930990309913099230993309943099530996309973099830999310003100131002310033100431005310063100731008310093101031011310123101331014310153101631017310183101931020310213102231023310243102531026310273102831029310303103131032310333103431035310363103731038310393104031041310423104331044310453104631047310483104931050310513105231053310543105531056310573105831059310603106131062310633106431065310663106731068310693107031071310723107331074310753107631077310783107931080310813108231083310843108531086310873108831089310903109131092310933109431095310963109731098310993110031101311023110331104311053110631107311083110931110311113111231113311143111531116311173111831119311203112131122311233112431125311263112731128311293113031131311323113331134311353113631137311383113931140311413114231143311443114531146311473114831149311503115131152311533115431155311563115731158311593116031161311623116331164311653116631167311683116931170311713117231173311743117531176311773117831179311803118131182311833118431185311863118731188311893119031191311923119331194311953119631197311983119931200312013120231203312043120531206312073120831209312103121131212312133121431215312163121731218312193122031221312223122331224312253122631227312283122931230312313123231233312343123531236312373123831239312403124131242312433124431245312463124731248312493125031251312523125331254312553125631257312583125931260312613126231263312643126531266312673126831269312703127131272312733127431275312763127731278312793128031281312823128331284312853128631287312883128931290312913129231293312943129531296312973129831299313003130131302313033130431305313063130731308313093131031311313123131331314313153131631317313183131931320313213132231323313243132531326313273132831329313303133131332313333133431335313363133731338313393134031341313423134331344313453134631347313483134931350313513135231353313543135531356313573135831359313603136131362313633136431365313663136731368313693137031371313723137331374313753137631377313783137931380313813138231383313843138531386313873138831389313903139131392313933139431395313963139731398313993140031401314023140331404314053140631407314083140931410314113141231413314143141531416314173141831419314203142131422314233142431425314263142731428314293143031431314323143331434314353143631437314383143931440314413144231443314443144531446314473144831449314503145131452314533145431455314563145731458314593146031461314623146331464314653146631467314683146931470314713147231473314743147531476314773147831479314803148131482314833148431485314863148731488314893149031491314923149331494314953149631497314983149931500315013150231503315043150531506315073150831509315103151131512315133151431515315163151731518315193152031521315223152331524315253152631527315283152931530315313153231533315343153531536315373153831539315403154131542315433154431545315463154731548315493155031551315523155331554315553155631557315583155931560315613156231563315643156531566315673156831569315703157131572315733157431575315763157731578315793158031581315823158331584315853158631587315883158931590315913159231593315943159531596315973159831599316003160131602316033160431605316063160731608316093161031611316123161331614316153161631617316183161931620316213162231623316243162531626316273162831629316303163131632316333163431635316363163731638316393164031641316423164331644316453164631647316483164931650316513165231653316543165531656316573165831659316603166131662316633166431665316663166731668316693167031671316723167331674316753167631677316783167931680316813168231683316843168531686316873168831689316903169131692316933169431695316963169731698316993170031701317023170331704317053170631707317083170931710317113171231713317143171531716317173171831719317203172131722317233172431725317263172731728317293173031731317323173331734317353173631737317383173931740317413174231743317443174531746317473174831749317503175131752317533175431755317563175731758317593176031761317623176331764317653176631767317683176931770317713177231773317743177531776317773177831779317803178131782317833178431785317863178731788317893179031791317923179331794317953179631797317983179931800318013180231803318043180531806318073180831809318103181131812318133181431815318163181731818318193182031821318223182331824318253182631827318283182931830318313183231833318343183531836318373183831839318403184131842318433184431845318463184731848318493185031851318523185331854318553185631857318583185931860318613186231863318643186531866318673186831869318703187131872318733187431875318763187731878318793188031881318823188331884318853188631887318883188931890318913189231893318943189531896318973189831899319003190131902319033190431905319063190731908319093191031911319123191331914319153191631917319183191931920319213192231923319243192531926319273192831929319303193131932319333193431935319363193731938319393194031941319423194331944319453194631947319483194931950319513195231953319543195531956319573195831959319603196131962319633196431965319663196731968319693197031971319723197331974319753197631977319783197931980319813198231983319843198531986319873198831989319903199131992319933199431995319963199731998319993200032001320023200332004320053200632007320083200932010320113201232013320143201532016320173201832019320203202132022320233202432025320263202732028320293203032031320323203332034320353203632037320383203932040320413204232043320443204532046320473204832049320503205132052320533205432055320563205732058320593206032061320623206332064320653206632067320683206932070320713207232073320743207532076320773207832079320803208132082320833208432085320863208732088320893209032091320923209332094320953209632097320983209932100321013210232103321043210532106321073210832109321103211132112321133211432115321163211732118321193212032121321223212332124321253212632127321283212932130321313213232133321343213532136321373213832139321403214132142321433214432145321463214732148321493215032151321523215332154321553215632157321583215932160321613216232163321643216532166321673216832169321703217132172321733217432175321763217732178321793218032181321823218332184321853218632187321883218932190321913219232193321943219532196321973219832199322003220132202322033220432205322063220732208322093221032211322123221332214322153221632217322183221932220322213222232223322243222532226322273222832229322303223132232322333223432235322363223732238322393224032241322423224332244322453224632247322483224932250322513225232253322543225532256322573225832259322603226132262322633226432265322663226732268322693227032271322723227332274322753227632277322783227932280322813228232283322843228532286322873228832289322903229132292322933229432295322963229732298322993230032301323023230332304323053230632307323083230932310323113231232313323143231532316323173231832319323203232132322323233232432325323263232732328323293233032331323323233332334323353233632337323383233932340323413234232343323443234532346323473234832349323503235132352323533235432355323563235732358323593236032361323623236332364323653236632367323683236932370323713237232373323743237532376323773237832379323803238132382323833238432385323863238732388323893239032391323923239332394323953239632397323983239932400324013240232403324043240532406324073240832409324103241132412324133241432415324163241732418324193242032421324223242332424324253242632427324283242932430324313243232433324343243532436324373243832439324403244132442324433244432445324463244732448324493245032451324523245332454324553245632457324583245932460324613246232463324643246532466324673246832469324703247132472324733247432475324763247732478324793248032481324823248332484324853248632487324883248932490324913249232493324943249532496324973249832499325003250132502325033250432505325063250732508325093251032511325123251332514325153251632517325183251932520325213252232523325243252532526325273252832529325303253132532325333253432535325363253732538325393254032541325423254332544325453254632547325483254932550325513255232553325543255532556325573255832559325603256132562325633256432565325663256732568325693257032571325723257332574325753257632577325783257932580325813258232583325843258532586325873258832589325903259132592325933259432595325963259732598325993260032601326023260332604326053260632607326083260932610326113261232613326143261532616326173261832619326203262132622326233262432625326263262732628326293263032631326323263332634326353263632637326383263932640326413264232643326443264532646326473264832649326503265132652326533265432655326563265732658326593266032661326623266332664326653266632667326683266932670326713267232673326743267532676326773267832679326803268132682326833268432685326863268732688326893269032691326923269332694326953269632697326983269932700327013270232703327043270532706327073270832709327103271132712327133271432715327163271732718327193272032721327223272332724327253272632727327283272932730327313273232733327343273532736327373273832739327403274132742327433274432745327463274732748327493275032751327523275332754327553275632757327583275932760327613276232763327643276532766327673276832769327703277132772327733277432775327763277732778327793278032781327823278332784327853278632787327883278932790327913279232793327943279532796327973279832799328003280132802328033280432805328063280732808328093281032811328123281332814328153281632817328183281932820328213282232823328243282532826328273282832829328303283132832328333283432835328363283732838328393284032841328423284332844328453284632847328483284932850328513285232853328543285532856328573285832859328603286132862328633286432865328663286732868328693287032871328723287332874328753287632877328783287932880328813288232883328843288532886328873288832889328903289132892328933289432895328963289732898328993290032901329023290332904329053290632907329083290932910329113291232913329143291532916329173291832919329203292132922329233292432925329263292732928329293293032931329323293332934329353293632937329383293932940329413294232943329443294532946329473294832949329503295132952329533295432955329563295732958329593296032961329623296332964329653296632967329683296932970329713297232973329743297532976329773297832979329803298132982329833298432985329863298732988329893299032991329923299332994329953299632997329983299933000330013300233003330043300533006330073300833009330103301133012330133301433015330163301733018330193302033021330223302333024330253302633027330283302933030330313303233033330343303533036330373303833039330403304133042330433304433045330463304733048330493305033051330523305333054330553305633057330583305933060330613306233063330643306533066330673306833069330703307133072330733307433075330763307733078330793308033081330823308333084330853308633087330883308933090330913309233093330943309533096330973309833099331003310133102331033310433105331063310733108331093311033111331123311333114331153311633117331183311933120331213312233123331243312533126331273312833129331303313133132331333313433135331363313733138331393314033141331423314333144331453314633147331483314933150331513315233153331543315533156331573315833159331603316133162331633316433165331663316733168331693317033171331723317333174331753317633177331783317933180331813318233183331843318533186331873318833189331903319133192331933319433195331963319733198331993320033201332023320333204332053320633207332083320933210332113321233213332143321533216332173321833219332203322133222332233322433225332263322733228332293323033231332323323333234332353323633237332383323933240332413324233243332443324533246332473324833249332503325133252332533325433255332563325733258332593326033261332623326333264332653326633267332683326933270332713327233273332743327533276332773327833279332803328133282332833328433285332863328733288332893329033291332923329333294332953329633297332983329933300333013330233303333043330533306333073330833309333103331133312333133331433315333163331733318333193332033321333223332333324333253332633327333283332933330333313333233333333343333533336333373333833339333403334133342333433334433345333463334733348333493335033351333523335333354333553335633357333583335933360333613336233363333643336533366333673336833369333703337133372333733337433375333763337733378333793338033381333823338333384333853338633387333883338933390333913339233393333943339533396333973339833399334003340133402334033340433405334063340733408334093341033411334123341333414334153341633417334183341933420334213342233423334243342533426334273342833429334303343133432334333343433435334363343733438334393344033441334423344333444334453344633447334483344933450334513345233453334543345533456334573345833459334603346133462334633346433465334663346733468334693347033471334723347333474334753347633477334783347933480334813348233483334843348533486334873348833489334903349133492334933349433495334963349733498334993350033501335023350333504335053350633507335083350933510335113351233513335143351533516335173351833519335203352133522335233352433525335263352733528335293353033531335323353333534335353353633537335383353933540335413354233543335443354533546335473354833549335503355133552335533355433555335563355733558335593356033561335623356333564335653356633567335683356933570335713357233573335743357533576335773357833579335803358133582335833358433585335863358733588335893359033591335923359333594335953359633597335983359933600336013360233603336043360533606336073360833609336103361133612336133361433615336163361733618336193362033621336223362333624336253362633627336283362933630336313363233633336343363533636336373363833639336403364133642336433364433645336463364733648336493365033651336523365333654336553365633657336583365933660336613366233663336643366533666336673366833669336703367133672336733367433675336763367733678336793368033681336823368333684336853368633687336883368933690336913369233693336943369533696336973369833699337003370133702337033370433705337063370733708337093371033711337123371333714337153371633717337183371933720337213372233723337243372533726337273372833729337303373133732337333373433735337363373733738337393374033741337423374333744337453374633747337483374933750337513375233753337543375533756337573375833759337603376133762337633376433765337663376733768337693377033771337723377333774337753377633777337783377933780337813378233783337843378533786337873378833789337903379133792337933379433795337963379733798337993380033801338023380333804338053380633807338083380933810338113381233813338143381533816338173381833819338203382133822338233382433825338263382733828338293383033831338323383333834338353383633837338383383933840338413384233843338443384533846338473384833849338503385133852338533385433855338563385733858338593386033861338623386333864338653386633867338683386933870338713387233873338743387533876338773387833879338803388133882338833388433885338863388733888338893389033891338923389333894338953389633897338983389933900339013390233903339043390533906339073390833909339103391133912339133391433915339163391733918339193392033921339223392333924339253392633927339283392933930339313393233933339343393533936339373393833939339403394133942339433394433945339463394733948339493395033951339523395333954339553395633957339583395933960339613396233963339643396533966339673396833969339703397133972339733397433975339763397733978339793398033981339823398333984339853398633987339883398933990339913399233993339943399533996339973399833999340003400134002340033400434005340063400734008340093401034011340123401334014340153401634017340183401934020340213402234023340243402534026340273402834029340303403134032340333403434035340363403734038340393404034041340423404334044340453404634047340483404934050340513405234053340543405534056340573405834059340603406134062340633406434065340663406734068340693407034071340723407334074340753407634077340783407934080340813408234083340843408534086340873408834089340903409134092340933409434095340963409734098340993410034101341023410334104341053410634107341083410934110341113411234113341143411534116341173411834119341203412134122341233412434125341263412734128341293413034131341323413334134341353413634137341383413934140341413414234143341443414534146341473414834149341503415134152341533415434155341563415734158341593416034161341623416334164341653416634167341683416934170341713417234173341743417534176341773417834179341803418134182341833418434185341863418734188341893419034191341923419334194341953419634197341983419934200342013420234203342043420534206342073420834209342103421134212342133421434215342163421734218342193422034221342223422334224342253422634227342283422934230342313423234233342343423534236342373423834239342403424134242342433424434245342463424734248342493425034251342523425334254342553425634257342583425934260342613426234263342643426534266342673426834269342703427134272342733427434275342763427734278342793428034281342823428334284342853428634287342883428934290342913429234293342943429534296342973429834299343003430134302343033430434305343063430734308343093431034311343123431334314343153431634317343183431934320343213432234323343243432534326343273432834329343303433134332343333433434335343363433734338343393434034341343423434334344343453434634347343483434934350343513435234353343543435534356343573435834359343603436134362343633436434365343663436734368343693437034371343723437334374343753437634377343783437934380343813438234383343843438534386343873438834389343903439134392343933439434395343963439734398343993440034401344023440334404344053440634407344083440934410344113441234413344143441534416344173441834419344203442134422344233442434425344263442734428344293443034431344323443334434344353443634437344383443934440344413444234443344443444534446344473444834449344503445134452344533445434455344563445734458344593446034461344623446334464344653446634467344683446934470344713447234473344743447534476344773447834479344803448134482344833448434485344863448734488344893449034491344923449334494344953449634497344983449934500345013450234503345043450534506345073450834509345103451134512345133451434515345163451734518345193452034521345223452334524345253452634527345283452934530345313453234533345343453534536345373453834539345403454134542345433454434545345463454734548345493455034551345523455334554345553455634557345583455934560345613456234563345643456534566345673456834569345703457134572345733457434575345763457734578345793458034581345823458334584345853458634587345883458934590345913459234593345943459534596345973459834599346003460134602346033460434605346063460734608346093461034611346123461334614346153461634617346183461934620346213462234623346243462534626346273462834629346303463134632346333463434635346363463734638346393464034641346423464334644346453464634647346483464934650346513465234653346543465534656346573465834659346603466134662346633466434665346663466734668346693467034671346723467334674346753467634677346783467934680346813468234683346843468534686346873468834689346903469134692346933469434695346963469734698346993470034701347023470334704347053470634707347083470934710347113471234713347143471534716347173471834719347203472134722347233472434725347263472734728347293473034731347323473334734347353473634737347383473934740347413474234743347443474534746347473474834749347503475134752347533475434755347563475734758347593476034761347623476334764347653476634767347683476934770347713477234773347743477534776347773477834779347803478134782347833478434785347863478734788347893479034791347923479334794347953479634797347983479934800348013480234803348043480534806348073480834809348103481134812348133481434815348163481734818348193482034821348223482334824348253482634827348283482934830348313483234833348343483534836348373483834839348403484134842348433484434845348463484734848348493485034851348523485334854348553485634857348583485934860348613486234863348643486534866348673486834869348703487134872348733487434875348763487734878348793488034881348823488334884348853488634887348883488934890348913489234893348943489534896348973489834899349003490134902349033490434905349063490734908349093491034911349123491334914349153491634917349183491934920349213492234923349243492534926349273492834929349303493134932349333493434935349363493734938349393494034941349423494334944349453494634947349483494934950349513495234953349543495534956349573495834959349603496134962349633496434965349663496734968349693497034971349723497334974349753497634977349783497934980349813498234983349843498534986349873498834989349903499134992349933499434995349963499734998349993500035001350023500335004350053500635007350083500935010350113501235013350143501535016350173501835019350203502135022350233502435025350263502735028350293503035031350323503335034350353503635037350383503935040350413504235043350443504535046350473504835049350503505135052350533505435055350563505735058350593506035061350623506335064350653506635067350683506935070350713507235073350743507535076350773507835079350803508135082350833508435085350863508735088350893509035091350923509335094350953509635097350983509935100351013510235103351043510535106351073510835109351103511135112351133511435115351163511735118351193512035121351223512335124351253512635127351283512935130351313513235133351343513535136351373513835139351403514135142351433514435145351463514735148351493515035151351523515335154351553515635157351583515935160351613516235163351643516535166351673516835169351703517135172351733517435175351763517735178351793518035181351823518335184351853518635187351883518935190351913519235193351943519535196351973519835199352003520135202352033520435205352063520735208352093521035211352123521335214352153521635217352183521935220352213522235223352243522535226352273522835229352303523135232352333523435235352363523735238352393524035241352423524335244352453524635247352483524935250352513525235253352543525535256352573525835259352603526135262352633526435265352663526735268352693527035271352723527335274352753527635277352783527935280352813528235283352843528535286352873528835289352903529135292352933529435295352963529735298352993530035301353023530335304353053530635307353083530935310353113531235313353143531535316353173531835319353203532135322353233532435325353263532735328353293533035331353323533335334353353533635337353383533935340353413534235343353443534535346353473534835349353503535135352353533535435355353563535735358353593536035361353623536335364353653536635367353683536935370353713537235373353743537535376353773537835379353803538135382353833538435385353863538735388353893539035391353923539335394353953539635397353983539935400354013540235403354043540535406354073540835409354103541135412354133541435415354163541735418354193542035421354223542335424354253542635427354283542935430354313543235433354343543535436354373543835439354403544135442354433544435445354463544735448354493545035451354523545335454354553545635457354583545935460354613546235463354643546535466354673546835469354703547135472354733547435475354763547735478354793548035481354823548335484354853548635487354883548935490354913549235493354943549535496354973549835499355003550135502355033550435505355063550735508355093551035511355123551335514355153551635517355183551935520355213552235523355243552535526355273552835529355303553135532355333553435535355363553735538355393554035541355423554335544355453554635547355483554935550355513555235553355543555535556355573555835559355603556135562355633556435565355663556735568355693557035571355723557335574355753557635577355783557935580355813558235583355843558535586355873558835589355903559135592355933559435595355963559735598355993560035601356023560335604356053560635607356083560935610356113561235613356143561535616356173561835619356203562135622356233562435625356263562735628356293563035631356323563335634356353563635637356383563935640356413564235643356443564535646356473564835649356503565135652356533565435655356563565735658356593566035661356623566335664356653566635667356683566935670356713567235673356743567535676356773567835679356803568135682356833568435685356863568735688356893569035691356923569335694356953569635697356983569935700357013570235703357043570535706357073570835709357103571135712357133571435715357163571735718357193572035721357223572335724357253572635727357283572935730357313573235733357343573535736357373573835739357403574135742357433574435745357463574735748357493575035751357523575335754357553575635757357583575935760357613576235763357643576535766357673576835769357703577135772357733577435775357763577735778357793578035781357823578335784357853578635787357883578935790357913579235793357943579535796357973579835799358003580135802358033580435805358063580735808358093581035811358123581335814358153581635817358183581935820358213582235823358243582535826358273582835829358303583135832358333583435835358363583735838358393584035841358423584335844358453584635847358483584935850358513585235853358543585535856358573585835859358603586135862358633586435865358663586735868358693587035871358723587335874358753587635877358783587935880358813588235883358843588535886358873588835889358903589135892358933589435895358963589735898358993590035901359023590335904359053590635907359083590935910359113591235913359143591535916359173591835919359203592135922359233592435925359263592735928359293593035931359323593335934359353593635937359383593935940359413594235943359443594535946359473594835949359503595135952359533595435955359563595735958359593596035961359623596335964359653596635967359683596935970359713597235973359743597535976359773597835979359803598135982359833598435985359863598735988359893599035991359923599335994359953599635997359983599936000360013600236003360043600536006360073600836009360103601136012360133601436015360163601736018360193602036021360223602336024360253602636027360283602936030360313603236033360343603536036360373603836039360403604136042360433604436045360463604736048360493605036051360523605336054360553605636057360583605936060360613606236063360643606536066360673606836069360703607136072360733607436075360763607736078360793608036081360823608336084360853608636087360883608936090360913609236093360943609536096360973609836099361003610136102361033610436105361063610736108361093611036111361123611336114361153611636117361183611936120361213612236123361243612536126361273612836129361303613136132361333613436135361363613736138361393614036141361423614336144361453614636147361483614936150361513615236153361543615536156361573615836159361603616136162361633616436165361663616736168361693617036171361723617336174361753617636177361783617936180361813618236183361843618536186361873618836189361903619136192361933619436195361963619736198361993620036201362023620336204362053620636207362083620936210362113621236213362143621536216362173621836219362203622136222362233622436225362263622736228362293623036231362323623336234362353623636237362383623936240362413624236243362443624536246362473624836249362503625136252362533625436255362563625736258362593626036261362623626336264362653626636267362683626936270362713627236273362743627536276362773627836279362803628136282362833628436285362863628736288362893629036291362923629336294362953629636297362983629936300363013630236303363043630536306363073630836309363103631136312363133631436315363163631736318363193632036321363223632336324363253632636327363283632936330363313633236333363343633536336363373633836339363403634136342363433634436345363463634736348363493635036351363523635336354363553635636357363583635936360363613636236363363643636536366363673636836369363703637136372363733637436375363763637736378363793638036381363823638336384363853638636387363883638936390363913639236393363943639536396363973639836399364003640136402364033640436405364063640736408364093641036411364123641336414364153641636417364183641936420364213642236423364243642536426364273642836429364303643136432364333643436435364363643736438364393644036441364423644336444364453644636447364483644936450364513645236453364543645536456364573645836459364603646136462364633646436465364663646736468364693647036471364723647336474364753647636477364783647936480364813648236483364843648536486364873648836489364903649136492364933649436495364963649736498364993650036501365023650336504365053650636507365083650936510365113651236513365143651536516365173651836519365203652136522365233652436525365263652736528365293653036531365323653336534365353653636537365383653936540365413654236543365443654536546365473654836549365503655136552365533655436555365563655736558365593656036561365623656336564365653656636567365683656936570365713657236573365743657536576365773657836579365803658136582365833658436585365863658736588365893659036591365923659336594365953659636597365983659936600366013660236603366043660536606366073660836609366103661136612366133661436615366163661736618366193662036621366223662336624366253662636627366283662936630366313663236633366343663536636366373663836639366403664136642366433664436645366463664736648366493665036651366523665336654366553665636657366583665936660366613666236663366643666536666366673666836669366703667136672366733667436675366763667736678366793668036681366823668336684366853668636687366883668936690366913669236693366943669536696366973669836699367003670136702367033670436705367063670736708367093671036711367123671336714367153671636717367183671936720367213672236723367243672536726367273672836729367303673136732367333673436735367363673736738367393674036741367423674336744367453674636747367483674936750367513675236753367543675536756367573675836759367603676136762367633676436765367663676736768367693677036771367723677336774367753677636777367783677936780367813678236783367843678536786367873678836789367903679136792367933679436795367963679736798367993680036801368023680336804368053680636807368083680936810368113681236813368143681536816368173681836819368203682136822368233682436825368263682736828368293683036831368323683336834368353683636837368383683936840368413684236843368443684536846368473684836849368503685136852368533685436855368563685736858368593686036861368623686336864368653686636867368683686936870368713687236873368743687536876368773687836879368803688136882368833688436885368863688736888368893689036891368923689336894368953689636897368983689936900369013690236903369043690536906369073690836909369103691136912369133691436915369163691736918369193692036921369223692336924369253692636927369283692936930369313693236933369343693536936369373693836939369403694136942369433694436945369463694736948369493695036951369523695336954369553695636957369583695936960369613696236963369643696536966369673696836969369703697136972369733697436975369763697736978369793698036981369823698336984369853698636987369883698936990369913699236993369943699536996369973699836999370003700137002370033700437005370063700737008370093701037011370123701337014370153701637017370183701937020370213702237023370243702537026370273702837029370303703137032370333703437035370363703737038370393704037041370423704337044370453704637047370483704937050370513705237053370543705537056370573705837059370603706137062370633706437065370663706737068370693707037071370723707337074370753707637077370783707937080370813708237083370843708537086370873708837089370903709137092370933709437095370963709737098370993710037101371023710337104371053710637107371083710937110371113711237113371143711537116371173711837119371203712137122371233712437125371263712737128371293713037131371323713337134371353713637137371383713937140371413714237143371443714537146371473714837149371503715137152371533715437155371563715737158371593716037161371623716337164371653716637167371683716937170371713717237173371743717537176371773717837179371803718137182371833718437185371863718737188371893719037191371923719337194371953719637197371983719937200372013720237203372043720537206372073720837209372103721137212372133721437215372163721737218372193722037221372223722337224372253722637227372283722937230372313723237233372343723537236372373723837239372403724137242372433724437245372463724737248372493725037251372523725337254372553725637257372583725937260372613726237263372643726537266372673726837269372703727137272372733727437275372763727737278372793728037281372823728337284372853728637287372883728937290372913729237293372943729537296372973729837299373003730137302373033730437305373063730737308373093731037311373123731337314373153731637317373183731937320373213732237323373243732537326373273732837329373303733137332373333733437335373363733737338373393734037341373423734337344373453734637347373483734937350373513735237353373543735537356373573735837359373603736137362373633736437365373663736737368373693737037371373723737337374373753737637377373783737937380373813738237383373843738537386373873738837389373903739137392373933739437395373963739737398373993740037401374023740337404374053740637407374083740937410374113741237413374143741537416374173741837419374203742137422374233742437425374263742737428374293743037431374323743337434374353743637437374383743937440374413744237443374443744537446374473744837449374503745137452374533745437455374563745737458374593746037461374623746337464374653746637467374683746937470374713747237473374743747537476374773747837479374803748137482374833748437485374863748737488374893749037491374923749337494374953749637497374983749937500375013750237503375043750537506375073750837509375103751137512375133751437515375163751737518375193752037521375223752337524375253752637527375283752937530375313753237533375343753537536375373753837539375403754137542375433754437545375463754737548375493755037551375523755337554375553755637557375583755937560375613756237563375643756537566375673756837569375703757137572375733757437575375763757737578375793758037581375823758337584375853758637587375883758937590375913759237593375943759537596375973759837599376003760137602376033760437605376063760737608376093761037611376123761337614376153761637617376183761937620376213762237623376243762537626376273762837629376303763137632376333763437635376363763737638376393764037641376423764337644376453764637647376483764937650376513765237653376543765537656376573765837659376603766137662376633766437665376663766737668376693767037671376723767337674376753767637677376783767937680376813768237683376843768537686376873768837689376903769137692376933769437695376963769737698376993770037701377023770337704377053770637707377083770937710377113771237713377143771537716377173771837719377203772137722377233772437725377263772737728377293773037731377323773337734377353773637737377383773937740377413774237743377443774537746377473774837749377503775137752377533775437755377563775737758377593776037761377623776337764377653776637767377683776937770377713777237773377743777537776377773777837779377803778137782377833778437785377863778737788377893779037791377923779337794377953779637797377983779937800378013780237803378043780537806378073780837809378103781137812378133781437815378163781737818378193782037821378223782337824378253782637827378283782937830378313783237833378343783537836378373783837839378403784137842378433784437845378463784737848378493785037851378523785337854378553785637857378583785937860378613786237863378643786537866378673786837869378703787137872378733787437875378763787737878378793788037881378823788337884378853788637887378883788937890378913789237893378943789537896378973789837899379003790137902379033790437905379063790737908379093791037911379123791337914379153791637917379183791937920379213792237923379243792537926379273792837929379303793137932379333793437935379363793737938379393794037941379423794337944379453794637947379483794937950379513795237953379543795537956379573795837959379603796137962379633796437965379663796737968379693797037971379723797337974379753797637977379783797937980379813798237983379843798537986379873798837989379903799137992379933799437995379963799737998379993800038001380023800338004380053800638007380083800938010380113801238013380143801538016380173801838019380203802138022380233802438025380263802738028380293803038031380323803338034380353803638037380383803938040380413804238043380443804538046380473804838049380503805138052380533805438055380563805738058380593806038061380623806338064380653806638067380683806938070380713807238073380743807538076380773807838079380803808138082380833808438085380863808738088380893809038091380923809338094380953809638097380983809938100381013810238103381043810538106381073810838109381103811138112381133811438115381163811738118381193812038121381223812338124381253812638127381283812938130381313813238133381343813538136381373813838139381403814138142381433814438145381463814738148381493815038151381523815338154381553815638157381583815938160381613816238163381643816538166381673816838169381703817138172381733817438175381763817738178381793818038181381823818338184381853818638187381883818938190381913819238193381943819538196381973819838199382003820138202382033820438205382063820738208382093821038211382123821338214382153821638217382183821938220382213822238223382243822538226382273822838229382303823138232382333823438235382363823738238382393824038241382423824338244382453824638247382483824938250382513825238253382543825538256382573825838259382603826138262382633826438265382663826738268382693827038271382723827338274382753827638277382783827938280382813828238283382843828538286382873828838289382903829138292382933829438295382963829738298382993830038301383023830338304383053830638307383083830938310383113831238313383143831538316383173831838319383203832138322383233832438325383263832738328383293833038331383323833338334383353833638337383383833938340383413834238343383443834538346383473834838349383503835138352383533835438355383563835738358383593836038361383623836338364383653836638367383683836938370383713837238373383743837538376383773837838379383803838138382383833838438385383863838738388383893839038391383923839338394383953839638397383983839938400384013840238403384043840538406384073840838409384103841138412384133841438415384163841738418384193842038421384223842338424384253842638427384283842938430384313843238433384343843538436384373843838439384403844138442384433844438445384463844738448384493845038451384523845338454384553845638457384583845938460384613846238463384643846538466384673846838469384703847138472384733847438475384763847738478384793848038481384823848338484384853848638487384883848938490384913849238493384943849538496384973849838499385003850138502385033850438505385063850738508385093851038511385123851338514385153851638517385183851938520385213852238523385243852538526385273852838529385303853138532385333853438535385363853738538385393854038541385423854338544385453854638547385483854938550385513855238553385543855538556385573855838559385603856138562385633856438565385663856738568385693857038571385723857338574385753857638577385783857938580385813858238583385843858538586385873858838589385903859138592385933859438595385963859738598385993860038601386023860338604386053860638607386083860938610386113861238613386143861538616386173861838619386203862138622386233862438625386263862738628386293863038631386323863338634386353863638637386383863938640386413864238643386443864538646386473864838649386503865138652386533865438655386563865738658386593866038661386623866338664386653866638667386683866938670386713867238673386743867538676386773867838679386803868138682386833868438685386863868738688386893869038691386923869338694386953869638697386983869938700387013870238703387043870538706387073870838709387103871138712387133871438715387163871738718387193872038721387223872338724387253872638727387283872938730387313873238733387343873538736387373873838739387403874138742387433874438745387463874738748387493875038751387523875338754387553875638757387583875938760387613876238763387643876538766387673876838769387703877138772387733877438775387763877738778387793878038781387823878338784387853878638787387883878938790387913879238793387943879538796387973879838799388003880138802388033880438805388063880738808388093881038811388123881338814388153881638817388183881938820388213882238823388243882538826388273882838829388303883138832388333883438835388363883738838388393884038841388423884338844388453884638847388483884938850388513885238853388543885538856388573885838859388603886138862388633886438865388663886738868388693887038871388723887338874388753887638877388783887938880388813888238883388843888538886388873888838889388903889138892388933889438895388963889738898388993890038901389023890338904389053890638907389083890938910389113891238913389143891538916389173891838919389203892138922389233892438925389263892738928389293893038931389323893338934389353893638937389383893938940389413894238943389443894538946389473894838949389503895138952389533895438955389563895738958389593896038961389623896338964389653896638967389683896938970389713897238973389743897538976389773897838979389803898138982389833898438985389863898738988389893899038991389923899338994389953899638997389983899939000390013900239003390043900539006390073900839009390103901139012390133901439015390163901739018390193902039021390223902339024390253902639027390283902939030390313903239033390343903539036390373903839039390403904139042390433904439045390463904739048390493905039051390523905339054390553905639057390583905939060390613906239063390643906539066390673906839069390703907139072390733907439075390763907739078390793908039081390823908339084390853908639087390883908939090390913909239093390943909539096390973909839099391003910139102391033910439105391063910739108391093911039111391123911339114391153911639117391183911939120391213912239123391243912539126391273912839129391303913139132391333913439135391363913739138391393914039141391423914339144391453914639147391483914939150391513915239153391543915539156391573915839159391603916139162391633916439165391663916739168391693917039171391723917339174391753917639177391783917939180391813918239183391843918539186391873918839189391903919139192391933919439195391963919739198391993920039201392023920339204392053920639207392083920939210392113921239213392143921539216392173921839219392203922139222392233922439225392263922739228392293923039231392323923339234392353923639237392383923939240392413924239243392443924539246392473924839249392503925139252392533925439255392563925739258392593926039261392623926339264392653926639267392683926939270392713927239273392743927539276392773927839279392803928139282392833928439285392863928739288392893929039291392923929339294392953929639297392983929939300393013930239303393043930539306393073930839309393103931139312393133931439315393163931739318393193932039321393223932339324393253932639327393283932939330393313933239333393343933539336393373933839339393403934139342393433934439345393463934739348393493935039351393523935339354393553935639357393583935939360393613936239363393643936539366393673936839369393703937139372393733937439375393763937739378393793938039381393823938339384393853938639387393883938939390393913939239393393943939539396393973939839399394003940139402394033940439405394063940739408394093941039411394123941339414394153941639417394183941939420394213942239423394243942539426394273942839429394303943139432394333943439435394363943739438394393944039441394423944339444394453944639447394483944939450394513945239453394543945539456394573945839459394603946139462394633946439465394663946739468394693947039471394723947339474394753947639477394783947939480394813948239483394843948539486394873948839489394903949139492394933949439495394963949739498394993950039501395023950339504395053950639507395083950939510395113951239513395143951539516395173951839519395203952139522395233952439525395263952739528395293953039531395323953339534395353953639537395383953939540395413954239543395443954539546395473954839549395503955139552395533955439555395563955739558395593956039561395623956339564395653956639567395683956939570395713957239573395743957539576395773957839579395803958139582395833958439585395863958739588395893959039591395923959339594395953959639597395983959939600396013960239603396043960539606396073960839609396103961139612396133961439615396163961739618396193962039621396223962339624396253962639627396283962939630396313963239633396343963539636396373963839639396403964139642396433964439645396463964739648396493965039651396523965339654396553965639657396583965939660396613966239663396643966539666396673966839669396703967139672396733967439675396763967739678396793968039681396823968339684396853968639687396883968939690396913969239693396943969539696396973969839699397003970139702397033970439705397063970739708397093971039711397123971339714397153971639717397183971939720397213972239723397243972539726397273972839729397303973139732397333973439735397363973739738397393974039741397423974339744397453974639747397483974939750397513975239753397543975539756397573975839759397603976139762397633976439765397663976739768397693977039771397723977339774397753977639777397783977939780397813978239783397843978539786397873978839789397903979139792397933979439795397963979739798397993980039801398023980339804398053980639807398083980939810398113981239813398143981539816398173981839819398203982139822398233982439825398263982739828398293983039831398323983339834398353983639837398383983939840398413984239843398443984539846398473984839849398503985139852398533985439855398563985739858398593986039861398623986339864398653986639867398683986939870398713987239873398743987539876398773987839879398803988139882398833988439885398863988739888398893989039891398923989339894398953989639897398983989939900399013990239903399043990539906399073990839909399103991139912399133991439915399163991739918399193992039921399223992339924399253992639927399283992939930399313993239933399343993539936399373993839939399403994139942399433994439945399463994739948399493995039951399523995339954399553995639957399583995939960399613996239963399643996539966399673996839969399703997139972399733997439975399763997739978399793998039981399823998339984399853998639987399883998939990399913999239993399943999539996399973999839999400004000140002400034000440005400064000740008400094001040011400124001340014400154001640017400184001940020400214002240023400244002540026400274002840029400304003140032400334003440035400364003740038400394004040041400424004340044400454004640047400484004940050400514005240053400544005540056400574005840059400604006140062400634006440065400664006740068400694007040071400724007340074400754007640077400784007940080400814008240083400844008540086400874008840089400904009140092400934009440095400964009740098400994010040101401024010340104401054010640107401084010940110401114011240113401144011540116401174011840119401204012140122401234012440125401264012740128401294013040131401324013340134401354013640137401384013940140401414014240143401444014540146401474014840149401504015140152401534015440155401564015740158401594016040161401624016340164401654016640167401684016940170401714017240173401744017540176401774017840179401804018140182401834018440185401864018740188401894019040191401924019340194401954019640197401984019940200402014020240203402044020540206402074020840209402104021140212402134021440215402164021740218402194022040221402224022340224402254022640227402284022940230402314023240233402344023540236402374023840239402404024140242402434024440245402464024740248402494025040251402524025340254402554025640257402584025940260402614026240263402644026540266402674026840269402704027140272402734027440275402764027740278402794028040281402824028340284402854028640287402884028940290402914029240293402944029540296402974029840299403004030140302403034030440305403064030740308403094031040311403124031340314403154031640317403184031940320403214032240323403244032540326403274032840329403304033140332403334033440335403364033740338403394034040341403424034340344403454034640347403484034940350403514035240353403544035540356403574035840359403604036140362403634036440365403664036740368403694037040371403724037340374403754037640377403784037940380403814038240383403844038540386403874038840389403904039140392403934039440395403964039740398403994040040401404024040340404404054040640407404084040940410404114041240413404144041540416404174041840419404204042140422404234042440425404264042740428404294043040431404324043340434404354043640437404384043940440404414044240443404444044540446404474044840449404504045140452404534045440455404564045740458404594046040461404624046340464404654046640467404684046940470404714047240473404744047540476404774047840479404804048140482404834048440485404864048740488404894049040491404924049340494404954049640497404984049940500405014050240503405044050540506405074050840509405104051140512405134051440515405164051740518405194052040521405224052340524405254052640527405284052940530405314053240533405344053540536405374053840539405404054140542405434054440545405464054740548405494055040551405524055340554405554055640557405584055940560405614056240563405644056540566405674056840569405704057140572405734057440575405764057740578405794058040581405824058340584405854058640587405884058940590405914059240593405944059540596405974059840599406004060140602406034060440605406064060740608406094061040611406124061340614406154061640617406184061940620406214062240623406244062540626406274062840629406304063140632406334063440635406364063740638406394064040641406424064340644406454064640647406484064940650406514065240653406544065540656406574065840659406604066140662406634066440665406664066740668406694067040671406724067340674406754067640677406784067940680406814068240683406844068540686406874068840689406904069140692406934069440695406964069740698406994070040701407024070340704407054070640707407084070940710407114071240713407144071540716407174071840719407204072140722407234072440725407264072740728407294073040731407324073340734407354073640737407384073940740407414074240743407444074540746407474074840749407504075140752407534075440755407564075740758407594076040761407624076340764407654076640767407684076940770407714077240773407744077540776407774077840779407804078140782407834078440785407864078740788407894079040791407924079340794407954079640797407984079940800408014080240803408044080540806408074080840809408104081140812408134081440815408164081740818408194082040821408224082340824408254082640827408284082940830408314083240833408344083540836408374083840839408404084140842408434084440845408464084740848408494085040851408524085340854408554085640857408584085940860408614086240863408644086540866408674086840869408704087140872408734087440875408764087740878408794088040881408824088340884408854088640887408884088940890408914089240893408944089540896408974089840899409004090140902409034090440905409064090740908409094091040911409124091340914409154091640917409184091940920409214092240923409244092540926409274092840929409304093140932409334093440935409364093740938409394094040941409424094340944409454094640947409484094940950409514095240953409544095540956409574095840959409604096140962409634096440965409664096740968409694097040971409724097340974409754097640977409784097940980409814098240983409844098540986409874098840989409904099140992409934099440995409964099740998409994100041001410024100341004410054100641007410084100941010410114101241013410144101541016410174101841019410204102141022410234102441025410264102741028410294103041031410324103341034410354103641037410384103941040410414104241043410444104541046410474104841049410504105141052410534105441055410564105741058410594106041061410624106341064410654106641067410684106941070410714107241073410744107541076410774107841079410804108141082410834108441085410864108741088410894109041091410924109341094410954109641097410984109941100411014110241103411044110541106411074110841109411104111141112411134111441115411164111741118411194112041121411224112341124411254112641127411284112941130411314113241133411344113541136411374113841139411404114141142411434114441145411464114741148411494115041151411524115341154411554115641157411584115941160411614116241163411644116541166411674116841169411704117141172411734117441175411764117741178411794118041181411824118341184411854118641187411884118941190411914119241193411944119541196411974119841199412004120141202412034120441205412064120741208412094121041211412124121341214412154121641217412184121941220412214122241223412244122541226412274122841229412304123141232412334123441235412364123741238412394124041241412424124341244412454124641247412484124941250412514125241253412544125541256412574125841259412604126141262412634126441265412664126741268412694127041271412724127341274412754127641277412784127941280412814128241283412844128541286412874128841289412904129141292412934129441295412964129741298412994130041301413024130341304413054130641307413084130941310413114131241313413144131541316413174131841319413204132141322413234132441325413264132741328413294133041331413324133341334413354133641337413384133941340413414134241343413444134541346413474134841349413504135141352413534135441355413564135741358413594136041361413624136341364413654136641367413684136941370413714137241373413744137541376413774137841379413804138141382413834138441385413864138741388413894139041391413924139341394413954139641397413984139941400414014140241403414044140541406414074140841409414104141141412414134141441415414164141741418414194142041421414224142341424414254142641427414284142941430414314143241433414344143541436414374143841439414404144141442414434144441445414464144741448414494145041451414524145341454414554145641457414584145941460414614146241463414644146541466414674146841469414704147141472414734147441475414764147741478414794148041481414824148341484414854148641487414884148941490414914149241493414944149541496414974149841499415004150141502415034150441505415064150741508415094151041511415124151341514415154151641517415184151941520415214152241523415244152541526415274152841529415304153141532415334153441535415364153741538415394154041541415424154341544415454154641547415484154941550415514155241553415544155541556415574155841559415604156141562415634156441565415664156741568415694157041571415724157341574415754157641577415784157941580415814158241583415844158541586415874158841589415904159141592415934159441595415964159741598415994160041601416024160341604416054160641607416084160941610416114161241613416144161541616416174161841619416204162141622416234162441625416264162741628416294163041631416324163341634416354163641637416384163941640416414164241643416444164541646416474164841649416504165141652416534165441655416564165741658416594166041661416624166341664416654166641667416684166941670416714167241673416744167541676416774167841679416804168141682416834168441685416864168741688416894169041691416924169341694416954169641697416984169941700417014170241703417044170541706417074170841709417104171141712417134171441715417164171741718417194172041721417224172341724417254172641727417284172941730417314173241733417344173541736417374173841739417404174141742417434174441745417464174741748417494175041751417524175341754417554175641757417584175941760417614176241763417644176541766417674176841769417704177141772417734177441775417764177741778417794178041781417824178341784417854178641787417884178941790417914179241793417944179541796417974179841799418004180141802418034180441805418064180741808418094181041811418124181341814418154181641817418184181941820418214182241823418244182541826418274182841829418304183141832418334183441835418364183741838418394184041841418424184341844418454184641847418484184941850418514185241853418544185541856418574185841859418604186141862418634186441865418664186741868418694187041871418724187341874418754187641877418784187941880418814188241883418844188541886418874188841889418904189141892418934189441895418964189741898418994190041901419024190341904419054190641907419084190941910419114191241913419144191541916419174191841919419204192141922419234192441925419264192741928419294193041931419324193341934419354193641937419384193941940419414194241943419444194541946419474194841949419504195141952419534195441955419564195741958419594196041961419624196341964419654196641967419684196941970419714197241973419744197541976419774197841979419804198141982419834198441985419864198741988419894199041991419924199341994419954199641997419984199942000420014200242003420044200542006420074200842009420104201142012420134201442015420164201742018420194202042021420224202342024420254202642027420284202942030420314203242033420344203542036420374203842039420404204142042420434204442045420464204742048420494205042051420524205342054420554205642057420584205942060420614206242063420644206542066420674206842069420704207142072420734207442075420764207742078420794208042081420824208342084420854208642087420884208942090420914209242093420944209542096420974209842099421004210142102421034210442105421064210742108421094211042111421124211342114421154211642117421184211942120421214212242123421244212542126421274212842129421304213142132421334213442135421364213742138421394214042141421424214342144421454214642147421484214942150421514215242153421544215542156421574215842159421604216142162421634216442165421664216742168421694217042171421724217342174421754217642177421784217942180421814218242183421844218542186421874218842189421904219142192421934219442195421964219742198421994220042201422024220342204422054220642207422084220942210422114221242213422144221542216422174221842219422204222142222422234222442225422264222742228422294223042231422324223342234422354223642237422384223942240422414224242243422444224542246422474224842249422504225142252422534225442255422564225742258422594226042261422624226342264422654226642267422684226942270422714227242273422744227542276422774227842279422804228142282422834228442285422864228742288422894229042291422924229342294422954229642297422984229942300423014230242303423044230542306423074230842309423104231142312423134231442315423164231742318423194232042321423224232342324423254232642327423284232942330423314233242333423344233542336423374233842339423404234142342423434234442345423464234742348423494235042351423524235342354423554235642357423584235942360423614236242363423644236542366423674236842369423704237142372423734237442375423764237742378423794238042381423824238342384423854238642387423884238942390423914239242393423944239542396423974239842399424004240142402424034240442405424064240742408424094241042411424124241342414424154241642417424184241942420424214242242423424244242542426424274242842429424304243142432424334243442435424364243742438424394244042441424424244342444424454244642447424484244942450424514245242453424544245542456424574245842459424604246142462424634246442465424664246742468424694247042471424724247342474424754247642477424784247942480424814248242483424844248542486424874248842489424904249142492424934249442495424964249742498424994250042501425024250342504425054250642507425084250942510425114251242513425144251542516425174251842519425204252142522425234252442525425264252742528425294253042531425324253342534425354253642537425384253942540425414254242543425444254542546425474254842549425504255142552425534255442555425564255742558425594256042561425624256342564425654256642567425684256942570425714257242573425744257542576425774257842579425804258142582425834258442585425864258742588425894259042591425924259342594425954259642597425984259942600426014260242603426044260542606426074260842609426104261142612426134261442615426164261742618426194262042621426224262342624426254262642627426284262942630426314263242633426344263542636426374263842639426404264142642426434264442645426464264742648426494265042651426524265342654426554265642657426584265942660426614266242663426644266542666426674266842669426704267142672426734267442675426764267742678426794268042681426824268342684426854268642687426884268942690426914269242693426944269542696426974269842699427004270142702427034270442705427064270742708427094271042711427124271342714427154271642717427184271942720427214272242723427244272542726427274272842729427304273142732427334273442735427364273742738427394274042741427424274342744427454274642747427484274942750427514275242753427544275542756427574275842759427604276142762427634276442765427664276742768427694277042771427724277342774427754277642777427784277942780427814278242783427844278542786427874278842789427904279142792427934279442795427964279742798427994280042801428024280342804428054280642807428084280942810428114281242813428144281542816428174281842819428204282142822428234282442825428264282742828428294283042831428324283342834428354283642837428384283942840428414284242843428444284542846428474284842849428504285142852428534285442855428564285742858428594286042861428624286342864428654286642867428684286942870428714287242873428744287542876428774287842879428804288142882428834288442885428864288742888428894289042891428924289342894428954289642897428984289942900429014290242903429044290542906429074290842909429104291142912429134291442915429164291742918429194292042921429224292342924429254292642927429284292942930429314293242933429344293542936429374293842939429404294142942429434294442945429464294742948429494295042951429524295342954429554295642957429584295942960429614296242963429644296542966429674296842969429704297142972429734297442975429764297742978429794298042981429824298342984429854298642987429884298942990429914299242993429944299542996429974299842999430004300143002430034300443005430064300743008430094301043011430124301343014430154301643017430184301943020430214302243023430244302543026430274302843029430304303143032430334303443035430364303743038430394304043041430424304343044430454304643047430484304943050430514305243053430544305543056430574305843059430604306143062430634306443065430664306743068430694307043071430724307343074430754307643077430784307943080430814308243083430844308543086430874308843089430904309143092430934309443095430964309743098430994310043101431024310343104431054310643107431084310943110431114311243113431144311543116431174311843119431204312143122431234312443125431264312743128431294313043131431324313343134431354313643137431384313943140431414314243143431444314543146431474314843149431504315143152431534315443155431564315743158431594316043161431624316343164431654316643167431684316943170431714317243173431744317543176431774317843179431804318143182431834318443185431864318743188431894319043191431924319343194431954319643197431984319943200432014320243203432044320543206432074320843209432104321143212432134321443215432164321743218432194322043221432224322343224432254322643227432284322943230432314323243233432344323543236432374323843239432404324143242432434324443245432464324743248432494325043251432524325343254432554325643257432584325943260432614326243263432644326543266432674326843269432704327143272432734327443275432764327743278432794328043281432824328343284432854328643287432884328943290432914329243293432944329543296432974329843299433004330143302433034330443305433064330743308433094331043311433124331343314433154331643317433184331943320433214332243323433244332543326433274332843329433304333143332433334333443335433364333743338433394334043341433424334343344433454334643347433484334943350433514335243353433544335543356433574335843359433604336143362433634336443365433664336743368433694337043371433724337343374433754337643377433784337943380433814338243383433844338543386433874338843389433904339143392433934339443395433964339743398433994340043401434024340343404434054340643407434084340943410434114341243413434144341543416434174341843419434204342143422434234342443425434264342743428434294343043431434324343343434434354343643437434384343943440434414344243443434444344543446434474344843449434504345143452434534345443455434564345743458434594346043461434624346343464434654346643467434684346943470434714347243473434744347543476434774347843479434804348143482434834348443485434864348743488434894349043491434924349343494434954349643497434984349943500435014350243503435044350543506435074350843509435104351143512435134351443515435164351743518435194352043521435224352343524435254352643527435284352943530435314353243533435344353543536435374353843539435404354143542435434354443545435464354743548435494355043551435524355343554435554355643557435584355943560435614356243563435644356543566435674356843569435704357143572435734357443575435764357743578435794358043581435824358343584435854358643587435884358943590435914359243593435944359543596435974359843599436004360143602436034360443605436064360743608436094361043611436124361343614436154361643617436184361943620436214362243623436244362543626436274362843629436304363143632436334363443635436364363743638436394364043641436424364343644436454364643647436484364943650436514365243653436544365543656436574365843659436604366143662436634366443665436664366743668436694367043671436724367343674436754367643677436784367943680436814368243683436844368543686436874368843689436904369143692436934369443695436964369743698436994370043701437024370343704437054370643707437084370943710437114371243713437144371543716437174371843719437204372143722437234372443725437264372743728437294373043731437324373343734437354373643737437384373943740437414374243743437444374543746437474374843749437504375143752437534375443755437564375743758437594376043761437624376343764437654376643767437684376943770437714377243773437744377543776437774377843779437804378143782437834378443785437864378743788437894379043791437924379343794437954379643797437984379943800438014380243803438044380543806438074380843809438104381143812438134381443815438164381743818438194382043821438224382343824438254382643827438284382943830438314383243833438344383543836438374383843839438404384143842438434384443845438464384743848438494385043851438524385343854438554385643857438584385943860438614386243863438644386543866438674386843869438704387143872438734387443875438764387743878438794388043881438824388343884438854388643887438884388943890438914389243893438944389543896438974389843899439004390143902439034390443905439064390743908439094391043911439124391343914439154391643917439184391943920439214392243923439244392543926439274392843929439304393143932439334393443935439364393743938439394394043941439424394343944439454394643947439484394943950439514395243953439544395543956439574395843959439604396143962439634396443965439664396743968439694397043971439724397343974439754397643977439784397943980439814398243983439844398543986439874398843989439904399143992439934399443995439964399743998439994400044001440024400344004440054400644007440084400944010440114401244013440144401544016440174401844019440204402144022440234402444025440264402744028440294403044031440324403344034440354403644037440384403944040440414404244043440444404544046440474404844049440504405144052440534405444055440564405744058440594406044061440624406344064440654406644067440684406944070440714407244073440744407544076440774407844079440804408144082440834408444085440864408744088440894409044091440924409344094440954409644097440984409944100441014410244103441044410544106441074410844109441104411144112441134411444115441164411744118441194412044121441224412344124441254412644127441284412944130441314413244133441344413544136441374413844139441404414144142441434414444145441464414744148441494415044151441524415344154441554415644157441584415944160441614416244163441644416544166441674416844169441704417144172441734417444175441764417744178441794418044181441824418344184441854418644187441884418944190441914419244193441944419544196441974419844199442004420144202442034420444205442064420744208442094421044211442124421344214442154421644217442184421944220442214422244223442244422544226442274422844229442304423144232442334423444235442364423744238442394424044241442424424344244442454424644247442484424944250442514425244253442544425544256442574425844259442604426144262442634426444265442664426744268442694427044271442724427344274442754427644277442784427944280442814428244283442844428544286442874428844289442904429144292442934429444295442964429744298442994430044301443024430344304443054430644307443084430944310443114431244313443144431544316443174431844319443204432144322443234432444325443264432744328443294433044331443324433344334443354433644337443384433944340443414434244343443444434544346443474434844349443504435144352443534435444355443564435744358443594436044361443624436344364443654436644367443684436944370443714437244373443744437544376443774437844379443804438144382443834438444385443864438744388443894439044391443924439344394443954439644397443984439944400444014440244403444044440544406444074440844409444104441144412444134441444415444164441744418444194442044421444224442344424444254442644427444284442944430444314443244433444344443544436444374443844439444404444144442444434444444445444464444744448444494445044451444524445344454444554445644457444584445944460444614446244463444644446544466444674446844469444704447144472444734447444475444764447744478444794448044481444824448344484444854448644487444884448944490444914449244493444944449544496444974449844499445004450144502445034450444505445064450744508445094451044511445124451344514445154451644517445184451944520445214452244523445244452544526445274452844529445304453144532445334453444535445364453744538445394454044541445424454344544445454454644547445484454944550445514455244553445544455544556445574455844559445604456144562445634456444565445664456744568445694457044571445724457344574445754457644577445784457944580445814458244583445844458544586445874458844589445904459144592445934459444595445964459744598445994460044601446024460344604446054460644607446084460944610446114461244613446144461544616446174461844619446204462144622446234462444625446264462744628446294463044631446324463344634446354463644637446384463944640446414464244643446444464544646446474464844649446504465144652446534465444655446564465744658446594466044661446624466344664446654466644667446684466944670446714467244673446744467544676446774467844679446804468144682446834468444685446864468744688446894469044691446924469344694446954469644697446984469944700447014470244703447044470544706447074470844709447104471144712447134471444715447164471744718447194472044721447224472344724447254472644727447284472944730447314473244733447344473544736447374473844739447404474144742447434474444745447464474744748447494475044751447524475344754447554475644757447584475944760447614476244763447644476544766447674476844769447704477144772447734477444775447764477744778447794478044781447824478344784447854478644787447884478944790447914479244793447944479544796447974479844799448004480144802448034480444805448064480744808448094481044811448124481344814448154481644817448184481944820448214482244823448244482544826448274482844829448304483144832448334483444835448364483744838448394484044841448424484344844448454484644847448484484944850448514485244853448544485544856448574485844859448604486144862448634486444865448664486744868448694487044871448724487344874448754487644877448784487944880448814488244883448844488544886448874488844889448904489144892448934489444895448964489744898448994490044901449024490344904449054490644907449084490944910449114491244913449144491544916449174491844919449204492144922449234492444925449264492744928449294493044931449324493344934449354493644937449384493944940449414494244943449444494544946449474494844949449504495144952449534495444955449564495744958449594496044961449624496344964449654496644967449684496944970449714497244973449744497544976449774497844979449804498144982449834498444985449864498744988449894499044991449924499344994449954499644997449984499945000450014500245003450044500545006450074500845009450104501145012450134501445015450164501745018450194502045021450224502345024450254502645027450284502945030450314503245033450344503545036450374503845039450404504145042450434504445045450464504745048450494505045051450524505345054450554505645057450584505945060450614506245063450644506545066450674506845069450704507145072450734507445075450764507745078450794508045081450824508345084450854508645087450884508945090450914509245093450944509545096450974509845099451004510145102451034510445105451064510745108451094511045111451124511345114451154511645117451184511945120451214512245123451244512545126451274512845129451304513145132451334513445135451364513745138451394514045141451424514345144451454514645147451484514945150451514515245153451544515545156451574515845159451604516145162451634516445165451664516745168451694517045171451724517345174451754517645177451784517945180451814518245183451844518545186451874518845189451904519145192451934519445195451964519745198451994520045201452024520345204452054520645207452084520945210452114521245213452144521545216452174521845219452204522145222452234522445225452264522745228452294523045231452324523345234452354523645237452384523945240452414524245243452444524545246452474524845249452504525145252452534525445255452564525745258452594526045261452624526345264452654526645267452684526945270452714527245273452744527545276452774527845279452804528145282452834528445285452864528745288452894529045291452924529345294452954529645297452984529945300453014530245303453044530545306453074530845309453104531145312453134531445315453164531745318453194532045321453224532345324453254532645327453284532945330453314533245333453344533545336453374533845339453404534145342453434534445345453464534745348453494535045351453524535345354453554535645357453584535945360453614536245363453644536545366453674536845369453704537145372453734537445375453764537745378453794538045381453824538345384453854538645387453884538945390453914539245393453944539545396453974539845399454004540145402454034540445405454064540745408454094541045411454124541345414454154541645417454184541945420454214542245423454244542545426454274542845429454304543145432454334543445435454364543745438454394544045441454424544345444454454544645447454484544945450454514545245453454544545545456454574545845459454604546145462454634546445465454664546745468454694547045471454724547345474454754547645477454784547945480454814548245483454844548545486454874548845489454904549145492454934549445495454964549745498454994550045501455024550345504455054550645507455084550945510455114551245513455144551545516455174551845519455204552145522455234552445525455264552745528455294553045531455324553345534455354553645537455384553945540455414554245543455444554545546455474554845549455504555145552455534555445555455564555745558455594556045561455624556345564455654556645567455684556945570455714557245573455744557545576455774557845579455804558145582455834558445585455864558745588455894559045591455924559345594455954559645597455984559945600456014560245603456044560545606456074560845609456104561145612456134561445615456164561745618456194562045621456224562345624456254562645627456284562945630456314563245633456344563545636456374563845639456404564145642456434564445645456464564745648456494565045651456524565345654456554565645657456584565945660456614566245663456644566545666456674566845669456704567145672456734567445675456764567745678456794568045681456824568345684456854568645687456884568945690456914569245693456944569545696456974569845699457004570145702457034570445705457064570745708457094571045711457124571345714457154571645717457184571945720457214572245723457244572545726457274572845729457304573145732457334573445735457364573745738457394574045741457424574345744457454574645747457484574945750457514575245753457544575545756457574575845759457604576145762457634576445765457664576745768457694577045771457724577345774457754577645777457784577945780457814578245783457844578545786457874578845789457904579145792457934579445795457964579745798457994580045801458024580345804458054580645807458084580945810458114581245813458144581545816458174581845819458204582145822458234582445825458264582745828458294583045831458324583345834458354583645837458384583945840458414584245843458444584545846458474584845849458504585145852458534585445855458564585745858458594586045861458624586345864458654586645867458684586945870458714587245873458744587545876458774587845879458804588145882458834588445885458864588745888458894589045891458924589345894458954589645897458984589945900459014590245903459044590545906459074590845909459104591145912459134591445915459164591745918459194592045921459224592345924459254592645927459284592945930459314593245933459344593545936459374593845939459404594145942459434594445945459464594745948459494595045951459524595345954459554595645957459584595945960459614596245963459644596545966459674596845969459704597145972459734597445975459764597745978459794598045981459824598345984459854598645987459884598945990459914599245993459944599545996459974599845999460004600146002460034600446005460064600746008460094601046011460124601346014460154601646017460184601946020460214602246023460244602546026460274602846029460304603146032460334603446035460364603746038460394604046041460424604346044460454604646047460484604946050460514605246053460544605546056460574605846059460604606146062460634606446065460664606746068460694607046071460724607346074460754607646077460784607946080460814608246083460844608546086460874608846089460904609146092460934609446095460964609746098460994610046101461024610346104461054610646107461084610946110461114611246113461144611546116461174611846119461204612146122461234612446125461264612746128461294613046131461324613346134461354613646137461384613946140461414614246143461444614546146461474614846149461504615146152461534615446155461564615746158461594616046161461624616346164461654616646167461684616946170461714617246173461744617546176461774617846179461804618146182461834618446185461864618746188461894619046191461924619346194461954619646197461984619946200462014620246203462044620546206462074620846209462104621146212462134621446215462164621746218462194622046221462224622346224462254622646227462284622946230462314623246233462344623546236462374623846239462404624146242462434624446245462464624746248462494625046251462524625346254462554625646257462584625946260462614626246263462644626546266462674626846269462704627146272462734627446275462764627746278462794628046281462824628346284462854628646287462884628946290462914629246293462944629546296462974629846299463004630146302463034630446305463064630746308463094631046311463124631346314463154631646317463184631946320463214632246323463244632546326463274632846329463304633146332463334633446335463364633746338463394634046341463424634346344463454634646347463484634946350463514635246353463544635546356463574635846359463604636146362463634636446365463664636746368463694637046371463724637346374463754637646377463784637946380463814638246383463844638546386463874638846389463904639146392463934639446395463964639746398463994640046401464024640346404464054640646407464084640946410464114641246413464144641546416464174641846419464204642146422464234642446425464264642746428464294643046431464324643346434464354643646437464384643946440464414644246443464444644546446464474644846449464504645146452464534645446455464564645746458464594646046461464624646346464464654646646467464684646946470464714647246473464744647546476464774647846479464804648146482464834648446485464864648746488464894649046491464924649346494464954649646497464984649946500465014650246503465044650546506465074650846509465104651146512465134651446515465164651746518465194652046521465224652346524465254652646527465284652946530465314653246533465344653546536465374653846539465404654146542465434654446545465464654746548465494655046551465524655346554465554655646557465584655946560465614656246563465644656546566465674656846569465704657146572465734657446575465764657746578465794658046581465824658346584465854658646587465884658946590465914659246593465944659546596465974659846599466004660146602466034660446605466064660746608466094661046611466124661346614466154661646617466184661946620466214662246623466244662546626466274662846629466304663146632466334663446635466364663746638466394664046641466424664346644466454664646647466484664946650466514665246653466544665546656466574665846659466604666146662466634666446665466664666746668466694667046671466724667346674466754667646677466784667946680466814668246683466844668546686466874668846689466904669146692466934669446695466964669746698466994670046701467024670346704467054670646707467084670946710467114671246713467144671546716467174671846719467204672146722467234672446725467264672746728467294673046731467324673346734467354673646737467384673946740467414674246743467444674546746467474674846749467504675146752467534675446755467564675746758467594676046761467624676346764467654676646767467684676946770467714677246773467744677546776467774677846779467804678146782467834678446785467864678746788467894679046791467924679346794467954679646797467984679946800468014680246803468044680546806468074680846809468104681146812468134681446815468164681746818468194682046821468224682346824468254682646827468284682946830468314683246833468344683546836468374683846839468404684146842468434684446845468464684746848468494685046851468524685346854468554685646857468584685946860468614686246863468644686546866468674686846869468704687146872468734687446875468764687746878468794688046881468824688346884468854688646887468884688946890468914689246893468944689546896468974689846899469004690146902469034690446905469064690746908469094691046911469124691346914469154691646917469184691946920469214692246923469244692546926469274692846929469304693146932469334693446935469364693746938469394694046941469424694346944469454694646947469484694946950469514695246953469544695546956469574695846959469604696146962469634696446965469664696746968469694697046971469724697346974469754697646977469784697946980469814698246983469844698546986469874698846989469904699146992469934699446995469964699746998469994700047001470024700347004470054700647007470084700947010470114701247013470144701547016470174701847019470204702147022470234702447025470264702747028470294703047031470324703347034470354703647037470384703947040470414704247043470444704547046470474704847049470504705147052470534705447055470564705747058470594706047061470624706347064470654706647067470684706947070470714707247073470744707547076470774707847079470804708147082470834708447085470864708747088470894709047091470924709347094470954709647097470984709947100471014710247103471044710547106471074710847109471104711147112471134711447115471164711747118471194712047121471224712347124471254712647127471284712947130471314713247133471344713547136471374713847139471404714147142471434714447145471464714747148471494715047151471524715347154471554715647157471584715947160471614716247163471644716547166471674716847169471704717147172471734717447175471764717747178471794718047181471824718347184471854718647187471884718947190471914719247193471944719547196471974719847199472004720147202472034720447205472064720747208472094721047211472124721347214472154721647217472184721947220472214722247223472244722547226472274722847229472304723147232472334723447235472364723747238472394724047241472424724347244472454724647247472484724947250472514725247253472544725547256472574725847259472604726147262472634726447265472664726747268472694727047271472724727347274472754727647277472784727947280472814728247283472844728547286472874728847289472904729147292472934729447295472964729747298472994730047301473024730347304473054730647307473084730947310473114731247313473144731547316473174731847319473204732147322473234732447325473264732747328473294733047331473324733347334473354733647337473384733947340473414734247343473444734547346473474734847349473504735147352473534735447355473564735747358473594736047361473624736347364473654736647367473684736947370473714737247373473744737547376473774737847379473804738147382473834738447385473864738747388473894739047391473924739347394473954739647397473984739947400474014740247403474044740547406474074740847409474104741147412474134741447415474164741747418474194742047421474224742347424474254742647427474284742947430474314743247433474344743547436474374743847439474404744147442474434744447445474464744747448474494745047451474524745347454474554745647457474584745947460474614746247463474644746547466474674746847469474704747147472474734747447475474764747747478474794748047481474824748347484474854748647487474884748947490474914749247493474944749547496474974749847499475004750147502475034750447505475064750747508475094751047511475124751347514475154751647517475184751947520475214752247523475244752547526475274752847529475304753147532475334753447535475364753747538475394754047541475424754347544475454754647547475484754947550475514755247553475544755547556475574755847559475604756147562475634756447565475664756747568475694757047571475724757347574475754757647577475784757947580475814758247583475844758547586475874758847589475904759147592475934759447595475964759747598475994760047601476024760347604476054760647607476084760947610476114761247613476144761547616476174761847619476204762147622476234762447625476264762747628476294763047631476324763347634476354763647637476384763947640476414764247643476444764547646476474764847649476504765147652476534765447655476564765747658476594766047661476624766347664476654766647667476684766947670476714767247673476744767547676476774767847679476804768147682476834768447685476864768747688476894769047691476924769347694476954769647697476984769947700477014770247703477044770547706477074770847709477104771147712477134771447715477164771747718477194772047721477224772347724477254772647727477284772947730477314773247733477344773547736477374773847739477404774147742477434774447745477464774747748477494775047751477524775347754477554775647757477584775947760477614776247763477644776547766477674776847769477704777147772477734777447775477764777747778477794778047781477824778347784477854778647787477884778947790477914779247793477944779547796477974779847799478004780147802478034780447805478064780747808478094781047811478124781347814478154781647817478184781947820478214782247823478244782547826478274782847829478304783147832478334783447835478364783747838478394784047841478424784347844478454784647847478484784947850478514785247853478544785547856478574785847859478604786147862478634786447865478664786747868478694787047871478724787347874478754787647877478784787947880478814788247883478844788547886478874788847889478904789147892478934789447895478964789747898478994790047901479024790347904479054790647907479084790947910479114791247913479144791547916479174791847919479204792147922479234792447925479264792747928479294793047931479324793347934479354793647937479384793947940479414794247943479444794547946479474794847949479504795147952479534795447955479564795747958479594796047961479624796347964479654796647967479684796947970479714797247973479744797547976479774797847979479804798147982479834798447985479864798747988479894799047991479924799347994479954799647997479984799948000480014800248003480044800548006480074800848009480104801148012480134801448015480164801748018480194802048021480224802348024480254802648027480284802948030480314803248033480344803548036480374803848039480404804148042480434804448045480464804748048480494805048051480524805348054480554805648057480584805948060480614806248063480644806548066480674806848069480704807148072480734807448075480764807748078480794808048081480824808348084480854808648087480884808948090480914809248093480944809548096480974809848099481004810148102481034810448105481064810748108481094811048111481124811348114481154811648117481184811948120481214812248123481244812548126481274812848129481304813148132481334813448135481364813748138481394814048141481424814348144481454814648147481484814948150481514815248153481544815548156481574815848159481604816148162481634816448165481664816748168481694817048171481724817348174481754817648177481784817948180481814818248183481844818548186481874818848189481904819148192481934819448195481964819748198481994820048201482024820348204482054820648207482084820948210482114821248213482144821548216482174821848219482204822148222482234822448225482264822748228482294823048231482324823348234482354823648237482384823948240482414824248243482444824548246482474824848249482504825148252482534825448255482564825748258482594826048261482624826348264482654826648267482684826948270482714827248273482744827548276482774827848279482804828148282482834828448285482864828748288482894829048291482924829348294482954829648297482984829948300483014830248303483044830548306483074830848309483104831148312483134831448315483164831748318483194832048321483224832348324483254832648327483284832948330483314833248333483344833548336483374833848339483404834148342483434834448345483464834748348483494835048351483524835348354483554835648357483584835948360483614836248363483644836548366483674836848369483704837148372483734837448375483764837748378483794838048381483824838348384483854838648387483884838948390483914839248393483944839548396483974839848399484004840148402484034840448405484064840748408484094841048411484124841348414484154841648417484184841948420484214842248423484244842548426484274842848429484304843148432484334843448435484364843748438484394844048441484424844348444484454844648447484484844948450484514845248453484544845548456484574845848459484604846148462484634846448465484664846748468484694847048471484724847348474484754847648477484784847948480484814848248483484844848548486484874848848489484904849148492484934849448495484964849748498484994850048501485024850348504485054850648507485084850948510485114851248513485144851548516485174851848519485204852148522485234852448525485264852748528485294853048531485324853348534485354853648537485384853948540485414854248543485444854548546485474854848549485504855148552485534855448555485564855748558485594856048561485624856348564485654856648567485684856948570485714857248573485744857548576485774857848579485804858148582485834858448585485864858748588485894859048591485924859348594485954859648597485984859948600486014860248603486044860548606486074860848609486104861148612486134861448615486164861748618486194862048621486224862348624486254862648627486284862948630486314863248633486344863548636486374863848639486404864148642486434864448645486464864748648486494865048651486524865348654486554865648657486584865948660486614866248663486644866548666486674866848669486704867148672486734867448675486764867748678486794868048681486824868348684486854868648687486884868948690486914869248693486944869548696486974869848699487004870148702487034870448705487064870748708487094871048711487124871348714487154871648717487184871948720487214872248723487244872548726487274872848729487304873148732487334873448735487364873748738487394874048741487424874348744487454874648747487484874948750487514875248753487544875548756487574875848759487604876148762487634876448765487664876748768487694877048771487724877348774487754877648777487784877948780487814878248783487844878548786487874878848789487904879148792487934879448795487964879748798487994880048801488024880348804488054880648807488084880948810488114881248813488144881548816488174881848819488204882148822488234882448825488264882748828488294883048831488324883348834488354883648837488384883948840488414884248843488444884548846488474884848849488504885148852488534885448855488564885748858488594886048861488624886348864488654886648867488684886948870488714887248873488744887548876488774887848879488804888148882488834888448885488864888748888488894889048891488924889348894488954889648897488984889948900489014890248903489044890548906489074890848909489104891148912489134891448915489164891748918489194892048921489224892348924489254892648927489284892948930489314893248933489344893548936489374893848939489404894148942489434894448945489464894748948489494895048951489524895348954489554895648957489584895948960489614896248963489644896548966489674896848969489704897148972489734897448975489764897748978489794898048981489824898348984489854898648987489884898948990489914899248993489944899548996489974899848999490004900149002490034900449005490064900749008490094901049011490124901349014490154901649017490184901949020490214902249023490244902549026490274902849029490304903149032490334903449035490364903749038490394904049041490424904349044490454904649047490484904949050490514905249053490544905549056490574905849059490604906149062490634906449065490664906749068490694907049071490724907349074490754907649077490784907949080490814908249083490844908549086490874908849089490904909149092490934909449095490964909749098490994910049101491024910349104491054910649107491084910949110491114911249113491144911549116491174911849119491204912149122491234912449125491264912749128491294913049131491324913349134491354913649137491384913949140491414914249143491444914549146491474914849149491504915149152491534915449155491564915749158491594916049161491624916349164491654916649167491684916949170491714917249173491744917549176491774917849179491804918149182491834918449185491864918749188491894919049191491924919349194491954919649197491984919949200492014920249203492044920549206492074920849209492104921149212492134921449215492164921749218492194922049221492224922349224492254922649227492284922949230492314923249233492344923549236492374923849239492404924149242492434924449245492464924749248492494925049251492524925349254492554925649257492584925949260492614926249263492644926549266492674926849269492704927149272492734927449275492764927749278492794928049281492824928349284492854928649287492884928949290492914929249293492944929549296492974929849299493004930149302493034930449305493064930749308493094931049311493124931349314493154931649317493184931949320493214932249323493244932549326493274932849329493304933149332493334933449335493364933749338493394934049341493424934349344493454934649347493484934949350493514935249353493544935549356493574935849359493604936149362493634936449365493664936749368493694937049371493724937349374493754937649377493784937949380493814938249383493844938549386493874938849389493904939149392493934939449395493964939749398493994940049401494024940349404494054940649407494084940949410494114941249413494144941549416494174941849419494204942149422494234942449425494264942749428494294943049431494324943349434494354943649437494384943949440494414944249443494444944549446494474944849449494504945149452494534945449455494564945749458494594946049461494624946349464494654946649467494684946949470494714947249473494744947549476494774947849479494804948149482494834948449485494864948749488494894949049491494924949349494494954949649497494984949949500495014950249503495044950549506495074950849509495104951149512495134951449515495164951749518495194952049521495224952349524495254952649527495284952949530495314953249533495344953549536495374953849539495404954149542495434954449545495464954749548495494955049551495524955349554495554955649557495584955949560495614956249563495644956549566495674956849569495704957149572495734957449575495764957749578495794958049581495824958349584495854958649587495884958949590495914959249593495944959549596495974959849599496004960149602496034960449605496064960749608496094961049611496124961349614496154961649617496184961949620496214962249623496244962549626496274962849629496304963149632496334963449635496364963749638496394964049641496424964349644496454964649647496484964949650496514965249653496544965549656496574965849659496604966149662496634966449665496664966749668496694967049671496724967349674496754967649677496784967949680496814968249683496844968549686496874968849689496904969149692496934969449695496964969749698496994970049701497024970349704497054970649707497084970949710497114971249713497144971549716497174971849719497204972149722497234972449725497264972749728497294973049731497324973349734497354973649737497384973949740497414974249743497444974549746497474974849749497504975149752497534975449755497564975749758497594976049761497624976349764497654976649767497684976949770497714977249773497744977549776497774977849779497804978149782497834978449785497864978749788497894979049791497924979349794497954979649797497984979949800498014980249803498044980549806498074980849809498104981149812498134981449815498164981749818498194982049821498224982349824498254982649827498284982949830498314983249833498344983549836498374983849839498404984149842498434984449845498464984749848498494985049851498524985349854498554985649857498584985949860498614986249863498644986549866498674986849869498704987149872498734987449875498764987749878498794988049881498824988349884498854988649887498884988949890498914989249893498944989549896498974989849899499004990149902499034990449905499064990749908499094991049911499124991349914499154991649917499184991949920499214992249923499244992549926499274992849929499304993149932499334993449935499364993749938499394994049941499424994349944499454994649947499484994949950499514995249953499544995549956499574995849959499604996149962499634996449965499664996749968499694997049971499724997349974499754997649977499784997949980499814998249983499844998549986499874998849989499904999149992499934999449995499964999749998499995000050001500025000350004500055000650007500085000950010500115001250013500145001550016500175001850019500205002150022500235002450025500265002750028500295003050031500325003350034500355003650037500385003950040500415004250043500445004550046500475004850049500505005150052500535005450055500565005750058500595006050061500625006350064500655006650067500685006950070500715007250073500745007550076500775007850079500805008150082500835008450085500865008750088500895009050091500925009350094500955009650097500985009950100501015010250103501045010550106501075010850109501105011150112501135011450115501165011750118501195012050121501225012350124501255012650127501285012950130501315013250133501345013550136501375013850139501405014150142501435014450145501465014750148501495015050151501525015350154501555015650157501585015950160501615016250163501645016550166501675016850169501705017150172501735017450175501765017750178501795018050181501825018350184501855018650187501885018950190501915019250193501945019550196501975019850199502005020150202502035020450205502065020750208502095021050211502125021350214502155021650217502185021950220502215022250223502245022550226502275022850229502305023150232502335023450235502365023750238502395024050241502425024350244502455024650247502485024950250502515025250253502545025550256502575025850259502605026150262502635026450265502665026750268502695027050271502725027350274502755027650277502785027950280502815028250283502845028550286502875028850289502905029150292502935029450295502965029750298502995030050301503025030350304503055030650307503085030950310503115031250313503145031550316503175031850319503205032150322503235032450325503265032750328503295033050331503325033350334503355033650337503385033950340503415034250343503445034550346503475034850349503505035150352503535035450355503565035750358503595036050361503625036350364503655036650367503685036950370503715037250373503745037550376503775037850379503805038150382503835038450385503865038750388503895039050391503925039350394503955039650397503985039950400504015040250403504045040550406504075040850409504105041150412504135041450415504165041750418504195042050421504225042350424504255042650427504285042950430504315043250433504345043550436504375043850439504405044150442504435044450445504465044750448504495045050451504525045350454504555045650457504585045950460504615046250463504645046550466504675046850469504705047150472504735047450475504765047750478504795048050481504825048350484504855048650487504885048950490504915049250493504945049550496504975049850499505005050150502505035050450505505065050750508505095051050511505125051350514505155051650517505185051950520505215052250523505245052550526505275052850529505305053150532505335053450535505365053750538505395054050541505425054350544505455054650547505485054950550505515055250553505545055550556505575055850559505605056150562505635056450565505665056750568505695057050571505725057350574505755057650577505785057950580505815058250583505845058550586505875058850589505905059150592505935059450595505965059750598505995060050601506025060350604506055060650607506085060950610506115061250613506145061550616506175061850619506205062150622506235062450625506265062750628506295063050631506325063350634506355063650637506385063950640506415064250643506445064550646506475064850649506505065150652506535065450655506565065750658506595066050661506625066350664506655066650667506685066950670506715067250673506745067550676506775067850679506805068150682506835068450685506865068750688506895069050691506925069350694506955069650697506985069950700507015070250703507045070550706507075070850709507105071150712507135071450715507165071750718507195072050721507225072350724507255072650727507285072950730507315073250733507345073550736507375073850739507405074150742507435074450745507465074750748507495075050751507525075350754507555075650757507585075950760507615076250763507645076550766507675076850769507705077150772507735077450775507765077750778507795078050781507825078350784507855078650787507885078950790507915079250793507945079550796507975079850799508005080150802508035080450805508065080750808508095081050811508125081350814508155081650817508185081950820508215082250823508245082550826508275082850829508305083150832508335083450835508365083750838508395084050841508425084350844508455084650847508485084950850508515085250853508545085550856508575085850859508605086150862508635086450865508665086750868508695087050871508725087350874508755087650877508785087950880508815088250883508845088550886508875088850889508905089150892508935089450895508965089750898508995090050901509025090350904509055090650907509085090950910509115091250913509145091550916509175091850919509205092150922509235092450925509265092750928509295093050931509325093350934509355093650937509385093950940509415094250943509445094550946509475094850949509505095150952509535095450955509565095750958509595096050961509625096350964509655096650967509685096950970509715097250973509745097550976509775097850979509805098150982509835098450985509865098750988509895099050991509925099350994509955099650997509985099951000510015100251003510045100551006510075100851009510105101151012510135101451015510165101751018510195102051021510225102351024510255102651027510285102951030510315103251033510345103551036510375103851039510405104151042510435104451045510465104751048510495105051051510525105351054510555105651057510585105951060510615106251063510645106551066510675106851069510705107151072510735107451075510765107751078510795108051081510825108351084510855108651087510885108951090510915109251093510945109551096510975109851099511005110151102511035110451105511065110751108511095111051111511125111351114511155111651117511185111951120511215112251123511245112551126511275112851129511305113151132511335113451135511365113751138511395114051141511425114351144511455114651147511485114951150511515115251153511545115551156511575115851159511605116151162511635116451165511665116751168511695117051171511725117351174511755117651177511785117951180511815118251183511845118551186511875118851189511905119151192511935119451195511965119751198511995120051201512025120351204512055120651207512085120951210512115121251213512145121551216512175121851219512205122151222512235122451225512265122751228512295123051231512325123351234512355123651237512385123951240512415124251243512445124551246512475124851249512505125151252512535125451255512565125751258512595126051261512625126351264512655126651267512685126951270512715127251273512745127551276512775127851279512805128151282512835128451285512865128751288512895129051291512925129351294512955129651297512985129951300513015130251303513045130551306513075130851309513105131151312513135131451315513165131751318513195132051321513225132351324513255132651327513285132951330513315133251333513345133551336513375133851339513405134151342513435134451345513465134751348513495135051351513525135351354513555135651357513585135951360513615136251363513645136551366513675136851369513705137151372513735137451375513765137751378513795138051381513825138351384513855138651387513885138951390513915139251393513945139551396513975139851399514005140151402514035140451405514065140751408514095141051411514125141351414514155141651417514185141951420514215142251423514245142551426514275142851429514305143151432514335143451435514365143751438514395144051441514425144351444514455144651447514485144951450514515145251453514545145551456514575145851459514605146151462514635146451465514665146751468514695147051471514725147351474514755147651477514785147951480514815148251483514845148551486514875148851489514905149151492514935149451495514965149751498514995150051501515025150351504515055150651507515085150951510515115151251513515145151551516515175151851519515205152151522515235152451525515265152751528515295153051531515325153351534515355153651537515385153951540515415154251543515445154551546515475154851549515505155151552515535155451555515565155751558515595156051561515625156351564515655156651567515685156951570515715157251573515745157551576515775157851579515805158151582515835158451585515865158751588515895159051591515925159351594515955159651597515985159951600516015160251603516045160551606516075160851609516105161151612516135161451615516165161751618516195162051621516225162351624516255162651627516285162951630516315163251633516345163551636516375163851639516405164151642516435164451645516465164751648516495165051651516525165351654516555165651657516585165951660516615166251663516645166551666516675166851669516705167151672516735167451675516765167751678516795168051681516825168351684516855168651687516885168951690516915169251693516945169551696516975169851699517005170151702517035170451705517065170751708517095171051711517125171351714517155171651717517185171951720517215172251723517245172551726517275172851729517305173151732517335173451735517365173751738517395174051741517425174351744517455174651747517485174951750517515175251753517545175551756517575175851759517605176151762517635176451765517665176751768517695177051771517725177351774517755177651777517785177951780517815178251783517845178551786517875178851789517905179151792517935179451795517965179751798517995180051801518025180351804518055180651807518085180951810518115181251813518145181551816518175181851819518205182151822518235182451825518265182751828518295183051831518325183351834518355183651837518385183951840518415184251843518445184551846518475184851849518505185151852518535185451855518565185751858518595186051861518625186351864518655186651867518685186951870518715187251873518745187551876518775187851879518805188151882518835188451885518865188751888518895189051891518925189351894518955189651897518985189951900519015190251903519045190551906519075190851909519105191151912519135191451915519165191751918519195192051921519225192351924519255192651927519285192951930519315193251933519345193551936519375193851939519405194151942519435194451945519465194751948519495195051951519525195351954519555195651957519585195951960519615196251963519645196551966519675196851969519705197151972519735197451975519765197751978519795198051981519825198351984519855198651987519885198951990519915199251993519945199551996519975199851999520005200152002520035200452005520065200752008520095201052011520125201352014520155201652017520185201952020520215202252023520245202552026520275202852029520305203152032520335203452035520365203752038520395204052041520425204352044520455204652047520485204952050520515205252053520545205552056520575205852059520605206152062520635206452065520665206752068520695207052071520725207352074520755207652077520785207952080520815208252083520845208552086520875208852089520905209152092520935209452095520965209752098520995210052101521025210352104521055210652107521085210952110521115211252113521145211552116521175211852119521205212152122521235212452125521265212752128521295213052131521325213352134521355213652137521385213952140521415214252143521445214552146521475214852149521505215152152521535215452155521565215752158521595216052161521625216352164521655216652167521685216952170521715217252173521745217552176521775217852179521805218152182521835218452185521865218752188521895219052191521925219352194521955219652197521985219952200522015220252203522045220552206522075220852209522105221152212522135221452215522165221752218522195222052221522225222352224522255222652227522285222952230522315223252233522345223552236522375223852239522405224152242522435224452245522465224752248522495225052251522525225352254522555225652257522585225952260522615226252263522645226552266522675226852269522705227152272522735227452275522765227752278522795228052281522825228352284522855228652287522885228952290522915229252293522945229552296522975229852299523005230152302523035230452305523065230752308523095231052311523125231352314523155231652317523185231952320523215232252323523245232552326523275232852329523305233152332523335233452335523365233752338523395234052341523425234352344523455234652347523485234952350523515235252353523545235552356523575235852359523605236152362523635236452365523665236752368523695237052371523725237352374523755237652377523785237952380523815238252383523845238552386523875238852389523905239152392523935239452395523965239752398523995240052401524025240352404524055240652407524085240952410524115241252413524145241552416524175241852419524205242152422524235242452425524265242752428524295243052431524325243352434524355243652437524385243952440524415244252443524445244552446524475244852449524505245152452524535245452455524565245752458524595246052461524625246352464524655246652467524685246952470524715247252473524745247552476524775247852479524805248152482524835248452485524865248752488524895249052491524925249352494524955249652497524985249952500525015250252503525045250552506525075250852509525105251152512525135251452515525165251752518525195252052521525225252352524525255252652527525285252952530525315253252533525345253552536525375253852539525405254152542525435254452545525465254752548525495255052551525525255352554525555255652557525585255952560525615256252563525645256552566525675256852569525705257152572525735257452575525765257752578525795258052581525825258352584525855258652587525885258952590525915259252593525945259552596525975259852599526005260152602526035260452605526065260752608526095261052611526125261352614526155261652617526185261952620526215262252623526245262552626526275262852629526305263152632526335263452635526365263752638526395264052641526425264352644526455264652647526485264952650526515265252653526545265552656526575265852659526605266152662526635266452665526665266752668526695267052671526725267352674526755267652677526785267952680526815268252683526845268552686526875268852689526905269152692526935269452695526965269752698526995270052701527025270352704527055270652707527085270952710527115271252713527145271552716527175271852719527205272152722527235272452725527265272752728527295273052731527325273352734527355273652737527385273952740527415274252743527445274552746527475274852749527505275152752527535275452755527565275752758527595276052761527625276352764527655276652767527685276952770527715277252773527745277552776527775277852779527805278152782527835278452785527865278752788527895279052791527925279352794527955279652797527985279952800528015280252803528045280552806528075280852809528105281152812528135281452815528165281752818528195282052821528225282352824528255282652827528285282952830528315283252833528345283552836528375283852839528405284152842528435284452845528465284752848528495285052851528525285352854528555285652857528585285952860528615286252863528645286552866528675286852869528705287152872528735287452875528765287752878528795288052881528825288352884528855288652887528885288952890528915289252893528945289552896528975289852899529005290152902529035290452905529065290752908529095291052911529125291352914529155291652917529185291952920529215292252923529245292552926529275292852929529305293152932529335293452935529365293752938529395294052941529425294352944529455294652947529485294952950529515295252953529545295552956529575295852959529605296152962529635296452965529665296752968529695297052971529725297352974529755297652977529785297952980529815298252983529845298552986529875298852989529905299152992529935299452995529965299752998529995300053001530025300353004530055300653007530085300953010530115301253013530145301553016530175301853019530205302153022530235302453025530265302753028530295303053031530325303353034530355303653037530385303953040530415304253043530445304553046530475304853049530505305153052530535305453055530565305753058530595306053061530625306353064530655306653067530685306953070530715307253073530745307553076530775307853079530805308153082530835308453085530865308753088530895309053091530925309353094530955309653097530985309953100531015310253103531045310553106531075310853109531105311153112531135311453115531165311753118531195312053121531225312353124531255312653127531285312953130531315313253133531345313553136531375313853139531405314153142531435314453145531465314753148531495315053151531525315353154531555315653157531585315953160531615316253163531645316553166531675316853169531705317153172531735317453175531765317753178531795318053181531825318353184531855318653187531885318953190531915319253193531945319553196531975319853199532005320153202532035320453205532065320753208532095321053211532125321353214532155321653217532185321953220532215322253223532245322553226532275322853229532305323153232532335323453235532365323753238532395324053241532425324353244532455324653247532485324953250532515325253253532545325553256532575325853259532605326153262532635326453265532665326753268532695327053271532725327353274532755327653277532785327953280532815328253283532845328553286532875328853289532905329153292532935329453295532965329753298532995330053301533025330353304533055330653307533085330953310533115331253313533145331553316533175331853319533205332153322533235332453325533265332753328533295333053331533325333353334533355333653337533385333953340533415334253343533445334553346533475334853349533505335153352533535335453355533565335753358533595336053361533625336353364533655336653367533685336953370533715337253373533745337553376533775337853379533805338153382533835338453385533865338753388533895339053391533925339353394533955339653397533985339953400534015340253403534045340553406534075340853409534105341153412534135341453415534165341753418534195342053421534225342353424534255342653427534285342953430534315343253433534345343553436534375343853439534405344153442534435344453445534465344753448534495345053451534525345353454534555345653457534585345953460534615346253463534645346553466534675346853469534705347153472534735347453475534765347753478534795348053481534825348353484534855348653487534885348953490534915349253493534945349553496534975349853499535005350153502535035350453505535065350753508535095351053511535125351353514535155351653517535185351953520535215352253523535245352553526535275352853529535305353153532535335353453535535365353753538535395354053541535425354353544535455354653547535485354953550535515355253553535545355553556535575355853559535605356153562535635356453565535665356753568535695357053571535725357353574535755357653577535785357953580535815358253583535845358553586535875358853589535905359153592535935359453595535965359753598535995360053601536025360353604536055360653607536085360953610536115361253613536145361553616536175361853619536205362153622536235362453625536265362753628536295363053631536325363353634536355363653637536385363953640536415364253643536445364553646536475364853649536505365153652536535365453655536565365753658536595366053661536625366353664536655366653667536685366953670536715367253673536745367553676536775367853679536805368153682536835368453685536865368753688536895369053691536925369353694536955369653697536985369953700537015370253703537045370553706537075370853709537105371153712537135371453715537165371753718537195372053721537225372353724537255372653727537285372953730537315373253733537345373553736537375373853739537405374153742537435374453745537465374753748537495375053751537525375353754537555375653757537585375953760537615376253763537645376553766537675376853769537705377153772537735377453775537765377753778537795378053781537825378353784537855378653787537885378953790537915379253793537945379553796537975379853799538005380153802538035380453805538065380753808538095381053811538125381353814538155381653817538185381953820538215382253823538245382553826538275382853829538305383153832538335383453835538365383753838538395384053841538425384353844538455384653847538485384953850538515385253853538545385553856538575385853859538605386153862538635386453865538665386753868538695387053871538725387353874538755387653877538785387953880538815388253883538845388553886538875388853889538905389153892538935389453895538965389753898538995390053901539025390353904539055390653907539085390953910539115391253913539145391553916539175391853919539205392153922539235392453925539265392753928539295393053931539325393353934539355393653937539385393953940539415394253943539445394553946539475394853949539505395153952539535395453955539565395753958539595396053961539625396353964539655396653967539685396953970539715397253973539745397553976539775397853979539805398153982539835398453985539865398753988539895399053991539925399353994539955399653997539985399954000540015400254003540045400554006540075400854009540105401154012540135401454015540165401754018540195402054021540225402354024540255402654027540285402954030540315403254033540345403554036540375403854039540405404154042540435404454045540465404754048540495405054051540525405354054540555405654057540585405954060540615406254063540645406554066540675406854069540705407154072540735407454075540765407754078540795408054081540825408354084540855408654087540885408954090540915409254093540945409554096540975409854099541005410154102541035410454105541065410754108541095411054111541125411354114541155411654117541185411954120541215412254123541245412554126541275412854129541305413154132541335413454135541365413754138541395414054141541425414354144541455414654147541485414954150541515415254153541545415554156541575415854159541605416154162541635416454165541665416754168541695417054171541725417354174541755417654177541785417954180541815418254183541845418554186541875418854189541905419154192541935419454195541965419754198541995420054201542025420354204542055420654207542085420954210542115421254213542145421554216542175421854219542205422154222542235422454225542265422754228542295423054231542325423354234542355423654237542385423954240542415424254243542445424554246542475424854249542505425154252542535425454255542565425754258542595426054261542625426354264542655426654267542685426954270542715427254273542745427554276542775427854279542805428154282542835428454285542865428754288542895429054291542925429354294542955429654297542985429954300543015430254303543045430554306543075430854309543105431154312543135431454315543165431754318543195432054321543225432354324543255432654327543285432954330543315433254333543345433554336543375433854339543405434154342543435434454345543465434754348543495435054351543525435354354543555435654357543585435954360543615436254363543645436554366543675436854369543705437154372543735437454375543765437754378543795438054381543825438354384543855438654387543885438954390543915439254393543945439554396543975439854399544005440154402544035440454405544065440754408544095441054411544125441354414544155441654417544185441954420544215442254423544245442554426544275442854429544305443154432544335443454435544365443754438544395444054441544425444354444544455444654447544485444954450544515445254453544545445554456544575445854459544605446154462544635446454465544665446754468544695447054471544725447354474544755447654477544785447954480544815448254483544845448554486544875448854489544905449154492544935449454495544965449754498544995450054501545025450354504545055450654507545085450954510545115451254513545145451554516545175451854519545205452154522545235452454525545265452754528545295453054531545325453354534545355453654537545385453954540545415454254543545445454554546545475454854549545505455154552545535455454555545565455754558545595456054561545625456354564545655456654567545685456954570545715457254573545745457554576545775457854579545805458154582545835458454585545865458754588545895459054591545925459354594545955459654597545985459954600546015460254603546045460554606546075460854609546105461154612546135461454615546165461754618546195462054621546225462354624546255462654627546285462954630546315463254633546345463554636546375463854639546405464154642546435464454645546465464754648546495465054651546525465354654546555465654657546585465954660546615466254663546645466554666546675466854669546705467154672546735467454675546765467754678546795468054681546825468354684546855468654687546885468954690546915469254693546945469554696546975469854699547005470154702547035470454705547065470754708547095471054711547125471354714547155471654717547185471954720547215472254723547245472554726547275472854729547305473154732547335473454735547365473754738547395474054741547425474354744547455474654747547485474954750547515475254753547545475554756547575475854759547605476154762547635476454765547665476754768547695477054771547725477354774547755477654777547785477954780547815478254783547845478554786547875478854789547905479154792547935479454795547965479754798547995480054801548025480354804548055480654807548085480954810548115481254813548145481554816548175481854819548205482154822548235482454825548265482754828548295483054831548325483354834548355483654837548385483954840548415484254843548445484554846548475484854849548505485154852548535485454855548565485754858548595486054861548625486354864548655486654867548685486954870548715487254873548745487554876548775487854879548805488154882548835488454885548865488754888548895489054891548925489354894548955489654897548985489954900549015490254903549045490554906549075490854909549105491154912549135491454915549165491754918549195492054921549225492354924549255492654927549285492954930549315493254933549345493554936549375493854939549405494154942549435494454945549465494754948549495495054951549525495354954549555495654957549585495954960549615496254963549645496554966549675496854969549705497154972549735497454975549765497754978549795498054981549825498354984549855498654987549885498954990549915499254993549945499554996549975499854999550005500155002550035500455005550065500755008550095501055011550125501355014550155501655017550185501955020550215502255023550245502555026550275502855029550305503155032550335503455035550365503755038550395504055041550425504355044550455504655047550485504955050550515505255053550545505555056550575505855059550605506155062550635506455065550665506755068550695507055071550725507355074550755507655077550785507955080550815508255083550845508555086550875508855089550905509155092550935509455095550965509755098550995510055101551025510355104551055510655107551085510955110551115511255113551145511555116551175511855119551205512155122551235512455125551265512755128551295513055131551325513355134551355513655137551385513955140551415514255143551445514555146551475514855149551505515155152551535515455155551565515755158551595516055161551625516355164551655516655167551685516955170551715517255173551745517555176551775517855179551805518155182551835518455185551865518755188551895519055191551925519355194551955519655197551985519955200552015520255203552045520555206552075520855209552105521155212552135521455215552165521755218552195522055221552225522355224552255522655227552285522955230552315523255233552345523555236552375523855239552405524155242552435524455245552465524755248552495525055251552525525355254552555525655257552585525955260552615526255263552645526555266552675526855269552705527155272552735527455275552765527755278552795528055281552825528355284552855528655287552885528955290552915529255293552945529555296552975529855299553005530155302553035530455305553065530755308553095531055311553125531355314553155531655317553185531955320553215532255323553245532555326553275532855329553305533155332553335533455335553365533755338553395534055341553425534355344553455534655347553485534955350553515535255353553545535555356553575535855359553605536155362553635536455365553665536755368553695537055371553725537355374553755537655377553785537955380553815538255383553845538555386553875538855389553905539155392553935539455395553965539755398553995540055401554025540355404554055540655407554085540955410554115541255413554145541555416554175541855419554205542155422554235542455425554265542755428554295543055431554325543355434554355543655437554385543955440554415544255443554445544555446554475544855449554505545155452554535545455455554565545755458554595546055461554625546355464554655546655467554685546955470554715547255473554745547555476554775547855479554805548155482554835548455485554865548755488554895549055491554925549355494554955549655497554985549955500555015550255503555045550555506555075550855509555105551155512555135551455515555165551755518555195552055521555225552355524555255552655527555285552955530555315553255533555345553555536555375553855539555405554155542555435554455545555465554755548555495555055551555525555355554555555555655557555585555955560555615556255563555645556555566555675556855569555705557155572555735557455575555765557755578555795558055581555825558355584555855558655587555885558955590555915559255593555945559555596555975559855599556005560155602556035560455605556065560755608556095561055611556125561355614556155561655617556185561955620556215562255623556245562555626556275562855629556305563155632556335563455635556365563755638556395564055641556425564355644556455564655647556485564955650556515565255653556545565555656556575565855659556605566155662556635566455665556665566755668556695567055671556725567355674556755567655677556785567955680556815568255683556845568555686556875568855689556905569155692556935569455695556965569755698556995570055701557025570355704557055570655707557085570955710557115571255713557145571555716557175571855719557205572155722557235572455725557265572755728557295573055731557325573355734557355573655737557385573955740557415574255743557445574555746557475574855749557505575155752557535575455755557565575755758557595576055761557625576355764557655576655767557685576955770557715577255773557745577555776557775577855779557805578155782557835578455785557865578755788557895579055791557925579355794557955579655797557985579955800558015580255803558045580555806558075580855809558105581155812558135581455815558165581755818558195582055821558225582355824558255582655827558285582955830558315583255833558345583555836558375583855839558405584155842558435584455845558465584755848558495585055851558525585355854558555585655857558585585955860558615586255863558645586555866558675586855869558705587155872558735587455875558765587755878558795588055881558825588355884558855588655887558885588955890558915589255893558945589555896558975589855899559005590155902559035590455905559065590755908559095591055911559125591355914559155591655917559185591955920559215592255923559245592555926559275592855929559305593155932559335593455935559365593755938559395594055941559425594355944559455594655947559485594955950559515595255953559545595555956559575595855959559605596155962559635596455965559665596755968559695597055971559725597355974559755597655977559785597955980559815598255983559845598555986559875598855989559905599155992559935599455995559965599755998559995600056001560025600356004560055600656007560085600956010560115601256013560145601556016560175601856019560205602156022560235602456025560265602756028560295603056031560325603356034560355603656037560385603956040560415604256043560445604556046560475604856049560505605156052560535605456055560565605756058560595606056061560625606356064560655606656067560685606956070560715607256073560745607556076560775607856079560805608156082560835608456085560865608756088560895609056091560925609356094560955609656097560985609956100561015610256103561045610556106561075610856109561105611156112561135611456115561165611756118561195612056121561225612356124561255612656127561285612956130561315613256133561345613556136561375613856139561405614156142561435614456145561465614756148561495615056151561525615356154561555615656157561585615956160561615616256163561645616556166561675616856169561705617156172561735617456175561765617756178561795618056181561825618356184561855618656187561885618956190561915619256193561945619556196561975619856199562005620156202562035620456205562065620756208562095621056211562125621356214562155621656217562185621956220562215622256223562245622556226562275622856229562305623156232562335623456235562365623756238562395624056241562425624356244562455624656247562485624956250562515625256253562545625556256562575625856259562605626156262562635626456265562665626756268562695627056271562725627356274562755627656277562785627956280562815628256283562845628556286562875628856289562905629156292562935629456295562965629756298562995630056301563025630356304563055630656307563085630956310563115631256313563145631556316563175631856319563205632156322563235632456325563265632756328563295633056331563325633356334563355633656337563385633956340563415634256343563445634556346563475634856349563505635156352563535635456355563565635756358563595636056361563625636356364563655636656367563685636956370563715637256373563745637556376563775637856379563805638156382563835638456385563865638756388563895639056391563925639356394563955639656397563985639956400564015640256403564045640556406564075640856409564105641156412564135641456415564165641756418564195642056421564225642356424564255642656427564285642956430564315643256433564345643556436564375643856439564405644156442564435644456445564465644756448564495645056451564525645356454564555645656457564585645956460564615646256463564645646556466564675646856469564705647156472564735647456475564765647756478564795648056481564825648356484564855648656487564885648956490564915649256493564945649556496564975649856499565005650156502565035650456505565065650756508565095651056511565125651356514565155651656517565185651956520565215652256523565245652556526565275652856529565305653156532565335653456535565365653756538565395654056541565425654356544565455654656547565485654956550565515655256553565545655556556565575655856559565605656156562565635656456565565665656756568565695657056571565725657356574565755657656577565785657956580565815658256583565845658556586565875658856589565905659156592565935659456595565965659756598565995660056601566025660356604566055660656607566085660956610566115661256613566145661556616566175661856619566205662156622566235662456625566265662756628566295663056631566325663356634566355663656637566385663956640566415664256643566445664556646566475664856649566505665156652566535665456655566565665756658566595666056661566625666356664566655666656667566685666956670566715667256673566745667556676566775667856679566805668156682566835668456685566865668756688566895669056691566925669356694566955669656697566985669956700567015670256703567045670556706567075670856709567105671156712567135671456715567165671756718567195672056721567225672356724567255672656727567285672956730567315673256733567345673556736567375673856739567405674156742567435674456745567465674756748567495675056751567525675356754567555675656757567585675956760567615676256763567645676556766567675676856769567705677156772567735677456775567765677756778567795678056781567825678356784567855678656787567885678956790567915679256793567945679556796567975679856799568005680156802568035680456805568065680756808568095681056811568125681356814568155681656817568185681956820568215682256823568245682556826568275682856829568305683156832568335683456835568365683756838568395684056841568425684356844568455684656847568485684956850568515685256853568545685556856568575685856859568605686156862568635686456865568665686756868568695687056871568725687356874568755687656877568785687956880568815688256883568845688556886568875688856889568905689156892568935689456895568965689756898568995690056901569025690356904569055690656907569085690956910569115691256913569145691556916569175691856919569205692156922569235692456925569265692756928569295693056931569325693356934569355693656937569385693956940569415694256943569445694556946569475694856949569505695156952569535695456955569565695756958569595696056961569625696356964569655696656967569685696956970569715697256973569745697556976569775697856979569805698156982569835698456985569865698756988569895699056991569925699356994569955699656997569985699957000570015700257003570045700557006570075700857009570105701157012570135701457015570165701757018570195702057021570225702357024570255702657027570285702957030570315703257033570345703557036570375703857039570405704157042570435704457045570465704757048570495705057051570525705357054570555705657057570585705957060570615706257063570645706557066570675706857069570705707157072570735707457075570765707757078570795708057081570825708357084570855708657087570885708957090570915709257093570945709557096570975709857099571005710157102571035710457105571065710757108571095711057111571125711357114571155711657117571185711957120571215712257123571245712557126571275712857129571305713157132571335713457135571365713757138571395714057141571425714357144571455714657147571485714957150571515715257153571545715557156571575715857159571605716157162571635716457165571665716757168571695717057171571725717357174571755717657177571785717957180571815718257183571845718557186571875718857189571905719157192571935719457195571965719757198571995720057201572025720357204572055720657207572085720957210572115721257213572145721557216572175721857219572205722157222572235722457225572265722757228572295723057231572325723357234572355723657237572385723957240572415724257243572445724557246572475724857249572505725157252572535725457255572565725757258572595726057261572625726357264572655726657267572685726957270572715727257273572745727557276572775727857279572805728157282572835728457285572865728757288572895729057291572925729357294572955729657297572985729957300573015730257303573045730557306573075730857309573105731157312573135731457315573165731757318573195732057321573225732357324573255732657327573285732957330573315733257333573345733557336573375733857339573405734157342573435734457345573465734757348573495735057351573525735357354573555735657357573585735957360573615736257363573645736557366573675736857369573705737157372573735737457375573765737757378573795738057381573825738357384573855738657387573885738957390573915739257393573945739557396573975739857399574005740157402574035740457405574065740757408574095741057411574125741357414574155741657417574185741957420574215742257423574245742557426574275742857429574305743157432574335743457435574365743757438574395744057441574425744357444574455744657447574485744957450574515745257453574545745557456574575745857459574605746157462574635746457465574665746757468574695747057471574725747357474574755747657477574785747957480574815748257483574845748557486574875748857489574905749157492574935749457495574965749757498574995750057501575025750357504575055750657507575085750957510575115751257513575145751557516575175751857519575205752157522575235752457525575265752757528575295753057531575325753357534575355753657537575385753957540575415754257543575445754557546575475754857549575505755157552575535755457555575565755757558575595756057561575625756357564575655756657567575685756957570575715757257573575745757557576575775757857579575805758157582575835758457585575865758757588575895759057591575925759357594575955759657597575985759957600576015760257603576045760557606576075760857609576105761157612576135761457615576165761757618576195762057621576225762357624576255762657627576285762957630576315763257633576345763557636576375763857639576405764157642576435764457645576465764757648576495765057651576525765357654576555765657657576585765957660576615766257663576645766557666576675766857669576705767157672576735767457675576765767757678576795768057681576825768357684576855768657687576885768957690576915769257693576945769557696576975769857699577005770157702577035770457705577065770757708577095771057711577125771357714577155771657717577185771957720577215772257723577245772557726577275772857729577305773157732577335773457735577365773757738577395774057741577425774357744577455774657747577485774957750577515775257753577545775557756577575775857759577605776157762577635776457765577665776757768577695777057771577725777357774577755777657777577785777957780577815778257783577845778557786577875778857789577905779157792577935779457795577965779757798577995780057801578025780357804578055780657807578085780957810578115781257813578145781557816578175781857819578205782157822578235782457825578265782757828578295783057831578325783357834578355783657837578385783957840578415784257843578445784557846578475784857849578505785157852578535785457855578565785757858578595786057861578625786357864578655786657867578685786957870578715787257873578745787557876578775787857879578805788157882578835788457885578865788757888578895789057891578925789357894578955789657897578985789957900579015790257903579045790557906579075790857909579105791157912579135791457915579165791757918579195792057921579225792357924579255792657927579285792957930579315793257933579345793557936579375793857939579405794157942579435794457945579465794757948579495795057951579525795357954579555795657957579585795957960579615796257963579645796557966579675796857969579705797157972579735797457975579765797757978579795798057981579825798357984579855798657987579885798957990579915799257993579945799557996579975799857999580005800158002580035800458005580065800758008580095801058011580125801358014580155801658017580185801958020580215802258023580245802558026580275802858029580305803158032580335803458035580365803758038580395804058041580425804358044580455804658047580485804958050580515805258053580545805558056580575805858059580605806158062580635806458065580665806758068580695807058071580725807358074580755807658077580785807958080580815808258083580845808558086580875808858089580905809158092580935809458095580965809758098580995810058101581025810358104581055810658107581085810958110581115811258113581145811558116581175811858119581205812158122581235812458125581265812758128581295813058131581325813358134581355813658137581385813958140581415814258143581445814558146581475814858149581505815158152581535815458155581565815758158581595816058161581625816358164581655816658167581685816958170581715817258173581745817558176581775817858179581805818158182581835818458185581865818758188581895819058191581925819358194581955819658197581985819958200582015820258203582045820558206582075820858209582105821158212582135821458215582165821758218582195822058221582225822358224582255822658227582285822958230582315823258233582345823558236582375823858239582405824158242582435824458245582465824758248582495825058251582525825358254582555825658257582585825958260582615826258263582645826558266582675826858269582705827158272582735827458275582765827758278582795828058281582825828358284582855828658287582885828958290582915829258293582945829558296582975829858299583005830158302583035830458305583065830758308583095831058311583125831358314583155831658317583185831958320583215832258323583245832558326583275832858329583305833158332583335833458335583365833758338583395834058341583425834358344583455834658347583485834958350583515835258353583545835558356583575835858359583605836158362583635836458365583665836758368583695837058371583725837358374583755837658377583785837958380583815838258383583845838558386583875838858389583905839158392583935839458395583965839758398583995840058401584025840358404584055840658407584085840958410584115841258413584145841558416584175841858419584205842158422584235842458425584265842758428584295843058431584325843358434584355843658437584385843958440584415844258443584445844558446584475844858449584505845158452584535845458455584565845758458584595846058461584625846358464584655846658467584685846958470584715847258473584745847558476584775847858479584805848158482584835848458485584865848758488584895849058491584925849358494584955849658497584985849958500585015850258503585045850558506585075850858509585105851158512585135851458515585165851758518585195852058521585225852358524585255852658527585285852958530585315853258533585345853558536585375853858539585405854158542585435854458545585465854758548585495855058551585525855358554585555855658557585585855958560585615856258563585645856558566585675856858569585705857158572585735857458575585765857758578585795858058581585825858358584585855858658587585885858958590585915859258593585945859558596585975859858599586005860158602586035860458605586065860758608586095861058611586125861358614586155861658617586185861958620586215862258623586245862558626586275862858629586305863158632586335863458635586365863758638586395864058641586425864358644586455864658647586485864958650586515865258653586545865558656586575865858659586605866158662586635866458665586665866758668586695867058671586725867358674586755867658677586785867958680586815868258683586845868558686586875868858689586905869158692586935869458695586965869758698586995870058701587025870358704587055870658707587085870958710587115871258713587145871558716587175871858719587205872158722587235872458725587265872758728587295873058731587325873358734587355873658737587385873958740587415874258743587445874558746587475874858749587505875158752587535875458755587565875758758587595876058761587625876358764587655876658767587685876958770587715877258773587745877558776587775877858779587805878158782587835878458785587865878758788587895879058791587925879358794587955879658797587985879958800588015880258803588045880558806588075880858809588105881158812588135881458815588165881758818588195882058821588225882358824588255882658827588285882958830588315883258833588345883558836588375883858839588405884158842588435884458845588465884758848588495885058851588525885358854588555885658857588585885958860588615886258863588645886558866588675886858869588705887158872588735887458875588765887758878588795888058881588825888358884588855888658887588885888958890588915889258893588945889558896588975889858899589005890158902589035890458905589065890758908589095891058911589125891358914589155891658917589185891958920589215892258923589245892558926589275892858929589305893158932589335893458935589365893758938589395894058941589425894358944589455894658947589485894958950589515895258953589545895558956589575895858959589605896158962589635896458965589665896758968589695897058971589725897358974589755897658977589785897958980589815898258983589845898558986589875898858989589905899158992589935899458995589965899758998589995900059001590025900359004590055900659007590085900959010590115901259013590145901559016590175901859019590205902159022590235902459025590265902759028590295903059031590325903359034590355903659037590385903959040590415904259043590445904559046590475904859049590505905159052590535905459055590565905759058590595906059061590625906359064590655906659067590685906959070590715907259073590745907559076590775907859079590805908159082590835908459085590865908759088590895909059091590925909359094590955909659097590985909959100591015910259103591045910559106591075910859109591105911159112591135911459115591165911759118591195912059121591225912359124591255912659127591285912959130591315913259133591345913559136591375913859139591405914159142591435914459145591465914759148591495915059151591525915359154591555915659157591585915959160591615916259163591645916559166591675916859169591705917159172591735917459175591765917759178591795918059181591825918359184591855918659187591885918959190591915919259193591945919559196591975919859199592005920159202592035920459205592065920759208592095921059211592125921359214592155921659217592185921959220592215922259223592245922559226592275922859229592305923159232592335923459235592365923759238592395924059241592425924359244592455924659247592485924959250592515925259253592545925559256592575925859259592605926159262592635926459265592665926759268592695927059271592725927359274592755927659277592785927959280592815928259283592845928559286592875928859289592905929159292592935929459295592965929759298592995930059301593025930359304593055930659307593085930959310593115931259313593145931559316593175931859319593205932159322593235932459325593265932759328593295933059331593325933359334593355933659337593385933959340593415934259343593445934559346593475934859349593505935159352593535935459355593565935759358593595936059361593625936359364593655936659367593685936959370593715937259373593745937559376593775937859379593805938159382593835938459385593865938759388593895939059391593925939359394593955939659397593985939959400594015940259403594045940559406594075940859409594105941159412594135941459415594165941759418594195942059421594225942359424594255942659427594285942959430594315943259433594345943559436594375943859439594405944159442594435944459445594465944759448594495945059451594525945359454594555945659457594585945959460594615946259463594645946559466594675946859469594705947159472594735947459475594765947759478594795948059481594825948359484594855948659487594885948959490594915949259493594945949559496594975949859499595005950159502595035950459505595065950759508595095951059511595125951359514595155951659517595185951959520595215952259523595245952559526595275952859529595305953159532595335953459535595365953759538595395954059541595425954359544595455954659547595485954959550595515955259553595545955559556595575955859559595605956159562595635956459565595665956759568595695957059571595725957359574595755957659577595785957959580595815958259583595845958559586595875958859589595905959159592595935959459595595965959759598595995960059601596025960359604596055960659607596085960959610596115961259613596145961559616596175961859619596205962159622596235962459625596265962759628596295963059631596325963359634596355963659637596385963959640596415964259643596445964559646596475964859649596505965159652596535965459655596565965759658596595966059661596625966359664596655966659667596685966959670596715967259673596745967559676596775967859679596805968159682596835968459685596865968759688596895969059691596925969359694596955969659697596985969959700597015970259703597045970559706597075970859709597105971159712597135971459715597165971759718597195972059721597225972359724597255972659727597285972959730597315973259733597345973559736597375973859739597405974159742597435974459745597465974759748597495975059751597525975359754597555975659757597585975959760597615976259763597645976559766597675976859769597705977159772597735977459775597765977759778597795978059781597825978359784597855978659787597885978959790597915979259793597945979559796597975979859799598005980159802598035980459805598065980759808598095981059811598125981359814598155981659817598185981959820598215982259823598245982559826598275982859829598305983159832598335983459835598365983759838598395984059841598425984359844598455984659847598485984959850598515985259853598545985559856598575985859859598605986159862598635986459865598665986759868598695987059871598725987359874598755987659877598785987959880598815988259883598845988559886598875988859889598905989159892598935989459895598965989759898598995990059901599025990359904599055990659907599085990959910599115991259913599145991559916599175991859919599205992159922599235992459925599265992759928599295993059931599325993359934599355993659937599385993959940599415994259943599445994559946599475994859949599505995159952599535995459955599565995759958599595996059961599625996359964599655996659967599685996959970599715997259973599745997559976599775997859979599805998159982599835998459985599865998759988599895999059991599925999359994599955999659997599985999960000600016000260003600046000560006600076000860009600106001160012600136001460015600166001760018600196002060021600226002360024600256002660027600286002960030600316003260033600346003560036600376003860039600406004160042600436004460045600466004760048600496005060051600526005360054600556005660057600586005960060600616006260063600646006560066600676006860069600706007160072600736007460075600766007760078600796008060081600826008360084600856008660087600886008960090600916009260093600946009560096600976009860099601006010160102601036010460105601066010760108601096011060111601126011360114601156011660117601186011960120601216012260123601246012560126601276012860129601306013160132601336013460135601366013760138601396014060141601426014360144601456014660147601486014960150601516015260153601546015560156601576015860159601606016160162601636016460165601666016760168601696017060171601726017360174601756017660177601786017960180601816018260183601846018560186601876018860189601906019160192601936019460195601966019760198601996020060201602026020360204602056020660207602086020960210602116021260213602146021560216602176021860219602206022160222602236022460225602266022760228602296023060231602326023360234602356023660237602386023960240602416024260243602446024560246602476024860249602506025160252602536025460255602566025760258602596026060261602626026360264602656026660267602686026960270602716027260273602746027560276602776027860279602806028160282602836028460285602866028760288602896029060291602926029360294602956029660297602986029960300603016030260303603046030560306603076030860309603106031160312603136031460315603166031760318603196032060321603226032360324603256032660327603286032960330603316033260333603346033560336603376033860339603406034160342603436034460345603466034760348603496035060351603526035360354603556035660357603586035960360603616036260363603646036560366603676036860369603706037160372603736037460375603766037760378603796038060381603826038360384603856038660387603886038960390603916039260393603946039560396603976039860399604006040160402604036040460405604066040760408604096041060411604126041360414604156041660417604186041960420604216042260423604246042560426604276042860429604306043160432604336043460435604366043760438604396044060441604426044360444604456044660447604486044960450604516045260453604546045560456604576045860459604606046160462604636046460465604666046760468604696047060471604726047360474604756047660477604786047960480604816048260483604846048560486604876048860489604906049160492604936049460495604966049760498604996050060501605026050360504605056050660507605086050960510605116051260513605146051560516605176051860519605206052160522605236052460525605266052760528605296053060531605326053360534605356053660537605386053960540605416054260543605446054560546605476054860549605506055160552605536055460555605566055760558605596056060561605626056360564605656056660567605686056960570605716057260573605746057560576605776057860579605806058160582605836058460585605866058760588605896059060591605926059360594605956059660597605986059960600606016060260603606046060560606606076060860609606106061160612606136061460615606166061760618606196062060621606226062360624606256062660627606286062960630606316063260633606346063560636606376063860639606406064160642606436064460645606466064760648606496065060651606526065360654606556065660657606586065960660606616066260663606646066560666606676066860669606706067160672606736067460675606766067760678606796068060681606826068360684606856068660687606886068960690606916069260693606946069560696606976069860699607006070160702607036070460705607066070760708607096071060711607126071360714607156071660717607186071960720607216072260723607246072560726607276072860729607306073160732607336073460735607366073760738607396074060741607426074360744607456074660747607486074960750607516075260753607546075560756607576075860759607606076160762607636076460765607666076760768607696077060771607726077360774607756077660777607786077960780607816078260783607846078560786607876078860789607906079160792607936079460795607966079760798607996080060801608026080360804608056080660807608086080960810608116081260813608146081560816608176081860819608206082160822608236082460825608266082760828608296083060831608326083360834608356083660837608386083960840608416084260843608446084560846608476084860849608506085160852608536085460855608566085760858608596086060861608626086360864608656086660867608686086960870608716087260873608746087560876608776087860879608806088160882608836088460885608866088760888608896089060891608926089360894608956089660897608986089960900609016090260903609046090560906609076090860909609106091160912609136091460915609166091760918609196092060921609226092360924609256092660927609286092960930609316093260933609346093560936609376093860939609406094160942609436094460945609466094760948609496095060951609526095360954609556095660957609586095960960609616096260963609646096560966609676096860969609706097160972609736097460975609766097760978609796098060981609826098360984609856098660987609886098960990609916099260993609946099560996609976099860999610006100161002610036100461005610066100761008610096101061011610126101361014610156101661017610186101961020610216102261023610246102561026610276102861029610306103161032610336103461035610366103761038610396104061041610426104361044610456104661047610486104961050610516105261053610546105561056610576105861059610606106161062610636106461065610666106761068610696107061071610726107361074610756107661077610786107961080610816108261083610846108561086610876108861089610906109161092610936109461095610966109761098610996110061101611026110361104611056110661107611086110961110611116111261113611146111561116611176111861119611206112161122611236112461125611266112761128611296113061131611326113361134611356113661137611386113961140611416114261143611446114561146611476114861149611506115161152611536115461155611566115761158611596116061161611626116361164611656116661167611686116961170611716117261173611746117561176611776117861179611806118161182611836118461185611866118761188611896119061191611926119361194611956119661197611986119961200612016120261203612046120561206612076120861209612106121161212612136121461215612166121761218612196122061221612226122361224612256122661227612286122961230612316123261233612346123561236612376123861239612406124161242612436124461245612466124761248612496125061251612526125361254612556125661257612586125961260612616126261263612646126561266612676126861269612706127161272612736127461275612766127761278612796128061281612826128361284612856128661287612886128961290612916129261293612946129561296612976129861299613006130161302613036130461305613066130761308613096131061311613126131361314613156131661317613186131961320613216132261323613246132561326613276132861329613306133161332613336133461335613366133761338613396134061341613426134361344613456134661347613486134961350613516135261353613546135561356613576135861359613606136161362613636136461365613666136761368613696137061371613726137361374613756137661377613786137961380613816138261383613846138561386613876138861389613906139161392613936139461395613966139761398613996140061401614026140361404614056140661407614086140961410614116141261413614146141561416614176141861419614206142161422614236142461425614266142761428614296143061431614326143361434614356143661437614386143961440614416144261443614446144561446614476144861449614506145161452614536145461455614566145761458614596146061461614626146361464614656146661467614686146961470614716147261473614746147561476614776147861479614806148161482614836148461485614866148761488614896149061491614926149361494614956149661497614986149961500615016150261503615046150561506615076150861509615106151161512615136151461515615166151761518615196152061521615226152361524615256152661527615286152961530615316153261533615346153561536615376153861539615406154161542615436154461545615466154761548615496155061551615526155361554615556155661557615586155961560615616156261563615646156561566615676156861569615706157161572615736157461575615766157761578615796158061581615826158361584615856158661587615886158961590615916159261593615946159561596615976159861599616006160161602616036160461605616066160761608616096161061611616126161361614616156161661617616186161961620616216162261623616246162561626616276162861629616306163161632616336163461635616366163761638616396164061641616426164361644616456164661647616486164961650616516165261653616546165561656616576165861659616606166161662616636166461665616666166761668616696167061671616726167361674616756167661677616786167961680616816168261683616846168561686616876168861689616906169161692616936169461695616966169761698616996170061701617026170361704617056170661707617086170961710617116171261713617146171561716617176171861719617206172161722617236172461725617266172761728617296173061731617326173361734617356173661737617386173961740617416174261743617446174561746617476174861749617506175161752617536175461755617566175761758617596176061761617626176361764617656176661767617686176961770617716177261773617746177561776617776177861779617806178161782617836178461785617866178761788617896179061791617926179361794617956179661797617986179961800618016180261803618046180561806618076180861809618106181161812618136181461815618166181761818618196182061821618226182361824618256182661827618286182961830618316183261833618346183561836618376183861839618406184161842618436184461845618466184761848618496185061851618526185361854618556185661857618586185961860618616186261863618646186561866618676186861869618706187161872618736187461875618766187761878618796188061881618826188361884618856188661887618886188961890618916189261893618946189561896618976189861899619006190161902619036190461905619066190761908619096191061911619126191361914619156191661917619186191961920619216192261923619246192561926619276192861929619306193161932619336193461935619366193761938619396194061941619426194361944619456194661947619486194961950619516195261953619546195561956619576195861959619606196161962619636196461965619666196761968619696197061971619726197361974619756197661977619786197961980619816198261983619846198561986619876198861989619906199161992619936199461995619966199761998619996200062001620026200362004620056200662007620086200962010620116201262013620146201562016620176201862019620206202162022620236202462025620266202762028620296203062031620326203362034620356203662037620386203962040620416204262043620446204562046620476204862049620506205162052620536205462055620566205762058620596206062061620626206362064620656206662067620686206962070620716207262073620746207562076620776207862079620806208162082620836208462085620866208762088620896209062091620926209362094620956209662097620986209962100621016210262103621046210562106621076210862109621106211162112621136211462115621166211762118621196212062121621226212362124621256212662127621286212962130621316213262133621346213562136621376213862139621406214162142621436214462145621466214762148621496215062151621526215362154621556215662157621586215962160621616216262163621646216562166621676216862169621706217162172621736217462175621766217762178621796218062181621826218362184621856218662187621886218962190621916219262193621946219562196621976219862199622006220162202622036220462205622066220762208622096221062211622126221362214622156221662217622186221962220622216222262223622246222562226622276222862229622306223162232622336223462235622366223762238622396224062241622426224362244622456224662247622486224962250622516225262253622546225562256622576225862259622606226162262622636226462265622666226762268622696227062271622726227362274622756227662277622786227962280622816228262283622846228562286622876228862289622906229162292622936229462295622966229762298622996230062301623026230362304623056230662307623086230962310623116231262313623146231562316623176231862319623206232162322623236232462325623266232762328623296233062331623326233362334623356233662337623386233962340623416234262343623446234562346623476234862349623506235162352623536235462355623566235762358623596236062361623626236362364623656236662367623686236962370623716237262373623746237562376623776237862379623806238162382623836238462385623866238762388623896239062391623926239362394623956239662397623986239962400624016240262403624046240562406624076240862409624106241162412624136241462415624166241762418624196242062421624226242362424624256242662427624286242962430624316243262433624346243562436624376243862439624406244162442624436244462445624466244762448624496245062451624526245362454624556245662457624586245962460624616246262463624646246562466624676246862469624706247162472624736247462475624766247762478624796248062481624826248362484624856248662487624886248962490624916249262493624946249562496624976249862499625006250162502625036250462505625066250762508625096251062511625126251362514625156251662517625186251962520625216252262523625246252562526625276252862529625306253162532625336253462535625366253762538625396254062541625426254362544625456254662547625486254962550625516255262553625546255562556625576255862559625606256162562625636256462565625666256762568625696257062571625726257362574625756257662577625786257962580625816258262583625846258562586625876258862589625906259162592625936259462595625966259762598625996260062601626026260362604626056260662607626086260962610626116261262613626146261562616626176261862619626206262162622626236262462625626266262762628626296263062631626326263362634626356263662637626386263962640626416264262643626446264562646626476264862649626506265162652626536265462655626566265762658626596266062661626626266362664626656266662667626686266962670626716267262673626746267562676626776267862679626806268162682626836268462685626866268762688626896269062691626926269362694626956269662697626986269962700627016270262703627046270562706627076270862709627106271162712627136271462715627166271762718627196272062721627226272362724627256272662727627286272962730627316273262733627346273562736627376273862739627406274162742627436274462745627466274762748627496275062751627526275362754627556275662757627586275962760627616276262763627646276562766627676276862769627706277162772627736277462775627766277762778627796278062781627826278362784627856278662787627886278962790627916279262793627946279562796627976279862799628006280162802628036280462805628066280762808628096281062811628126281362814628156281662817628186281962820628216282262823628246282562826628276282862829628306283162832628336283462835628366283762838628396284062841628426284362844628456284662847628486284962850628516285262853628546285562856628576285862859628606286162862628636286462865628666286762868628696287062871628726287362874628756287662877628786287962880628816288262883628846288562886628876288862889628906289162892628936289462895628966289762898628996290062901629026290362904629056290662907629086290962910629116291262913629146291562916629176291862919629206292162922629236292462925629266292762928629296293062931629326293362934629356293662937629386293962940629416294262943629446294562946629476294862949629506295162952629536295462955629566295762958629596296062961629626296362964629656296662967629686296962970629716297262973629746297562976629776297862979629806298162982629836298462985629866298762988629896299062991629926299362994629956299662997629986299963000630016300263003630046300563006630076300863009630106301163012630136301463015630166301763018630196302063021630226302363024630256302663027630286302963030630316303263033630346303563036630376303863039630406304163042630436304463045630466304763048630496305063051630526305363054630556305663057630586305963060630616306263063630646306563066630676306863069630706307163072630736307463075630766307763078630796308063081630826308363084630856308663087630886308963090630916309263093630946309563096630976309863099631006310163102631036310463105631066310763108631096311063111631126311363114631156311663117631186311963120631216312263123631246312563126631276312863129631306313163132631336313463135631366313763138631396314063141631426314363144631456314663147631486314963150631516315263153631546315563156631576315863159631606316163162631636316463165631666316763168631696317063171631726317363174631756317663177631786317963180631816318263183631846318563186631876318863189631906319163192631936319463195631966319763198631996320063201632026320363204632056320663207632086320963210632116321263213632146321563216632176321863219632206322163222632236322463225632266322763228632296323063231632326323363234632356323663237632386323963240632416324263243632446324563246632476324863249632506325163252632536325463255632566325763258632596326063261632626326363264632656326663267632686326963270632716327263273632746327563276632776327863279632806328163282632836328463285632866328763288632896329063291632926329363294632956329663297632986329963300633016330263303633046330563306633076330863309633106331163312633136331463315633166331763318633196332063321633226332363324633256332663327633286332963330633316333263333633346333563336633376333863339633406334163342633436334463345633466334763348633496335063351633526335363354633556335663357633586335963360633616336263363633646336563366633676336863369633706337163372633736337463375633766337763378633796338063381633826338363384633856338663387633886338963390633916339263393633946339563396633976339863399634006340163402634036340463405634066340763408634096341063411634126341363414634156341663417634186341963420634216342263423634246342563426634276342863429634306343163432634336343463435634366343763438634396344063441634426344363444634456344663447634486344963450634516345263453634546345563456634576345863459634606346163462634636346463465634666346763468634696347063471634726347363474634756347663477634786347963480634816348263483634846348563486634876348863489634906349163492634936349463495634966349763498634996350063501635026350363504635056350663507635086350963510635116351263513635146351563516635176351863519635206352163522635236352463525635266352763528635296353063531635326353363534635356353663537635386353963540635416354263543635446354563546635476354863549635506355163552635536355463555635566355763558635596356063561635626356363564635656356663567635686356963570635716357263573635746357563576635776357863579635806358163582635836358463585635866358763588635896359063591635926359363594635956359663597635986359963600636016360263603636046360563606636076360863609636106361163612636136361463615636166361763618636196362063621636226362363624636256362663627636286362963630636316363263633636346363563636636376363863639636406364163642636436364463645636466364763648636496365063651636526365363654636556365663657636586365963660636616366263663636646366563666636676366863669636706367163672636736367463675636766367763678636796368063681636826368363684636856368663687636886368963690636916369263693636946369563696636976369863699637006370163702637036370463705637066370763708637096371063711637126371363714637156371663717637186371963720637216372263723637246372563726637276372863729637306373163732637336373463735637366373763738637396374063741637426374363744637456374663747637486374963750637516375263753637546375563756637576375863759637606376163762637636376463765637666376763768637696377063771637726377363774637756377663777637786377963780637816378263783637846378563786637876378863789637906379163792637936379463795637966379763798637996380063801638026380363804638056380663807638086380963810638116381263813638146381563816638176381863819638206382163822638236382463825638266382763828638296383063831638326383363834638356383663837638386383963840638416384263843638446384563846638476384863849638506385163852638536385463855638566385763858638596386063861638626386363864638656386663867638686386963870638716387263873638746387563876638776387863879638806388163882638836388463885638866388763888638896389063891638926389363894638956389663897638986389963900639016390263903639046390563906639076390863909639106391163912639136391463915639166391763918639196392063921639226392363924639256392663927639286392963930639316393263933639346393563936639376393863939639406394163942639436394463945639466394763948639496395063951639526395363954639556395663957639586395963960639616396263963639646396563966639676396863969639706397163972639736397463975639766397763978639796398063981639826398363984639856398663987639886398963990639916399263993639946399563996639976399863999640006400164002640036400464005640066400764008640096401064011640126401364014640156401664017640186401964020640216402264023640246402564026640276402864029640306403164032640336403464035640366403764038640396404064041640426404364044640456404664047640486404964050640516405264053640546405564056640576405864059640606406164062640636406464065640666406764068640696407064071640726407364074640756407664077640786407964080640816408264083640846408564086640876408864089640906409164092640936409464095640966409764098640996410064101641026410364104641056410664107641086410964110641116411264113641146411564116641176411864119641206412164122641236412464125641266412764128641296413064131641326413364134641356413664137641386413964140641416414264143641446414564146641476414864149641506415164152641536415464155641566415764158641596416064161641626416364164641656416664167641686416964170641716417264173641746417564176641776417864179641806418164182641836418464185641866418764188641896419064191641926419364194641956419664197641986419964200642016420264203642046420564206642076420864209642106421164212642136421464215642166421764218642196422064221642226422364224642256422664227642286422964230642316423264233642346423564236642376423864239642406424164242642436424464245642466424764248642496425064251642526425364254642556425664257642586425964260642616426264263642646426564266642676426864269642706427164272642736427464275642766427764278642796428064281642826428364284642856428664287642886428964290642916429264293642946429564296642976429864299643006430164302643036430464305643066430764308643096431064311643126431364314643156431664317643186431964320643216432264323643246432564326643276432864329643306433164332643336433464335643366433764338643396434064341643426434364344643456434664347643486434964350643516435264353643546435564356643576435864359643606436164362643636436464365643666436764368643696437064371643726437364374643756437664377643786437964380643816438264383643846438564386643876438864389643906439164392643936439464395643966439764398643996440064401644026440364404644056440664407644086440964410644116441264413644146441564416644176441864419644206442164422644236442464425644266442764428644296443064431644326443364434644356443664437644386443964440644416444264443644446444564446644476444864449644506445164452644536445464455644566445764458644596446064461644626446364464644656446664467644686446964470644716447264473644746447564476644776447864479644806448164482644836448464485644866448764488644896449064491644926449364494644956449664497644986449964500645016450264503645046450564506645076450864509645106451164512645136451464515645166451764518645196452064521645226452364524645256452664527645286452964530645316453264533645346453564536645376453864539645406454164542645436454464545645466454764548645496455064551645526455364554645556455664557645586455964560645616456264563645646456564566645676456864569645706457164572645736457464575645766457764578645796458064581645826458364584645856458664587645886458964590645916459264593645946459564596645976459864599646006460164602646036460464605646066460764608646096461064611646126461364614646156461664617646186461964620646216462264623646246462564626646276462864629646306463164632646336463464635646366463764638646396464064641646426464364644646456464664647646486464964650646516465264653646546465564656646576465864659646606466164662646636466464665646666466764668646696467064671646726467364674646756467664677646786467964680646816468264683646846468564686646876468864689646906469164692646936469464695646966469764698646996470064701647026470364704647056470664707647086470964710647116471264713647146471564716647176471864719647206472164722647236472464725647266472764728647296473064731647326473364734647356473664737647386473964740647416474264743647446474564746647476474864749647506475164752647536475464755647566475764758647596476064761647626476364764647656476664767647686476964770647716477264773647746477564776647776477864779647806478164782647836478464785647866478764788647896479064791647926479364794647956479664797647986479964800648016480264803648046480564806648076480864809648106481164812648136481464815648166481764818648196482064821648226482364824648256482664827648286482964830648316483264833648346483564836648376483864839648406484164842648436484464845648466484764848648496485064851648526485364854648556485664857648586485964860648616486264863648646486564866648676486864869648706487164872648736487464875648766487764878648796488064881648826488364884648856488664887648886488964890648916489264893648946489564896648976489864899649006490164902649036490464905649066490764908649096491064911649126491364914649156491664917649186491964920649216492264923649246492564926649276492864929649306493164932649336493464935649366493764938649396494064941649426494364944649456494664947649486494964950649516495264953649546495564956649576495864959649606496164962649636496464965649666496764968649696497064971649726497364974649756497664977649786497964980649816498264983649846498564986649876498864989649906499164992649936499464995649966499764998649996500065001650026500365004650056500665007650086500965010650116501265013650146501565016650176501865019650206502165022650236502465025650266502765028650296503065031650326503365034650356503665037650386503965040650416504265043650446504565046650476504865049650506505165052650536505465055650566505765058650596506065061650626506365064650656506665067650686506965070650716507265073650746507565076650776507865079650806508165082650836508465085650866508765088650896509065091650926509365094650956509665097650986509965100651016510265103651046510565106651076510865109651106511165112651136511465115651166511765118651196512065121651226512365124651256512665127651286512965130651316513265133651346513565136651376513865139651406514165142651436514465145651466514765148651496515065151651526515365154651556515665157651586515965160651616516265163651646516565166651676516865169651706517165172651736517465175651766517765178651796518065181651826518365184651856518665187651886518965190651916519265193651946519565196651976519865199652006520165202652036520465205652066520765208652096521065211652126521365214652156521665217652186521965220652216522265223652246522565226652276522865229652306523165232652336523465235652366523765238652396524065241652426524365244652456524665247652486524965250652516525265253652546525565256652576525865259652606526165262652636526465265652666526765268652696527065271652726527365274652756527665277652786527965280652816528265283652846528565286652876528865289652906529165292652936529465295652966529765298652996530065301653026530365304653056530665307653086530965310653116531265313653146531565316653176531865319653206532165322653236532465325653266532765328653296533065331653326533365334653356533665337653386533965340653416534265343653446534565346653476534865349653506535165352653536535465355653566535765358653596536065361653626536365364653656536665367653686536965370653716537265373653746537565376653776537865379653806538165382653836538465385653866538765388653896539065391653926539365394653956539665397653986539965400654016540265403654046540565406654076540865409654106541165412654136541465415654166541765418654196542065421654226542365424654256542665427654286542965430654316543265433654346543565436654376543865439654406544165442654436544465445654466544765448654496545065451654526545365454654556545665457654586545965460654616546265463654646546565466654676546865469654706547165472654736547465475654766547765478654796548065481654826548365484654856548665487654886548965490654916549265493654946549565496654976549865499655006550165502655036550465505655066550765508655096551065511655126551365514655156551665517655186551965520655216552265523655246552565526655276552865529655306553165532655336553465535655366553765538655396554065541655426554365544655456554665547655486554965550655516555265553655546555565556655576555865559655606556165562655636556465565655666556765568655696557065571655726557365574655756557665577655786557965580655816558265583655846558565586655876558865589655906559165592655936559465595655966559765598655996560065601656026560365604656056560665607656086560965610656116561265613656146561565616656176561865619656206562165622656236562465625656266562765628656296563065631656326563365634656356563665637656386563965640656416564265643656446564565646656476564865649656506565165652656536565465655656566565765658656596566065661656626566365664656656566665667656686566965670656716567265673656746567565676656776567865679656806568165682656836568465685656866568765688656896569065691656926569365694656956569665697656986569965700657016570265703657046570565706657076570865709657106571165712657136571465715657166571765718657196572065721657226572365724657256572665727657286572965730657316573265733657346573565736657376573865739657406574165742657436574465745657466574765748657496575065751657526575365754657556575665757657586575965760657616576265763657646576565766657676576865769657706577165772657736577465775657766577765778657796578065781657826578365784657856578665787657886578965790657916579265793657946579565796657976579865799658006580165802658036580465805658066580765808658096581065811658126581365814658156581665817658186581965820658216582265823658246582565826658276582865829658306583165832658336583465835658366583765838658396584065841658426584365844658456584665847658486584965850658516585265853658546585565856658576585865859658606586165862658636586465865658666586765868658696587065871658726587365874658756587665877658786587965880658816588265883658846588565886658876588865889658906589165892658936589465895658966589765898658996590065901659026590365904659056590665907659086590965910659116591265913659146591565916659176591865919659206592165922659236592465925659266592765928659296593065931659326593365934659356593665937659386593965940659416594265943659446594565946659476594865949659506595165952659536595465955659566595765958659596596065961659626596365964659656596665967659686596965970659716597265973659746597565976659776597865979659806598165982659836598465985659866598765988659896599065991659926599365994659956599665997659986599966000660016600266003660046600566006660076600866009660106601166012660136601466015660166601766018660196602066021660226602366024660256602666027660286602966030660316603266033660346603566036660376603866039660406604166042660436604466045660466604766048660496605066051660526605366054660556605666057660586605966060660616606266063660646606566066660676606866069660706607166072660736607466075660766607766078660796608066081660826608366084660856608666087660886608966090660916609266093660946609566096660976609866099661006610166102661036610466105661066610766108661096611066111661126611366114661156611666117661186611966120661216612266123661246612566126661276612866129661306613166132661336613466135661366613766138661396614066141661426614366144661456614666147661486614966150661516615266153661546615566156661576615866159661606616166162661636616466165661666616766168661696617066171661726617366174661756617666177661786617966180661816618266183661846618566186661876618866189661906619166192661936619466195661966619766198661996620066201662026620366204662056620666207662086620966210662116621266213662146621566216662176621866219662206622166222662236622466225662266622766228662296623066231662326623366234662356623666237662386623966240662416624266243662446624566246662476624866249662506625166252662536625466255662566625766258662596626066261662626626366264662656626666267662686626966270662716627266273662746627566276662776627866279662806628166282662836628466285662866628766288662896629066291662926629366294662956629666297662986629966300663016630266303663046630566306663076630866309663106631166312663136631466315663166631766318663196632066321663226632366324663256632666327663286632966330663316633266333663346633566336663376633866339663406634166342663436634466345663466634766348663496635066351663526635366354663556635666357663586635966360663616636266363663646636566366663676636866369663706637166372663736637466375663766637766378663796638066381663826638366384663856638666387663886638966390663916639266393663946639566396663976639866399664006640166402664036640466405664066640766408664096641066411664126641366414664156641666417664186641966420664216642266423664246642566426664276642866429664306643166432664336643466435664366643766438664396644066441664426644366444664456644666447664486644966450664516645266453664546645566456664576645866459664606646166462664636646466465664666646766468664696647066471664726647366474664756647666477664786647966480664816648266483664846648566486664876648866489664906649166492664936649466495664966649766498664996650066501665026650366504665056650666507665086650966510665116651266513665146651566516665176651866519665206652166522665236652466525665266652766528665296653066531665326653366534665356653666537665386653966540665416654266543665446654566546665476654866549665506655166552665536655466555665566655766558665596656066561665626656366564665656656666567665686656966570665716657266573665746657566576665776657866579665806658166582665836658466585665866658766588665896659066591665926659366594665956659666597665986659966600666016660266603666046660566606666076660866609666106661166612666136661466615666166661766618666196662066621666226662366624666256662666627666286662966630666316663266633666346663566636666376663866639666406664166642666436664466645666466664766648666496665066651666526665366654666556665666657666586665966660666616666266663666646666566666666676666866669666706667166672666736667466675666766667766678666796668066681666826668366684666856668666687666886668966690666916669266693666946669566696666976669866699667006670166702667036670466705667066670766708667096671066711667126671366714667156671666717667186671966720667216672266723667246672566726667276672866729667306673166732667336673466735667366673766738667396674066741667426674366744667456674666747667486674966750667516675266753667546675566756667576675866759667606676166762667636676466765667666676766768667696677066771667726677366774667756677666777667786677966780667816678266783667846678566786667876678866789667906679166792667936679466795667966679766798667996680066801668026680366804668056680666807668086680966810668116681266813668146681566816668176681866819668206682166822668236682466825668266682766828668296683066831668326683366834668356683666837668386683966840668416684266843668446684566846668476684866849668506685166852668536685466855668566685766858668596686066861668626686366864668656686666867668686686966870668716687266873668746687566876668776687866879668806688166882668836688466885668866688766888668896689066891668926689366894668956689666897668986689966900669016690266903669046690566906669076690866909669106691166912669136691466915669166691766918669196692066921669226692366924669256692666927669286692966930669316693266933669346693566936669376693866939669406694166942669436694466945669466694766948669496695066951669526695366954669556695666957669586695966960669616696266963669646696566966669676696866969669706697166972669736697466975669766697766978669796698066981669826698366984669856698666987669886698966990669916699266993669946699566996669976699866999670006700167002670036700467005670066700767008670096701067011670126701367014670156701667017670186701967020670216702267023670246702567026670276702867029670306703167032670336703467035670366703767038670396704067041670426704367044670456704667047670486704967050670516705267053670546705567056670576705867059670606706167062670636706467065670666706767068670696707067071670726707367074670756707667077670786707967080670816708267083670846708567086670876708867089670906709167092670936709467095670966709767098670996710067101671026710367104671056710667107671086710967110671116711267113671146711567116671176711867119671206712167122671236712467125671266712767128671296713067131671326713367134671356713667137671386713967140671416714267143671446714567146671476714867149671506715167152671536715467155671566715767158671596716067161671626716367164671656716667167671686716967170671716717267173671746717567176671776717867179671806718167182671836718467185671866718767188671896719067191671926719367194671956719667197671986719967200672016720267203672046720567206672076720867209672106721167212672136721467215672166721767218672196722067221672226722367224672256722667227672286722967230672316723267233672346723567236672376723867239672406724167242672436724467245672466724767248672496725067251672526725367254672556725667257672586725967260672616726267263672646726567266672676726867269672706727167272672736727467275672766727767278672796728067281672826728367284672856728667287672886728967290672916729267293672946729567296672976729867299673006730167302673036730467305673066730767308673096731067311673126731367314673156731667317673186731967320673216732267323673246732567326673276732867329673306733167332673336733467335673366733767338673396734067341673426734367344673456734667347673486734967350673516735267353673546735567356673576735867359673606736167362673636736467365673666736767368673696737067371673726737367374673756737667377673786737967380673816738267383673846738567386673876738867389673906739167392673936739467395673966739767398673996740067401674026740367404674056740667407674086740967410674116741267413674146741567416674176741867419674206742167422674236742467425674266742767428674296743067431674326743367434674356743667437674386743967440674416744267443674446744567446674476744867449674506745167452674536745467455674566745767458674596746067461674626746367464674656746667467674686746967470674716747267473674746747567476674776747867479674806748167482674836748467485674866748767488674896749067491674926749367494674956749667497674986749967500675016750267503675046750567506675076750867509675106751167512675136751467515675166751767518675196752067521675226752367524675256752667527675286752967530675316753267533675346753567536675376753867539675406754167542675436754467545675466754767548675496755067551675526755367554675556755667557675586755967560675616756267563675646756567566675676756867569675706757167572675736757467575675766757767578675796758067581675826758367584675856758667587675886758967590675916759267593675946759567596675976759867599676006760167602676036760467605676066760767608676096761067611676126761367614676156761667617676186761967620676216762267623676246762567626676276762867629676306763167632676336763467635676366763767638676396764067641676426764367644676456764667647676486764967650676516765267653676546765567656676576765867659676606766167662676636766467665676666766767668676696767067671676726767367674676756767667677676786767967680676816768267683676846768567686676876768867689676906769167692676936769467695676966769767698676996770067701677026770367704677056770667707677086770967710677116771267713677146771567716677176771867719677206772167722677236772467725677266772767728677296773067731677326773367734677356773667737677386773967740677416774267743677446774567746677476774867749677506775167752677536775467755677566775767758677596776067761677626776367764677656776667767677686776967770677716777267773677746777567776677776777867779677806778167782677836778467785677866778767788677896779067791677926779367794677956779667797677986779967800678016780267803678046780567806678076780867809678106781167812678136781467815678166781767818678196782067821678226782367824678256782667827678286782967830678316783267833678346783567836678376783867839678406784167842678436784467845678466784767848678496785067851678526785367854678556785667857678586785967860678616786267863678646786567866678676786867869678706787167872678736787467875678766787767878678796788067881678826788367884678856788667887678886788967890678916789267893678946789567896678976789867899679006790167902679036790467905679066790767908679096791067911679126791367914679156791667917679186791967920679216792267923679246792567926679276792867929679306793167932679336793467935679366793767938679396794067941679426794367944679456794667947679486794967950679516795267953679546795567956679576795867959679606796167962679636796467965679666796767968679696797067971679726797367974679756797667977679786797967980679816798267983679846798567986679876798867989679906799167992679936799467995679966799767998679996800068001680026800368004680056800668007680086800968010680116801268013680146801568016680176801868019680206802168022680236802468025680266802768028680296803068031680326803368034680356803668037680386803968040680416804268043680446804568046680476804868049680506805168052680536805468055680566805768058680596806068061680626806368064680656806668067680686806968070680716807268073680746807568076680776807868079680806808168082680836808468085680866808768088680896809068091680926809368094680956809668097680986809968100681016810268103681046810568106681076810868109681106811168112681136811468115681166811768118681196812068121681226812368124681256812668127681286812968130681316813268133681346813568136681376813868139681406814168142681436814468145681466814768148681496815068151681526815368154681556815668157681586815968160681616816268163681646816568166681676816868169681706817168172681736817468175681766817768178681796818068181681826818368184681856818668187681886818968190681916819268193681946819568196681976819868199682006820168202682036820468205682066820768208682096821068211682126821368214682156821668217682186821968220682216822268223682246822568226682276822868229682306823168232682336823468235682366823768238682396824068241682426824368244682456824668247682486824968250682516825268253682546825568256682576825868259682606826168262682636826468265682666826768268682696827068271682726827368274682756827668277682786827968280682816828268283682846828568286682876828868289682906829168292682936829468295682966829768298682996830068301683026830368304683056830668307683086830968310683116831268313683146831568316683176831868319683206832168322683236832468325683266832768328683296833068331683326833368334683356833668337683386833968340683416834268343683446834568346683476834868349683506835168352683536835468355683566835768358683596836068361683626836368364683656836668367683686836968370683716837268373683746837568376683776837868379683806838168382683836838468385683866838768388683896839068391683926839368394683956839668397683986839968400684016840268403684046840568406684076840868409684106841168412684136841468415684166841768418684196842068421684226842368424684256842668427684286842968430684316843268433684346843568436684376843868439684406844168442684436844468445684466844768448684496845068451684526845368454684556845668457684586845968460684616846268463684646846568466684676846868469684706847168472684736847468475684766847768478684796848068481684826848368484684856848668487684886848968490684916849268493684946849568496684976849868499685006850168502685036850468505685066850768508685096851068511685126851368514685156851668517685186851968520685216852268523685246852568526685276852868529685306853168532685336853468535685366853768538685396854068541685426854368544685456854668547685486854968550685516855268553685546855568556685576855868559685606856168562685636856468565685666856768568685696857068571685726857368574685756857668577685786857968580685816858268583685846858568586685876858868589685906859168592685936859468595685966859768598685996860068601686026860368604686056860668607686086860968610686116861268613686146861568616686176861868619686206862168622686236862468625686266862768628686296863068631686326863368634686356863668637686386863968640686416864268643686446864568646686476864868649686506865168652686536865468655686566865768658686596866068661686626866368664686656866668667686686866968670686716867268673686746867568676686776867868679686806868168682686836868468685686866868768688686896869068691686926869368694686956869668697686986869968700687016870268703687046870568706687076870868709687106871168712687136871468715687166871768718687196872068721687226872368724687256872668727687286872968730687316873268733687346873568736687376873868739687406874168742687436874468745687466874768748687496875068751687526875368754687556875668757687586875968760687616876268763687646876568766687676876868769687706877168772687736877468775687766877768778687796878068781687826878368784687856878668787687886878968790687916879268793687946879568796687976879868799688006880168802688036880468805688066880768808688096881068811688126881368814688156881668817688186881968820688216882268823688246882568826688276882868829688306883168832688336883468835688366883768838688396884068841688426884368844688456884668847688486884968850688516885268853688546885568856688576885868859688606886168862688636886468865688666886768868688696887068871688726887368874688756887668877688786887968880688816888268883688846888568886688876888868889688906889168892688936889468895688966889768898688996890068901689026890368904689056890668907689086890968910689116891268913689146891568916689176891868919689206892168922689236892468925689266892768928689296893068931689326893368934689356893668937689386893968940689416894268943689446894568946689476894868949689506895168952689536895468955689566895768958689596896068961689626896368964689656896668967689686896968970689716897268973689746897568976689776897868979689806898168982689836898468985689866898768988689896899068991689926899368994689956899668997689986899969000690016900269003690046900569006690076900869009690106901169012690136901469015690166901769018690196902069021690226902369024690256902669027690286902969030690316903269033690346903569036690376903869039690406904169042690436904469045690466904769048690496905069051690526905369054690556905669057690586905969060690616906269063690646906569066690676906869069690706907169072690736907469075690766907769078690796908069081690826908369084690856908669087690886908969090690916909269093690946909569096690976909869099691006910169102691036910469105691066910769108691096911069111691126911369114691156911669117691186911969120691216912269123691246912569126691276912869129691306913169132691336913469135691366913769138691396914069141691426914369144691456914669147691486914969150691516915269153691546915569156691576915869159691606916169162691636916469165691666916769168691696917069171691726917369174691756917669177691786917969180691816918269183691846918569186691876918869189691906919169192691936919469195691966919769198691996920069201692026920369204692056920669207692086920969210692116921269213692146921569216692176921869219692206922169222692236922469225692266922769228692296923069231692326923369234692356923669237692386923969240692416924269243692446924569246692476924869249692506925169252692536925469255692566925769258692596926069261692626926369264692656926669267692686926969270692716927269273692746927569276692776927869279692806928169282692836928469285692866928769288692896929069291692926929369294692956929669297692986929969300693016930269303693046930569306693076930869309693106931169312693136931469315693166931769318693196932069321693226932369324693256932669327693286932969330693316933269333693346933569336693376933869339693406934169342693436934469345693466934769348693496935069351693526935369354693556935669357693586935969360693616936269363693646936569366693676936869369693706937169372693736937469375693766937769378693796938069381693826938369384693856938669387693886938969390693916939269393693946939569396693976939869399694006940169402694036940469405694066940769408694096941069411694126941369414694156941669417694186941969420694216942269423694246942569426694276942869429694306943169432694336943469435694366943769438694396944069441694426944369444694456944669447694486944969450694516945269453694546945569456694576945869459694606946169462694636946469465694666946769468694696947069471694726947369474694756947669477694786947969480694816948269483694846948569486694876948869489694906949169492694936949469495694966949769498694996950069501695026950369504695056950669507695086950969510695116951269513695146951569516695176951869519695206952169522695236952469525695266952769528695296953069531695326953369534695356953669537695386953969540695416954269543695446954569546695476954869549695506955169552695536955469555695566955769558695596956069561695626956369564695656956669567695686956969570695716957269573695746957569576695776957869579695806958169582695836958469585695866958769588695896959069591695926959369594695956959669597695986959969600696016960269603696046960569606696076960869609696106961169612696136961469615696166961769618696196962069621696226962369624696256962669627696286962969630696316963269633696346963569636696376963869639696406964169642696436964469645696466964769648696496965069651696526965369654696556965669657696586965969660696616966269663696646966569666696676966869669696706967169672696736967469675696766967769678696796968069681696826968369684696856968669687696886968969690696916969269693696946969569696696976969869699697006970169702697036970469705697066970769708697096971069711697126971369714697156971669717697186971969720697216972269723697246972569726697276972869729697306973169732697336973469735697366973769738697396974069741697426974369744697456974669747697486974969750697516975269753697546975569756697576975869759697606976169762697636976469765697666976769768697696977069771697726977369774697756977669777697786977969780697816978269783697846978569786697876978869789697906979169792697936979469795697966979769798697996980069801698026980369804698056980669807698086980969810698116981269813698146981569816698176981869819698206982169822698236982469825698266982769828698296983069831698326983369834698356983669837698386983969840698416984269843698446984569846698476984869849698506985169852698536985469855698566985769858698596986069861698626986369864698656986669867698686986969870698716987269873698746987569876698776987869879698806988169882698836988469885698866988769888698896989069891698926989369894698956989669897698986989969900699016990269903699046990569906699076990869909699106991169912699136991469915699166991769918699196992069921699226992369924699256992669927699286992969930699316993269933699346993569936699376993869939699406994169942699436994469945699466994769948699496995069951699526995369954699556995669957699586995969960699616996269963699646996569966699676996869969699706997169972699736997469975699766997769978699796998069981699826998369984699856998669987699886998969990699916999269993699946999569996699976999869999700007000170002700037000470005700067000770008700097001070011700127001370014700157001670017700187001970020700217002270023700247002570026700277002870029700307003170032700337003470035700367003770038700397004070041700427004370044700457004670047700487004970050700517005270053700547005570056700577005870059700607006170062700637006470065700667006770068700697007070071700727007370074700757007670077700787007970080700817008270083700847008570086700877008870089700907009170092700937009470095700967009770098700997010070101701027010370104701057010670107701087010970110701117011270113701147011570116701177011870119701207012170122701237012470125701267012770128701297013070131701327013370134701357013670137701387013970140701417014270143701447014570146701477014870149701507015170152701537015470155701567015770158701597016070161701627016370164701657016670167701687016970170701717017270173701747017570176701777017870179701807018170182701837018470185701867018770188701897019070191701927019370194701957019670197701987019970200702017020270203702047020570206702077020870209702107021170212702137021470215702167021770218702197022070221702227022370224702257022670227702287022970230702317023270233702347023570236702377023870239702407024170242702437024470245702467024770248702497025070251702527025370254702557025670257702587025970260702617026270263702647026570266702677026870269702707027170272702737027470275702767027770278702797028070281702827028370284702857028670287702887028970290702917029270293702947029570296702977029870299703007030170302703037030470305703067030770308703097031070311703127031370314703157031670317703187031970320703217032270323703247032570326703277032870329703307033170332703337033470335703367033770338703397034070341703427034370344703457034670347703487034970350703517035270353703547035570356703577035870359703607036170362703637036470365703667036770368703697037070371703727037370374703757037670377703787037970380703817038270383703847038570386703877038870389703907039170392703937039470395703967039770398703997040070401704027040370404704057040670407704087040970410704117041270413704147041570416704177041870419704207042170422704237042470425704267042770428704297043070431704327043370434704357043670437704387043970440704417044270443704447044570446704477044870449704507045170452704537045470455704567045770458704597046070461704627046370464704657046670467704687046970470704717047270473704747047570476704777047870479704807048170482704837048470485704867048770488704897049070491704927049370494704957049670497704987049970500705017050270503705047050570506705077050870509705107051170512705137051470515705167051770518705197052070521705227052370524705257052670527705287052970530705317053270533705347053570536705377053870539705407054170542705437054470545705467054770548705497055070551705527055370554705557055670557705587055970560705617056270563705647056570566705677056870569705707057170572705737057470575705767057770578705797058070581705827058370584705857058670587705887058970590705917059270593705947059570596705977059870599706007060170602706037060470605706067060770608706097061070611706127061370614706157061670617706187061970620706217062270623706247062570626706277062870629706307063170632706337063470635706367063770638706397064070641706427064370644706457064670647706487064970650706517065270653706547065570656706577065870659706607066170662706637066470665706667066770668706697067070671706727067370674706757067670677706787067970680706817068270683706847068570686706877068870689706907069170692706937069470695706967069770698706997070070701707027070370704707057070670707707087070970710707117071270713707147071570716707177071870719707207072170722707237072470725707267072770728707297073070731707327073370734707357073670737707387073970740707417074270743707447074570746707477074870749707507075170752707537075470755707567075770758707597076070761707627076370764707657076670767707687076970770707717077270773707747077570776707777077870779707807078170782707837078470785707867078770788707897079070791707927079370794707957079670797707987079970800708017080270803708047080570806708077080870809708107081170812708137081470815708167081770818708197082070821708227082370824708257082670827708287082970830708317083270833708347083570836708377083870839708407084170842708437084470845708467084770848708497085070851708527085370854708557085670857708587085970860708617086270863708647086570866708677086870869708707087170872708737087470875708767087770878708797088070881708827088370884708857088670887708887088970890708917089270893708947089570896708977089870899709007090170902709037090470905709067090770908709097091070911709127091370914709157091670917709187091970920709217092270923709247092570926709277092870929709307093170932709337093470935709367093770938709397094070941709427094370944709457094670947709487094970950709517095270953709547095570956709577095870959709607096170962709637096470965709667096770968709697097070971709727097370974709757097670977709787097970980709817098270983709847098570986709877098870989709907099170992709937099470995709967099770998709997100071001710027100371004710057100671007710087100971010710117101271013710147101571016710177101871019710207102171022710237102471025710267102771028710297103071031710327103371034710357103671037710387103971040710417104271043710447104571046710477104871049710507105171052710537105471055710567105771058710597106071061710627106371064710657106671067710687106971070710717107271073710747107571076710777107871079710807108171082710837108471085710867108771088710897109071091710927109371094710957109671097710987109971100711017110271103711047110571106711077110871109711107111171112711137111471115711167111771118711197112071121711227112371124711257112671127711287112971130711317113271133711347113571136711377113871139711407114171142711437114471145711467114771148711497115071151711527115371154711557115671157711587115971160711617116271163711647116571166711677116871169711707117171172711737117471175711767117771178711797118071181711827118371184711857118671187711887118971190711917119271193711947119571196711977119871199712007120171202712037120471205712067120771208712097121071211712127121371214712157121671217712187121971220712217122271223712247122571226712277122871229712307123171232712337123471235712367123771238712397124071241712427124371244712457124671247712487124971250712517125271253712547125571256712577125871259712607126171262712637126471265712667126771268712697127071271712727127371274712757127671277712787127971280712817128271283712847128571286712877128871289712907129171292712937129471295712967129771298712997130071301713027130371304713057130671307713087130971310713117131271313713147131571316713177131871319713207132171322713237132471325713267132771328713297133071331713327133371334713357133671337713387133971340713417134271343713447134571346713477134871349713507135171352713537135471355713567135771358713597136071361713627136371364713657136671367713687136971370713717137271373713747137571376713777137871379713807138171382713837138471385713867138771388713897139071391713927139371394713957139671397713987139971400714017140271403714047140571406714077140871409714107141171412714137141471415714167141771418714197142071421714227142371424714257142671427714287142971430714317143271433714347143571436714377143871439714407144171442714437144471445714467144771448714497145071451714527145371454714557145671457714587145971460714617146271463714647146571466714677146871469714707147171472714737147471475714767147771478714797148071481714827148371484714857148671487714887148971490714917149271493714947149571496714977149871499715007150171502715037150471505715067150771508715097151071511715127151371514715157151671517715187151971520715217152271523715247152571526715277152871529715307153171532715337153471535715367153771538715397154071541715427154371544715457154671547715487154971550715517155271553715547155571556715577155871559715607156171562715637156471565715667156771568715697157071571715727157371574715757157671577715787157971580715817158271583715847158571586715877158871589715907159171592715937159471595715967159771598715997160071601716027160371604716057160671607716087160971610716117161271613716147161571616716177161871619716207162171622716237162471625716267162771628716297163071631716327163371634716357163671637716387163971640716417164271643716447164571646716477164871649716507165171652716537165471655716567165771658716597166071661716627166371664716657166671667716687166971670716717167271673716747167571676716777167871679716807168171682716837168471685716867168771688716897169071691716927169371694716957169671697716987169971700717017170271703717047170571706717077170871709717107171171712717137171471715717167171771718717197172071721717227172371724717257172671727717287172971730717317173271733717347173571736717377173871739717407174171742717437174471745717467174771748717497175071751717527175371754717557175671757717587175971760717617176271763717647176571766717677176871769717707177171772717737177471775717767177771778717797178071781717827178371784717857178671787717887178971790717917179271793717947179571796717977179871799718007180171802718037180471805718067180771808718097181071811718127181371814718157181671817718187181971820718217182271823718247182571826718277182871829718307183171832718337183471835718367183771838718397184071841718427184371844718457184671847718487184971850718517185271853718547185571856718577185871859718607186171862718637186471865718667186771868718697187071871718727187371874718757187671877718787187971880718817188271883718847188571886718877188871889718907189171892718937189471895718967189771898718997190071901719027190371904719057190671907719087190971910719117191271913719147191571916719177191871919719207192171922719237192471925719267192771928719297193071931719327193371934719357193671937719387193971940719417194271943719447194571946719477194871949719507195171952719537195471955719567195771958719597196071961719627196371964719657196671967719687196971970719717197271973719747197571976719777197871979719807198171982719837198471985719867198771988719897199071991719927199371994719957199671997719987199972000720017200272003720047200572006720077200872009720107201172012720137201472015720167201772018720197202072021720227202372024720257202672027720287202972030720317203272033720347203572036720377203872039720407204172042720437204472045720467204772048720497205072051720527205372054720557205672057720587205972060720617206272063720647206572066720677206872069720707207172072720737207472075720767207772078720797208072081720827208372084720857208672087720887208972090720917209272093720947209572096720977209872099721007210172102721037210472105721067210772108721097211072111721127211372114721157211672117721187211972120721217212272123721247212572126721277212872129721307213172132721337213472135721367213772138721397214072141721427214372144721457214672147721487214972150721517215272153721547215572156721577215872159721607216172162721637216472165721667216772168721697217072171721727217372174721757217672177721787217972180721817218272183721847218572186721877218872189721907219172192721937219472195721967219772198721997220072201722027220372204722057220672207722087220972210722117221272213722147221572216722177221872219722207222172222722237222472225722267222772228722297223072231722327223372234722357223672237722387223972240722417224272243722447224572246722477224872249722507225172252722537225472255722567225772258722597226072261722627226372264722657226672267722687226972270722717227272273722747227572276722777227872279722807228172282722837228472285722867228772288722897229072291722927229372294722957229672297722987229972300723017230272303723047230572306723077230872309723107231172312723137231472315723167231772318723197232072321723227232372324723257232672327723287232972330723317233272333723347233572336723377233872339723407234172342723437234472345723467234772348723497235072351723527235372354723557235672357723587235972360723617236272363723647236572366723677236872369723707237172372723737237472375723767237772378723797238072381723827238372384723857238672387723887238972390723917239272393723947239572396723977239872399724007240172402724037240472405724067240772408724097241072411724127241372414724157241672417724187241972420724217242272423724247242572426724277242872429724307243172432724337243472435724367243772438724397244072441724427244372444724457244672447724487244972450724517245272453724547245572456724577245872459724607246172462724637246472465724667246772468724697247072471724727247372474724757247672477724787247972480724817248272483724847248572486724877248872489724907249172492724937249472495724967249772498724997250072501725027250372504725057250672507725087250972510725117251272513725147251572516725177251872519725207252172522725237252472525725267252772528725297253072531725327253372534725357253672537725387253972540725417254272543725447254572546725477254872549725507255172552725537255472555725567255772558725597256072561725627256372564725657256672567725687256972570725717257272573725747257572576725777257872579725807258172582725837258472585725867258772588725897259072591725927259372594725957259672597725987259972600726017260272603726047260572606726077260872609726107261172612726137261472615726167261772618726197262072621726227262372624726257262672627726287262972630726317263272633726347263572636726377263872639726407264172642726437264472645726467264772648726497265072651726527265372654726557265672657726587265972660726617266272663726647266572666726677266872669726707267172672726737267472675726767267772678726797268072681726827268372684726857268672687726887268972690726917269272693726947269572696726977269872699727007270172702727037270472705727067270772708727097271072711727127271372714727157271672717727187271972720727217272272723727247272572726727277272872729727307273172732727337273472735727367273772738727397274072741727427274372744727457274672747727487274972750727517275272753727547275572756727577275872759727607276172762727637276472765727667276772768727697277072771727727277372774727757277672777727787277972780727817278272783727847278572786727877278872789727907279172792727937279472795727967279772798727997280072801728027280372804728057280672807728087280972810728117281272813728147281572816728177281872819728207282172822728237282472825728267282772828728297283072831728327283372834728357283672837728387283972840728417284272843728447284572846728477284872849728507285172852728537285472855728567285772858728597286072861728627286372864728657286672867728687286972870728717287272873728747287572876728777287872879728807288172882728837288472885728867288772888728897289072891728927289372894728957289672897728987289972900729017290272903729047290572906729077290872909729107291172912729137291472915729167291772918729197292072921729227292372924729257292672927729287292972930729317293272933729347293572936729377293872939729407294172942729437294472945729467294772948729497295072951729527295372954729557295672957729587295972960729617296272963729647296572966729677296872969729707297172972729737297472975729767297772978729797298072981729827298372984729857298672987729887298972990729917299272993729947299572996729977299872999730007300173002730037300473005730067300773008730097301073011730127301373014730157301673017730187301973020730217302273023730247302573026730277302873029730307303173032730337303473035730367303773038730397304073041730427304373044730457304673047730487304973050730517305273053730547305573056730577305873059730607306173062730637306473065730667306773068730697307073071730727307373074730757307673077730787307973080730817308273083730847308573086730877308873089730907309173092730937309473095730967309773098730997310073101731027310373104731057310673107731087310973110731117311273113731147311573116731177311873119731207312173122731237312473125731267312773128731297313073131731327313373134731357313673137731387313973140731417314273143731447314573146731477314873149731507315173152731537315473155731567315773158731597316073161731627316373164731657316673167731687316973170731717317273173731747317573176731777317873179731807318173182731837318473185731867318773188731897319073191731927319373194731957319673197731987319973200732017320273203732047320573206732077320873209732107321173212732137321473215732167321773218732197322073221732227322373224732257322673227732287322973230732317323273233732347323573236732377323873239732407324173242732437324473245732467324773248732497325073251732527325373254732557325673257732587325973260732617326273263732647326573266732677326873269732707327173272732737327473275732767327773278732797328073281732827328373284732857328673287732887328973290732917329273293732947329573296732977329873299733007330173302733037330473305733067330773308733097331073311733127331373314733157331673317733187331973320733217332273323733247332573326733277332873329733307333173332733337333473335733367333773338733397334073341733427334373344733457334673347733487334973350733517335273353733547335573356733577335873359733607336173362733637336473365733667336773368733697337073371733727337373374733757337673377733787337973380733817338273383733847338573386733877338873389733907339173392733937339473395733967339773398733997340073401734027340373404734057340673407734087340973410734117341273413734147341573416734177341873419734207342173422734237342473425734267342773428734297343073431734327343373434734357343673437734387343973440734417344273443734447344573446734477344873449734507345173452734537345473455734567345773458734597346073461734627346373464734657346673467734687346973470734717347273473734747347573476734777347873479734807348173482734837348473485734867348773488734897349073491734927349373494734957349673497734987349973500735017350273503735047350573506735077350873509735107351173512735137351473515735167351773518735197352073521735227352373524735257352673527735287352973530735317353273533735347353573536735377353873539735407354173542735437354473545735467354773548735497355073551735527355373554735557355673557735587355973560735617356273563735647356573566735677356873569735707357173572735737357473575735767357773578735797358073581735827358373584735857358673587735887358973590735917359273593735947359573596735977359873599736007360173602736037360473605736067360773608736097361073611736127361373614736157361673617736187361973620736217362273623736247362573626736277362873629736307363173632736337363473635736367363773638736397364073641736427364373644736457364673647736487364973650736517365273653736547365573656736577365873659736607366173662736637366473665736667366773668736697367073671736727367373674736757367673677736787367973680736817368273683736847368573686736877368873689736907369173692736937369473695736967369773698736997370073701737027370373704737057370673707737087370973710737117371273713737147371573716737177371873719737207372173722737237372473725737267372773728737297373073731737327373373734737357373673737737387373973740737417374273743737447374573746737477374873749737507375173752737537375473755737567375773758737597376073761737627376373764737657376673767737687376973770737717377273773737747377573776737777377873779737807378173782737837378473785737867378773788737897379073791737927379373794737957379673797737987379973800738017380273803738047380573806738077380873809738107381173812738137381473815738167381773818738197382073821738227382373824738257382673827738287382973830738317383273833738347383573836738377383873839738407384173842738437384473845738467384773848738497385073851738527385373854738557385673857738587385973860738617386273863738647386573866738677386873869738707387173872738737387473875738767387773878738797388073881738827388373884738857388673887738887388973890738917389273893738947389573896738977389873899739007390173902739037390473905739067390773908739097391073911739127391373914739157391673917739187391973920739217392273923739247392573926739277392873929739307393173932739337393473935739367393773938739397394073941739427394373944739457394673947739487394973950739517395273953739547395573956739577395873959739607396173962739637396473965739667396773968739697397073971739727397373974739757397673977739787397973980739817398273983739847398573986739877398873989739907399173992739937399473995739967399773998739997400074001740027400374004740057400674007740087400974010740117401274013740147401574016740177401874019740207402174022740237402474025740267402774028740297403074031740327403374034740357403674037740387403974040740417404274043740447404574046740477404874049740507405174052740537405474055740567405774058740597406074061740627406374064740657406674067740687406974070740717407274073740747407574076740777407874079740807408174082740837408474085740867408774088740897409074091740927409374094740957409674097740987409974100741017410274103741047410574106741077410874109741107411174112741137411474115741167411774118741197412074121741227412374124741257412674127741287412974130741317413274133741347413574136741377413874139741407414174142741437414474145741467414774148741497415074151741527415374154741557415674157741587415974160741617416274163741647416574166741677416874169741707417174172741737417474175741767417774178741797418074181741827418374184741857418674187741887418974190741917419274193741947419574196741977419874199742007420174202742037420474205742067420774208742097421074211742127421374214742157421674217742187421974220742217422274223742247422574226742277422874229742307423174232742337423474235742367423774238742397424074241742427424374244742457424674247742487424974250742517425274253742547425574256742577425874259742607426174262742637426474265742667426774268742697427074271742727427374274742757427674277742787427974280742817428274283742847428574286742877428874289742907429174292742937429474295742967429774298742997430074301743027430374304743057430674307743087430974310743117431274313743147431574316743177431874319743207432174322743237432474325743267432774328743297433074331743327433374334743357433674337743387433974340743417434274343743447434574346743477434874349743507435174352743537435474355743567435774358743597436074361743627436374364743657436674367743687436974370743717437274373743747437574376743777437874379743807438174382743837438474385743867438774388743897439074391743927439374394743957439674397743987439974400744017440274403744047440574406744077440874409744107441174412744137441474415744167441774418744197442074421744227442374424744257442674427744287442974430744317443274433744347443574436744377443874439744407444174442744437444474445744467444774448744497445074451744527445374454744557445674457744587445974460744617446274463744647446574466744677446874469744707447174472744737447474475744767447774478744797448074481744827448374484744857448674487744887448974490744917449274493744947449574496744977449874499745007450174502745037450474505745067450774508745097451074511745127451374514745157451674517745187451974520745217452274523745247452574526745277452874529745307453174532745337453474535745367453774538745397454074541745427454374544745457454674547745487454974550745517455274553745547455574556745577455874559745607456174562745637456474565745667456774568745697457074571745727457374574745757457674577745787457974580745817458274583745847458574586745877458874589745907459174592745937459474595745967459774598745997460074601746027460374604746057460674607746087460974610746117461274613746147461574616746177461874619746207462174622746237462474625746267462774628746297463074631746327463374634746357463674637746387463974640746417464274643746447464574646746477464874649746507465174652746537465474655746567465774658746597466074661746627466374664746657466674667746687466974670746717467274673746747467574676746777467874679746807468174682746837468474685746867468774688746897469074691746927469374694746957469674697746987469974700747017470274703747047470574706747077470874709747107471174712747137471474715747167471774718747197472074721747227472374724747257472674727747287472974730747317473274733747347473574736747377473874739747407474174742747437474474745747467474774748747497475074751747527475374754747557475674757747587475974760747617476274763747647476574766747677476874769747707477174772747737477474775747767477774778747797478074781747827478374784747857478674787747887478974790747917479274793747947479574796747977479874799748007480174802748037480474805748067480774808748097481074811748127481374814748157481674817748187481974820748217482274823748247482574826748277482874829748307483174832748337483474835748367483774838748397484074841748427484374844748457484674847748487484974850748517485274853748547485574856748577485874859748607486174862748637486474865748667486774868748697487074871748727487374874748757487674877748787487974880748817488274883748847488574886748877488874889748907489174892748937489474895748967489774898748997490074901749027490374904749057490674907749087490974910749117491274913749147491574916749177491874919749207492174922749237492474925749267492774928749297493074931749327493374934749357493674937749387493974940749417494274943749447494574946749477494874949749507495174952749537495474955749567495774958749597496074961749627496374964749657496674967749687496974970749717497274973749747497574976749777497874979749807498174982749837498474985749867498774988749897499074991749927499374994749957499674997749987499975000750017500275003750047500575006750077500875009750107501175012750137501475015750167501775018750197502075021750227502375024750257502675027750287502975030750317503275033750347503575036750377503875039750407504175042750437504475045750467504775048750497505075051750527505375054750557505675057750587505975060750617506275063750647506575066750677506875069750707507175072750737507475075750767507775078750797508075081750827508375084750857508675087750887508975090750917509275093750947509575096750977509875099751007510175102751037510475105751067510775108751097511075111751127511375114751157511675117751187511975120751217512275123751247512575126751277512875129751307513175132751337513475135751367513775138751397514075141751427514375144751457514675147751487514975150751517515275153751547515575156751577515875159751607516175162751637516475165751667516775168751697517075171751727517375174751757517675177751787517975180751817518275183751847518575186751877518875189751907519175192751937519475195751967519775198751997520075201752027520375204752057520675207752087520975210752117521275213752147521575216752177521875219752207522175222752237522475225752267522775228752297523075231752327523375234752357523675237752387523975240752417524275243752447524575246752477524875249752507525175252752537525475255752567525775258752597526075261752627526375264752657526675267752687526975270752717527275273752747527575276752777527875279752807528175282752837528475285752867528775288752897529075291752927529375294752957529675297752987529975300753017530275303753047530575306753077530875309753107531175312753137531475315753167531775318753197532075321753227532375324753257532675327753287532975330753317533275333753347533575336753377533875339753407534175342753437534475345753467534775348753497535075351753527535375354753557535675357753587535975360753617536275363753647536575366753677536875369753707537175372753737537475375753767537775378753797538075381753827538375384753857538675387753887538975390753917539275393753947539575396753977539875399754007540175402754037540475405754067540775408754097541075411754127541375414754157541675417754187541975420754217542275423754247542575426754277542875429754307543175432754337543475435754367543775438754397544075441754427544375444754457544675447754487544975450754517545275453754547545575456754577545875459754607546175462754637546475465754667546775468754697547075471754727547375474754757547675477754787547975480754817548275483754847548575486754877548875489754907549175492754937549475495754967549775498754997550075501755027550375504755057550675507755087550975510755117551275513755147551575516755177551875519755207552175522755237552475525755267552775528755297553075531755327553375534755357553675537755387553975540755417554275543755447554575546755477554875549755507555175552755537555475555755567555775558755597556075561755627556375564755657556675567755687556975570755717557275573755747557575576755777557875579755807558175582755837558475585755867558775588755897559075591755927559375594755957559675597755987559975600756017560275603756047560575606756077560875609756107561175612756137561475615756167561775618756197562075621756227562375624756257562675627756287562975630756317563275633756347563575636756377563875639756407564175642756437564475645756467564775648756497565075651756527565375654756557565675657756587565975660756617566275663756647566575666756677566875669756707567175672756737567475675756767567775678756797568075681756827568375684756857568675687756887568975690756917569275693756947569575696756977569875699757007570175702757037570475705757067570775708757097571075711757127571375714757157571675717757187571975720757217572275723757247572575726757277572875729757307573175732757337573475735757367573775738757397574075741757427574375744757457574675747757487574975750757517575275753757547575575756757577575875759757607576175762757637576475765757667576775768757697577075771757727577375774757757577675777757787577975780757817578275783757847578575786757877578875789757907579175792757937579475795757967579775798757997580075801758027580375804758057580675807758087580975810758117581275813758147581575816758177581875819758207582175822758237582475825758267582775828758297583075831758327583375834758357583675837758387583975840758417584275843758447584575846758477584875849758507585175852758537585475855758567585775858758597586075861758627586375864758657586675867758687586975870758717587275873758747587575876758777587875879758807588175882758837588475885758867588775888758897589075891758927589375894758957589675897758987589975900759017590275903759047590575906759077590875909759107591175912759137591475915759167591775918759197592075921759227592375924759257592675927759287592975930759317593275933759347593575936759377593875939759407594175942759437594475945759467594775948759497595075951759527595375954759557595675957759587595975960759617596275963759647596575966759677596875969759707597175972759737597475975759767597775978759797598075981759827598375984759857598675987759887598975990759917599275993759947599575996759977599875999760007600176002760037600476005760067600776008760097601076011760127601376014760157601676017760187601976020760217602276023760247602576026760277602876029760307603176032760337603476035760367603776038760397604076041760427604376044760457604676047760487604976050760517605276053760547605576056760577605876059760607606176062760637606476065760667606776068760697607076071760727607376074760757607676077760787607976080760817608276083760847608576086760877608876089760907609176092760937609476095760967609776098760997610076101761027610376104761057610676107761087610976110761117611276113761147611576116761177611876119761207612176122761237612476125761267612776128761297613076131761327613376134761357613676137761387613976140761417614276143761447614576146761477614876149761507615176152761537615476155761567615776158761597616076161761627616376164761657616676167761687616976170761717617276173761747617576176761777617876179761807618176182761837618476185761867618776188761897619076191761927619376194761957619676197761987619976200762017620276203762047620576206762077620876209762107621176212762137621476215762167621776218762197622076221762227622376224762257622676227762287622976230762317623276233762347623576236762377623876239762407624176242762437624476245762467624776248762497625076251762527625376254762557625676257762587625976260762617626276263762647626576266762677626876269762707627176272762737627476275762767627776278762797628076281762827628376284762857628676287762887628976290762917629276293762947629576296762977629876299763007630176302763037630476305763067630776308763097631076311763127631376314763157631676317763187631976320763217632276323763247632576326763277632876329763307633176332763337633476335763367633776338763397634076341763427634376344763457634676347763487634976350763517635276353763547635576356763577635876359763607636176362763637636476365763667636776368763697637076371763727637376374763757637676377763787637976380763817638276383763847638576386763877638876389763907639176392763937639476395763967639776398763997640076401764027640376404764057640676407764087640976410764117641276413764147641576416764177641876419764207642176422764237642476425764267642776428764297643076431764327643376434764357643676437764387643976440764417644276443764447644576446764477644876449764507645176452764537645476455764567645776458764597646076461764627646376464764657646676467764687646976470764717647276473764747647576476764777647876479764807648176482764837648476485764867648776488764897649076491764927649376494764957649676497764987649976500765017650276503765047650576506765077650876509765107651176512765137651476515765167651776518765197652076521765227652376524765257652676527765287652976530765317653276533765347653576536765377653876539765407654176542765437654476545765467654776548765497655076551765527655376554765557655676557765587655976560765617656276563765647656576566765677656876569765707657176572765737657476575765767657776578765797658076581765827658376584765857658676587765887658976590765917659276593765947659576596765977659876599766007660176602766037660476605766067660776608766097661076611766127661376614766157661676617766187661976620766217662276623766247662576626766277662876629766307663176632766337663476635766367663776638766397664076641766427664376644766457664676647766487664976650766517665276653766547665576656766577665876659766607666176662766637666476665766667666776668766697667076671766727667376674766757667676677766787667976680766817668276683766847668576686766877668876689766907669176692766937669476695766967669776698766997670076701767027670376704767057670676707767087670976710767117671276713767147671576716767177671876719767207672176722767237672476725767267672776728767297673076731767327673376734767357673676737767387673976740767417674276743767447674576746767477674876749767507675176752767537675476755767567675776758767597676076761767627676376764767657676676767767687676976770767717677276773767747677576776767777677876779767807678176782767837678476785767867678776788767897679076791767927679376794767957679676797767987679976800768017680276803768047680576806768077680876809768107681176812768137681476815768167681776818768197682076821768227682376824768257682676827768287682976830768317683276833768347683576836768377683876839768407684176842768437684476845768467684776848768497685076851768527685376854768557685676857768587685976860768617686276863768647686576866768677686876869768707687176872768737687476875768767687776878768797688076881768827688376884768857688676887768887688976890768917689276893768947689576896768977689876899769007690176902769037690476905769067690776908769097691076911769127691376914769157691676917769187691976920769217692276923769247692576926769277692876929769307693176932769337693476935769367693776938769397694076941769427694376944769457694676947769487694976950769517695276953769547695576956769577695876959769607696176962769637696476965769667696776968769697697076971769727697376974769757697676977769787697976980769817698276983769847698576986769877698876989769907699176992769937699476995769967699776998769997700077001770027700377004770057700677007770087700977010770117701277013770147701577016770177701877019770207702177022770237702477025770267702777028770297703077031770327703377034770357703677037770387703977040770417704277043770447704577046770477704877049770507705177052770537705477055770567705777058770597706077061770627706377064770657706677067770687706977070770717707277073770747707577076770777707877079770807708177082770837708477085770867708777088770897709077091770927709377094770957709677097770987709977100771017710277103771047710577106771077710877109771107711177112771137711477115771167711777118771197712077121771227712377124771257712677127771287712977130771317713277133771347713577136771377713877139771407714177142771437714477145771467714777148771497715077151771527715377154771557715677157771587715977160771617716277163771647716577166771677716877169771707717177172771737717477175771767717777178771797718077181771827718377184771857718677187771887718977190771917719277193771947719577196771977719877199772007720177202772037720477205772067720777208772097721077211772127721377214772157721677217772187721977220772217722277223772247722577226772277722877229772307723177232772337723477235772367723777238772397724077241772427724377244772457724677247772487724977250772517725277253772547725577256772577725877259772607726177262772637726477265772667726777268772697727077271772727727377274772757727677277772787727977280772817728277283772847728577286772877728877289772907729177292772937729477295772967729777298772997730077301773027730377304773057730677307773087730977310773117731277313773147731577316773177731877319773207732177322773237732477325773267732777328773297733077331773327733377334773357733677337773387733977340773417734277343773447734577346773477734877349773507735177352773537735477355773567735777358773597736077361773627736377364773657736677367773687736977370773717737277373773747737577376773777737877379773807738177382773837738477385773867738777388773897739077391773927739377394773957739677397773987739977400774017740277403774047740577406774077740877409774107741177412774137741477415774167741777418774197742077421774227742377424774257742677427774287742977430774317743277433774347743577436774377743877439774407744177442774437744477445774467744777448774497745077451774527745377454774557745677457774587745977460774617746277463774647746577466774677746877469774707747177472774737747477475774767747777478774797748077481774827748377484774857748677487774887748977490774917749277493774947749577496774977749877499775007750177502775037750477505775067750777508775097751077511775127751377514775157751677517775187751977520775217752277523775247752577526775277752877529775307753177532775337753477535775367753777538775397754077541775427754377544775457754677547775487754977550775517755277553775547755577556775577755877559775607756177562775637756477565775667756777568775697757077571775727757377574775757757677577775787757977580775817758277583775847758577586775877758877589775907759177592775937759477595775967759777598775997760077601776027760377604776057760677607776087760977610776117761277613776147761577616776177761877619776207762177622776237762477625776267762777628776297763077631776327763377634776357763677637776387763977640776417764277643776447764577646776477764877649776507765177652776537765477655776567765777658776597766077661776627766377664776657766677667776687766977670776717767277673776747767577676776777767877679776807768177682776837768477685776867768777688776897769077691776927769377694776957769677697776987769977700777017770277703777047770577706777077770877709777107771177712777137771477715777167771777718777197772077721777227772377724777257772677727777287772977730777317773277733777347773577736777377773877739777407774177742777437774477745777467774777748777497775077751777527775377754777557775677757777587775977760777617776277763777647776577766777677776877769777707777177772777737777477775777767777777778777797778077781777827778377784777857778677787777887778977790777917779277793777947779577796777977779877799778007780177802778037780477805778067780777808778097781077811778127781377814778157781677817778187781977820778217782277823778247782577826778277782877829778307783177832778337783477835778367783777838778397784077841778427784377844778457784677847778487784977850778517785277853778547785577856778577785877859778607786177862778637786477865778667786777868778697787077871778727787377874778757787677877778787787977880778817788277883778847788577886778877788877889778907789177892778937789477895778967789777898778997790077901779027790377904779057790677907779087790977910779117791277913779147791577916779177791877919779207792177922779237792477925779267792777928779297793077931779327793377934779357793677937779387793977940779417794277943779447794577946779477794877949779507795177952779537795477955779567795777958779597796077961779627796377964779657796677967779687796977970779717797277973779747797577976779777797877979779807798177982779837798477985779867798777988779897799077991779927799377994779957799677997779987799978000780017800278003780047800578006780077800878009780107801178012780137801478015780167801778018780197802078021780227802378024780257802678027780287802978030780317803278033780347803578036780377803878039780407804178042780437804478045780467804778048780497805078051780527805378054780557805678057780587805978060780617806278063780647806578066780677806878069780707807178072780737807478075780767807778078780797808078081780827808378084780857808678087780887808978090780917809278093780947809578096780977809878099781007810178102781037810478105781067810778108781097811078111781127811378114781157811678117781187811978120781217812278123781247812578126781277812878129781307813178132781337813478135781367813778138781397814078141781427814378144781457814678147781487814978150781517815278153781547815578156781577815878159781607816178162781637816478165781667816778168781697817078171781727817378174781757817678177781787817978180781817818278183781847818578186781877818878189781907819178192781937819478195781967819778198781997820078201782027820378204782057820678207782087820978210782117821278213782147821578216782177821878219782207822178222782237822478225782267822778228782297823078231782327823378234782357823678237782387823978240782417824278243782447824578246782477824878249782507825178252782537825478255782567825778258782597826078261782627826378264782657826678267782687826978270782717827278273782747827578276782777827878279782807828178282782837828478285782867828778288782897829078291782927829378294782957829678297782987829978300783017830278303783047830578306783077830878309783107831178312783137831478315783167831778318783197832078321783227832378324783257832678327783287832978330783317833278333783347833578336783377833878339783407834178342783437834478345783467834778348783497835078351783527835378354783557835678357783587835978360783617836278363783647836578366783677836878369783707837178372783737837478375783767837778378783797838078381783827838378384783857838678387783887838978390783917839278393783947839578396783977839878399784007840178402784037840478405784067840778408784097841078411784127841378414784157841678417784187841978420784217842278423784247842578426784277842878429784307843178432784337843478435784367843778438784397844078441784427844378444784457844678447784487844978450784517845278453784547845578456784577845878459784607846178462784637846478465784667846778468784697847078471784727847378474784757847678477784787847978480784817848278483784847848578486784877848878489784907849178492784937849478495784967849778498784997850078501785027850378504785057850678507785087850978510785117851278513785147851578516785177851878519785207852178522785237852478525785267852778528785297853078531785327853378534785357853678537785387853978540785417854278543785447854578546785477854878549785507855178552785537855478555785567855778558785597856078561785627856378564785657856678567785687856978570785717857278573785747857578576785777857878579785807858178582785837858478585785867858778588785897859078591785927859378594785957859678597785987859978600786017860278603786047860578606786077860878609786107861178612786137861478615786167861778618786197862078621786227862378624786257862678627786287862978630786317863278633786347863578636786377863878639786407864178642786437864478645786467864778648786497865078651786527865378654786557865678657786587865978660786617866278663786647866578666786677866878669786707867178672786737867478675786767867778678786797868078681786827868378684786857868678687786887868978690786917869278693786947869578696786977869878699787007870178702787037870478705787067870778708787097871078711787127871378714787157871678717787187871978720787217872278723787247872578726787277872878729787307873178732787337873478735787367873778738787397874078741787427874378744787457874678747787487874978750787517875278753787547875578756787577875878759787607876178762787637876478765787667876778768787697877078771787727877378774787757877678777787787877978780787817878278783787847878578786787877878878789787907879178792787937879478795787967879778798787997880078801788027880378804788057880678807788087880978810788117881278813788147881578816788177881878819788207882178822788237882478825788267882778828788297883078831788327883378834788357883678837788387883978840788417884278843788447884578846788477884878849788507885178852788537885478855788567885778858788597886078861788627886378864788657886678867788687886978870788717887278873788747887578876788777887878879788807888178882788837888478885788867888778888788897889078891788927889378894788957889678897788987889978900789017890278903789047890578906789077890878909789107891178912789137891478915789167891778918789197892078921789227892378924789257892678927789287892978930789317893278933789347893578936789377893878939789407894178942789437894478945789467894778948789497895078951789527895378954789557895678957789587895978960789617896278963789647896578966789677896878969789707897178972789737897478975789767897778978789797898078981789827898378984789857898678987789887898978990789917899278993789947899578996789977899878999790007900179002790037900479005790067900779008790097901079011790127901379014790157901679017790187901979020790217902279023790247902579026790277902879029790307903179032790337903479035790367903779038790397904079041790427904379044790457904679047790487904979050790517905279053790547905579056790577905879059790607906179062790637906479065790667906779068790697907079071790727907379074790757907679077790787907979080790817908279083790847908579086790877908879089790907909179092790937909479095790967909779098790997910079101791027910379104791057910679107791087910979110791117911279113791147911579116791177911879119791207912179122791237912479125791267912779128791297913079131791327913379134791357913679137791387913979140791417914279143791447914579146791477914879149791507915179152791537915479155791567915779158791597916079161791627916379164791657916679167791687916979170791717917279173791747917579176791777917879179791807918179182791837918479185791867918779188791897919079191791927919379194791957919679197791987919979200792017920279203792047920579206792077920879209792107921179212792137921479215792167921779218792197922079221792227922379224792257922679227792287922979230792317923279233792347923579236792377923879239792407924179242792437924479245792467924779248792497925079251792527925379254792557925679257792587925979260792617926279263792647926579266792677926879269792707927179272792737927479275792767927779278792797928079281792827928379284792857928679287792887928979290792917929279293792947929579296792977929879299793007930179302793037930479305793067930779308793097931079311793127931379314793157931679317793187931979320793217932279323793247932579326793277932879329793307933179332793337933479335793367933779338793397934079341793427934379344793457934679347793487934979350793517935279353793547935579356793577935879359793607936179362793637936479365793667936779368793697937079371793727937379374793757937679377793787937979380793817938279383793847938579386793877938879389793907939179392793937939479395793967939779398793997940079401794027940379404794057940679407794087940979410794117941279413794147941579416794177941879419794207942179422794237942479425794267942779428794297943079431794327943379434794357943679437794387943979440794417944279443794447944579446794477944879449794507945179452794537945479455794567945779458794597946079461794627946379464794657946679467794687946979470794717947279473794747947579476794777947879479794807948179482794837948479485794867948779488794897949079491794927949379494794957949679497794987949979500795017950279503795047950579506795077950879509795107951179512795137951479515795167951779518795197952079521795227952379524795257952679527795287952979530795317953279533795347953579536795377953879539795407954179542795437954479545795467954779548795497955079551795527955379554795557955679557795587955979560795617956279563795647956579566795677956879569795707957179572795737957479575795767957779578795797958079581795827958379584795857958679587795887958979590795917959279593795947959579596795977959879599796007960179602796037960479605796067960779608796097961079611796127961379614796157961679617796187961979620796217962279623796247962579626796277962879629796307963179632796337963479635796367963779638796397964079641796427964379644796457964679647796487964979650796517965279653796547965579656796577965879659796607966179662796637966479665796667966779668796697967079671796727967379674796757967679677796787967979680796817968279683796847968579686796877968879689796907969179692796937969479695796967969779698796997970079701797027970379704797057970679707797087970979710797117971279713797147971579716797177971879719797207972179722797237972479725797267972779728797297973079731797327973379734797357973679737797387973979740797417974279743797447974579746797477974879749797507975179752797537975479755797567975779758797597976079761797627976379764797657976679767797687976979770797717977279773797747977579776797777977879779797807978179782797837978479785797867978779788797897979079791797927979379794797957979679797797987979979800798017980279803798047980579806798077980879809798107981179812798137981479815798167981779818798197982079821798227982379824798257982679827798287982979830798317983279833798347983579836798377983879839798407984179842798437984479845798467984779848798497985079851798527985379854798557985679857798587985979860798617986279863798647986579866798677986879869798707987179872798737987479875798767987779878798797988079881798827988379884798857988679887798887988979890798917989279893798947989579896798977989879899799007990179902799037990479905799067990779908799097991079911799127991379914799157991679917799187991979920799217992279923799247992579926799277992879929799307993179932799337993479935799367993779938799397994079941799427994379944799457994679947799487994979950799517995279953799547995579956799577995879959799607996179962799637996479965799667996779968799697997079971799727997379974799757997679977799787997979980799817998279983799847998579986799877998879989799907999179992799937999479995799967999779998799998000080001800028000380004800058000680007800088000980010800118001280013800148001580016800178001880019800208002180022800238002480025800268002780028800298003080031800328003380034800358003680037800388003980040800418004280043800448004580046800478004880049800508005180052800538005480055800568005780058800598006080061800628006380064800658006680067800688006980070800718007280073800748007580076800778007880079800808008180082800838008480085800868008780088800898009080091800928009380094800958009680097800988009980100801018010280103801048010580106801078010880109801108011180112801138011480115801168011780118801198012080121801228012380124801258012680127801288012980130801318013280133801348013580136801378013880139801408014180142801438014480145801468014780148801498015080151801528015380154801558015680157801588015980160801618016280163801648016580166801678016880169801708017180172801738017480175801768017780178801798018080181801828018380184801858018680187801888018980190801918019280193801948019580196801978019880199802008020180202802038020480205802068020780208802098021080211802128021380214802158021680217802188021980220802218022280223802248022580226802278022880229802308023180232802338023480235802368023780238802398024080241802428024380244802458024680247802488024980250802518025280253802548025580256802578025880259802608026180262802638026480265802668026780268802698027080271802728027380274802758027680277802788027980280802818028280283802848028580286802878028880289802908029180292802938029480295802968029780298802998030080301803028030380304803058030680307803088030980310803118031280313803148031580316803178031880319803208032180322803238032480325803268032780328803298033080331803328033380334803358033680337803388033980340803418034280343803448034580346803478034880349803508035180352803538035480355803568035780358803598036080361803628036380364803658036680367803688036980370803718037280373803748037580376803778037880379803808038180382803838038480385803868038780388803898039080391803928039380394803958039680397803988039980400804018040280403804048040580406804078040880409804108041180412804138041480415804168041780418804198042080421804228042380424804258042680427804288042980430804318043280433804348043580436804378043880439804408044180442804438044480445804468044780448804498045080451804528045380454804558045680457804588045980460804618046280463804648046580466804678046880469804708047180472804738047480475804768047780478804798048080481804828048380484804858048680487804888048980490804918049280493804948049580496804978049880499805008050180502805038050480505805068050780508805098051080511805128051380514805158051680517805188051980520805218052280523805248052580526805278052880529805308053180532805338053480535805368053780538805398054080541805428054380544805458054680547805488054980550805518055280553805548055580556805578055880559805608056180562805638056480565805668056780568805698057080571805728057380574805758057680577805788057980580805818058280583805848058580586805878058880589805908059180592805938059480595805968059780598805998060080601806028060380604806058060680607806088060980610806118061280613806148061580616806178061880619806208062180622806238062480625806268062780628806298063080631806328063380634806358063680637806388063980640806418064280643806448064580646806478064880649806508065180652806538065480655806568065780658806598066080661806628066380664806658066680667806688066980670806718067280673806748067580676806778067880679806808068180682806838068480685806868068780688806898069080691806928069380694806958069680697806988069980700807018070280703807048070580706807078070880709807108071180712807138071480715807168071780718807198072080721807228072380724807258072680727807288072980730807318073280733807348073580736807378073880739807408074180742807438074480745807468074780748807498075080751807528075380754807558075680757807588075980760807618076280763807648076580766807678076880769807708077180772807738077480775807768077780778807798078080781807828078380784807858078680787807888078980790807918079280793807948079580796807978079880799808008080180802808038080480805808068080780808808098081080811808128081380814808158081680817808188081980820808218082280823808248082580826808278082880829808308083180832808338083480835808368083780838808398084080841808428084380844808458084680847808488084980850808518085280853808548085580856808578085880859808608086180862808638086480865808668086780868808698087080871808728087380874808758087680877808788087980880808818088280883808848088580886808878088880889808908089180892808938089480895808968089780898808998090080901809028090380904809058090680907809088090980910809118091280913809148091580916809178091880919809208092180922809238092480925809268092780928809298093080931809328093380934809358093680937809388093980940809418094280943809448094580946809478094880949809508095180952809538095480955809568095780958809598096080961809628096380964809658096680967809688096980970809718097280973809748097580976809778097880979809808098180982809838098480985809868098780988809898099080991809928099380994809958099680997809988099981000810018100281003810048100581006810078100881009810108101181012810138101481015810168101781018810198102081021810228102381024810258102681027810288102981030810318103281033810348103581036810378103881039810408104181042810438104481045810468104781048810498105081051810528105381054810558105681057810588105981060810618106281063810648106581066810678106881069810708107181072810738107481075810768107781078810798108081081810828108381084810858108681087810888108981090810918109281093810948109581096810978109881099811008110181102811038110481105811068110781108811098111081111811128111381114811158111681117811188111981120811218112281123811248112581126811278112881129811308113181132811338113481135811368113781138811398114081141811428114381144811458114681147811488114981150811518115281153811548115581156811578115881159811608116181162811638116481165811668116781168811698117081171811728117381174811758117681177811788117981180811818118281183811848118581186811878118881189811908119181192811938119481195811968119781198811998120081201812028120381204812058120681207812088120981210812118121281213812148121581216812178121881219812208122181222812238122481225812268122781228812298123081231812328123381234812358123681237812388123981240812418124281243812448124581246812478124881249812508125181252812538125481255812568125781258812598126081261812628126381264812658126681267812688126981270812718127281273812748127581276812778127881279812808128181282812838128481285812868128781288812898129081291812928129381294812958129681297812988129981300813018130281303813048130581306813078130881309813108131181312813138131481315813168131781318813198132081321813228132381324813258132681327813288132981330813318133281333813348133581336813378133881339813408134181342813438134481345813468134781348813498135081351813528135381354813558135681357813588135981360813618136281363813648136581366813678136881369813708137181372813738137481375813768137781378813798138081381813828138381384813858138681387813888138981390813918139281393813948139581396813978139881399814008140181402814038140481405814068140781408814098141081411814128141381414814158141681417814188141981420814218142281423814248142581426814278142881429814308143181432814338143481435814368143781438814398144081441814428144381444814458144681447814488144981450814518145281453814548145581456814578145881459814608146181462814638146481465814668146781468814698147081471814728147381474814758147681477814788147981480814818148281483814848148581486814878148881489814908149181492814938149481495814968149781498814998150081501815028150381504815058150681507815088150981510815118151281513815148151581516815178151881519815208152181522815238152481525815268152781528815298153081531815328153381534815358153681537815388153981540815418154281543815448154581546815478154881549815508155181552815538155481555815568155781558815598156081561815628156381564815658156681567815688156981570815718157281573815748157581576815778157881579815808158181582815838158481585815868158781588815898159081591815928159381594815958159681597815988159981600816018160281603816048160581606816078160881609816108161181612816138161481615816168161781618816198162081621816228162381624816258162681627816288162981630816318163281633816348163581636816378163881639816408164181642816438164481645816468164781648816498165081651816528165381654816558165681657816588165981660816618166281663816648166581666816678166881669816708167181672816738167481675816768167781678816798168081681816828168381684816858168681687816888168981690816918169281693816948169581696816978169881699817008170181702817038170481705817068170781708817098171081711817128171381714817158171681717817188171981720817218172281723817248172581726817278172881729817308173181732817338173481735817368173781738817398174081741817428174381744817458174681747817488174981750817518175281753817548175581756817578175881759817608176181762817638176481765817668176781768817698177081771817728177381774817758177681777817788177981780817818178281783817848178581786817878178881789817908179181792817938179481795817968179781798817998180081801818028180381804818058180681807818088180981810818118181281813818148181581816818178181881819818208182181822818238182481825818268182781828818298183081831818328183381834818358183681837818388183981840818418184281843818448184581846818478184881849818508185181852818538185481855818568185781858818598186081861818628186381864818658186681867818688186981870818718187281873818748187581876818778187881879818808188181882818838188481885818868188781888818898189081891818928189381894818958189681897818988189981900819018190281903819048190581906819078190881909819108191181912819138191481915819168191781918819198192081921819228192381924819258192681927819288192981930819318193281933819348193581936819378193881939819408194181942819438194481945819468194781948819498195081951819528195381954819558195681957819588195981960819618196281963819648196581966819678196881969819708197181972819738197481975819768197781978819798198081981819828198381984819858198681987819888198981990819918199281993819948199581996819978199881999820008200182002820038200482005820068200782008820098201082011820128201382014820158201682017820188201982020820218202282023820248202582026820278202882029820308203182032820338203482035820368203782038820398204082041820428204382044820458204682047820488204982050820518205282053820548205582056820578205882059820608206182062820638206482065820668206782068820698207082071820728207382074820758207682077820788207982080820818208282083820848208582086820878208882089820908209182092820938209482095820968209782098820998210082101821028210382104821058210682107821088210982110821118211282113821148211582116821178211882119821208212182122821238212482125821268212782128821298213082131821328213382134821358213682137821388213982140821418214282143821448214582146821478214882149821508215182152821538215482155821568215782158821598216082161821628216382164821658216682167821688216982170821718217282173821748217582176821778217882179821808218182182821838218482185821868218782188821898219082191821928219382194821958219682197821988219982200822018220282203822048220582206822078220882209822108221182212822138221482215822168221782218822198222082221822228222382224822258222682227822288222982230822318223282233822348223582236822378223882239822408224182242822438224482245822468224782248822498225082251822528225382254822558225682257822588225982260822618226282263822648226582266822678226882269822708227182272822738227482275822768227782278822798228082281822828228382284822858228682287822888228982290822918229282293822948229582296822978229882299823008230182302823038230482305823068230782308823098231082311823128231382314823158231682317823188231982320823218232282323823248232582326823278232882329823308233182332823338233482335823368233782338823398234082341823428234382344823458234682347823488234982350823518235282353823548235582356823578235882359823608236182362823638236482365823668236782368823698237082371823728237382374823758237682377823788237982380823818238282383823848238582386823878238882389823908239182392823938239482395823968239782398823998240082401824028240382404824058240682407824088240982410824118241282413824148241582416824178241882419824208242182422824238242482425824268242782428824298243082431824328243382434824358243682437824388243982440824418244282443824448244582446824478244882449824508245182452824538245482455824568245782458824598246082461824628246382464824658246682467824688246982470824718247282473824748247582476824778247882479824808248182482824838248482485824868248782488824898249082491824928249382494824958249682497824988249982500825018250282503825048250582506825078250882509825108251182512825138251482515825168251782518825198252082521825228252382524825258252682527825288252982530825318253282533825348253582536825378253882539825408254182542825438254482545825468254782548825498255082551825528255382554825558255682557825588255982560825618256282563825648256582566825678256882569825708257182572825738257482575825768257782578825798258082581825828258382584825858258682587825888258982590825918259282593825948259582596825978259882599826008260182602826038260482605826068260782608826098261082611826128261382614826158261682617826188261982620826218262282623826248262582626826278262882629826308263182632826338263482635826368263782638826398264082641826428264382644826458264682647826488264982650826518265282653826548265582656826578265882659826608266182662826638266482665826668266782668826698267082671826728267382674826758267682677826788267982680826818268282683826848268582686826878268882689826908269182692826938269482695826968269782698826998270082701827028270382704827058270682707827088270982710827118271282713827148271582716827178271882719827208272182722827238272482725827268272782728827298273082731827328273382734827358273682737827388273982740827418274282743827448274582746827478274882749827508275182752827538275482755827568275782758827598276082761827628276382764827658276682767827688276982770827718277282773827748277582776827778277882779827808278182782827838278482785827868278782788827898279082791827928279382794827958279682797827988279982800828018280282803828048280582806828078280882809828108281182812828138281482815828168281782818828198282082821828228282382824828258282682827828288282982830828318283282833828348283582836828378283882839828408284182842828438284482845828468284782848828498285082851828528285382854828558285682857828588285982860828618286282863828648286582866828678286882869828708287182872828738287482875828768287782878828798288082881828828288382884828858288682887828888288982890828918289282893828948289582896828978289882899829008290182902829038290482905829068290782908829098291082911829128291382914829158291682917829188291982920829218292282923829248292582926829278292882929829308293182932829338293482935829368293782938829398294082941829428294382944829458294682947829488294982950829518295282953829548295582956829578295882959829608296182962829638296482965829668296782968829698297082971829728297382974829758297682977829788297982980829818298282983829848298582986829878298882989829908299182992829938299482995829968299782998829998300083001830028300383004830058300683007830088300983010830118301283013830148301583016830178301883019830208302183022830238302483025830268302783028830298303083031830328303383034830358303683037830388303983040830418304283043830448304583046830478304883049830508305183052830538305483055830568305783058830598306083061830628306383064830658306683067830688306983070830718307283073830748307583076830778307883079830808308183082830838308483085830868308783088830898309083091830928309383094830958309683097830988309983100831018310283103831048310583106831078310883109831108311183112831138311483115831168311783118831198312083121831228312383124831258312683127831288312983130831318313283133831348313583136831378313883139831408314183142831438314483145831468314783148831498315083151831528315383154831558315683157831588315983160831618316283163831648316583166831678316883169831708317183172831738317483175831768317783178831798318083181831828318383184831858318683187831888318983190831918319283193831948319583196831978319883199832008320183202832038320483205832068320783208832098321083211832128321383214832158321683217832188321983220832218322283223832248322583226832278322883229832308323183232832338323483235832368323783238832398324083241832428324383244832458324683247832488324983250832518325283253832548325583256832578325883259832608326183262832638326483265832668326783268832698327083271832728327383274832758327683277832788327983280832818328283283832848328583286832878328883289832908329183292832938329483295832968329783298832998330083301833028330383304833058330683307833088330983310833118331283313833148331583316833178331883319833208332183322833238332483325833268332783328833298333083331833328333383334833358333683337833388333983340833418334283343833448334583346833478334883349833508335183352833538335483355833568335783358833598336083361833628336383364833658336683367833688336983370833718337283373833748337583376833778337883379833808338183382833838338483385833868338783388833898339083391833928339383394833958339683397833988339983400834018340283403834048340583406834078340883409834108341183412834138341483415834168341783418834198342083421834228342383424834258342683427834288342983430834318343283433834348343583436834378343883439834408344183442834438344483445834468344783448834498345083451834528345383454834558345683457834588345983460834618346283463834648346583466834678346883469834708347183472834738347483475834768347783478834798348083481834828348383484834858348683487834888348983490834918349283493834948349583496834978349883499835008350183502835038350483505835068350783508835098351083511835128351383514835158351683517835188351983520835218352283523835248352583526835278352883529835308353183532835338353483535835368353783538835398354083541835428354383544835458354683547835488354983550835518355283553835548355583556835578355883559835608356183562835638356483565835668356783568835698357083571835728357383574835758357683577835788357983580835818358283583835848358583586835878358883589835908359183592835938359483595835968359783598835998360083601 |
- (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";
- String.prototype.startsWith = String.prototype.startsWith || function (str) {
- var reg = new RegExp("^" + str);
- return reg.test(this);
- }
- String.prototype.endsWith = String.prototype.endsWith || function (str) {
- var reg = new RegExp(str + "$");
- return reg.test(this);
- }
- 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": 336, "dayjs/plugin/customParseFormat": 337, "dayjs/plugin/utc": 338, "fast-csv": 369, "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.created = new Date();
- this.modified = this.created;
- this.properties = {};
- this.calcProperties = {};
- this._worksheets = [];
- 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";
- /* eslint-disable import/no-extraneous-dependencies,node/no-unpublished-require */
- require('core-js/modules/es.promise');
- require('core-js/modules/es.object.assign');
- require('core-js/modules/es.object.keys');
- require('core-js/modules/es.object.values');
- require('core-js/modules/es.symbol');
- require('core-js/modules/es.symbol.async-iterator'); // required by core-js/modules/es.promise Promise.all
- require('core-js/modules/es.array.iterator'); // required by node_modules/saxes/saxes.js SaxesParser.captureTo
- require('core-js/modules/es.array.includes'); // required by lib/doc/workbook.js Workbook.model
- require('core-js/modules/es.array.find-index'); // required by lib/doc/workbook.js Workbook.addWorksheet and Workbook.getWorksheet
- require('core-js/modules/es.array.find'); // required by node_modules/saxes/saxes.js SaxesParser.getCode10
- require('core-js/modules/es.string.from-code-point'); // required by lib/xlsx/xform/sheet/data-validations-xform.js DataValidationsXform.parseClose
- require('core-js/modules/es.string.includes'); // required by lib/utils/utils.js utils.validInt and lib/csv/csv.js CSV.read
- require('core-js/modules/es.number.is-nan');
- require('regenerator-runtime/runtime');
- 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, "core-js/modules/es.array.find": 316, "core-js/modules/es.array.find-index": 315, "core-js/modules/es.array.includes": 317, "core-js/modules/es.array.iterator": 318, "core-js/modules/es.number.is-nan": 319, "core-js/modules/es.object.assign": 320, "core-js/modules/es.object.keys": 321, "core-js/modules/es.object.values": 322, "core-js/modules/es.promise": 323, "core-js/modules/es.string.from-code-point": 324, "core-js/modules/es.string.includes": 325, "core-js/modules/es.symbol": 327, "core-js/modules/es.symbol.async-iterator": 326, "regenerator-runtime/runtime": 492 }], 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": 335 }], 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": 491, "saxes": 496 }], 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": 467, "buffer": 216, "readable-stream": 491 }], 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": 521 }], 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": 467, "events": 367, "jszip": 399 }], 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": 526 }], 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.alignment) {
- this.map.alignment.render(xmlStream, model.alignment);
- }
- if (model.border) {
- this.map.border.render(xmlStream, model.border);
- }
- if (model.fill) {
- this.map.fill.render(xmlStream, model.fill);
- }
- if (model.font) {
- this.map.font.render(xmlStream, model.font);
- }
- if (model.numFmt) {
- this.map.numFmt.render(xmlStream, model.numFmt);
- }
- 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": 467, "buffer": 216, "fs": 215, "jszip": 399, "readable-stream": 491 }], 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": 506 }], 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": 426, "lodash.isboolean": 428, "lodash.isnil": 431 }], 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": 429, "lodash.isfunction": 430 }], 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": 506, "util": 525 }], 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": 506, "string_decoder": 520, "timers": 521 }], 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": 426, "lodash.isnil": 431 }], 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": 506 }], 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": 427, "lodash.isfunction": 430, "lodash.isundefined": 432, "lodash.uniq": 433 }], 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": 430 }], 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": 387 }], 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": 387, "safer-buffer": 495 }], 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": 437 }], 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": 387 }], 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": 387 }], 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": 387, "safer-buffer": 495 }], 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": 387, "safer-buffer": 495 }], 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": 387 }], 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": 494 }], 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": 387, "safe-buffer": 494 }], 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": 368, "inherits": 387, "safe-buffer": 494 }], 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": 368, "inherits": 387, "safe-buffer": 494 }], 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": 494 }], 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": 494 }], 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": 494 }], 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": 494 }], 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": 494 }], 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": 387, "safe-buffer": 494 }], 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": 368 }], 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": 339, "inherits": 387, "safe-buffer": 494 }], 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": 475 }], 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": 331, "inherits": 387, "readable-stream": 491, "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": 333, "elliptic": 350, "parse-asn1": 459, "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": 350, "parse-asn1": 459, "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": 385 }], 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": 387, "safe-buffer": 494, "stream": 506, "string_decoder": 520 }], 219: [function (require, module, exports) {
- module.exports = function (it) {
- if (typeof it != 'function') {
- throw TypeError(String(it) + ' is not a function');
- } return it;
- };
- }, {}], 220: [function (require, module, exports) {
- var isObject = require('../internals/is-object');
- module.exports = function (it) {
- if (!isObject(it) && it !== null) {
- throw TypeError("Can't set " + String(it) + ' as a prototype');
- } return it;
- };
- }, { "../internals/is-object": 263 }], 221: [function (require, module, exports) {
- var wellKnownSymbol = require('../internals/well-known-symbol');
- var create = require('../internals/object-create');
- var definePropertyModule = require('../internals/object-define-property');
- var UNSCOPABLES = wellKnownSymbol('unscopables');
- var ArrayPrototype = Array.prototype;
- // Array.prototype[@@unscopables]
- // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables
- if (ArrayPrototype[UNSCOPABLES] == undefined) {
- definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {
- configurable: true,
- value: create(null)
- });
- }
- // add a key to Array.prototype[@@unscopables]
- module.exports = function (key) {
- ArrayPrototype[UNSCOPABLES][key] = true;
- };
- }, { "../internals/object-create": 276, "../internals/object-define-property": 278, "../internals/well-known-symbol": 314 }], 222: [function (require, module, exports) {
- module.exports = function (it, Constructor, name) {
- if (!(it instanceof Constructor)) {
- throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');
- } return it;
- };
- }, {}], 223: [function (require, module, exports) {
- var isObject = require('../internals/is-object');
- module.exports = function (it) {
- if (!isObject(it)) {
- throw TypeError(String(it) + ' is not an object');
- } return it;
- };
- }, { "../internals/is-object": 263 }], 224: [function (require, module, exports) {
- var toIndexedObject = require('../internals/to-indexed-object');
- var toLength = require('../internals/to-length');
- var toAbsoluteIndex = require('../internals/to-absolute-index');
- // `Array.prototype.{ indexOf, includes }` methods implementation
- var createMethod = function (IS_INCLUDES) {
- return function ($this, el, fromIndex) {
- var O = toIndexedObject($this);
- var length = toLength(O.length);
- var index = toAbsoluteIndex(fromIndex, length);
- var value;
- // Array#includes uses SameValueZero equality algorithm
- // eslint-disable-next-line no-self-compare
- if (IS_INCLUDES && el != el) while (length > index) {
- value = O[index++];
- // eslint-disable-next-line no-self-compare
- if (value != value) return true;
- // Array#indexOf ignores holes, Array#includes - not
- } else for (; length > index; index++) {
- if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;
- } return !IS_INCLUDES && -1;
- };
- };
- module.exports = {
- // `Array.prototype.includes` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.includes
- includes: createMethod(true),
- // `Array.prototype.indexOf` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.indexof
- indexOf: createMethod(false)
- };
- }, { "../internals/to-absolute-index": 304, "../internals/to-indexed-object": 305, "../internals/to-length": 307 }], 225: [function (require, module, exports) {
- var bind = require('../internals/function-bind-context');
- var IndexedObject = require('../internals/indexed-object');
- var toObject = require('../internals/to-object');
- var toLength = require('../internals/to-length');
- var arraySpeciesCreate = require('../internals/array-species-create');
- var push = [].push;
- // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation
- var createMethod = function (TYPE) {
- var IS_MAP = TYPE == 1;
- var IS_FILTER = TYPE == 2;
- var IS_SOME = TYPE == 3;
- var IS_EVERY = TYPE == 4;
- var IS_FIND_INDEX = TYPE == 6;
- var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
- return function ($this, callbackfn, that, specificCreate) {
- var O = toObject($this);
- var self = IndexedObject(O);
- var boundFunction = bind(callbackfn, that, 3);
- var length = toLength(self.length);
- var index = 0;
- var create = specificCreate || arraySpeciesCreate;
- var target = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;
- var value, result;
- for (; length > index; index++) if (NO_HOLES || index in self) {
- value = self[index];
- result = boundFunction(value, index, O);
- if (TYPE) {
- if (IS_MAP) target[index] = result; // map
- else if (result) switch (TYPE) {
- case 3: return true; // some
- case 5: return value; // find
- case 6: return index; // findIndex
- case 2: push.call(target, value); // filter
- } else if (IS_EVERY) return false; // every
- }
- }
- return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;
- };
- };
- module.exports = {
- // `Array.prototype.forEach` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.foreach
- forEach: createMethod(0),
- // `Array.prototype.map` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.map
- map: createMethod(1),
- // `Array.prototype.filter` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.filter
- filter: createMethod(2),
- // `Array.prototype.some` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.some
- some: createMethod(3),
- // `Array.prototype.every` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.every
- every: createMethod(4),
- // `Array.prototype.find` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.find
- find: createMethod(5),
- // `Array.prototype.findIndex` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex
- findIndex: createMethod(6)
- };
- }, { "../internals/array-species-create": 227, "../internals/function-bind-context": 248, "../internals/indexed-object": 257, "../internals/to-length": 307, "../internals/to-object": 308 }], 226: [function (require, module, exports) {
- var DESCRIPTORS = require('../internals/descriptors');
- var fails = require('../internals/fails');
- var has = require('../internals/has');
- var defineProperty = Object.defineProperty;
- var cache = {};
- var thrower = function (it) { throw it; };
- module.exports = function (METHOD_NAME, options) {
- if (has(cache, METHOD_NAME)) return cache[METHOD_NAME];
- if (!options) options = {};
- var method = [][METHOD_NAME];
- var ACCESSORS = has(options, 'ACCESSORS') ? options.ACCESSORS : false;
- var argument0 = has(options, 0) ? options[0] : thrower;
- var argument1 = has(options, 1) ? options[1] : undefined;
- return cache[METHOD_NAME] = !!method && !fails(function () {
- if (ACCESSORS && !DESCRIPTORS) return true;
- var O = { length: -1 };
- if (ACCESSORS) defineProperty(O, 1, { enumerable: true, get: thrower });
- else O[1] = 1;
- method.call(O, argument0, argument1);
- });
- };
- }, { "../internals/descriptors": 240, "../internals/fails": 247, "../internals/has": 252 }], 227: [function (require, module, exports) {
- var isObject = require('../internals/is-object');
- var isArray = require('../internals/is-array');
- var wellKnownSymbol = require('../internals/well-known-symbol');
- var SPECIES = wellKnownSymbol('species');
- // `ArraySpeciesCreate` abstract operation
- // https://tc39.github.io/ecma262/#sec-arrayspeciescreate
- module.exports = function (originalArray, length) {
- var C;
- if (isArray(originalArray)) {
- C = originalArray.constructor;
- // cross-realm fallback
- if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;
- else if (isObject(C)) {
- C = C[SPECIES];
- if (C === null) C = undefined;
- }
- } return new (C === undefined ? Array : C)(length === 0 ? 0 : length);
- };
- }, { "../internals/is-array": 261, "../internals/is-object": 263, "../internals/well-known-symbol": 314 }], 228: [function (require, module, exports) {
- var anObject = require('../internals/an-object');
- // call something on iterator step with safe closing on error
- module.exports = function (iterator, fn, value, ENTRIES) {
- try {
- return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);
- // 7.4.6 IteratorClose(iterator, completion)
- } catch (error) {
- var returnMethod = iterator['return'];
- if (returnMethod !== undefined) anObject(returnMethod.call(iterator));
- throw error;
- }
- };
- }, { "../internals/an-object": 223 }], 229: [function (require, module, exports) {
- var wellKnownSymbol = require('../internals/well-known-symbol');
- var ITERATOR = wellKnownSymbol('iterator');
- var SAFE_CLOSING = false;
- try {
- var called = 0;
- var iteratorWithReturn = {
- next: function () {
- return { done: !!called++ };
- },
- 'return': function () {
- SAFE_CLOSING = true;
- }
- };
- iteratorWithReturn[ITERATOR] = function () {
- return this;
- };
- // eslint-disable-next-line no-throw-literal
- Array.from(iteratorWithReturn, function () { throw 2; });
- } catch (error) { /* empty */ }
- module.exports = function (exec, SKIP_CLOSING) {
- if (!SKIP_CLOSING && !SAFE_CLOSING) return false;
- var ITERATION_SUPPORT = false;
- try {
- var object = {};
- object[ITERATOR] = function () {
- return {
- next: function () {
- return { done: ITERATION_SUPPORT = true };
- }
- };
- };
- exec(object);
- } catch (error) { /* empty */ }
- return ITERATION_SUPPORT;
- };
- }, { "../internals/well-known-symbol": 314 }], 230: [function (require, module, exports) {
- var toString = {}.toString;
- module.exports = function (it) {
- return toString.call(it).slice(8, -1);
- };
- }, {}], 231: [function (require, module, exports) {
- var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');
- var classofRaw = require('../internals/classof-raw');
- var wellKnownSymbol = require('../internals/well-known-symbol');
- var TO_STRING_TAG = wellKnownSymbol('toStringTag');
- // ES3 wrong here
- var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';
- // fallback for IE11 Script Access Denied error
- var tryGet = function (it, key) {
- try {
- return it[key];
- } catch (error) { /* empty */ }
- };
- // getting tag from ES6+ `Object.prototype.toString`
- module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {
- var O, tag, result;
- return it === undefined ? 'Undefined' : it === null ? 'Null'
- // @@toStringTag case
- : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag
- // builtinTag case
- : CORRECT_ARGUMENTS ? classofRaw(O)
- // ES3 arguments fallback
- : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;
- };
- }, { "../internals/classof-raw": 230, "../internals/to-string-tag-support": 310, "../internals/well-known-symbol": 314 }], 232: [function (require, module, exports) {
- var has = require('../internals/has');
- var ownKeys = require('../internals/own-keys');
- var getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');
- var definePropertyModule = require('../internals/object-define-property');
- module.exports = function (target, source) {
- var keys = ownKeys(source);
- var defineProperty = definePropertyModule.f;
- var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
- for (var i = 0; i < keys.length; i++) {
- var key = keys[i];
- if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));
- }
- };
- }, { "../internals/has": 252, "../internals/object-define-property": 278, "../internals/object-get-own-property-descriptor": 279, "../internals/own-keys": 289 }], 233: [function (require, module, exports) {
- var wellKnownSymbol = require('../internals/well-known-symbol');
- var MATCH = wellKnownSymbol('match');
- module.exports = function (METHOD_NAME) {
- var regexp = /./;
- try {
- '/./'[METHOD_NAME](regexp);
- } catch (e) {
- try {
- regexp[MATCH] = false;
- return '/./'[METHOD_NAME](regexp);
- } catch (f) { /* empty */ }
- } return false;
- };
- }, { "../internals/well-known-symbol": 314 }], 234: [function (require, module, exports) {
- var fails = require('../internals/fails');
- module.exports = !fails(function () {
- function F() { /* empty */ }
- F.prototype.constructor = null;
- return Object.getPrototypeOf(new F()) !== F.prototype;
- });
- }, { "../internals/fails": 247 }], 235: [function (require, module, exports) {
- 'use strict';
- var IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;
- var create = require('../internals/object-create');
- var createPropertyDescriptor = require('../internals/create-property-descriptor');
- var setToStringTag = require('../internals/set-to-string-tag');
- var Iterators = require('../internals/iterators');
- var returnThis = function () { return this; };
- module.exports = function (IteratorConstructor, NAME, next) {
- var TO_STRING_TAG = NAME + ' Iterator';
- IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });
- setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);
- Iterators[TO_STRING_TAG] = returnThis;
- return IteratorConstructor;
- };
- }, { "../internals/create-property-descriptor": 237, "../internals/iterators": 268, "../internals/iterators-core": 267, "../internals/object-create": 276, "../internals/set-to-string-tag": 298 }], 236: [function (require, module, exports) {
- var DESCRIPTORS = require('../internals/descriptors');
- var definePropertyModule = require('../internals/object-define-property');
- var createPropertyDescriptor = require('../internals/create-property-descriptor');
- module.exports = DESCRIPTORS ? function (object, key, value) {
- return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));
- } : function (object, key, value) {
- object[key] = value;
- return object;
- };
- }, { "../internals/create-property-descriptor": 237, "../internals/descriptors": 240, "../internals/object-define-property": 278 }], 237: [function (require, module, exports) {
- module.exports = function (bitmap, value) {
- return {
- enumerable: !(bitmap & 1),
- configurable: !(bitmap & 2),
- writable: !(bitmap & 4),
- value: value
- };
- };
- }, {}], 238: [function (require, module, exports) {
- 'use strict';
- var $ = require('../internals/export');
- var createIteratorConstructor = require('../internals/create-iterator-constructor');
- var getPrototypeOf = require('../internals/object-get-prototype-of');
- var setPrototypeOf = require('../internals/object-set-prototype-of');
- var setToStringTag = require('../internals/set-to-string-tag');
- var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
- var redefine = require('../internals/redefine');
- var wellKnownSymbol = require('../internals/well-known-symbol');
- var IS_PURE = require('../internals/is-pure');
- var Iterators = require('../internals/iterators');
- var IteratorsCore = require('../internals/iterators-core');
- var IteratorPrototype = IteratorsCore.IteratorPrototype;
- var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;
- var ITERATOR = wellKnownSymbol('iterator');
- var KEYS = 'keys';
- var VALUES = 'values';
- var ENTRIES = 'entries';
- var returnThis = function () { return this; };
- module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {
- createIteratorConstructor(IteratorConstructor, NAME, next);
- var getIterationMethod = function (KIND) {
- if (KIND === DEFAULT && defaultIterator) return defaultIterator;
- if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];
- switch (KIND) {
- case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };
- case VALUES: return function values() { return new IteratorConstructor(this, KIND); };
- case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };
- } return function () { return new IteratorConstructor(this); };
- };
- var TO_STRING_TAG = NAME + ' Iterator';
- var INCORRECT_VALUES_NAME = false;
- var IterablePrototype = Iterable.prototype;
- var nativeIterator = IterablePrototype[ITERATOR]
- || IterablePrototype['@@iterator']
- || DEFAULT && IterablePrototype[DEFAULT];
- var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);
- var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;
- var CurrentIteratorPrototype, methods, KEY;
- // fix native
- if (anyNativeIterator) {
- CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));
- if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {
- if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {
- if (setPrototypeOf) {
- setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);
- } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {
- createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);
- }
- }
- // Set @@toStringTag to native iterators
- setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);
- if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;
- }
- }
- // fix Array#{values, @@iterator}.name in V8 / FF
- if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {
- INCORRECT_VALUES_NAME = true;
- defaultIterator = function values() { return nativeIterator.call(this); };
- }
- // define iterator
- if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {
- createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);
- }
- Iterators[NAME] = defaultIterator;
- // export additional methods
- if (DEFAULT) {
- methods = {
- values: getIterationMethod(VALUES),
- keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),
- entries: getIterationMethod(ENTRIES)
- };
- if (FORCED) for (KEY in methods) {
- if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {
- redefine(IterablePrototype, KEY, methods[KEY]);
- }
- } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);
- }
- return methods;
- };
- }, { "../internals/create-iterator-constructor": 235, "../internals/create-non-enumerable-property": 236, "../internals/export": 246, "../internals/is-pure": 264, "../internals/iterators": 268, "../internals/iterators-core": 267, "../internals/object-get-prototype-of": 283, "../internals/object-set-prototype-of": 287, "../internals/redefine": 294, "../internals/set-to-string-tag": 298, "../internals/well-known-symbol": 314 }], 239: [function (require, module, exports) {
- var path = require('../internals/path');
- var has = require('../internals/has');
- var wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');
- var defineProperty = require('../internals/object-define-property').f;
- module.exports = function (NAME) {
- var Symbol = path.Symbol || (path.Symbol = {});
- if (!has(Symbol, NAME)) defineProperty(Symbol, NAME, {
- value: wrappedWellKnownSymbolModule.f(NAME)
- });
- };
- }, { "../internals/has": 252, "../internals/object-define-property": 278, "../internals/path": 290, "../internals/well-known-symbol-wrapped": 313 }], 240: [function (require, module, exports) {
- var fails = require('../internals/fails');
- // Thank's IE8 for his funny defineProperty
- module.exports = !fails(function () {
- return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;
- });
- }, { "../internals/fails": 247 }], 241: [function (require, module, exports) {
- var global = require('../internals/global');
- var isObject = require('../internals/is-object');
- var document = global.document;
- // typeof document.createElement is 'object' in old IE
- var EXISTS = isObject(document) && isObject(document.createElement);
- module.exports = function (it) {
- return EXISTS ? document.createElement(it) : {};
- };
- }, { "../internals/global": 251, "../internals/is-object": 263 }], 242: [function (require, module, exports) {
- var userAgent = require('../internals/engine-user-agent');
- module.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent);
- }, { "../internals/engine-user-agent": 243 }], 243: [function (require, module, exports) {
- var getBuiltIn = require('../internals/get-built-in');
- module.exports = getBuiltIn('navigator', 'userAgent') || '';
- }, { "../internals/get-built-in": 249 }], 244: [function (require, module, exports) {
- var global = require('../internals/global');
- var userAgent = require('../internals/engine-user-agent');
- var process = global.process;
- var versions = process && process.versions;
- var v8 = versions && versions.v8;
- var match, version;
- if (v8) {
- match = v8.split('.');
- version = match[0] + match[1];
- } else if (userAgent) {
- match = userAgent.match(/Edge\/(\d+)/);
- if (!match || match[1] >= 74) {
- match = userAgent.match(/Chrome\/(\d+)/);
- if (match) version = match[1];
- }
- }
- module.exports = version && +version;
- }, { "../internals/engine-user-agent": 243, "../internals/global": 251 }], 245: [function (require, module, exports) {
- // IE8- don't enum bug keys
- module.exports = [
- 'constructor',
- 'hasOwnProperty',
- 'isPrototypeOf',
- 'propertyIsEnumerable',
- 'toLocaleString',
- 'toString',
- 'valueOf'
- ];
- }, {}], 246: [function (require, module, exports) {
- var global = require('../internals/global');
- var getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;
- var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
- var redefine = require('../internals/redefine');
- var setGlobal = require('../internals/set-global');
- var copyConstructorProperties = require('../internals/copy-constructor-properties');
- var isForced = require('../internals/is-forced');
- /*
- options.target - name of the target object
- options.global - target is the global object
- options.stat - export as static methods of target
- options.proto - export as prototype methods of target
- options.real - real prototype method for the `pure` version
- options.forced - export even if the native feature is available
- options.bind - bind methods to the target, required for the `pure` version
- options.wrap - wrap constructors to preventing global pollution, required for the `pure` version
- options.unsafe - use the simple assignment of property instead of delete + defineProperty
- options.sham - add a flag to not completely full polyfills
- options.enumerable - export as enumerable property
- options.noTargetGet - prevent calling a getter on target
- */
- module.exports = function (options, source) {
- var TARGET = options.target;
- var GLOBAL = options.global;
- var STATIC = options.stat;
- var FORCED, target, key, targetProperty, sourceProperty, descriptor;
- if (GLOBAL) {
- target = global;
- } else if (STATIC) {
- target = global[TARGET] || setGlobal(TARGET, {});
- } else {
- target = (global[TARGET] || {}).prototype;
- }
- if (target) for (key in source) {
- sourceProperty = source[key];
- if (options.noTargetGet) {
- descriptor = getOwnPropertyDescriptor(target, key);
- targetProperty = descriptor && descriptor.value;
- } else targetProperty = target[key];
- FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);
- // contained in target
- if (!FORCED && targetProperty !== undefined) {
- if (typeof sourceProperty === typeof targetProperty) continue;
- copyConstructorProperties(sourceProperty, targetProperty);
- }
- // add a flag to not completely full polyfills
- if (options.sham || (targetProperty && targetProperty.sham)) {
- createNonEnumerableProperty(sourceProperty, 'sham', true);
- }
- // extend global
- redefine(target, key, sourceProperty, options);
- }
- };
- }, { "../internals/copy-constructor-properties": 232, "../internals/create-non-enumerable-property": 236, "../internals/global": 251, "../internals/is-forced": 262, "../internals/object-get-own-property-descriptor": 279, "../internals/redefine": 294, "../internals/set-global": 296 }], 247: [function (require, module, exports) {
- module.exports = function (exec) {
- try {
- return !!exec();
- } catch (error) {
- return true;
- }
- };
- }, {}], 248: [function (require, module, exports) {
- var aFunction = require('../internals/a-function');
- // optional / simple context binding
- module.exports = function (fn, that, length) {
- aFunction(fn);
- if (that === undefined) return fn;
- switch (length) {
- case 0: return function () {
- return fn.call(that);
- };
- case 1: return function (a) {
- return fn.call(that, a);
- };
- case 2: return function (a, b) {
- return fn.call(that, a, b);
- };
- case 3: return function (a, b, c) {
- return fn.call(that, a, b, c);
- };
- }
- return function (/* ...args */) {
- return fn.apply(that, arguments);
- };
- };
- }, { "../internals/a-function": 219 }], 249: [function (require, module, exports) {
- var path = require('../internals/path');
- var global = require('../internals/global');
- var aFunction = function (variable) {
- return typeof variable == 'function' ? variable : undefined;
- };
- module.exports = function (namespace, method) {
- return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])
- : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];
- };
- }, { "../internals/global": 251, "../internals/path": 290 }], 250: [function (require, module, exports) {
- var classof = require('../internals/classof');
- var Iterators = require('../internals/iterators');
- var wellKnownSymbol = require('../internals/well-known-symbol');
- var ITERATOR = wellKnownSymbol('iterator');
- module.exports = function (it) {
- if (it != undefined) return it[ITERATOR]
- || it['@@iterator']
- || Iterators[classof(it)];
- };
- }, { "../internals/classof": 231, "../internals/iterators": 268, "../internals/well-known-symbol": 314 }], 251: [function (require, module, exports) {
- (function (global) {
- var check = function (it) {
- return it && it.Math == Math && it;
- };
- // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
- module.exports =
- // eslint-disable-next-line no-undef
- check(typeof globalThis == 'object' && globalThis) ||
- check(typeof window == 'object' && window) ||
- check(typeof self == 'object' && self) ||
- check(typeof global == 'object' && global) ||
- // eslint-disable-next-line no-new-func
- Function('return this')();
- }).call(this, typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- }, {}], 252: [function (require, module, exports) {
- var hasOwnProperty = {}.hasOwnProperty;
- module.exports = function (it, key) {
- return hasOwnProperty.call(it, key);
- };
- }, {}], 253: [function (require, module, exports) {
- module.exports = {};
- }, {}], 254: [function (require, module, exports) {
- var global = require('../internals/global');
- module.exports = function (a, b) {
- var console = global.console;
- if (console && console.error) {
- arguments.length === 1 ? console.error(a) : console.error(a, b);
- }
- };
- }, { "../internals/global": 251 }], 255: [function (require, module, exports) {
- var getBuiltIn = require('../internals/get-built-in');
- module.exports = getBuiltIn('document', 'documentElement');
- }, { "../internals/get-built-in": 249 }], 256: [function (require, module, exports) {
- var DESCRIPTORS = require('../internals/descriptors');
- var fails = require('../internals/fails');
- var createElement = require('../internals/document-create-element');
- // Thank's IE8 for his funny defineProperty
- module.exports = !DESCRIPTORS && !fails(function () {
- return Object.defineProperty(createElement('div'), 'a', {
- get: function () { return 7; }
- }).a != 7;
- });
- }, { "../internals/descriptors": 240, "../internals/document-create-element": 241, "../internals/fails": 247 }], 257: [function (require, module, exports) {
- var fails = require('../internals/fails');
- var classof = require('../internals/classof-raw');
- var split = ''.split;
- // fallback for non-array-like ES3 and non-enumerable old V8 strings
- module.exports = fails(function () {
- // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346
- // eslint-disable-next-line no-prototype-builtins
- return !Object('z').propertyIsEnumerable(0);
- }) ? function (it) {
- return classof(it) == 'String' ? split.call(it, '') : Object(it);
- } : Object;
- }, { "../internals/classof-raw": 230, "../internals/fails": 247 }], 258: [function (require, module, exports) {
- var store = require('../internals/shared-store');
- var functionToString = Function.toString;
- // this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper
- if (typeof store.inspectSource != 'function') {
- store.inspectSource = function (it) {
- return functionToString.call(it);
- };
- }
- module.exports = store.inspectSource;
- }, { "../internals/shared-store": 300 }], 259: [function (require, module, exports) {
- var NATIVE_WEAK_MAP = require('../internals/native-weak-map');
- var global = require('../internals/global');
- var isObject = require('../internals/is-object');
- var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
- var objectHas = require('../internals/has');
- var sharedKey = require('../internals/shared-key');
- var hiddenKeys = require('../internals/hidden-keys');
- var WeakMap = global.WeakMap;
- var set, get, has;
- var enforce = function (it) {
- return has(it) ? get(it) : set(it, {});
- };
- var getterFor = function (TYPE) {
- return function (it) {
- var state;
- if (!isObject(it) || (state = get(it)).type !== TYPE) {
- throw TypeError('Incompatible receiver, ' + TYPE + ' required');
- } return state;
- };
- };
- if (NATIVE_WEAK_MAP) {
- var store = new WeakMap();
- var wmget = store.get;
- var wmhas = store.has;
- var wmset = store.set;
- set = function (it, metadata) {
- wmset.call(store, it, metadata);
- return metadata;
- };
- get = function (it) {
- return wmget.call(store, it) || {};
- };
- has = function (it) {
- return wmhas.call(store, it);
- };
- } else {
- var STATE = sharedKey('state');
- hiddenKeys[STATE] = true;
- set = function (it, metadata) {
- createNonEnumerableProperty(it, STATE, metadata);
- return metadata;
- };
- get = function (it) {
- return objectHas(it, STATE) ? it[STATE] : {};
- };
- has = function (it) {
- return objectHas(it, STATE);
- };
- }
- module.exports = {
- set: set,
- get: get,
- has: has,
- enforce: enforce,
- getterFor: getterFor
- };
- }, { "../internals/create-non-enumerable-property": 236, "../internals/global": 251, "../internals/has": 252, "../internals/hidden-keys": 253, "../internals/is-object": 263, "../internals/native-weak-map": 272, "../internals/shared-key": 299 }], 260: [function (require, module, exports) {
- var wellKnownSymbol = require('../internals/well-known-symbol');
- var Iterators = require('../internals/iterators');
- var ITERATOR = wellKnownSymbol('iterator');
- var ArrayPrototype = Array.prototype;
- // check on default Array iterator
- module.exports = function (it) {
- return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);
- };
- }, { "../internals/iterators": 268, "../internals/well-known-symbol": 314 }], 261: [function (require, module, exports) {
- var classof = require('../internals/classof-raw');
- // `IsArray` abstract operation
- // https://tc39.github.io/ecma262/#sec-isarray
- module.exports = Array.isArray || function isArray(arg) {
- return classof(arg) == 'Array';
- };
- }, { "../internals/classof-raw": 230 }], 262: [function (require, module, exports) {
- var fails = require('../internals/fails');
- var replacement = /#|\.prototype\./;
- var isForced = function (feature, detection) {
- var value = data[normalize(feature)];
- return value == POLYFILL ? true
- : value == NATIVE ? false
- : typeof detection == 'function' ? fails(detection)
- : !!detection;
- };
- var normalize = isForced.normalize = function (string) {
- return String(string).replace(replacement, '.').toLowerCase();
- };
- var data = isForced.data = {};
- var NATIVE = isForced.NATIVE = 'N';
- var POLYFILL = isForced.POLYFILL = 'P';
- module.exports = isForced;
- }, { "../internals/fails": 247 }], 263: [function (require, module, exports) {
- module.exports = function (it) {
- return typeof it === 'object' ? it !== null : typeof it === 'function';
- };
- }, {}], 264: [function (require, module, exports) {
- module.exports = false;
- }, {}], 265: [function (require, module, exports) {
- var isObject = require('../internals/is-object');
- var classof = require('../internals/classof-raw');
- var wellKnownSymbol = require('../internals/well-known-symbol');
- var MATCH = wellKnownSymbol('match');
- // `IsRegExp` abstract operation
- // https://tc39.github.io/ecma262/#sec-isregexp
- module.exports = function (it) {
- var isRegExp;
- return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');
- };
- }, { "../internals/classof-raw": 230, "../internals/is-object": 263, "../internals/well-known-symbol": 314 }], 266: [function (require, module, exports) {
- var anObject = require('../internals/an-object');
- var isArrayIteratorMethod = require('../internals/is-array-iterator-method');
- var toLength = require('../internals/to-length');
- var bind = require('../internals/function-bind-context');
- var getIteratorMethod = require('../internals/get-iterator-method');
- var callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');
- var Result = function (stopped, result) {
- this.stopped = stopped;
- this.result = result;
- };
- var iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITERATOR) {
- var boundFunction = bind(fn, that, AS_ENTRIES ? 2 : 1);
- var iterator, iterFn, index, length, result, next, step;
- if (IS_ITERATOR) {
- iterator = iterable;
- } else {
- iterFn = getIteratorMethod(iterable);
- if (typeof iterFn != 'function') throw TypeError('Target is not iterable');
- // optimisation for array iterators
- if (isArrayIteratorMethod(iterFn)) {
- for (index = 0, length = toLength(iterable.length); length > index; index++) {
- result = AS_ENTRIES
- ? boundFunction(anObject(step = iterable[index])[0], step[1])
- : boundFunction(iterable[index]);
- if (result && result instanceof Result) return result;
- } return new Result(false);
- }
- iterator = iterFn.call(iterable);
- }
- next = iterator.next;
- while (!(step = next.call(iterator)).done) {
- result = callWithSafeIterationClosing(iterator, boundFunction, step.value, AS_ENTRIES);
- if (typeof result == 'object' && result && result instanceof Result) return result;
- } return new Result(false);
- };
- iterate.stop = function (result) {
- return new Result(true, result);
- };
- }, { "../internals/an-object": 223, "../internals/call-with-safe-iteration-closing": 228, "../internals/function-bind-context": 248, "../internals/get-iterator-method": 250, "../internals/is-array-iterator-method": 260, "../internals/to-length": 307 }], 267: [function (require, module, exports) {
- 'use strict';
- var getPrototypeOf = require('../internals/object-get-prototype-of');
- var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
- var has = require('../internals/has');
- var wellKnownSymbol = require('../internals/well-known-symbol');
- var IS_PURE = require('../internals/is-pure');
- var ITERATOR = wellKnownSymbol('iterator');
- var BUGGY_SAFARI_ITERATORS = false;
- var returnThis = function () { return this; };
- // `%IteratorPrototype%` object
- // https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object
- var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;
- if ([].keys) {
- arrayIterator = [].keys();
- // Safari 8 has buggy iterators w/o `next`
- if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;
- else {
- PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));
- if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;
- }
- }
- if (IteratorPrototype == undefined) IteratorPrototype = {};
- // 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
- if (!IS_PURE && !has(IteratorPrototype, ITERATOR)) {
- createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);
- }
- module.exports = {
- IteratorPrototype: IteratorPrototype,
- BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS
- };
- }, { "../internals/create-non-enumerable-property": 236, "../internals/has": 252, "../internals/is-pure": 264, "../internals/object-get-prototype-of": 283, "../internals/well-known-symbol": 314 }], 268: [function (require, module, exports) {
- arguments[4][253][0].apply(exports, arguments)
- }, { "dup": 253 }], 269: [function (require, module, exports) {
- var global = require('../internals/global');
- var getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;
- var classof = require('../internals/classof-raw');
- var macrotask = require('../internals/task').set;
- var IS_IOS = require('../internals/engine-is-ios');
- var MutationObserver = global.MutationObserver || global.WebKitMutationObserver;
- var process = global.process;
- var Promise = global.Promise;
- var IS_NODE = classof(process) == 'process';
- // Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`
- var queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');
- var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;
- var flush, head, last, notify, toggle, node, promise, then;
- // modern engines have queueMicrotask method
- if (!queueMicrotask) {
- flush = function () {
- var parent, fn;
- if (IS_NODE && (parent = process.domain)) parent.exit();
- while (head) {
- fn = head.fn;
- head = head.next;
- try {
- fn();
- } catch (error) {
- if (head) notify();
- else last = undefined;
- throw error;
- }
- } last = undefined;
- if (parent) parent.enter();
- };
- // Node.js
- if (IS_NODE) {
- notify = function () {
- process.nextTick(flush);
- };
- // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339
- } else if (MutationObserver && !IS_IOS) {
- toggle = true;
- node = document.createTextNode('');
- new MutationObserver(flush).observe(node, { characterData: true });
- notify = function () {
- node.data = toggle = !toggle;
- };
- // environments with maybe non-completely correct, but existent Promise
- } else if (Promise && Promise.resolve) {
- // Promise.resolve without an argument throws an error in LG WebOS 2
- promise = Promise.resolve(undefined);
- then = promise.then;
- notify = function () {
- then.call(promise, flush);
- };
- // for other environments - macrotask based on:
- // - setImmediate
- // - MessageChannel
- // - window.postMessag
- // - onreadystatechange
- // - setTimeout
- } else {
- notify = function () {
- // strange IE + webpack dev server bug - use .call(global)
- macrotask.call(global, flush);
- };
- }
- }
- module.exports = queueMicrotask || function (fn) {
- var task = { fn: fn, next: undefined };
- if (last) last.next = task;
- if (!head) {
- head = task;
- notify();
- } last = task;
- };
- }, { "../internals/classof-raw": 230, "../internals/engine-is-ios": 242, "../internals/global": 251, "../internals/object-get-own-property-descriptor": 279, "../internals/task": 303 }], 270: [function (require, module, exports) {
- var global = require('../internals/global');
- module.exports = global.Promise;
- }, { "../internals/global": 251 }], 271: [function (require, module, exports) {
- var fails = require('../internals/fails');
- module.exports = !!Object.getOwnPropertySymbols && !fails(function () {
- // Chrome 38 Symbol has incorrect toString conversion
- // eslint-disable-next-line no-undef
- return !String(Symbol());
- });
- }, { "../internals/fails": 247 }], 272: [function (require, module, exports) {
- var global = require('../internals/global');
- var inspectSource = require('../internals/inspect-source');
- var WeakMap = global.WeakMap;
- module.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));
- }, { "../internals/global": 251, "../internals/inspect-source": 258 }], 273: [function (require, module, exports) {
- 'use strict';
- var aFunction = require('../internals/a-function');
- var PromiseCapability = function (C) {
- var resolve, reject;
- this.promise = new C(function ($$resolve, $$reject) {
- if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');
- resolve = $$resolve;
- reject = $$reject;
- });
- this.resolve = aFunction(resolve);
- this.reject = aFunction(reject);
- };
- // 25.4.1.5 NewPromiseCapability(C)
- module.exports.f = function (C) {
- return new PromiseCapability(C);
- };
- }, { "../internals/a-function": 219 }], 274: [function (require, module, exports) {
- var isRegExp = require('../internals/is-regexp');
- module.exports = function (it) {
- if (isRegExp(it)) {
- throw TypeError("The method doesn't accept regular expressions");
- } return it;
- };
- }, { "../internals/is-regexp": 265 }], 275: [function (require, module, exports) {
- 'use strict';
- var DESCRIPTORS = require('../internals/descriptors');
- var fails = require('../internals/fails');
- var objectKeys = require('../internals/object-keys');
- var getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');
- var propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');
- var toObject = require('../internals/to-object');
- var IndexedObject = require('../internals/indexed-object');
- var nativeAssign = Object.assign;
- var defineProperty = Object.defineProperty;
- // `Object.assign` method
- // https://tc39.github.io/ecma262/#sec-object.assign
- module.exports = !nativeAssign || fails(function () {
- // should have correct order of operations (Edge bug)
- if (DESCRIPTORS && nativeAssign({ b: 1 }, nativeAssign(defineProperty({}, 'a', {
- enumerable: true,
- get: function () {
- defineProperty(this, 'b', {
- value: 3,
- enumerable: false
- });
- }
- }), { b: 2 })).b !== 1) return true;
- // should work with symbols and should have deterministic property order (V8 bug)
- var A = {};
- var B = {};
- // eslint-disable-next-line no-undef
- var symbol = Symbol();
- var alphabet = 'abcdefghijklmnopqrst';
- A[symbol] = 7;
- alphabet.split('').forEach(function (chr) { B[chr] = chr; });
- return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet;
- }) ? function assign(target, source) { // eslint-disable-line no-unused-vars
- var T = toObject(target);
- var argumentsLength = arguments.length;
- var index = 1;
- var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
- var propertyIsEnumerable = propertyIsEnumerableModule.f;
- while (argumentsLength > index) {
- var S = IndexedObject(arguments[index++]);
- var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);
- var length = keys.length;
- var j = 0;
- var key;
- while (length > j) {
- key = keys[j++];
- if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key];
- }
- } return T;
- } : nativeAssign;
- }, { "../internals/descriptors": 240, "../internals/fails": 247, "../internals/indexed-object": 257, "../internals/object-get-own-property-symbols": 282, "../internals/object-keys": 285, "../internals/object-property-is-enumerable": 286, "../internals/to-object": 308 }], 276: [function (require, module, exports) {
- var anObject = require('../internals/an-object');
- var defineProperties = require('../internals/object-define-properties');
- var enumBugKeys = require('../internals/enum-bug-keys');
- var hiddenKeys = require('../internals/hidden-keys');
- var html = require('../internals/html');
- var documentCreateElement = require('../internals/document-create-element');
- var sharedKey = require('../internals/shared-key');
- var GT = '>';
- var LT = '<';
- var PROTOTYPE = 'prototype';
- var SCRIPT = 'script';
- var IE_PROTO = sharedKey('IE_PROTO');
- var EmptyConstructor = function () { /* empty */ };
- var scriptTag = function (content) {
- return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;
- };
- // Create object with fake `null` prototype: use ActiveX Object with cleared prototype
- var NullProtoObjectViaActiveX = function (activeXDocument) {
- activeXDocument.write(scriptTag(''));
- activeXDocument.close();
- var temp = activeXDocument.parentWindow.Object;
- activeXDocument = null; // avoid memory leak
- return temp;
- };
- // Create object with fake `null` prototype: use iframe Object with cleared prototype
- var NullProtoObjectViaIFrame = function () {
- // Thrash, waste and sodomy: IE GC bug
- var iframe = documentCreateElement('iframe');
- var JS = 'java' + SCRIPT + ':';
- var iframeDocument;
- iframe.style.display = 'none';
- html.appendChild(iframe);
- // https://github.com/zloirock/core-js/issues/475
- iframe.src = String(JS);
- iframeDocument = iframe.contentWindow.document;
- iframeDocument.open();
- iframeDocument.write(scriptTag('document.F=Object'));
- iframeDocument.close();
- return iframeDocument.F;
- };
- // Check for document.domain and active x support
- // No need to use active x approach when document.domain is not set
- // see https://github.com/es-shims/es5-shim/issues/150
- // variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346
- // avoid IE GC bug
- var activeXDocument;
- var NullProtoObject = function () {
- try {
- /* global ActiveXObject */
- activeXDocument = document.domain && new ActiveXObject('htmlfile');
- } catch (error) { /* ignore */ }
- NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();
- var length = enumBugKeys.length;
- while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];
- return NullProtoObject();
- };
- hiddenKeys[IE_PROTO] = true;
- // `Object.create` method
- // https://tc39.github.io/ecma262/#sec-object.create
- module.exports = Object.create || function create(O, Properties) {
- var result;
- if (O !== null) {
- EmptyConstructor[PROTOTYPE] = anObject(O);
- result = new EmptyConstructor();
- EmptyConstructor[PROTOTYPE] = null;
- // add "__proto__" for Object.getPrototypeOf polyfill
- result[IE_PROTO] = O;
- } else result = NullProtoObject();
- return Properties === undefined ? result : defineProperties(result, Properties);
- };
- }, { "../internals/an-object": 223, "../internals/document-create-element": 241, "../internals/enum-bug-keys": 245, "../internals/hidden-keys": 253, "../internals/html": 255, "../internals/object-define-properties": 277, "../internals/shared-key": 299 }], 277: [function (require, module, exports) {
- var DESCRIPTORS = require('../internals/descriptors');
- var definePropertyModule = require('../internals/object-define-property');
- var anObject = require('../internals/an-object');
- var objectKeys = require('../internals/object-keys');
- // `Object.defineProperties` method
- // https://tc39.github.io/ecma262/#sec-object.defineproperties
- module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {
- anObject(O);
- var keys = objectKeys(Properties);
- var length = keys.length;
- var index = 0;
- var key;
- while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);
- return O;
- };
- }, { "../internals/an-object": 223, "../internals/descriptors": 240, "../internals/object-define-property": 278, "../internals/object-keys": 285 }], 278: [function (require, module, exports) {
- var DESCRIPTORS = require('../internals/descriptors');
- var IE8_DOM_DEFINE = require('../internals/ie8-dom-define');
- var anObject = require('../internals/an-object');
- var toPrimitive = require('../internals/to-primitive');
- var nativeDefineProperty = Object.defineProperty;
- // `Object.defineProperty` method
- // https://tc39.github.io/ecma262/#sec-object.defineproperty
- exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {
- anObject(O);
- P = toPrimitive(P, true);
- anObject(Attributes);
- if (IE8_DOM_DEFINE) try {
- return nativeDefineProperty(O, P, Attributes);
- } catch (error) { /* empty */ }
- if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');
- if ('value' in Attributes) O[P] = Attributes.value;
- return O;
- };
- }, { "../internals/an-object": 223, "../internals/descriptors": 240, "../internals/ie8-dom-define": 256, "../internals/to-primitive": 309 }], 279: [function (require, module, exports) {
- var DESCRIPTORS = require('../internals/descriptors');
- var propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');
- var createPropertyDescriptor = require('../internals/create-property-descriptor');
- var toIndexedObject = require('../internals/to-indexed-object');
- var toPrimitive = require('../internals/to-primitive');
- var has = require('../internals/has');
- var IE8_DOM_DEFINE = require('../internals/ie8-dom-define');
- var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
- // `Object.getOwnPropertyDescriptor` method
- // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor
- exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {
- O = toIndexedObject(O);
- P = toPrimitive(P, true);
- if (IE8_DOM_DEFINE) try {
- return nativeGetOwnPropertyDescriptor(O, P);
- } catch (error) { /* empty */ }
- if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);
- };
- }, { "../internals/create-property-descriptor": 237, "../internals/descriptors": 240, "../internals/has": 252, "../internals/ie8-dom-define": 256, "../internals/object-property-is-enumerable": 286, "../internals/to-indexed-object": 305, "../internals/to-primitive": 309 }], 280: [function (require, module, exports) {
- var toIndexedObject = require('../internals/to-indexed-object');
- var nativeGetOwnPropertyNames = require('../internals/object-get-own-property-names').f;
- var toString = {}.toString;
- var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
- ? Object.getOwnPropertyNames(window) : [];
- var getWindowNames = function (it) {
- try {
- return nativeGetOwnPropertyNames(it);
- } catch (error) {
- return windowNames.slice();
- }
- };
- // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
- module.exports.f = function getOwnPropertyNames(it) {
- return windowNames && toString.call(it) == '[object Window]'
- ? getWindowNames(it)
- : nativeGetOwnPropertyNames(toIndexedObject(it));
- };
- }, { "../internals/object-get-own-property-names": 281, "../internals/to-indexed-object": 305 }], 281: [function (require, module, exports) {
- var internalObjectKeys = require('../internals/object-keys-internal');
- var enumBugKeys = require('../internals/enum-bug-keys');
- var hiddenKeys = enumBugKeys.concat('length', 'prototype');
- // `Object.getOwnPropertyNames` method
- // https://tc39.github.io/ecma262/#sec-object.getownpropertynames
- exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
- return internalObjectKeys(O, hiddenKeys);
- };
- }, { "../internals/enum-bug-keys": 245, "../internals/object-keys-internal": 284 }], 282: [function (require, module, exports) {
- exports.f = Object.getOwnPropertySymbols;
- }, {}], 283: [function (require, module, exports) {
- var has = require('../internals/has');
- var toObject = require('../internals/to-object');
- var sharedKey = require('../internals/shared-key');
- var CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');
- var IE_PROTO = sharedKey('IE_PROTO');
- var ObjectPrototype = Object.prototype;
- // `Object.getPrototypeOf` method
- // https://tc39.github.io/ecma262/#sec-object.getprototypeof
- module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {
- O = toObject(O);
- if (has(O, IE_PROTO)) return O[IE_PROTO];
- if (typeof O.constructor == 'function' && O instanceof O.constructor) {
- return O.constructor.prototype;
- } return O instanceof Object ? ObjectPrototype : null;
- };
- }, { "../internals/correct-prototype-getter": 234, "../internals/has": 252, "../internals/shared-key": 299, "../internals/to-object": 308 }], 284: [function (require, module, exports) {
- var has = require('../internals/has');
- var toIndexedObject = require('../internals/to-indexed-object');
- var indexOf = require('../internals/array-includes').indexOf;
- var hiddenKeys = require('../internals/hidden-keys');
- module.exports = function (object, names) {
- var O = toIndexedObject(object);
- var i = 0;
- var result = [];
- var key;
- for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);
- // Don't enum bug & hidden keys
- while (names.length > i) if (has(O, key = names[i++])) {
- ~indexOf(result, key) || result.push(key);
- }
- return result;
- };
- }, { "../internals/array-includes": 224, "../internals/has": 252, "../internals/hidden-keys": 253, "../internals/to-indexed-object": 305 }], 285: [function (require, module, exports) {
- var internalObjectKeys = require('../internals/object-keys-internal');
- var enumBugKeys = require('../internals/enum-bug-keys');
- // `Object.keys` method
- // https://tc39.github.io/ecma262/#sec-object.keys
- module.exports = Object.keys || function keys(O) {
- return internalObjectKeys(O, enumBugKeys);
- };
- }, { "../internals/enum-bug-keys": 245, "../internals/object-keys-internal": 284 }], 286: [function (require, module, exports) {
- 'use strict';
- var nativePropertyIsEnumerable = {}.propertyIsEnumerable;
- var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
- // Nashorn ~ JDK8 bug
- var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);
- // `Object.prototype.propertyIsEnumerable` method implementation
- // https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable
- exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {
- var descriptor = getOwnPropertyDescriptor(this, V);
- return !!descriptor && descriptor.enumerable;
- } : nativePropertyIsEnumerable;
- }, {}], 287: [function (require, module, exports) {
- var anObject = require('../internals/an-object');
- var aPossiblePrototype = require('../internals/a-possible-prototype');
- // `Object.setPrototypeOf` method
- // https://tc39.github.io/ecma262/#sec-object.setprototypeof
- // Works with __proto__ only. Old v8 can't work with null proto objects.
- /* eslint-disable no-proto */
- module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {
- var CORRECT_SETTER = false;
- var test = {};
- var setter;
- try {
- setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;
- setter.call(test, []);
- CORRECT_SETTER = test instanceof Array;
- } catch (error) { /* empty */ }
- return function setPrototypeOf(O, proto) {
- anObject(O);
- aPossiblePrototype(proto);
- if (CORRECT_SETTER) setter.call(O, proto);
- else O.__proto__ = proto;
- return O;
- };
- }() : undefined);
- }, { "../internals/a-possible-prototype": 220, "../internals/an-object": 223 }], 288: [function (require, module, exports) {
- var DESCRIPTORS = require('../internals/descriptors');
- var objectKeys = require('../internals/object-keys');
- var toIndexedObject = require('../internals/to-indexed-object');
- var propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;
- // `Object.{ entries, values }` methods implementation
- var createMethod = function (TO_ENTRIES) {
- return function (it) {
- var O = toIndexedObject(it);
- var keys = objectKeys(O);
- var length = keys.length;
- var i = 0;
- var result = [];
- var key;
- while (length > i) {
- key = keys[i++];
- if (!DESCRIPTORS || propertyIsEnumerable.call(O, key)) {
- result.push(TO_ENTRIES ? [key, O[key]] : O[key]);
- }
- }
- return result;
- };
- };
- module.exports = {
- // `Object.entries` method
- // https://tc39.github.io/ecma262/#sec-object.entries
- entries: createMethod(true),
- // `Object.values` method
- // https://tc39.github.io/ecma262/#sec-object.values
- values: createMethod(false)
- };
- }, { "../internals/descriptors": 240, "../internals/object-keys": 285, "../internals/object-property-is-enumerable": 286, "../internals/to-indexed-object": 305 }], 289: [function (require, module, exports) {
- var getBuiltIn = require('../internals/get-built-in');
- var getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');
- var getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');
- var anObject = require('../internals/an-object');
- // all object keys, includes non-enumerable and symbols
- module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {
- var keys = getOwnPropertyNamesModule.f(anObject(it));
- var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
- return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;
- };
- }, { "../internals/an-object": 223, "../internals/get-built-in": 249, "../internals/object-get-own-property-names": 281, "../internals/object-get-own-property-symbols": 282 }], 290: [function (require, module, exports) {
- var global = require('../internals/global');
- module.exports = global;
- }, { "../internals/global": 251 }], 291: [function (require, module, exports) {
- module.exports = function (exec) {
- try {
- return { error: false, value: exec() };
- } catch (error) {
- return { error: true, value: error };
- }
- };
- }, {}], 292: [function (require, module, exports) {
- var anObject = require('../internals/an-object');
- var isObject = require('../internals/is-object');
- var newPromiseCapability = require('../internals/new-promise-capability');
- module.exports = function (C, x) {
- anObject(C);
- if (isObject(x) && x.constructor === C) return x;
- var promiseCapability = newPromiseCapability.f(C);
- var resolve = promiseCapability.resolve;
- resolve(x);
- return promiseCapability.promise;
- };
- }, { "../internals/an-object": 223, "../internals/is-object": 263, "../internals/new-promise-capability": 273 }], 293: [function (require, module, exports) {
- var redefine = require('../internals/redefine');
- module.exports = function (target, src, options) {
- for (var key in src) redefine(target, key, src[key], options);
- return target;
- };
- }, { "../internals/redefine": 294 }], 294: [function (require, module, exports) {
- var global = require('../internals/global');
- var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
- var has = require('../internals/has');
- var setGlobal = require('../internals/set-global');
- var inspectSource = require('../internals/inspect-source');
- var InternalStateModule = require('../internals/internal-state');
- var getInternalState = InternalStateModule.get;
- var enforceInternalState = InternalStateModule.enforce;
- var TEMPLATE = String(String).split('String');
- (module.exports = function (O, key, value, options) {
- var unsafe = options ? !!options.unsafe : false;
- var simple = options ? !!options.enumerable : false;
- var noTargetGet = options ? !!options.noTargetGet : false;
- if (typeof value == 'function') {
- if (typeof key == 'string' && !has(value, 'name')) createNonEnumerableProperty(value, 'name', key);
- enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : '');
- }
- if (O === global) {
- if (simple) O[key] = value;
- else setGlobal(key, value);
- return;
- } else if (!unsafe) {
- delete O[key];
- } else if (!noTargetGet && O[key]) {
- simple = true;
- }
- if (simple) O[key] = value;
- else createNonEnumerableProperty(O, key, value);
- // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
- })(Function.prototype, 'toString', function toString() {
- return typeof this == 'function' && getInternalState(this).source || inspectSource(this);
- });
- }, { "../internals/create-non-enumerable-property": 236, "../internals/global": 251, "../internals/has": 252, "../internals/inspect-source": 258, "../internals/internal-state": 259, "../internals/set-global": 296 }], 295: [function (require, module, exports) {
- // `RequireObjectCoercible` abstract operation
- // https://tc39.github.io/ecma262/#sec-requireobjectcoercible
- module.exports = function (it) {
- if (it == undefined) throw TypeError("Can't call method on " + it);
- return it;
- };
- }, {}], 296: [function (require, module, exports) {
- var global = require('../internals/global');
- var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
- module.exports = function (key, value) {
- try {
- createNonEnumerableProperty(global, key, value);
- } catch (error) {
- global[key] = value;
- } return value;
- };
- }, { "../internals/create-non-enumerable-property": 236, "../internals/global": 251 }], 297: [function (require, module, exports) {
- 'use strict';
- var getBuiltIn = require('../internals/get-built-in');
- var definePropertyModule = require('../internals/object-define-property');
- var wellKnownSymbol = require('../internals/well-known-symbol');
- var DESCRIPTORS = require('../internals/descriptors');
- var SPECIES = wellKnownSymbol('species');
- module.exports = function (CONSTRUCTOR_NAME) {
- var Constructor = getBuiltIn(CONSTRUCTOR_NAME);
- var defineProperty = definePropertyModule.f;
- if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {
- defineProperty(Constructor, SPECIES, {
- configurable: true,
- get: function () { return this; }
- });
- }
- };
- }, { "../internals/descriptors": 240, "../internals/get-built-in": 249, "../internals/object-define-property": 278, "../internals/well-known-symbol": 314 }], 298: [function (require, module, exports) {
- var defineProperty = require('../internals/object-define-property').f;
- var has = require('../internals/has');
- var wellKnownSymbol = require('../internals/well-known-symbol');
- var TO_STRING_TAG = wellKnownSymbol('toStringTag');
- module.exports = function (it, TAG, STATIC) {
- if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {
- defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });
- }
- };
- }, { "../internals/has": 252, "../internals/object-define-property": 278, "../internals/well-known-symbol": 314 }], 299: [function (require, module, exports) {
- var shared = require('../internals/shared');
- var uid = require('../internals/uid');
- var keys = shared('keys');
- module.exports = function (key) {
- return keys[key] || (keys[key] = uid(key));
- };
- }, { "../internals/shared": 301, "../internals/uid": 311 }], 300: [function (require, module, exports) {
- var global = require('../internals/global');
- var setGlobal = require('../internals/set-global');
- var SHARED = '__core-js_shared__';
- var store = global[SHARED] || setGlobal(SHARED, {});
- module.exports = store;
- }, { "../internals/global": 251, "../internals/set-global": 296 }], 301: [function (require, module, exports) {
- var IS_PURE = require('../internals/is-pure');
- var store = require('../internals/shared-store');
- (module.exports = function (key, value) {
- return store[key] || (store[key] = value !== undefined ? value : {});
- })('versions', []).push({
- version: '3.6.5',
- mode: IS_PURE ? 'pure' : 'global',
- copyright: '© 2020 Denis Pushkarev (zloirock.ru)'
- });
- }, { "../internals/is-pure": 264, "../internals/shared-store": 300 }], 302: [function (require, module, exports) {
- var anObject = require('../internals/an-object');
- var aFunction = require('../internals/a-function');
- var wellKnownSymbol = require('../internals/well-known-symbol');
- var SPECIES = wellKnownSymbol('species');
- // `SpeciesConstructor` abstract operation
- // https://tc39.github.io/ecma262/#sec-speciesconstructor
- module.exports = function (O, defaultConstructor) {
- var C = anObject(O).constructor;
- var S;
- return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S);
- };
- }, { "../internals/a-function": 219, "../internals/an-object": 223, "../internals/well-known-symbol": 314 }], 303: [function (require, module, exports) {
- var global = require('../internals/global');
- var fails = require('../internals/fails');
- var classof = require('../internals/classof-raw');
- var bind = require('../internals/function-bind-context');
- var html = require('../internals/html');
- var createElement = require('../internals/document-create-element');
- var IS_IOS = require('../internals/engine-is-ios');
- var location = global.location;
- var set = global.setImmediate;
- var clear = global.clearImmediate;
- var process = global.process;
- var MessageChannel = global.MessageChannel;
- var Dispatch = global.Dispatch;
- var counter = 0;
- var queue = {};
- var ONREADYSTATECHANGE = 'onreadystatechange';
- var defer, channel, port;
- var run = function (id) {
- // eslint-disable-next-line no-prototype-builtins
- if (queue.hasOwnProperty(id)) {
- var fn = queue[id];
- delete queue[id];
- fn();
- }
- };
- var runner = function (id) {
- return function () {
- run(id);
- };
- };
- var listener = function (event) {
- run(event.data);
- };
- var post = function (id) {
- // old engines have not location.origin
- global.postMessage(id + '', location.protocol + '//' + location.host);
- };
- // Node.js 0.9+ & IE10+ has setImmediate, otherwise:
- if (!set || !clear) {
- set = function setImmediate(fn) {
- var args = [];
- var i = 1;
- while (arguments.length > i) args.push(arguments[i++]);
- queue[++counter] = function () {
- // eslint-disable-next-line no-new-func
- (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args);
- };
- defer(counter);
- return counter;
- };
- clear = function clearImmediate(id) {
- delete queue[id];
- };
- // Node.js 0.8-
- if (classof(process) == 'process') {
- defer = function (id) {
- process.nextTick(runner(id));
- };
- // Sphere (JS game engine) Dispatch API
- } else if (Dispatch && Dispatch.now) {
- defer = function (id) {
- Dispatch.now(runner(id));
- };
- // Browsers with MessageChannel, includes WebWorkers
- // except iOS - https://github.com/zloirock/core-js/issues/624
- } else if (MessageChannel && !IS_IOS) {
- channel = new MessageChannel();
- port = channel.port2;
- channel.port1.onmessage = listener;
- defer = bind(port.postMessage, port, 1);
- // Browsers with postMessage, skip WebWorkers
- // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
- } else if (
- global.addEventListener &&
- typeof postMessage == 'function' &&
- !global.importScripts &&
- !fails(post) &&
- location.protocol !== 'file:'
- ) {
- defer = post;
- global.addEventListener('message', listener, false);
- // IE8-
- } else if (ONREADYSTATECHANGE in createElement('script')) {
- defer = function (id) {
- html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {
- html.removeChild(this);
- run(id);
- };
- };
- // Rest old browsers
- } else {
- defer = function (id) {
- setTimeout(runner(id), 0);
- };
- }
- }
- module.exports = {
- set: set,
- clear: clear
- };
- }, { "../internals/classof-raw": 230, "../internals/document-create-element": 241, "../internals/engine-is-ios": 242, "../internals/fails": 247, "../internals/function-bind-context": 248, "../internals/global": 251, "../internals/html": 255 }], 304: [function (require, module, exports) {
- var toInteger = require('../internals/to-integer');
- var max = Math.max;
- var min = Math.min;
- // Helper for a popular repeating case of the spec:
- // Let integer be ? ToInteger(index).
- // If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).
- module.exports = function (index, length) {
- var integer = toInteger(index);
- return integer < 0 ? max(integer + length, 0) : min(integer, length);
- };
- }, { "../internals/to-integer": 306 }], 305: [function (require, module, exports) {
- // toObject with fallback for non-array-like ES3 strings
- var IndexedObject = require('../internals/indexed-object');
- var requireObjectCoercible = require('../internals/require-object-coercible');
- module.exports = function (it) {
- return IndexedObject(requireObjectCoercible(it));
- };
- }, { "../internals/indexed-object": 257, "../internals/require-object-coercible": 295 }], 306: [function (require, module, exports) {
- var ceil = Math.ceil;
- var floor = Math.floor;
- // `ToInteger` abstract operation
- // https://tc39.github.io/ecma262/#sec-tointeger
- module.exports = function (argument) {
- return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);
- };
- }, {}], 307: [function (require, module, exports) {
- var toInteger = require('../internals/to-integer');
- var min = Math.min;
- // `ToLength` abstract operation
- // https://tc39.github.io/ecma262/#sec-tolength
- module.exports = function (argument) {
- return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991
- };
- }, { "../internals/to-integer": 306 }], 308: [function (require, module, exports) {
- var requireObjectCoercible = require('../internals/require-object-coercible');
- // `ToObject` abstract operation
- // https://tc39.github.io/ecma262/#sec-toobject
- module.exports = function (argument) {
- return Object(requireObjectCoercible(argument));
- };
- }, { "../internals/require-object-coercible": 295 }], 309: [function (require, module, exports) {
- var isObject = require('../internals/is-object');
- // `ToPrimitive` abstract operation
- // https://tc39.github.io/ecma262/#sec-toprimitive
- // instead of the ES6 spec version, we didn't implement @@toPrimitive case
- // and the second argument - flag - preferred type is a string
- module.exports = function (input, PREFERRED_STRING) {
- if (!isObject(input)) return input;
- var fn, val;
- if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;
- if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;
- if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;
- throw TypeError("Can't convert object to primitive value");
- };
- }, { "../internals/is-object": 263 }], 310: [function (require, module, exports) {
- var wellKnownSymbol = require('../internals/well-known-symbol');
- var TO_STRING_TAG = wellKnownSymbol('toStringTag');
- var test = {};
- test[TO_STRING_TAG] = 'z';
- module.exports = String(test) === '[object z]';
- }, { "../internals/well-known-symbol": 314 }], 311: [function (require, module, exports) {
- var id = 0;
- var postfix = Math.random();
- module.exports = function (key) {
- return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);
- };
- }, {}], 312: [function (require, module, exports) {
- var NATIVE_SYMBOL = require('../internals/native-symbol');
- module.exports = NATIVE_SYMBOL
- // eslint-disable-next-line no-undef
- && !Symbol.sham
- // eslint-disable-next-line no-undef
- && typeof Symbol.iterator == 'symbol';
- }, { "../internals/native-symbol": 271 }], 313: [function (require, module, exports) {
- var wellKnownSymbol = require('../internals/well-known-symbol');
- exports.f = wellKnownSymbol;
- }, { "../internals/well-known-symbol": 314 }], 314: [function (require, module, exports) {
- var global = require('../internals/global');
- var shared = require('../internals/shared');
- var has = require('../internals/has');
- var uid = require('../internals/uid');
- var NATIVE_SYMBOL = require('../internals/native-symbol');
- var USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');
- var WellKnownSymbolsStore = shared('wks');
- var Symbol = global.Symbol;
- var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;
- module.exports = function (name) {
- if (!has(WellKnownSymbolsStore, name)) {
- if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name];
- else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);
- } return WellKnownSymbolsStore[name];
- };
- }, { "../internals/global": 251, "../internals/has": 252, "../internals/native-symbol": 271, "../internals/shared": 301, "../internals/uid": 311, "../internals/use-symbol-as-uid": 312 }], 315: [function (require, module, exports) {
- 'use strict';
- var $ = require('../internals/export');
- var $findIndex = require('../internals/array-iteration').findIndex;
- var addToUnscopables = require('../internals/add-to-unscopables');
- var arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');
- var FIND_INDEX = 'findIndex';
- var SKIPS_HOLES = true;
- var USES_TO_LENGTH = arrayMethodUsesToLength(FIND_INDEX);
- // Shouldn't skip holes
- if (FIND_INDEX in []) Array(1)[FIND_INDEX](function () { SKIPS_HOLES = false; });
- // `Array.prototype.findIndex` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.findindex
- $({ target: 'Array', proto: true, forced: SKIPS_HOLES || !USES_TO_LENGTH }, {
- findIndex: function findIndex(callbackfn /* , that = undefined */) {
- return $findIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
- }
- });
- // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables
- addToUnscopables(FIND_INDEX);
- }, { "../internals/add-to-unscopables": 221, "../internals/array-iteration": 225, "../internals/array-method-uses-to-length": 226, "../internals/export": 246 }], 316: [function (require, module, exports) {
- 'use strict';
- var $ = require('../internals/export');
- var $find = require('../internals/array-iteration').find;
- var addToUnscopables = require('../internals/add-to-unscopables');
- var arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');
- var FIND = 'find';
- var SKIPS_HOLES = true;
- var USES_TO_LENGTH = arrayMethodUsesToLength(FIND);
- // Shouldn't skip holes
- if (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });
- // `Array.prototype.find` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.find
- $({ target: 'Array', proto: true, forced: SKIPS_HOLES || !USES_TO_LENGTH }, {
- find: function find(callbackfn /* , that = undefined */) {
- return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
- }
- });
- // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables
- addToUnscopables(FIND);
- }, { "../internals/add-to-unscopables": 221, "../internals/array-iteration": 225, "../internals/array-method-uses-to-length": 226, "../internals/export": 246 }], 317: [function (require, module, exports) {
- 'use strict';
- var $ = require('../internals/export');
- var $includes = require('../internals/array-includes').includes;
- var addToUnscopables = require('../internals/add-to-unscopables');
- var arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');
- var USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 });
- // `Array.prototype.includes` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.includes
- $({ target: 'Array', proto: true, forced: !USES_TO_LENGTH }, {
- includes: function includes(el /* , fromIndex = 0 */) {
- return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);
- }
- });
- // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables
- addToUnscopables('includes');
- }, { "../internals/add-to-unscopables": 221, "../internals/array-includes": 224, "../internals/array-method-uses-to-length": 226, "../internals/export": 246 }], 318: [function (require, module, exports) {
- 'use strict';
- var toIndexedObject = require('../internals/to-indexed-object');
- var addToUnscopables = require('../internals/add-to-unscopables');
- var Iterators = require('../internals/iterators');
- var InternalStateModule = require('../internals/internal-state');
- var defineIterator = require('../internals/define-iterator');
- var ARRAY_ITERATOR = 'Array Iterator';
- var setInternalState = InternalStateModule.set;
- var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);
- // `Array.prototype.entries` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.entries
- // `Array.prototype.keys` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.keys
- // `Array.prototype.values` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.values
- // `Array.prototype[@@iterator]` method
- // https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator
- // `CreateArrayIterator` internal method
- // https://tc39.github.io/ecma262/#sec-createarrayiterator
- module.exports = defineIterator(Array, 'Array', function (iterated, kind) {
- setInternalState(this, {
- type: ARRAY_ITERATOR,
- target: toIndexedObject(iterated), // target
- index: 0, // next index
- kind: kind // kind
- });
- // `%ArrayIteratorPrototype%.next` method
- // https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next
- }, function () {
- var state = getInternalState(this);
- var target = state.target;
- var kind = state.kind;
- var index = state.index++;
- if (!target || index >= target.length) {
- state.target = undefined;
- return { value: undefined, done: true };
- }
- if (kind == 'keys') return { value: index, done: false };
- if (kind == 'values') return { value: target[index], done: false };
- return { value: [index, target[index]], done: false };
- }, 'values');
- // argumentsList[@@iterator] is %ArrayProto_values%
- // https://tc39.github.io/ecma262/#sec-createunmappedargumentsobject
- // https://tc39.github.io/ecma262/#sec-createmappedargumentsobject
- Iterators.Arguments = Iterators.Array;
- // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables
- addToUnscopables('keys');
- addToUnscopables('values');
- addToUnscopables('entries');
- }, { "../internals/add-to-unscopables": 221, "../internals/define-iterator": 238, "../internals/internal-state": 259, "../internals/iterators": 268, "../internals/to-indexed-object": 305 }], 319: [function (require, module, exports) {
- var $ = require('../internals/export');
- // `Number.isNaN` method
- // https://tc39.github.io/ecma262/#sec-number.isnan
- $({ target: 'Number', stat: true }, {
- isNaN: function isNaN(number) {
- // eslint-disable-next-line no-self-compare
- return number != number;
- }
- });
- }, { "../internals/export": 246 }], 320: [function (require, module, exports) {
- var $ = require('../internals/export');
- var assign = require('../internals/object-assign');
- // `Object.assign` method
- // https://tc39.github.io/ecma262/#sec-object.assign
- $({ target: 'Object', stat: true, forced: Object.assign !== assign }, {
- assign: assign
- });
- }, { "../internals/export": 246, "../internals/object-assign": 275 }], 321: [function (require, module, exports) {
- var $ = require('../internals/export');
- var toObject = require('../internals/to-object');
- var nativeKeys = require('../internals/object-keys');
- var fails = require('../internals/fails');
- var FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });
- // `Object.keys` method
- // https://tc39.github.io/ecma262/#sec-object.keys
- $({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {
- keys: function keys(it) {
- return nativeKeys(toObject(it));
- }
- });
- }, { "../internals/export": 246, "../internals/fails": 247, "../internals/object-keys": 285, "../internals/to-object": 308 }], 322: [function (require, module, exports) {
- var $ = require('../internals/export');
- var $values = require('../internals/object-to-array').values;
- // `Object.values` method
- // https://tc39.github.io/ecma262/#sec-object.values
- $({ target: 'Object', stat: true }, {
- values: function values(O) {
- return $values(O);
- }
- });
- }, { "../internals/export": 246, "../internals/object-to-array": 288 }], 323: [function (require, module, exports) {
- 'use strict';
- var $ = require('../internals/export');
- var IS_PURE = require('../internals/is-pure');
- var global = require('../internals/global');
- var getBuiltIn = require('../internals/get-built-in');
- var NativePromise = require('../internals/native-promise-constructor');
- var redefine = require('../internals/redefine');
- var redefineAll = require('../internals/redefine-all');
- var setToStringTag = require('../internals/set-to-string-tag');
- var setSpecies = require('../internals/set-species');
- var isObject = require('../internals/is-object');
- var aFunction = require('../internals/a-function');
- var anInstance = require('../internals/an-instance');
- var classof = require('../internals/classof-raw');
- var inspectSource = require('../internals/inspect-source');
- var iterate = require('../internals/iterate');
- var checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');
- var speciesConstructor = require('../internals/species-constructor');
- var task = require('../internals/task').set;
- var microtask = require('../internals/microtask');
- var promiseResolve = require('../internals/promise-resolve');
- var hostReportErrors = require('../internals/host-report-errors');
- var newPromiseCapabilityModule = require('../internals/new-promise-capability');
- var perform = require('../internals/perform');
- var InternalStateModule = require('../internals/internal-state');
- var isForced = require('../internals/is-forced');
- var wellKnownSymbol = require('../internals/well-known-symbol');
- var V8_VERSION = require('../internals/engine-v8-version');
- var SPECIES = wellKnownSymbol('species');
- var PROMISE = 'Promise';
- var getInternalState = InternalStateModule.get;
- var setInternalState = InternalStateModule.set;
- var getInternalPromiseState = InternalStateModule.getterFor(PROMISE);
- var PromiseConstructor = NativePromise;
- var TypeError = global.TypeError;
- var document = global.document;
- var process = global.process;
- var $fetch = getBuiltIn('fetch');
- var newPromiseCapability = newPromiseCapabilityModule.f;
- var newGenericPromiseCapability = newPromiseCapability;
- var IS_NODE = classof(process) == 'process';
- var DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);
- var UNHANDLED_REJECTION = 'unhandledrejection';
- var REJECTION_HANDLED = 'rejectionhandled';
- var PENDING = 0;
- var FULFILLED = 1;
- var REJECTED = 2;
- var HANDLED = 1;
- var UNHANDLED = 2;
- var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;
- var FORCED = isForced(PROMISE, function () {
- var GLOBAL_CORE_JS_PROMISE = inspectSource(PromiseConstructor) !== String(PromiseConstructor);
- if (!GLOBAL_CORE_JS_PROMISE) {
- // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables
- // https://bugs.chromium.org/p/chromium/issues/detail?id=830565
- // We can't detect it synchronously, so just check versions
- if (V8_VERSION === 66) return true;
- // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test
- if (!IS_NODE && typeof PromiseRejectionEvent != 'function') return true;
- }
- // We need Promise#finally in the pure version for preventing prototype pollution
- if (IS_PURE && !PromiseConstructor.prototype['finally']) return true;
- // We can't use @@species feature detection in V8 since it causes
- // deoptimization and performance degradation
- // https://github.com/zloirock/core-js/issues/679
- if (V8_VERSION >= 51 && /native code/.test(PromiseConstructor)) return false;
- // Detect correctness of subclassing with @@species support
- var promise = PromiseConstructor.resolve(1);
- var FakePromise = function (exec) {
- exec(function () { /* empty */ }, function () { /* empty */ });
- };
- var constructor = promise.constructor = {};
- constructor[SPECIES] = FakePromise;
- return !(promise.then(function () { /* empty */ }) instanceof FakePromise);
- });
- var INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {
- PromiseConstructor.all(iterable)['catch'](function () { /* empty */ });
- });
- // helpers
- var isThenable = function (it) {
- var then;
- return isObject(it) && typeof (then = it.then) == 'function' ? then : false;
- };
- var notify = function (promise, state, isReject) {
- if (state.notified) return;
- state.notified = true;
- var chain = state.reactions;
- microtask(function () {
- var value = state.value;
- var ok = state.state == FULFILLED;
- var index = 0;
- // variable length - can't use forEach
- while (chain.length > index) {
- var reaction = chain[index++];
- var handler = ok ? reaction.ok : reaction.fail;
- var resolve = reaction.resolve;
- var reject = reaction.reject;
- var domain = reaction.domain;
- var result, then, exited;
- try {
- if (handler) {
- if (!ok) {
- if (state.rejection === UNHANDLED) onHandleUnhandled(promise, state);
- state.rejection = HANDLED;
- }
- if (handler === true) result = value;
- else {
- if (domain) domain.enter();
- result = handler(value); // can throw
- if (domain) {
- domain.exit();
- exited = true;
- }
- }
- if (result === reaction.promise) {
- reject(TypeError('Promise-chain cycle'));
- } else if (then = isThenable(result)) {
- then.call(result, resolve, reject);
- } else resolve(result);
- } else reject(value);
- } catch (error) {
- if (domain && !exited) domain.exit();
- reject(error);
- }
- }
- state.reactions = [];
- state.notified = false;
- if (isReject && !state.rejection) onUnhandled(promise, state);
- });
- };
- var dispatchEvent = function (name, promise, reason) {
- var event, handler;
- if (DISPATCH_EVENT) {
- event = document.createEvent('Event');
- event.promise = promise;
- event.reason = reason;
- event.initEvent(name, false, true);
- global.dispatchEvent(event);
- } else event = { promise: promise, reason: reason };
- if (handler = global['on' + name]) handler(event);
- else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);
- };
- var onUnhandled = function (promise, state) {
- task.call(global, function () {
- var value = state.value;
- var IS_UNHANDLED = isUnhandled(state);
- var result;
- if (IS_UNHANDLED) {
- result = perform(function () {
- if (IS_NODE) {
- process.emit('unhandledRejection', value, promise);
- } else dispatchEvent(UNHANDLED_REJECTION, promise, value);
- });
- // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should
- state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;
- if (result.error) throw result.value;
- }
- });
- };
- var isUnhandled = function (state) {
- return state.rejection !== HANDLED && !state.parent;
- };
- var onHandleUnhandled = function (promise, state) {
- task.call(global, function () {
- if (IS_NODE) {
- process.emit('rejectionHandled', promise);
- } else dispatchEvent(REJECTION_HANDLED, promise, state.value);
- });
- };
- var bind = function (fn, promise, state, unwrap) {
- return function (value) {
- fn(promise, state, value, unwrap);
- };
- };
- var internalReject = function (promise, state, value, unwrap) {
- if (state.done) return;
- state.done = true;
- if (unwrap) state = unwrap;
- state.value = value;
- state.state = REJECTED;
- notify(promise, state, true);
- };
- var internalResolve = function (promise, state, value, unwrap) {
- if (state.done) return;
- state.done = true;
- if (unwrap) state = unwrap;
- try {
- if (promise === value) throw TypeError("Promise can't be resolved itself");
- var then = isThenable(value);
- if (then) {
- microtask(function () {
- var wrapper = { done: false };
- try {
- then.call(value,
- bind(internalResolve, promise, wrapper, state),
- bind(internalReject, promise, wrapper, state)
- );
- } catch (error) {
- internalReject(promise, wrapper, error, state);
- }
- });
- } else {
- state.value = value;
- state.state = FULFILLED;
- notify(promise, state, false);
- }
- } catch (error) {
- internalReject(promise, { done: false }, error, state);
- }
- };
- // constructor polyfill
- if (FORCED) {
- // 25.4.3.1 Promise(executor)
- PromiseConstructor = function Promise(executor) {
- anInstance(this, PromiseConstructor, PROMISE);
- aFunction(executor);
- Internal.call(this);
- var state = getInternalState(this);
- try {
- executor(bind(internalResolve, this, state), bind(internalReject, this, state));
- } catch (error) {
- internalReject(this, state, error);
- }
- };
- // eslint-disable-next-line no-unused-vars
- Internal = function Promise(executor) {
- setInternalState(this, {
- type: PROMISE,
- done: false,
- notified: false,
- parent: false,
- reactions: [],
- rejection: false,
- state: PENDING,
- value: undefined
- });
- };
- Internal.prototype = redefineAll(PromiseConstructor.prototype, {
- // `Promise.prototype.then` method
- // https://tc39.github.io/ecma262/#sec-promise.prototype.then
- then: function then(onFulfilled, onRejected) {
- var state = getInternalPromiseState(this);
- var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));
- reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;
- reaction.fail = typeof onRejected == 'function' && onRejected;
- reaction.domain = IS_NODE ? process.domain : undefined;
- state.parent = true;
- state.reactions.push(reaction);
- if (state.state != PENDING) notify(this, state, false);
- return reaction.promise;
- },
- // `Promise.prototype.catch` method
- // https://tc39.github.io/ecma262/#sec-promise.prototype.catch
- 'catch': function (onRejected) {
- return this.then(undefined, onRejected);
- }
- });
- OwnPromiseCapability = function () {
- var promise = new Internal();
- var state = getInternalState(promise);
- this.promise = promise;
- this.resolve = bind(internalResolve, promise, state);
- this.reject = bind(internalReject, promise, state);
- };
- newPromiseCapabilityModule.f = newPromiseCapability = function (C) {
- return C === PromiseConstructor || C === PromiseWrapper
- ? new OwnPromiseCapability(C)
- : newGenericPromiseCapability(C);
- };
- if (!IS_PURE && typeof NativePromise == 'function') {
- nativeThen = NativePromise.prototype.then;
- // wrap native Promise#then for native async functions
- redefine(NativePromise.prototype, 'then', function then(onFulfilled, onRejected) {
- var that = this;
- return new PromiseConstructor(function (resolve, reject) {
- nativeThen.call(that, resolve, reject);
- }).then(onFulfilled, onRejected);
- // https://github.com/zloirock/core-js/issues/640
- }, { unsafe: true });
- // wrap fetch result
- if (typeof $fetch == 'function') $({ global: true, enumerable: true, forced: true }, {
- // eslint-disable-next-line no-unused-vars
- fetch: function fetch(input /* , init */) {
- return promiseResolve(PromiseConstructor, $fetch.apply(global, arguments));
- }
- });
- }
- }
- $({ global: true, wrap: true, forced: FORCED }, {
- Promise: PromiseConstructor
- });
- setToStringTag(PromiseConstructor, PROMISE, false, true);
- setSpecies(PROMISE);
- PromiseWrapper = getBuiltIn(PROMISE);
- // statics
- $({ target: PROMISE, stat: true, forced: FORCED }, {
- // `Promise.reject` method
- // https://tc39.github.io/ecma262/#sec-promise.reject
- reject: function reject(r) {
- var capability = newPromiseCapability(this);
- capability.reject.call(undefined, r);
- return capability.promise;
- }
- });
- $({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, {
- // `Promise.resolve` method
- // https://tc39.github.io/ecma262/#sec-promise.resolve
- resolve: function resolve(x) {
- return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);
- }
- });
- $({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {
- // `Promise.all` method
- // https://tc39.github.io/ecma262/#sec-promise.all
- all: function all(iterable) {
- var C = this;
- var capability = newPromiseCapability(C);
- var resolve = capability.resolve;
- var reject = capability.reject;
- var result = perform(function () {
- var $promiseResolve = aFunction(C.resolve);
- var values = [];
- var counter = 0;
- var remaining = 1;
- iterate(iterable, function (promise) {
- var index = counter++;
- var alreadyCalled = false;
- values.push(undefined);
- remaining++;
- $promiseResolve.call(C, promise).then(function (value) {
- if (alreadyCalled) return;
- alreadyCalled = true;
- values[index] = value;
- --remaining || resolve(values);
- }, reject);
- });
- --remaining || resolve(values);
- });
- if (result.error) reject(result.value);
- return capability.promise;
- },
- // `Promise.race` method
- // https://tc39.github.io/ecma262/#sec-promise.race
- race: function race(iterable) {
- var C = this;
- var capability = newPromiseCapability(C);
- var reject = capability.reject;
- var result = perform(function () {
- var $promiseResolve = aFunction(C.resolve);
- iterate(iterable, function (promise) {
- $promiseResolve.call(C, promise).then(capability.resolve, reject);
- });
- });
- if (result.error) reject(result.value);
- return capability.promise;
- }
- });
- }, { "../internals/a-function": 219, "../internals/an-instance": 222, "../internals/check-correctness-of-iteration": 229, "../internals/classof-raw": 230, "../internals/engine-v8-version": 244, "../internals/export": 246, "../internals/get-built-in": 249, "../internals/global": 251, "../internals/host-report-errors": 254, "../internals/inspect-source": 258, "../internals/internal-state": 259, "../internals/is-forced": 262, "../internals/is-object": 263, "../internals/is-pure": 264, "../internals/iterate": 266, "../internals/microtask": 269, "../internals/native-promise-constructor": 270, "../internals/new-promise-capability": 273, "../internals/perform": 291, "../internals/promise-resolve": 292, "../internals/redefine": 294, "../internals/redefine-all": 293, "../internals/set-species": 297, "../internals/set-to-string-tag": 298, "../internals/species-constructor": 302, "../internals/task": 303, "../internals/well-known-symbol": 314 }], 324: [function (require, module, exports) {
- var $ = require('../internals/export');
- var toAbsoluteIndex = require('../internals/to-absolute-index');
- var fromCharCode = String.fromCharCode;
- var nativeFromCodePoint = String.fromCodePoint;
- // length should be 1, old FF problem
- var INCORRECT_LENGTH = !!nativeFromCodePoint && nativeFromCodePoint.length != 1;
- // `String.fromCodePoint` method
- // https://tc39.github.io/ecma262/#sec-string.fromcodepoint
- $({ target: 'String', stat: true, forced: INCORRECT_LENGTH }, {
- fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars
- var elements = [];
- var length = arguments.length;
- var i = 0;
- var code;
- while (length > i) {
- code = +arguments[i++];
- if (toAbsoluteIndex(code, 0x10FFFF) !== code) throw RangeError(code + ' is not a valid code point');
- elements.push(code < 0x10000
- ? fromCharCode(code)
- : fromCharCode(((code -= 0x10000) >> 10) + 0xD800, code % 0x400 + 0xDC00)
- );
- } return elements.join('');
- }
- });
- }, { "../internals/export": 246, "../internals/to-absolute-index": 304 }], 325: [function (require, module, exports) {
- 'use strict';
- var $ = require('../internals/export');
- var notARegExp = require('../internals/not-a-regexp');
- var requireObjectCoercible = require('../internals/require-object-coercible');
- var correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');
- // `String.prototype.includes` method
- // https://tc39.github.io/ecma262/#sec-string.prototype.includes
- $({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {
- includes: function includes(searchString /* , position = 0 */) {
- return !!~String(requireObjectCoercible(this))
- .indexOf(notARegExp(searchString), arguments.length > 1 ? arguments[1] : undefined);
- }
- });
- }, { "../internals/correct-is-regexp-logic": 233, "../internals/export": 246, "../internals/not-a-regexp": 274, "../internals/require-object-coercible": 295 }], 326: [function (require, module, exports) {
- var defineWellKnownSymbol = require('../internals/define-well-known-symbol');
- // `Symbol.asyncIterator` well-known symbol
- // https://tc39.github.io/ecma262/#sec-symbol.asynciterator
- defineWellKnownSymbol('asyncIterator');
- }, { "../internals/define-well-known-symbol": 239 }], 327: [function (require, module, exports) {
- 'use strict';
- var $ = require('../internals/export');
- var global = require('../internals/global');
- var getBuiltIn = require('../internals/get-built-in');
- var IS_PURE = require('../internals/is-pure');
- var DESCRIPTORS = require('../internals/descriptors');
- var NATIVE_SYMBOL = require('../internals/native-symbol');
- var USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');
- var fails = require('../internals/fails');
- var has = require('../internals/has');
- var isArray = require('../internals/is-array');
- var isObject = require('../internals/is-object');
- var anObject = require('../internals/an-object');
- var toObject = require('../internals/to-object');
- var toIndexedObject = require('../internals/to-indexed-object');
- var toPrimitive = require('../internals/to-primitive');
- var createPropertyDescriptor = require('../internals/create-property-descriptor');
- var nativeObjectCreate = require('../internals/object-create');
- var objectKeys = require('../internals/object-keys');
- var getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');
- var getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');
- var getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');
- var getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');
- var definePropertyModule = require('../internals/object-define-property');
- var propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');
- var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
- var redefine = require('../internals/redefine');
- var shared = require('../internals/shared');
- var sharedKey = require('../internals/shared-key');
- var hiddenKeys = require('../internals/hidden-keys');
- var uid = require('../internals/uid');
- var wellKnownSymbol = require('../internals/well-known-symbol');
- var wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');
- var defineWellKnownSymbol = require('../internals/define-well-known-symbol');
- var setToStringTag = require('../internals/set-to-string-tag');
- var InternalStateModule = require('../internals/internal-state');
- var $forEach = require('../internals/array-iteration').forEach;
- var HIDDEN = sharedKey('hidden');
- var SYMBOL = 'Symbol';
- var PROTOTYPE = 'prototype';
- var TO_PRIMITIVE = wellKnownSymbol('toPrimitive');
- var setInternalState = InternalStateModule.set;
- var getInternalState = InternalStateModule.getterFor(SYMBOL);
- var ObjectPrototype = Object[PROTOTYPE];
- var $Symbol = global.Symbol;
- var $stringify = getBuiltIn('JSON', 'stringify');
- var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
- var nativeDefineProperty = definePropertyModule.f;
- var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;
- var nativePropertyIsEnumerable = propertyIsEnumerableModule.f;
- var AllSymbols = shared('symbols');
- var ObjectPrototypeSymbols = shared('op-symbols');
- var StringToSymbolRegistry = shared('string-to-symbol-registry');
- var SymbolToStringRegistry = shared('symbol-to-string-registry');
- var WellKnownSymbolsStore = shared('wks');
- var QObject = global.QObject;
- // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
- var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
- // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
- var setSymbolDescriptor = DESCRIPTORS && fails(function () {
- return nativeObjectCreate(nativeDefineProperty({}, 'a', {
- get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }
- })).a != 7;
- }) ? function (O, P, Attributes) {
- var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);
- if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];
- nativeDefineProperty(O, P, Attributes);
- if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {
- nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);
- }
- } : nativeDefineProperty;
- var wrap = function (tag, description) {
- var symbol = AllSymbols[tag] = nativeObjectCreate($Symbol[PROTOTYPE]);
- setInternalState(symbol, {
- type: SYMBOL,
- tag: tag,
- description: description
- });
- if (!DESCRIPTORS) symbol.description = description;
- return symbol;
- };
- var isSymbol = USE_SYMBOL_AS_UID ? function (it) {
- return typeof it == 'symbol';
- } : function (it) {
- return Object(it) instanceof $Symbol;
- };
- var $defineProperty = function defineProperty(O, P, Attributes) {
- if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);
- anObject(O);
- var key = toPrimitive(P, true);
- anObject(Attributes);
- if (has(AllSymbols, key)) {
- if (!Attributes.enumerable) {
- if (!has(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));
- O[HIDDEN][key] = true;
- } else {
- if (has(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;
- Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });
- } return setSymbolDescriptor(O, key, Attributes);
- } return nativeDefineProperty(O, key, Attributes);
- };
- var $defineProperties = function defineProperties(O, Properties) {
- anObject(O);
- var properties = toIndexedObject(Properties);
- var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));
- $forEach(keys, function (key) {
- if (!DESCRIPTORS || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]);
- });
- return O;
- };
- var $create = function create(O, Properties) {
- return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);
- };
- var $propertyIsEnumerable = function propertyIsEnumerable(V) {
- var P = toPrimitive(V, true);
- var enumerable = nativePropertyIsEnumerable.call(this, P);
- if (this === ObjectPrototype && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false;
- return enumerable || !has(this, P) || !has(AllSymbols, P) || has(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true;
- };
- var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {
- var it = toIndexedObject(O);
- var key = toPrimitive(P, true);
- if (it === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return;
- var descriptor = nativeGetOwnPropertyDescriptor(it, key);
- if (descriptor && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) {
- descriptor.enumerable = true;
- }
- return descriptor;
- };
- var $getOwnPropertyNames = function getOwnPropertyNames(O) {
- var names = nativeGetOwnPropertyNames(toIndexedObject(O));
- var result = [];
- $forEach(names, function (key) {
- if (!has(AllSymbols, key) && !has(hiddenKeys, key)) result.push(key);
- });
- return result;
- };
- var $getOwnPropertySymbols = function getOwnPropertySymbols(O) {
- var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;
- var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));
- var result = [];
- $forEach(names, function (key) {
- if (has(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype, key))) {
- result.push(AllSymbols[key]);
- }
- });
- return result;
- };
- // `Symbol` constructor
- // https://tc39.github.io/ecma262/#sec-symbol-constructor
- if (!NATIVE_SYMBOL) {
- $Symbol = function Symbol() {
- if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor');
- var description = !arguments.length || arguments[0] === undefined ? undefined : String(arguments[0]);
- var tag = uid(description);
- var setter = function (value) {
- if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value);
- if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
- setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));
- };
- if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });
- return wrap(tag, description);
- };
- redefine($Symbol[PROTOTYPE], 'toString', function toString() {
- return getInternalState(this).tag;
- });
- redefine($Symbol, 'withoutSetter', function (description) {
- return wrap(uid(description), description);
- });
- propertyIsEnumerableModule.f = $propertyIsEnumerable;
- definePropertyModule.f = $defineProperty;
- getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;
- getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;
- getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;
- wrappedWellKnownSymbolModule.f = function (name) {
- return wrap(wellKnownSymbol(name), name);
- };
- if (DESCRIPTORS) {
- // https://github.com/tc39/proposal-Symbol-description
- nativeDefineProperty($Symbol[PROTOTYPE], 'description', {
- configurable: true,
- get: function description() {
- return getInternalState(this).description;
- }
- });
- if (!IS_PURE) {
- redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });
- }
- }
- }
- $({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {
- Symbol: $Symbol
- });
- $forEach(objectKeys(WellKnownSymbolsStore), function (name) {
- defineWellKnownSymbol(name);
- });
- $({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {
- // `Symbol.for` method
- // https://tc39.github.io/ecma262/#sec-symbol.for
- 'for': function (key) {
- var string = String(key);
- if (has(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];
- var symbol = $Symbol(string);
- StringToSymbolRegistry[string] = symbol;
- SymbolToStringRegistry[symbol] = string;
- return symbol;
- },
- // `Symbol.keyFor` method
- // https://tc39.github.io/ecma262/#sec-symbol.keyfor
- keyFor: function keyFor(sym) {
- if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');
- if (has(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];
- },
- useSetter: function () { USE_SETTER = true; },
- useSimple: function () { USE_SETTER = false; }
- });
- $({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {
- // `Object.create` method
- // https://tc39.github.io/ecma262/#sec-object.create
- create: $create,
- // `Object.defineProperty` method
- // https://tc39.github.io/ecma262/#sec-object.defineproperty
- defineProperty: $defineProperty,
- // `Object.defineProperties` method
- // https://tc39.github.io/ecma262/#sec-object.defineproperties
- defineProperties: $defineProperties,
- // `Object.getOwnPropertyDescriptor` method
- // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors
- getOwnPropertyDescriptor: $getOwnPropertyDescriptor
- });
- $({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {
- // `Object.getOwnPropertyNames` method
- // https://tc39.github.io/ecma262/#sec-object.getownpropertynames
- getOwnPropertyNames: $getOwnPropertyNames,
- // `Object.getOwnPropertySymbols` method
- // https://tc39.github.io/ecma262/#sec-object.getownpropertysymbols
- getOwnPropertySymbols: $getOwnPropertySymbols
- });
- // Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives
- // https://bugs.chromium.org/p/v8/issues/detail?id=3443
- $({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {
- getOwnPropertySymbols: function getOwnPropertySymbols(it) {
- return getOwnPropertySymbolsModule.f(toObject(it));
- }
- });
- // `JSON.stringify` method behavior with symbols
- // https://tc39.github.io/ecma262/#sec-json.stringify
- if ($stringify) {
- var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {
- var symbol = $Symbol();
- // MS Edge converts symbol values to JSON as {}
- return $stringify([symbol]) != '[null]'
- // WebKit converts symbol values to JSON as null
- || $stringify({ a: symbol }) != '{}'
- // V8 throws on boxed symbols
- || $stringify(Object(symbol)) != '{}';
- });
- $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {
- // eslint-disable-next-line no-unused-vars
- stringify: function stringify(it, replacer, space) {
- var args = [it];
- var index = 1;
- var $replacer;
- while (arguments.length > index) args.push(arguments[index++]);
- $replacer = replacer;
- if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
- if (!isArray(replacer)) replacer = function (key, value) {
- if (typeof $replacer == 'function') value = $replacer.call(this, key, value);
- if (!isSymbol(value)) return value;
- };
- args[1] = replacer;
- return $stringify.apply(null, args);
- }
- });
- }
- // `Symbol.prototype[@@toPrimitive]` method
- // https://tc39.github.io/ecma262/#sec-symbol.prototype-@@toprimitive
- if (!$Symbol[PROTOTYPE][TO_PRIMITIVE]) {
- createNonEnumerableProperty($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);
- }
- // `Symbol.prototype[@@toStringTag]` property
- // https://tc39.github.io/ecma262/#sec-symbol.prototype-@@tostringtag
- setToStringTag($Symbol, SYMBOL);
- hiddenKeys[HIDDEN] = true;
- }, { "../internals/an-object": 223, "../internals/array-iteration": 225, "../internals/create-non-enumerable-property": 236, "../internals/create-property-descriptor": 237, "../internals/define-well-known-symbol": 239, "../internals/descriptors": 240, "../internals/export": 246, "../internals/fails": 247, "../internals/get-built-in": 249, "../internals/global": 251, "../internals/has": 252, "../internals/hidden-keys": 253, "../internals/internal-state": 259, "../internals/is-array": 261, "../internals/is-object": 263, "../internals/is-pure": 264, "../internals/native-symbol": 271, "../internals/object-create": 276, "../internals/object-define-property": 278, "../internals/object-get-own-property-descriptor": 279, "../internals/object-get-own-property-names": 281, "../internals/object-get-own-property-names-external": 280, "../internals/object-get-own-property-symbols": 282, "../internals/object-keys": 285, "../internals/object-property-is-enumerable": 286, "../internals/redefine": 294, "../internals/set-to-string-tag": 298, "../internals/shared": 301, "../internals/shared-key": 299, "../internals/to-indexed-object": 305, "../internals/to-object": 308, "../internals/to-primitive": 309, "../internals/uid": 311, "../internals/use-symbol-as-uid": 312, "../internals/well-known-symbol": 314, "../internals/well-known-symbol-wrapped": 313 }], 328: [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": 388 }], 329: [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": 330, "buffer": 216, "elliptic": 350 }], 330: [function (require, module, exports) {
- arguments[4][181][0].apply(exports, arguments)
- }, { "buffer": 185, "dup": 181 }], 331: [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": 387, "md5.js": 434, "ripemd160": 493, "sha.js": 499 }], 332: [function (require, module, exports) {
- "use strict";
- var MD5 = require('md5.js');
- module.exports = function (buffer) {
- return new MD5().update(buffer).digest();
- };
- }, { "md5.js": 434 }], 333: [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": 334, "cipher-base": 218, "create-hash/md5": 332, "inherits": 387, "ripemd160": 493, "safe-buffer": 494, "sha.js": 499 }], 334: [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": 387, "safe-buffer": 494 }], 335: [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": 329, "create-hash": 331, "create-hmac": 333, "diffie-hellman": 345, "pbkdf2": 460, "public-encrypt": 468, "randombytes": 475, "randomfill": 476 }], 336: [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;
- });
- }, {}], 337: [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);
- };
- };
- });
- }, {}], 338: [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);
- };
- };
- });
- }, {}], 339: [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": 340, "./des/cipher": 341, "./des/des": 342, "./des/ede": 343, "./des/utils": 344 }], 340: [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": 387, "minimalistic-assert": 437 }], 341: [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": 437 }], 342: [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": 341, "./utils": 344, "inherits": 387, "minimalistic-assert": 437 }], 343: [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": 341, "./des": 342, "inherits": 387, "minimalistic-assert": 437 }], 344: [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(' ');
- };
- }, {}], 345: [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": 346, "./lib/generatePrime": 347, "./lib/primes.json": 348, "buffer": 216 }], 346: [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": 347, "bn.js": 349, "buffer": 216, "miller-rabin": 435, "randombytes": 475 }], 347: [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": 349, "miller-rabin": 435, "randombytes": 475 }], 348: [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"
- }
- }
- }, {}], 349: [function (require, module, exports) {
- arguments[4][181][0].apply(exports, arguments)
- }, { "buffer": 185, "dup": 181 }], 350: [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": 366, "./elliptic/curve": 353, "./elliptic/curves": 356, "./elliptic/ec": 357, "./elliptic/eddsa": 360, "./elliptic/utils": 364, "brorand": 184 }], 351: [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": 364, "bn.js": 365 }], 352: [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": 364, "./base": 351, "bn.js": 365, "inherits": 387 }], 353: [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": 351, "./edwards": 352, "./mont": 354, "./short": 355 }], 354: [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": 364, "./base": 351, "bn.js": 365, "inherits": 387 }], 355: [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": 364, "./base": 351, "bn.js": 365, "inherits": 387 }], 356: [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": 353, "./precomputed/secp256k1": 363, "./utils": 364, "hash.js": 372 }], 357: [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": 356, "../utils": 364, "./key": 358, "./signature": 359, "bn.js": 365, "brorand": 184, "hmac-drbg": 384 }], 358: [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": 364, "bn.js": 365 }], 359: [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": 364, "bn.js": 365 }], 360: [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": 356, "../utils": 364, "./key": 361, "./signature": 362, "hash.js": 372 }], 361: [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": 364 }], 362: [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": 364, "bn.js": 365 }], 363: [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']]
- }
- };
- }, {}], 364: [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": 365, "minimalistic-assert": 437, "minimalistic-crypto-utils": 438 }], 365: [function (require, module, exports) {
- arguments[4][181][0].apply(exports, arguments)
- }, { "buffer": 185, "dup": 181 }], 366: [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"
- }
- }, {}], 367: [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);
- };
- }
- }, {}], 368: [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": 434, "safe-buffer": 494 }], 369: [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 }], 370: [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": 387, "readable-stream": 491, "safe-buffer": 371 }], 371: [function (require, module, exports) {
- arguments[4][214][0].apply(exports, arguments)
- }, { "buffer": 216, "dup": 214 }], 372: [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": 373, "./hash/hmac": 374, "./hash/ripemd": 375, "./hash/sha": 376, "./hash/utils": 383 }], 373: [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": 383, "minimalistic-assert": 437 }], 374: [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": 383, "minimalistic-assert": 437 }], 375: [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": 373, "./utils": 383 }], 376: [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": 377, "./sha/224": 378, "./sha/256": 379, "./sha/384": 380, "./sha/512": 381 }], 377: [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": 373, "../utils": 383, "./common": 382 }], 378: [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": 383, "./256": 379 }], 379: [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": 373, "../utils": 383, "./common": 382, "minimalistic-assert": 437 }], 380: [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": 383, "./512": 381 }], 381: [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": 373, "../utils": 383, "minimalistic-assert": 437 }], 382: [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": 383 }], 383: [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": 387, "minimalistic-assert": 437 }], 384: [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": 372, "minimalistic-assert": 437, "minimalistic-crypto-utils": 438 }], 385: [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;
- };
- }, {}], 386: [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 : {})
- }, {}], 387: [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;
- }
- };
- }
- }, {}], 388: [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));
- }
- }, {}], 389: [function (require, module, exports) {
- "use strict";
- var toString = {}.toString;
- module.exports = Array.isArray || function (arr) {
- return toString.call(arr) == '[object Array]';
- };
- }, {}], 390: [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": 419, "./utils": 421 }], 391: [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": 395, "./stream/Crc32Probe": 414, "./stream/DataLengthProbe": 415, "./stream/DataWorker": 416 }], 392: [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": 396, "./stream/GenericWorker": 417 }], 393: [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": 421 }], 394: [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;
- }, {}], 395: [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": 425 }], 396: [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": 417, "./utils": 421, "pako": 439 }], 397: [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": 393, "../signature": 412, "../stream/GenericWorker": 417, "../utf8": 420, "../utils": 421 }], 398: [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": 392, "./ZipFileWorker": 397 }], 399: [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": 394, "./external": 395, "./load": 400, "./object": 404, "./support": 419 }], 400: [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": 395, "./nodejsUtils": 403, "./stream/Crc32Probe": 414, "./utf8": 420, "./utils": 421, "./zipEntries": 422 }], 401: [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": 417, "../utils": 421 }], 402: [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": 421, "readable-stream": 405 }], 403: [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 }], 404: [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": 391, "./defaults": 394, "./generate": 398, "./nodejs/NodejsStreamInputAdapter": 401, "./nodejsUtils": 403, "./stream/GenericWorker": 417, "./stream/StreamHelper": 418, "./utf8": 420, "./utils": 421, "./zipObject": 424 }], 405: [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": 506 }], 406: [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": 421, "./DataReader": 407 }], 407: [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": 421 }], 408: [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": 421, "./Uint8ArrayReader": 410 }], 409: [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": 421, "./DataReader": 407 }], 410: [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": 421, "./ArrayReader": 406 }], 411: [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": 419, "../utils": 421, "./ArrayReader": 406, "./NodeBufferReader": 408, "./StringReader": 409, "./Uint8ArrayReader": 410 }], 412: [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";
- }, {}], 413: [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": 421, "./GenericWorker": 417 }], 414: [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": 393, "../utils": 421, "./GenericWorker": 417 }], 415: [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": 421, "./GenericWorker": 417 }], 416: [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": 421, "./GenericWorker": 417 }], 417: [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;
- }, {}], 418: [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": 390, "../external": 395, "../nodejs/NodejsStreamOutputAdapter": 402, "../support": 419, "../utils": 421, "./ConvertWorker": 413, "./GenericWorker": 417, "buffer": 216 }], 419: [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": 405 }], 420: [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": 403, "./stream/GenericWorker": 417, "./support": 419, "./utils": 421 }], 421: [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": 390, "./external": 395, "./nodejsUtils": 403, "./support": 419, "set-immediate-shim": 497 }], 422: [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": 411, "./signature": 412, "./support": 419, "./utf8": 420, "./utils": 421, "./zipEntry": 423 }], 423: [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": 391, "./compressions": 392, "./crc32": 393, "./reader/readerFor": 411, "./support": 419, "./utf8": 420, "./utils": 421 }], 424: [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": 391, "./stream/DataWorker": 416, "./stream/GenericWorker": 417, "./stream/StreamHelper": 418, "./utf8": 420 }], 425: [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": 386 }], 426: [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 : {})
- }, {}], 427: [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 : {})
- }, {}], 428: [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;
- }, {}], 429: [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 : {})
- }, {}], 430: [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 : {})
- }, {}], 431: [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;
- }, {}], 432: [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;
- }, {}], 433: [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 : {})
- }, {}], 434: [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": 370, "inherits": 387, "safe-buffer": 494 }], 435: [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": 436, "brorand": 184 }], 436: [function (require, module, exports) {
- arguments[4][181][0].apply(exports, arguments)
- }, { "buffer": 185, "dup": 181 }], 437: [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);
- };
- }, {}], 438: [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;
- };
- }, {}], 439: [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": 440, "./lib/inflate": 441, "./lib/utils/common": 442, "./lib/zlib/constants": 445 }], 440: [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": 442, "./utils/strings": 443, "./zlib/deflate": 447, "./zlib/messages": 452, "./zlib/zstream": 454 }], 441: [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": 442, "./utils/strings": 443, "./zlib/constants": 445, "./zlib/gzheader": 448, "./zlib/inflate": 450, "./zlib/messages": 452, "./zlib/zstream": 454 }], 442: [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);
- }, {}], 443: [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": 442 }], 444: [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;
- }, {}], 445: [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
- };
- }, {}], 446: [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;
- }, {}], 447: [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": 442, "./adler32": 444, "./crc32": 446, "./messages": 452, "./trees": 453 }], 448: [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;
- }, {}], 449: [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;
- };
- }, {}], 450: [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": 442, "./adler32": 444, "./crc32": 446, "./inffast": 449, "./inftrees": 451 }], 451: [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": 442 }], 452: [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) */
- };
- }, {}], 453: [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": 442 }], 454: [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;
- }, {}], 455: [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"
- }
- }, {}], 456: [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": 457, "asn1.js": 167 }], 457: [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 }], 458: [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": 368, "safe-buffer": 494 }], 459: [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": 455, "./asn1": 456, "./fixProc": 458, "browserify-aes": 188, "pbkdf2": 460, "safe-buffer": 494 }], 460: [function (require, module, exports) {
- "use strict";
- exports.pbkdf2 = require('./lib/async');
- exports.pbkdf2Sync = require('./lib/sync');
- }, { "./lib/async": 461, "./lib/sync": 464 }], 461: [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": 462, "./precondition": 463, "./sync": 464, "./to-buffer": 465, "_process": 467, "safe-buffer": 494 }], 462: [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": 467 }], 463: [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');
- }
- };
- }, {}], 464: [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": 462, "./precondition": 463, "./to-buffer": 465, "create-hash/md5": 332, "ripemd160": 493, "safe-buffer": 494, "sha.js": 499 }], 465: [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": 494 }], 466: [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": 467 }], 467: [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;
- };
- }, {}], 468: [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": 471, "./publicEncrypt": 472 }], 469: [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": 331, "safe-buffer": 494 }], 470: [function (require, module, exports) {
- arguments[4][181][0].apply(exports, arguments)
- }, { "buffer": 185, "dup": 181 }], 471: [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": 469, "./withPublic": 473, "./xor": 474, "bn.js": 470, "browserify-rsa": 206, "create-hash": 331, "parse-asn1": 459, "safe-buffer": 494 }], 472: [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": 469, "./withPublic": 473, "./xor": 474, "bn.js": 470, "browserify-rsa": 206, "create-hash": 331, "parse-asn1": 459, "randombytes": 475, "safe-buffer": 494 }], 473: [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": 470, "safe-buffer": 494 }], 474: [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;
- };
- }, {}], 475: [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": 467, "safe-buffer": 494 }], 476: [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": 467, "randombytes": 475, "safe-buffer": 494 }], 477: [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;
- }, {}], 478: [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": 480, "./_stream_writable": 482, "_process": 467, "inherits": 387 }], 479: [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": 481, "inherits": 387 }], 480: [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": 477, "./_stream_duplex": 478, "./internal/streams/async_iterator": 483, "./internal/streams/buffer_list": 484, "./internal/streams/destroy": 485, "./internal/streams/from": 487, "./internal/streams/state": 489, "./internal/streams/stream": 490, "_process": 467, "buffer": 216, "events": 367, "inherits": 387, "string_decoder/": 520, "util": 185 }], 481: [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": 477, "./_stream_duplex": 478, "inherits": 387 }], 482: [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": 477, "./_stream_duplex": 478, "./internal/streams/destroy": 485, "./internal/streams/state": 489, "./internal/streams/stream": 490, "_process": 467, "buffer": 216, "inherits": 387, "util-deprecate": 522 }], 483: [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": 486, "_process": 467 }], 484: [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 }], 485: [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": 467 }], 486: [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": 477 }], 487: [function (require, module, exports) {
- "use strict";
- module.exports = function () {
- throw new Error('Readable.from is not available in the browser');
- };
- }, {}], 488: [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": 477, "./end-of-stream": 486 }], 489: [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": 477 }], 490: [function (require, module, exports) {
- "use strict";
- module.exports = require('events').EventEmitter;
- }, { "events": 367 }], 491: [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": 478, "./lib/_stream_passthrough.js": 479, "./lib/_stream_readable.js": 480, "./lib/_stream_transform.js": 481, "./lib/_stream_writable.js": 482, "./lib/internal/streams/end-of-stream.js": 486, "./lib/internal/streams/pipeline.js": 488 }], 492: [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 (c) 2014-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
- var runtime = function (exports) {
- "use strict";
- var Op = Object.prototype;
- var hasOwn = Op.hasOwnProperty;
- var undefined; // More compressible than void 0.
- var $Symbol = typeof Symbol === "function" ? Symbol : {};
- var iteratorSymbol = $Symbol.iterator || "@@iterator";
- var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";
- var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
- function define(obj, key, value) {
- Object.defineProperty(obj, key, {
- value: value,
- enumerable: true,
- configurable: true,
- writable: true
- });
- return obj[key];
- }
- try {
- // IE 8 has a broken Object.defineProperty that only works on DOM objects.
- define({}, "");
- } catch (err) {
- define = function define(obj, key, value) {
- return obj[key] = value;
- };
- }
- function wrap(innerFn, outerFn, self, tryLocsList) {
- // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.
- var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;
- var generator = Object.create(protoGenerator.prototype);
- var context = new Context(tryLocsList || []); // The ._invoke method unifies the implementations of the .next,
- // .throw, and .return methods.
- generator._invoke = makeInvokeMethod(innerFn, self, context);
- return generator;
- }
- exports.wrap = wrap; // Try/catch helper to minimize deoptimizations. Returns a completion
- // record like context.tryEntries[i].completion. This interface could
- // have been (and was previously) designed to take a closure to be
- // invoked without arguments, but in all the cases we care about we
- // already have an existing method we want to call, so there's no need
- // to create a new function object. We can even get away with assuming
- // the method takes exactly one argument, since that happens to be true
- // in every case, so we don't have to touch the arguments object. The
- // only additional allocation required is the completion record, which
- // has a stable shape and so hopefully should be cheap to allocate.
- function tryCatch(fn, obj, arg) {
- try {
- return {
- type: "normal",
- arg: fn.call(obj, arg)
- };
- } catch (err) {
- return {
- type: "throw",
- arg: err
- };
- }
- }
- var GenStateSuspendedStart = "suspendedStart";
- var GenStateSuspendedYield = "suspendedYield";
- var GenStateExecuting = "executing";
- var GenStateCompleted = "completed"; // Returning this object from the innerFn has the same effect as
- // breaking out of the dispatch switch statement.
- var ContinueSentinel = {}; // Dummy constructor functions that we use as the .constructor and
- // .constructor.prototype properties for functions that return Generator
- // objects. For full spec compliance, you may wish to configure your
- // minifier not to mangle the names of these two functions.
- function Generator() { }
- function GeneratorFunction() { }
- function GeneratorFunctionPrototype() { } // This is a polyfill for %IteratorPrototype% for environments that
- // don't natively support it.
- var IteratorPrototype = {};
- IteratorPrototype[iteratorSymbol] = function () {
- return this;
- };
- var getProto = Object.getPrototypeOf;
- var NativeIteratorPrototype = getProto && getProto(getProto(values([])));
- if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {
- // This environment has a native %IteratorPrototype%; use it instead
- // of the polyfill.
- IteratorPrototype = NativeIteratorPrototype;
- }
- var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);
- GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;
- GeneratorFunctionPrototype.constructor = GeneratorFunction;
- GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"); // Helper for defining the .next, .throw, and .return methods of the
- // Iterator interface in terms of a single ._invoke method.
- function defineIteratorMethods(prototype) {
- ["next", "throw", "return"].forEach(function (method) {
- define(prototype, method, function (arg) {
- return this._invoke(method, arg);
- });
- });
- }
- exports.isGeneratorFunction = function (genFun) {
- var ctor = typeof genFun === "function" && genFun.constructor;
- return ctor ? ctor === GeneratorFunction || // For the native GeneratorFunction constructor, the best we can
- // do is to check its .name property.
- (ctor.displayName || ctor.name) === "GeneratorFunction" : false;
- };
- exports.mark = function (genFun) {
- if (Object.setPrototypeOf) {
- Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
- } else {
- genFun.__proto__ = GeneratorFunctionPrototype;
- define(genFun, toStringTagSymbol, "GeneratorFunction");
- }
- genFun.prototype = Object.create(Gp);
- return genFun;
- }; // Within the body of any async function, `await x` is transformed to
- // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test
- // `hasOwn.call(value, "__await")` to determine if the yielded value is
- // meant to be awaited.
- exports.awrap = function (arg) {
- return {
- __await: arg
- };
- };
- function AsyncIterator(generator, PromiseImpl) {
- function invoke(method, arg, resolve, reject) {
- var record = tryCatch(generator[method], generator, arg);
- if (record.type === "throw") {
- reject(record.arg);
- } else {
- var result = record.arg;
- var value = result.value;
- if (value && _typeof(value) === "object" && hasOwn.call(value, "__await")) {
- return PromiseImpl.resolve(value.__await).then(function (value) {
- invoke("next", value, resolve, reject);
- }, function (err) {
- invoke("throw", err, resolve, reject);
- });
- }
- return PromiseImpl.resolve(value).then(function (unwrapped) {
- // When a yielded Promise is resolved, its final value becomes
- // the .value of the Promise<{value,done}> result for the
- // current iteration.
- result.value = unwrapped;
- resolve(result);
- }, function (error) {
- // If a rejected Promise was yielded, throw the rejection back
- // into the async generator function so it can be handled there.
- return invoke("throw", error, resolve, reject);
- });
- }
- }
- var previousPromise;
- function enqueue(method, arg) {
- function callInvokeWithMethodAndArg() {
- return new PromiseImpl(function (resolve, reject) {
- invoke(method, arg, resolve, reject);
- });
- }
- return previousPromise = // If enqueue has been called before, then we want to wait until
- // all previous Promises have been resolved before calling invoke,
- // so that results are always delivered in the correct order. If
- // enqueue has not been called before, then it is important to
- // call invoke immediately, without waiting on a callback to fire,
- // so that the async generator function has the opportunity to do
- // any necessary setup in a predictable way. This predictability
- // is why the Promise constructor synchronously invokes its
- // executor callback, and why async functions synchronously
- // execute code before the first await. Since we implement simple
- // async functions in terms of async generators, it is especially
- // important to get this right, even though it requires care.
- previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, // Avoid propagating failures to Promises returned by later
- // invocations of the iterator.
- callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
- } // Define the unified helper method that is used to implement .next,
- // .throw, and .return (see defineIteratorMethods).
- this._invoke = enqueue;
- }
- defineIteratorMethods(AsyncIterator.prototype);
- AsyncIterator.prototype[asyncIteratorSymbol] = function () {
- return this;
- };
- exports.AsyncIterator = AsyncIterator; // Note that simple async functions are implemented on top of
- // AsyncIterator objects; they just return a Promise for the value of
- // the final result produced by the iterator.
- exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {
- if (PromiseImpl === void 0) PromiseImpl = Promise;
- var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);
- return exports.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator.
- : iter.next().then(function (result) {
- return result.done ? result.value : iter.next();
- });
- };
- function makeInvokeMethod(innerFn, self, context) {
- var state = GenStateSuspendedStart;
- return function invoke(method, arg) {
- if (state === GenStateExecuting) {
- throw new Error("Generator is already running");
- }
- if (state === GenStateCompleted) {
- if (method === "throw") {
- throw arg;
- } // Be forgiving, per 25.3.3.3.3 of the spec:
- // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume
- return doneResult();
- }
- context.method = method;
- context.arg = arg;
- while (true) {
- var delegate = context.delegate;
- if (delegate) {
- var delegateResult = maybeInvokeDelegate(delegate, context);
- if (delegateResult) {
- if (delegateResult === ContinueSentinel) continue;
- return delegateResult;
- }
- }
- if (context.method === "next") {
- // Setting context._sent for legacy support of Babel's
- // function.sent implementation.
- context.sent = context._sent = context.arg;
- } else if (context.method === "throw") {
- if (state === GenStateSuspendedStart) {
- state = GenStateCompleted;
- throw context.arg;
- }
- context.dispatchException(context.arg);
- } else if (context.method === "return") {
- context.abrupt("return", context.arg);
- }
- state = GenStateExecuting;
- var record = tryCatch(innerFn, self, context);
- if (record.type === "normal") {
- // If an exception is thrown from innerFn, we leave state ===
- // GenStateExecuting and loop back for another invocation.
- state = context.done ? GenStateCompleted : GenStateSuspendedYield;
- if (record.arg === ContinueSentinel) {
- continue;
- }
- return {
- value: record.arg,
- done: context.done
- };
- } else if (record.type === "throw") {
- state = GenStateCompleted; // Dispatch the exception by looping back around to the
- // context.dispatchException(context.arg) call above.
- context.method = "throw";
- context.arg = record.arg;
- }
- }
- };
- } // Call delegate.iterator[context.method](context.arg) and handle the
- // result, either by returning a { value, done } result from the
- // delegate iterator, or by modifying context.method and context.arg,
- // setting context.delegate to null, and returning the ContinueSentinel.
- function maybeInvokeDelegate(delegate, context) {
- var method = delegate.iterator[context.method];
- if (method === undefined) {
- // A .throw or .return when the delegate iterator has no .throw
- // method always terminates the yield* loop.
- context.delegate = null;
- if (context.method === "throw") {
- // Note: ["return"] must be used for ES3 parsing compatibility.
- if (delegate.iterator["return"]) {
- // If the delegate iterator has a return method, give it a
- // chance to clean up.
- context.method = "return";
- context.arg = undefined;
- maybeInvokeDelegate(delegate, context);
- if (context.method === "throw") {
- // If maybeInvokeDelegate(context) changed context.method from
- // "return" to "throw", let that override the TypeError below.
- return ContinueSentinel;
- }
- }
- context.method = "throw";
- context.arg = new TypeError("The iterator does not provide a 'throw' method");
- }
- return ContinueSentinel;
- }
- var record = tryCatch(method, delegate.iterator, context.arg);
- if (record.type === "throw") {
- context.method = "throw";
- context.arg = record.arg;
- context.delegate = null;
- return ContinueSentinel;
- }
- var info = record.arg;
- if (!info) {
- context.method = "throw";
- context.arg = new TypeError("iterator result is not an object");
- context.delegate = null;
- return ContinueSentinel;
- }
- if (info.done) {
- // Assign the result of the finished delegate to the temporary
- // variable specified by delegate.resultName (see delegateYield).
- context[delegate.resultName] = info.value; // Resume execution at the desired location (see delegateYield).
- context.next = delegate.nextLoc; // If context.method was "throw" but the delegate handled the
- // exception, let the outer generator proceed normally. If
- // context.method was "next", forget context.arg since it has been
- // "consumed" by the delegate iterator. If context.method was
- // "return", allow the original .return call to continue in the
- // outer generator.
- if (context.method !== "return") {
- context.method = "next";
- context.arg = undefined;
- }
- } else {
- // Re-yield the result returned by the delegate method.
- return info;
- } // The delegate iterator is finished, so forget it and continue with
- // the outer generator.
- context.delegate = null;
- return ContinueSentinel;
- } // Define Generator.prototype.{next,throw,return} in terms of the
- // unified ._invoke helper method.
- defineIteratorMethods(Gp);
- define(Gp, toStringTagSymbol, "Generator"); // A Generator should always return itself as the iterator object when the
- // @@iterator function is called on it. Some browsers' implementations of the
- // iterator prototype chain incorrectly implement this, causing the Generator
- // object to not be returned from this call. This ensures that doesn't happen.
- // See https://github.com/facebook/regenerator/issues/274 for more details.
- Gp[iteratorSymbol] = function () {
- return this;
- };
- Gp.toString = function () {
- return "[object Generator]";
- };
- function pushTryEntry(locs) {
- var entry = {
- tryLoc: locs[0]
- };
- if (1 in locs) {
- entry.catchLoc = locs[1];
- }
- if (2 in locs) {
- entry.finallyLoc = locs[2];
- entry.afterLoc = locs[3];
- }
- this.tryEntries.push(entry);
- }
- function resetTryEntry(entry) {
- var record = entry.completion || {};
- record.type = "normal";
- delete record.arg;
- entry.completion = record;
- }
- function Context(tryLocsList) {
- // The root entry object (effectively a try statement without a catch
- // or a finally block) gives us a place to store values thrown from
- // locations where there is no enclosing try statement.
- this.tryEntries = [{
- tryLoc: "root"
- }];
- tryLocsList.forEach(pushTryEntry, this);
- this.reset(true);
- }
- exports.keys = function (object) {
- var keys = [];
- for (var key in object) {
- keys.push(key);
- }
- keys.reverse(); // Rather than returning an object with a next method, we keep
- // things simple and return the next function itself.
- return function next() {
- while (keys.length) {
- var key = keys.pop();
- if (key in object) {
- next.value = key;
- next.done = false;
- return next;
- }
- } // To avoid creating an additional object, we just hang the .value
- // and .done properties off the next function object itself. This
- // also ensures that the minifier will not anonymize the function.
- next.done = true;
- return next;
- };
- };
- function values(iterable) {
- if (iterable) {
- var iteratorMethod = iterable[iteratorSymbol];
- if (iteratorMethod) {
- return iteratorMethod.call(iterable);
- }
- if (typeof iterable.next === "function") {
- return iterable;
- }
- if (!isNaN(iterable.length)) {
- var i = -1,
- next = function next() {
- while (++i < iterable.length) {
- if (hasOwn.call(iterable, i)) {
- next.value = iterable[i];
- next.done = false;
- return next;
- }
- }
- next.value = undefined;
- next.done = true;
- return next;
- };
- return next.next = next;
- }
- } // Return an iterator with no values.
- return {
- next: doneResult
- };
- }
- exports.values = values;
- function doneResult() {
- return {
- value: undefined,
- done: true
- };
- }
- Context.prototype = {
- constructor: Context,
- reset: function reset(skipTempReset) {
- this.prev = 0;
- this.next = 0; // Resetting context._sent for legacy support of Babel's
- // function.sent implementation.
- this.sent = this._sent = undefined;
- this.done = false;
- this.delegate = null;
- this.method = "next";
- this.arg = undefined;
- this.tryEntries.forEach(resetTryEntry);
- if (!skipTempReset) {
- for (var name in this) {
- // Not sure about the optimal order of these conditions:
- if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) {
- this[name] = undefined;
- }
- }
- }
- },
- stop: function stop() {
- this.done = true;
- var rootEntry = this.tryEntries[0];
- var rootRecord = rootEntry.completion;
- if (rootRecord.type === "throw") {
- throw rootRecord.arg;
- }
- return this.rval;
- },
- dispatchException: function dispatchException(exception) {
- if (this.done) {
- throw exception;
- }
- var context = this;
- function handle(loc, caught) {
- record.type = "throw";
- record.arg = exception;
- context.next = loc;
- if (caught) {
- // If the dispatched exception was caught by a catch block,
- // then let that catch block handle the exception normally.
- context.method = "next";
- context.arg = undefined;
- }
- return !!caught;
- }
- for (var i = this.tryEntries.length - 1; i >= 0; --i) {
- var entry = this.tryEntries[i];
- var record = entry.completion;
- if (entry.tryLoc === "root") {
- // Exception thrown outside of any try block that could handle
- // it, so set the completion value of the entire function to
- // throw the exception.
- return handle("end");
- }
- if (entry.tryLoc <= this.prev) {
- var hasCatch = hasOwn.call(entry, "catchLoc");
- var hasFinally = hasOwn.call(entry, "finallyLoc");
- if (hasCatch && hasFinally) {
- if (this.prev < entry.catchLoc) {
- return handle(entry.catchLoc, true);
- } else if (this.prev < entry.finallyLoc) {
- return handle(entry.finallyLoc);
- }
- } else if (hasCatch) {
- if (this.prev < entry.catchLoc) {
- return handle(entry.catchLoc, true);
- }
- } else if (hasFinally) {
- if (this.prev < entry.finallyLoc) {
- return handle(entry.finallyLoc);
- }
- } else {
- throw new Error("try statement without catch or finally");
- }
- }
- }
- },
- abrupt: function abrupt(type, arg) {
- for (var i = this.tryEntries.length - 1; i >= 0; --i) {
- var entry = this.tryEntries[i];
- if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) {
- var finallyEntry = entry;
- break;
- }
- }
- if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) {
- // Ignore the finally entry if control is not jumping to a
- // location outside the try/catch block.
- finallyEntry = null;
- }
- var record = finallyEntry ? finallyEntry.completion : {};
- record.type = type;
- record.arg = arg;
- if (finallyEntry) {
- this.method = "next";
- this.next = finallyEntry.finallyLoc;
- return ContinueSentinel;
- }
- return this.complete(record);
- },
- complete: function complete(record, afterLoc) {
- if (record.type === "throw") {
- throw record.arg;
- }
- if (record.type === "break" || record.type === "continue") {
- this.next = record.arg;
- } else if (record.type === "return") {
- this.rval = this.arg = record.arg;
- this.method = "return";
- this.next = "end";
- } else if (record.type === "normal" && afterLoc) {
- this.next = afterLoc;
- }
- return ContinueSentinel;
- },
- finish: function finish(finallyLoc) {
- for (var i = this.tryEntries.length - 1; i >= 0; --i) {
- var entry = this.tryEntries[i];
- if (entry.finallyLoc === finallyLoc) {
- this.complete(entry.completion, entry.afterLoc);
- resetTryEntry(entry);
- return ContinueSentinel;
- }
- }
- },
- "catch": function _catch(tryLoc) {
- for (var i = this.tryEntries.length - 1; i >= 0; --i) {
- var entry = this.tryEntries[i];
- if (entry.tryLoc === tryLoc) {
- var record = entry.completion;
- if (record.type === "throw") {
- var thrown = record.arg;
- resetTryEntry(entry);
- }
- return thrown;
- }
- } // The context.catch method must only be called with a location
- // argument that corresponds to a known catch block.
- throw new Error("illegal catch attempt");
- },
- delegateYield: function delegateYield(iterable, resultName, nextLoc) {
- this.delegate = {
- iterator: values(iterable),
- resultName: resultName,
- nextLoc: nextLoc
- };
- if (this.method === "next") {
- // Deliberately forget the last sent value so that we don't
- // accidentally pass it on to the delegate.
- this.arg = undefined;
- }
- return ContinueSentinel;
- }
- }; // Regardless of whether this script is executing as a CommonJS module
- // or not, return the runtime object so that we can declare the variable
- // regeneratorRuntime in the outer scope, which allows this module to be
- // injected easily by `bin/regenerator --include-runtime script.js`.
- return exports;
- }( // If this script is executing as a CommonJS module, use module.exports
- // as the regeneratorRuntime namespace. Otherwise create a new empty
- // object. Either way, the resulting object will be used to initialize
- // the regeneratorRuntime variable at the top of this file.
- (typeof module === "undefined" ? "undefined" : _typeof(module)) === "object" ? module.exports : {});
- try {
- regeneratorRuntime = runtime;
- } catch (accidentalStrictMode) {
- // This module should not be running in strict mode, so the above
- // assignment should always work unless something is misconfigured. Just
- // in case runtime.js accidentally runs in strict mode, we can escape
- // strict mode using a global Function call. This could conceivably fail
- // if a Content Security Policy forbids using Function, but in that case
- // the proper solution is to fix the accidental strict mode problem. If
- // you've misconfigured your bundler to force strict mode and applied a
- // CSP to forbid Function, and you're not willing to fix either of those
- // problems, please detail your unique predicament in a GitHub issue.
- Function("r", "regeneratorRuntime = r")(runtime);
- }
- }, {}], 493: [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": 370, "inherits": 387 }], 494: [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 }], 495: [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": 467, "buffer": 216 }], 496: [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": 541, "xmlchars/xml/1.1/ed2": 542, "xmlchars/xmlns/1.0/ed3": 543 }], 497: [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": 521 }], 498: [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": 494 }], 499: [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": 500, "./sha1": 501, "./sha224": 502, "./sha256": 503, "./sha384": 504, "./sha512": 505 }], 500: [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": 498, "inherits": 387, "safe-buffer": 494 }], 501: [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": 498, "inherits": 387, "safe-buffer": 494 }], 502: [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": 498, "./sha256": 503, "inherits": 387, "safe-buffer": 494 }], 503: [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": 498, "inherits": 387, "safe-buffer": 494 }], 504: [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": 498, "./sha512": 505, "inherits": 387, "safe-buffer": 494 }], 505: [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": 498, "inherits": 387, "safe-buffer": 494 }], 506: [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": 367, "inherits": 387, "readable-stream/duplex.js": 507, "readable-stream/passthrough.js": 516, "readable-stream/readable.js": 517, "readable-stream/transform.js": 518, "readable-stream/writable.js": 519 }], 507: [function (require, module, exports) {
- "use strict";
- module.exports = require('./lib/_stream_duplex.js');
- }, { "./lib/_stream_duplex.js": 508 }], 508: [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": 510, "./_stream_writable": 512, "core-util-is": 328, "inherits": 387, "process-nextick-args": 466 }], 509: [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": 511, "core-util-is": 328, "inherits": 387 }], 510: [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": 508, "./internal/streams/BufferList": 513, "./internal/streams/destroy": 514, "./internal/streams/stream": 515, "_process": 467, "core-util-is": 328, "events": 367, "inherits": 387, "isarray": 389, "process-nextick-args": 466, "safe-buffer": 494, "string_decoder/": 520, "util": 185 }], 511: [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": 508, "core-util-is": 328, "inherits": 387 }], 512: [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": 508, "./internal/streams/destroy": 514, "./internal/streams/stream": 515, "_process": 467, "core-util-is": 328, "inherits": 387, "process-nextick-args": 466, "safe-buffer": 494, "timers": 521, "util-deprecate": 522 }], 513: [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": 494, "util": 185 }], 514: [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": 466 }], 515: [function (require, module, exports) {
- arguments[4][490][0].apply(exports, arguments)
- }, { "dup": 490, "events": 367 }], 516: [function (require, module, exports) {
- "use strict";
- module.exports = require('./readable').PassThrough;
- }, { "./readable": 517 }], 517: [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": 508, "./lib/_stream_passthrough.js": 509, "./lib/_stream_readable.js": 510, "./lib/_stream_transform.js": 511, "./lib/_stream_writable.js": 512 }], 518: [function (require, module, exports) {
- "use strict";
- module.exports = require('./readable').Transform;
- }, { "./readable": 517 }], 519: [function (require, module, exports) {
- "use strict";
- module.exports = require('./lib/_stream_writable.js');
- }, { "./lib/_stream_writable.js": 512 }], 520: [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": 494 }], 521: [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": 467, "timers": 521 }], 522: [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 : {})
- }, {}], 523: [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;
- };
- }
- }, {}], 524: [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';
- };
- }, {}], 525: [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": 524, "_process": 467, "inherits": 523 }], 526: [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": 528, "./parse.js": 529, "./stringify.js": 533, "./v1.js": 534, "./v3.js": 535, "./v4.js": 537, "./v5.js": 538, "./validate.js": 539, "./version.js": 540 }], 527: [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;
- }, {}], 528: [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;
- }, {}], 529: [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": 539 }], 530: [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;
- }, {}], 531: [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);
- }
- }, {}], 532: [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;
- }, {}], 533: [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": 539 }], 534: [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": 531, "./stringify.js": 533 }], 535: [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": 527, "./v35.js": 536 }], 536: [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": 529, "./stringify.js": 533 }], 537: [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": 531, "./stringify.js": 533 }], 538: [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": 532, "./v35.js": 536 }], 539: [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": 530 }], 540: [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": 539 }], 541: [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;
- }, {}], 542: [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;
- }, {}], 543: [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.js.map
|